Thursday, June 2, 2016

Ancient Cave De-Randomizer v1.4

Assorted new things:

- Started working on a help screen to document some features of the tool.  Not everything is here yet.
- Added an "Options" text box to copy/paste the whole set of options in the lower part of the window.
- Tweaks to item desirability factors with some input from SilentSigil and others.
- Redesign the way I scale item values for "item quality" when "Anything" is selected, since some items being included didn't even have a value to begin with (like Dual Blade).
- Fix issue where included cursed items would lose their cursed-ness.
- Tooltips for some things where they were missing.
- Modify the dialogue of the guy who talks to you when you start gift mode, to clarify that it's a (de)randomized ROM being run.
- Add option to randomize your party rather than allowing manual party selection.

Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.4.exe

Thursday, May 5, 2016

Illusion of Gaia - "Press X To Run" Hack v1.2

Finally had a chance to (hopefully) fix this.

Once I got around to testing, I found that 1.1 had an issue where you could run straight up sloped tiles.  1.2 fixes it by checking a value at $09AE that seems to indicate you're standing on one, at the start of the new subroutine:

AD AE 09     LDA 09AE
29 00 10     AND 1000
D0 6C        BNE end

Thursday, April 21, 2016

SNES Harvest Moon Time Hack v1.1

This, too, had an issue that I found while screwing around.

Without the +1 hour on map change, it's now possible to enter the north forest map at 6 AM, where previously it was not.  At 6 AM, this map has no palette and appears solid black.

Now, instead of removing the hour increment code entirely, I jump to a new subroutine that will only increment it if it's currently 06.

22 00 80 BC   JSL BC8000

at 1E0000:
AF 1C 1F 7F   LDA $7F1F1C
C9 06         CMP #06
D0 06         BNE [end]
A9 07         LDA #07
8F 1C 1F 7F   STA $7F1F1C

end:
6B            RTL

https://dl.dropboxusercontent.com/u/19968993/hm_longer_days_no_intro_1_1.ips

Illusion of Gaia - "Press X To Run" Hack v1.1

Well, I found an issue already.  I wasn't checking a set of bits that indicate certain controls should be frozen.  Those bits are now checked with a few additional instructions at the beginning of the subroutine I added:

AD 5A 06     LDA 065A
29 00 0F     AND #0F00
D0 48        BNE to [end]

This skips setting the running velocities if any of the directional keys are frozen.

Without this check I was able to run around during some events that were supposed to freeze me in place, and everything got way out of sync.

https://dl.dropboxusercontent.com/u/19968993/iog_x_to_run_1_1.ips

Illusion of Gaia - "Press X To Run" Hack

I heard a couple people on Twitch request something like this a while back, so I thought I'd give it a go.  IoG has running, but you need to double-tap the direction to trigger it, which can get a little old after a few times.  The x button isn't used for anything in IoG, so it was free to assign to something new.

This one is a little more involved than some of my other recent hacks, since some new code had to be added.

https://dl.dropboxusercontent.com/u/19968993/iog_x_to_run_1_0.ips

To be used with Illusion of Gaia (U) [!].smc.  Not tested with other versions.

Details:

$82/80B6 AD 60 06    LDA $0660  [$81:0660]   A:0000 X:0000 Y:006C P:envmxdIZC
$82/80B9 29 00 0F    AND #$0F00              A:0000 X:0000 Y:006C P:envmxdIZC
$82/80BC 8D 5E 06    STA $065E  [$81:065E]   A:0000 X:0000 Y:006C P:envmxdIZC

This code masks the directions off of the controller input value (which was earlier pulled from its mapped location of $4218) corresponding to the directional values and stores it off.  This isn't terribly relevant to this modification except I've chosen this point to inject a bit of new code since this is something that runs as part of the character control code.

That code has been replaced by a jump to a new subroutine:

22 00 00 E0  JSL E0:0000
EA EA        nothing

With the new subroutine added at the end of the ROM to handle X being pressed while direction keys are also held:

29 00 0F     AND 0F00  (replaced code)
8D 5E 06     STA 065E  (replaced code)
AD 18 42     LDA 4218  read controller inputs
29 40 00     AND #0040  and with X mask
F0 40        BEQ to [end]

AD 60 06     LDA 0660   .. 0100 for right held, 0200 for left, 0400 for down, 0800 for up
29 00 01     AND #0100  and with right mask
F0 08        BEQ to [leftcheck]
A9 03 00     LDA #0003
8D B2 09     STA 09B2
80 30        BRA to [end]

leftcheck:
AD 60 06     LDA 0660   .. 0100 for right held, 0200 for left, 0400 for down, 0800 for up
29 00 02     AND #0200  and with left mask
F0 08        BEQ to [downcheck]
A9 FD FF     LDA #FFFD
8D B2 09     STA 09B2
80 20        BRA to [end]

