Jump to content

Tursi's Blog

  • entries
    18
  • comments
    8
  • views
    15,379

Extra Lives for Testing Thunder Force 2


Tursi

728 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.

 

blogentry-12959-0-60684800-1419850802_thumb.jpg

 

(got a couple more coming, it was just getting too long for one entry, even for me).

  • Like 1

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...