# Extra Lives for Testing Thunder Force 2

Posted by Tursi, 29 December 2014 · 33 views
Thunder Force II - allow lots more lives. TF2 usually allows only 3-5 lives, and it's frankly, overly hard in places. So, for testing, I thought it would be nice to be able to select a lot more lives. (To get into the options menu, hold A while pressing Start on the title page).
Back in Regen, I did a RAM dump at both '5' lives and '3' lives, then loaded a diff. Only 2 values differed - at 9829 was the values '4' and '2', which seemed likely (a later change looked like the display character.) I tried directly changing the value at 9829 to '23' (just at random), then moving DOWN off the option (because sideways would just wrap the value), and sure enough, it took, so this was likely it. '23' displayed as '36' - which is correct for hex->decimal, plus 1.
Setting a breakpoint on reading 9828 (since '9829' never triggered), and moving right, I got this bit of code at $6F22:

     btst #$3,D0		check joystick right
     beq $6F46		jump if not set
     addq.w #1,$ff9828.l	add '1' to life counter
     cmpi.w #$4,$ff9828.l	test against '4'
     bls x1			jump if less or equal
     move.w #$2,$ff9828.l	greater than 4, reset to '2'
    x1:
     bsr $6f74		probably a display routine

This is clearly the code to hack for increment - it contains both the max value and the reset value. I think 99 lives should be enough, so let's go ahead and change the maximum to that. It's only the max we need to change here. 99 in hexadecimal is $63, and subtract 1 for the counter, so $62.
At $6F30, replace "0004" with "0062".
We'll also reset the minimum lives to '1' so you can have a single life game - why not?
At $6f3A, replace "0002" with "0000".
The BEQ tells where to look for the other direction (probably), and looking at $6f46, sure enough, is the similar code:

     btst #$2,d0		check joystick left
     beq $6f68		jump if not set
     subq.w #$1,$FF9828.l	subtract '1' from life counter
     cmpi.w #$1,$ff9828.l	test against '1'
     bne x2			jump if not equal
     move.w #$4,$ff9828.l	reset to '4'
    x2:
     bsr $6f74		same probable display routine

Great! So we need to change the wrap around value, changing the '4' to $62.
At $6f5E, replace "0004" with "0062"
Then, to change the wrap point, replace the '1' with '$FFFF' (because it will have wrapped around).
At $6F54, replace "0001" with "FFFF".
Now, of course, we need to recalculate the checksum. Break on read of $18E, and load the newly modified ROM. D0 should contain the new checksum (if Regen let the loop finish before breaking). In this case I see "C986".
At $18E, replace "C8CA" with "C986"
That should now let you select 1-99 lives in the menu.
(got a couple more coming, it was just getting too long for one entry, even for me).