downcheck:
AD 60 06     LDA 0660   .. 0100 for right held, 0200 for left, 0400 for down, 0800 for up
29 00 04     AND #0400  and with down mask
F0 08        BEQ to [upcheck]
A9 03 00     LDA #0003
8D B4 09     STA 09B4
80 10        BRA to [end]

upcheck:
AD 60 06     LDA 0660   .. 0100 for right held, 0200 for left, 0400 for down, 0800 for up
29 00 08     AND #0800  and with up mask
F0 08        BEQ to [end]
A9 FD FF     LDA #FFFD
8D B4 09     STA 09B4
EA EA        BRA to [end] (this one is not really needed, we're already here.. keep these here for easy sizing)


end:
AD 60 06     LDA 0660
29 00 0C     AND #0C00  either vertical direction held? no? zero out the 09B4
D0 06        BNE [hcheck]
A9 00 00     LDA #0000
8D B4 09     STA 09B4

hcheck:
AD 60 06     LDA 0660
29 00 03     AND #0300  either horizontal direction held? no? zero out the 09B2
D0 06        BNE [end2]
A9 00 00     LDA #0000
8D B2 09     STA 09B2

end2:
6B           RTL

In short, what this bit of new code is doing is the following:

If "x" is held
   If "right" is held
      Set Will's horizontal running velocity to 3
   If "left" is held
      Set Will's horizontal running velocity to -3
   If "down" is held
      Set Will's vertical running velocity to 3
   If "up" is held
      Set Will's vertical running velocity to -3
If neither "up" nor "down" are held
   Set Will's vertical running velocity to 0
If neither "left" nor "right" are held
   Set Will's horizontal running velocity to 0
Return from subroutine

Note that setting the running velocity ($7E09B2, $7E09B4) to non-zero automatically triggers the game to use the running animation and move Will in whichever direction.  Setting it to zero stops Will's run.  All this code is doing is triggering that existing code in a different way.

This has not been tested with the full game yet!  There may be places where it breaks.  Particularly, spots where Will is forced in a certain direction still need to be tested.  Feel free to report issues here and they will be fixed.

SNES Harvest Moon Time Hack

Time moves way, way too fast in this game.  This hack needed to be made.

https://dl.dropboxusercontent.com/u/19968993/hm_longer_days_no_intro_1_0.ips

To be used with Harvest Moon (U).smc.  Not tested with other ROMs.

Details:

$82/803B AF 1D 1F 7F LDA $7F1F1D[$7F:1F1D]   A:0000 X:0220 Y:0002 P:envMxdiZC
$82/803F 1A          INC A                   A:0003 X:0220 Y:0002 P:envMxdizC
$82/8040 8F 1D 1F 7F STA $7F1F1D[$7F:1F1D]   A:0004 X:0220 Y:0002 P:envMxdizC
$82/8044 C9 0F       CMP #$0F                A:0004 X:0220 Y:0002 P:envMxdizC

This code increments the game "minutes" and compares them against 0x0F.  If it matches, the hour gets incremented.  This hack changes the 0x0F to 0x7F to effectively slow the progression of hours by a factor of 8.


$80/9CF7 8F 1C 1F 7F STA $7F1F1C[$7F:1F1C]   A:440D X:0220 Y:0002 P:envMxdizc

This block of code increments the hour directly when you transition between certain maps.  This has been replaced by no-ops.


Also, you know what else is annoying?  The amount of people it makes you talk to on a new game before you can even play.  Let's just make that whole thing go away.

$84/BF69 A7 72       LDA [$72]  [$7F:1F74]   A:EB0B X:0000 Y:0032 P:eNvmxdizc
$84/BF6B 25 7E       AND $7E    [$00:007E]   A:0000 X:0000 Y:0032 P:envmxdiZc
$84/BF6D D0 07       BNE $07    [$BF76]      A:0000 X:0000 Y:0032 P:envmxdiZc

Changing this BNE (0xD0) to an unconditional BRA (0x80) skips this check and you can just talk to the one dude to immediately go back to your ranch and start the game.  It even gives you the watering can and all the other crap you're supposed to get from talking to people.

Wednesday, April 13, 2016

Super EDF Volume Hack

Something I've been wanting to look at for a while.

This drops the volume of a couple sound effects in the SNES game Super Earth Defense Force that were annoyingly loud.

Comparison video.  First ~two minutes are original, next two are with the patch.


Patch here - or apply manually by changing 42DE3 from FF to A0, and 42E18 from FF to C0.  Meant for "Super Earth Defense Force (U) [!].smc" and has not been tested with other versions.