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, June 2, 2016
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
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
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
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 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.
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.
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.
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.
Sunday, March 6, 2016
Ancient Cave De-Randomizer v1.3.1
Minor fixes.
- Fix an issue where the window was not taking the size of the title bar/border into account when sizing itself, and it would display incorrectly on systems with overly large titlebars.
- Disable chest opening fanfare when using randomized music, so it doesn't restart every couple seconds.
Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.3.1.exe
- Fix an issue where the window was not taking the size of the title bar/border into account when sizing itself, and it would display incorrectly on systems with overly large titlebars.
- Disable chest opening fanfare when using randomized music, so it doesn't restart every couple seconds.
Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.3.1.exe
Friday, March 4, 2016
Ancient Cave De-Randomizer v1.3
A few new features with some help from Hetdegon who's been sending me very helpful information:
- A new slider to adjust the number of enemies found walking around on AC maps.
- You can now adjust the relative likeliness of each chest type to appear: weapons, armor, spells, blue chests, and consumables. You can specify manual values or randomize it.
- Add slider to increase or decrease the chances to find healing tiles under bushes.
- Add an option to start the cave with a Providence so you can always get out.
- Merge randomization tab in with Misc tab for now, since not much was there.
Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.3.exe
- A new slider to adjust the number of enemies found walking around on AC maps.
- You can now adjust the relative likeliness of each chest type to appear: weapons, armor, spells, blue chests, and consumables. You can specify manual values or randomize it.
- Add slider to increase or decrease the chances to find healing tiles under bushes.
- Add an option to start the cave with a Providence so you can always get out.
- Merge randomization tab in with Misc tab for now, since not much was there.
Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.3.exe
Sunday, February 28, 2016
Ancient Cave De-Randomizer v1.2.2
Bug fixes and stuff:
- Fixed an issue where scaling enemy types to a new max floor sometimes resulted in all lizards due to a rounding error.
- Fixed an issue where enemies were improperly scaling to max floor entry.
- Added debug logging for most features.
Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.2.2.exe
- Fixed an issue where scaling enemy types to a new max floor sometimes resulted in all lizards due to a rounding error.
- Fixed an issue where enemies were improperly scaling to max floor entry.
- Added debug logging for most features.
Download: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizerv1.2.2.exe
Tuesday, January 26, 2016
Ancient Cave De-Randomizer v1.2.1
Fixes the ugly color differences in the UI that I didn't even realize were there. I blame this monitor.
Download
Download
Sunday, January 24, 2016
Ancient Cave De-Randomizer v1.2
New options:
- Scale up or down enemy difficulty
- Scale up or down the jelly's HP
- Use the same sprite for all enemies to hide which type they are (currently this is a fixed sprite, i may randomize later or base it on the difficulty setting)
- More cores, no cores, or ONLY cores appear as enemies.
- Better or worse items from normal chests
- Include items not normally dropped by normal chests (like Gades Blade)
- Randomly include or exclude gear found in chests from the cave
- An option to not perform the derandomization that makes the caves have a fixed structure (only apply the other options)
- Randomize tilesets/music
- Decrease bottom floor, with an option to scale everything up such that the new bottom floor is floor98-like.
- Gift mode always enabled or not always enabled
- Adjust starting exp level of characters when entering ancient cave (normally 1)
Download here
- Scale up or down enemy difficulty
- Scale up or down the jelly's HP
- Use the same sprite for all enemies to hide which type they are (currently this is a fixed sprite, i may randomize later or base it on the difficulty setting)
- More cores, no cores, or ONLY cores appear as enemies.
- Better or worse items from normal chests
- Include items not normally dropped by normal chests (like Gades Blade)
- Randomly include or exclude gear found in chests from the cave
- An option to not perform the derandomization that makes the caves have a fixed structure (only apply the other options)
- Randomize tilesets/music
- Decrease bottom floor, with an option to scale everything up such that the new bottom floor is floor98-like.
- Gift mode always enabled or not always enabled
- Adjust starting exp level of characters when entering ancient cave (normally 1)
Download here
Monday, January 18, 2016
Ancient Cave De-Randomizer Update
Minor updates.
- Gift mode now enabled regardless of saveram state.
- Popup when done writing the file.
Download from save location as before: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizer.exe
- Gift mode now enabled regardless of saveram state.
- Popup when done writing the file.
Download from save location as before: https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizer.exe
Sunday, January 17, 2016
Ancient Cave De-Randomizer
Here's a little tool I've been thinking of making for a while.
Normally, Lufia 2's Ancient Cave is randomized on-the-fly based on a frame counter and a pile of garbage bytes that changes when you do certain actions.
This tool injects some code that hardcodes those values to pre-determined random values for each floor, so every trip through the cave is the same.
There was some desire for this so that two people could race Ancient Cave and have it be the same cave.
https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizer.exe
May not work perfectly yet. Report any problems here.
Normally, Lufia 2's Ancient Cave is randomized on-the-fly based on a frame counter and a pile of garbage bytes that changes when you do certain actions.
This tool injects some code that hardcodes those values to pre-determined random values for each floor, so every trip through the cave is the same.
There was some desire for this so that two people could race Ancient Cave and have it be the same cave.
https://dl.dropboxusercontent.com/u/19968993/AncientCaveDerandomizer.exe
May not work perfectly yet. Report any problems here.
Sunday, September 6, 2015
SNES Livewallpaper Release
Version 0.1 released:
https://play.google.com/store/apps/details?id=org.moppu.sneslwp
Includes:
- FF4 Zeromus fight background
- FF6 Airship
- CT time gate
- LTTP credits background
- Earthbound battle BGs (only one of these at the moment)
Feel free to report bugs or make requests here.
https://play.google.com/store/apps/details?id=org.moppu.sneslwp
Includes:
- FF4 Zeromus fight background
- FF6 Airship
- CT time gate
- LTTP credits background
- Earthbound battle BGs (only one of these at the moment)
Feel free to report bugs or make requests here.
Sunday, August 30, 2015
More Livewallpapers
uneventful weekend so i've been having fun making these things. this one is a take on the credits background from a link to the past (original: https://www.youtube.com/watch?v=LJh3D_zX0To)
Tuesday, August 25, 2015
Another one of these things
FF6 this time.
Missing airship and clouds still, and has a couple holes in the overworld i need to fix
This will be part of the same wallpaper set with the zeromus clouds and the chrono trigger time gate, and probably some other overworlds like this.
Sunday, August 9, 2015
Friday, June 5, 2015
Zelda Deathmatch - Progress
No new interesting screenshots or anything, but I've gotten a bunch of new features in recently.
- Game management is now a thing. The server specifies when the game starts, and the client hijacks some code in the ROM to prevent you from starting the game until the server allows. When the server says the game ends, the client dumps you back at the player select screen by flipping a few RAM values. The results of the game will vary by the game mode. I plan to have some basic PVP modes (Deathmatch, something CTF-like), as well as a race mode with PVP, and a co-op PVE mode with boosted enemy stats.
- Custom maps can be a thing. As a test, I have one that isolates the southern end of hyrule by modifying a few columns in ROM on the fly. This can allow for smaller, more PVP-friendly arenas.
- I had to inject a little code into the ROM to do detection for which player killed which by saving off the ID of the object that caused the kill and reading that with the client. This should be working now.
Things that still need to be done:
- Kill/death tracking. Most of the pieces are already in place for this to work. I intend to have some sort of login system and have the server track a running history of things like this for each user.
- Bomb handling. Bombs are the only player weapon that there isn't an enemy equivalent of that I can use for remote players, so it will be a little tricky to get PVP bombs to work.
- Enemy syncing. I have a couple ideas for how to make this work. We'll see if any of them work. This may end up being a "later" sort of thing.
- A few other minor things and bugfixes.
I will probably make this open source at some point so people can apply the same concept to other games.
- Game management is now a thing. The server specifies when the game starts, and the client hijacks some code in the ROM to prevent you from starting the game until the server allows. When the server says the game ends, the client dumps you back at the player select screen by flipping a few RAM values. The results of the game will vary by the game mode. I plan to have some basic PVP modes (Deathmatch, something CTF-like), as well as a race mode with PVP, and a co-op PVE mode with boosted enemy stats.
- Custom maps can be a thing. As a test, I have one that isolates the southern end of hyrule by modifying a few columns in ROM on the fly. This can allow for smaller, more PVP-friendly arenas.
- I had to inject a little code into the ROM to do detection for which player killed which by saving off the ID of the object that caused the kill and reading that with the client. This should be working now.
Things that still need to be done:
- Kill/death tracking. Most of the pieces are already in place for this to work. I intend to have some sort of login system and have the server track a running history of things like this for each user.
- Bomb handling. Bombs are the only player weapon that there isn't an enemy equivalent of that I can use for remote players, so it will be a little tricky to get PVP bombs to work.
- Enemy syncing. I have a couple ideas for how to make this work. We'll see if any of them work. This may end up being a "later" sort of thing.
- A few other minor things and bugfixes.
I will probably make this open source at some point so people can apply the same concept to other games.
Thursday, May 28, 2015
Zelda Deathmatch - Map Generation
Select-button menu now generates maps for every dungeon and for the overworld.
First draft. A few of the columns still aren't processing correctly (note entrance room for Lev1 looks screwy) and there are still issues with position jumping around when transitioning between rooms, but otherwise it seems to work.
Two connected clients, one (on the right) with map open:
Local player shows as a blue/green flashing dot (Entrance room to level 1, outside level 1) and remote players show up as red/blue flashing dot (left side of level 1, west of overworld start spot).
Also added arrow and boomerang combat, and made it so you can hit left/right on the player select screen to select 1st/2nd quest. This might be ready for testing sometime soon.
Major things to still do:
- Game modes (PVP deathmatch, PVP race, PVE Co-op, etc)
- Syncing enemy positions
- Second quest handling (currently only first quest maps etc work)
- Bomb support for PVP - no idea how to do this yet since it's the only weapon that doesn't have an enemy equivalent that will damage the player.
First draft. A few of the columns still aren't processing correctly (note entrance room for Lev1 looks screwy) and there are still issues with position jumping around when transitioning between rooms, but otherwise it seems to work.
Two connected clients, one (on the right) with map open:
Local player shows as a blue/green flashing dot (Entrance room to level 1, outside level 1) and remote players show up as red/blue flashing dot (left side of level 1, west of overworld start spot).
Also added arrow and boomerang combat, and made it so you can hit left/right on the player select screen to select 1st/2nd quest. This might be ready for testing sometime soon.
Major things to still do:
- Game modes (PVP deathmatch, PVP race, PVE Co-op, etc)
- Syncing enemy positions
- Second quest handling (currently only first quest maps etc work)
- Bomb support for PVP - no idea how to do this yet since it's the only weapon that doesn't have an enemy equivalent that will damage the player.
Subscribe to:
Posts (Atom)

