Extra Lives for Testing Thunder Force 2
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).
- 1
0 Comments
Recommended Comments
There are no comments to display.