don't click here

Hack Sonic the Fighters: Remix v3

Discussion in 'Engineering & Reverse Engineering' started by TDRR, May 14, 2024.

  1. TDRR

    TDRR

    Member
    StF:Remix is a hack of the original arcade version of Sonic the Fighters, including some new features to help give the game a new spin.

    Features:
    • Honey, Dr. Eggman (mech and mechless forms) and Metal Sonic have all been added to the CSS: They're in invisible slots to the right of Knuckles, and can be picked normally.
    • Restored random mode: Hold P1 or P2 punch while pressing start on the title screen, to play random mode, with the unused CSS remixed music restored. You'll be given a randomized set of characters to fight against in story mode, without repeats, including the following extra characters: Honey, mechless Eggman, RoboEgg, Metal Sonic and Super Sonic.
    • Alternate character costumes: Press P1 or P2 kick while selecting your character on the CSS. Currently has 5 costumes: Super Sonic, Amy with Honey's attire, alternate color Honey (for Player 1), Cyborg Eggman, Tank Mech Eggman and Rocket Metal Sonic. All five characters with costumes will fight their normal color counterpart instead of a grayscale clone in mirror matches. These alternate costumes double as grayscale alts when playing normally for the 3 characters that don't have one normally.
    • No ketchup damage mode: Hold P1 or P2 kick while pressing start on the title screen, to enable no ketchup damage mode. Catchup damage (colloquially known as "ketchup" damage) makes characters take more damage depending on some factors like health lead and such, and this mode allows disabling that.
    • Unused music restored: Random mode makes use of the unused CSS music remix, Sunset Town will play on Dynamite Plant if any player is Honey, and Hurry Up! plays in Death Egg's Hangar.
    • Random character select button: Holding P1 or P2 barrier/block will cycle through all the characters on the CSS, and releasing it will select. Causes some flickering on a portion of the screen. Don't use if you're suceptible to health issues related to that!
    • Other changes: Some miscellaneous bugfixes and unused content restored from the original game, such as the unused ice blocks in Aurora Icefield. The japanese warning screen is now omitted on the arcade version.
    Showcase and explanation video (outdated and reflects v1, but gets the idea across):

    (note, I made a mistake in the video, remix mode is enabled with the kick button, not punch, as punch enables random mode)

    Code up on Github!
    https://github.com/TDRRmk2/stfremix

    Download here! (Model 2 version)
    Xbox 360/PS3 version

    We now have a Discord server!

    These don't show a lot really, these are most of the costumes from remix alt mode and the last screenshot shows the two gameplay changes being enabled. Can't really convey the rest in screenshots!
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    Install process for the arcade version:
    1. Create an sfight folder on the roms folder of the Model 2 Emulator.
    2. Extract an sfight romset zip on the roms/sfight folder of Model 2 Emulator, so all epr/mpr files are stored in it. Make sure to not have the romset zip itself in here!
    3. Extract the two replacement epr-19001.15 and epr-19002.16 in the roms/sfight folder and replace the files originally there.
    4. Well, start up the emulator and play!
    Install process for the PS3/360 ports (note: PS3 portion needs to be updated, but feel free to hop on the server if you need help):
    1. Unpack the game container. On 360 you can do this by using wxPirs or Velocity, and on PS3 you can use RPCS3.
    2. Go into media, and if on PS3, unpack "rom.psarc" using unpsarc. You should have a folder inside media called "rom". On 360, you'll just have this already.
    3. Drop the replacement "rom_code1.bin" included in the zip on the download for consoles here.
    4. Load the game on your modded console or emulator, and play!
    v3 - SHC2024 version
    -Made costumes work per-player, toggleable with kick on the CSS.
    -Added Cyborg Eggman, Tank mech Eggman and Rocket Metal costumes.
    -Added random select button on the CSS, used by pressing block.
    -Maybe some bug fixes. Sorry, I forgot to write a changelog!
    v2
    -Added no ketchup damage mode, enabled by holding block when pressing start on the title screen.
    -Added mechless Eggman to the selectable roster.
    -Added Super Sonic skin to remix alt mode.
    -Replaced Honey wearing Amy's dress with alternate color Honey for remix alt mode.
    -All 3 characters with a skin in remix alt mode will fight their normal color costume counterpart, instead of a greyscale copy.
    -Sunset Town will now play when any player is Honey in Dynamite Plant.
    -The unused CSS music remix will now play when random mode is enabled.
    -The regional warning screen on bootup is now skipped.
    -Removed Super Sonic and mechless Eggman from the characters that can appear in random mode.
    -Both random mode and no ketchup damage mode are visibly displayed if enabled on the bottom left corner of the CSS.
    Changes directly taken from biggestsonicfan's discoveries:
    -Enabled the unused ice cubes in Aurora Icefield.
    -Fixed oversight in music selection function.
    v1 - Download
    -Initial release
    • biggestsonicfan: Made the disassembly this uses, as well as other help.
    • seek+: Some useful addresses and other info.
    • BetaRelics: Some useful addresses and other info.
    • StF Discord and Sonic Retro: Feedback.
     
    Last edited: Oct 14, 2024
  2. Bobblen

    Bobblen

    Member
    429
    216
    43
    Awesome to see one of the more unusual spinoffs getting some modding attention, great work! ElSemi's model 2 emulator is so old now that I run it through DxWnd just to get it to display properly, 2 levels of abstraction. I believe it's still the best option however.
     
  3. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    So, after messing around with the install on my (jailbroken) PS3, I finally got it working.

    There are a couple of issues to note on PS3, however:

    - Pressing Start on Honey changes you to Metal Sonic, and then pressing Start a second time changes to Sonic (you continue to toggle between Sonic and Metal Sonic on that space).
    - While testing Random Mode as Metal Sonic, after defeating Bark in Stage 1, I wound up facing Super Sonic for Stage 2. This is clearly an unwinnable fight, as Super is completely immune to damage. Small Eggman and Egg-Bot also made appearances in a second attempt (as did Bean twice), but that run ended against Super Sonic again at Stage 6. Obviously, you may want to prevent Super from showing up.

    Further feedback: If you're adding characters to the select screen, I'd like to see at least Small Eggman added, if not any other unique unused characters.
     
    • Like Like x 1
    • Agree Agree x 1
    • List
  4. TDRR

    TDRR

    Member
    Well, that was stupid. I didn't realize Super was completely invulnerable. I should've probably tested playing as him outside of the Death Egg hangar before allowing him to appear in random mode.

    The start to switch issue is practically unfixable. I have no way of knowing what changes the HD port is doing to the ROM, and debugging it is pretty much impossible not having any way to run the port modded with any debugger on my end.

    As for adding mechless Eggman, I'm not too sure. We'll see, or maybe Roboegg. Definitely not rocket metal as there's nothing new that character would offer.

    And thanks for testing. I'm glad (and also a little surprised) to see the hack does mostly work out of the box on the HD port.
     
  5. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    Well, Robo-Egg shares the same moves as Eggman Mech. At least Small Eggman has a different move set, including some of Bean's bombs.
     
  6. Jammin'

    Jammin'

    Extremely into X-Treme Member
    Woah, a mod for StF?

    What else are you planning to add?
     
  7. TDRR

    TDRR

    Member
    I primarily wanted to add more skins to remix mode, restore Honey's unused (command?) grab (very unlikely for the near future) and rebalance some of the more ridiculous characters.
    These will take some time so I don't know when the next update is going to be. I'll likely push a small fix for Super Sonic and add mechless Eggman to the random character pool.
     
  8. Felik

    Felik

    Member
    1,920
    105
    43
    How about Rocket Metal? I always though he looks very cool even though it's just Metal reskin
     
  9. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    The issue with RocketMetal is that he's a complete clone of Sonic. This hack seems to focus on adding in only characters that are reasonably different to the main cast.
     
    • Informative Informative x 1
    • List
  10. biggestsonicfan

    biggestsonicfan

    Tech Member
    1,629
    432
    63
    That feature is baked into the emulator's code. Not much can be done there without reverse engineering the PS3's executable.

    Minor correction, Rocket Metal is a clone of Knuckles. He share's Sonic's model objects for his spindash, however.
     
    • Agree Agree x 2
    • Informative Informative x 1
    • List
  11. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    Well, still, he's just a reskin of a normal character. It's been a while since I've played around with any of them, so my memory may be a little off.

    What I wanted to ask OP was how did you manage to expand the character select without making the 9th character the same ID as the number of 'available' spaces? when I did my small Model 2 StF hack, I had to change who the first 'secret' character was so that the rest would fit.

    More PS3 testing:

    Playing a Honey mirror match where one player presses Start on Amy, while the other uses the expanded CSS box results in both players having the red costume after the mirror match scene with 'EGG-1701'. I suppose this is related to how P1 can use the alternate color for a Honey mirror.

    Next, I'm pleased to report that all of the command lists come up properly. I'm not sure how it'll handle anyone other than those three, but I'd be interested to know.

    Edit: I can also confirm that name entry filters do work on PS3 as well. 'HAC' got changed to '894' on the best times screen. (But normally, you can't even use numbers on the entry screen)

    Finally, what did you do in order to generate a rom_code1.bin file?
     
    Last edited: May 24, 2024
  12. TDRR

    TDRR

    Member
    This is using biggestsonicfan's disassembly, so you can just... move the list to the end of the ROM. There, you have all the space you want. You can check that on the Github repository, you'll notice I kept the old list as well for display purposes, but the "real" list is at the bottom using the original label name.

    My guess is that they'll probably just use some default, like Sonic's list, or show nothing at all. The people on the StF Discord would probably know (they have a training mode hook mod that can change your character on the fly), or biggestsonicfan.

    That's just the normal output the disassembly gives you. You simply assemble rom_code1.asm into a single binary file. The split files for use with the arcade version are created using a Python script also included with the disassembly. The disassembly repo has a readme (and the stfremix repo keeps it as DISASM_README.md), with instructions on how to use it.
     
  13. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    Ah, see, I've never done any kind of assembly building like that before, so I'd be completely lost. I did at least find the new list, as well as the new length address, so I could probably toss in the small Eggman.

    Also, while trying out some Local Vs. matches with EggMech and so on, I'll sometimes get Canyon Cruise, but it will play South Island's music. Not sure what might be causing that.

    What causes P2's cursor to start at the end of the list, rather than, say, on Knuckles? Further, I notice that when the cursor wraps around the screen, it's lower than where it would normally be, almost as if its position is just increasing in a logical manner, and it's being drawn in the 'correct' spot according to the game (but obviously not us). Would it be difficult to change these behaviors?
     
  14. TDRR

    TDRR

    Member
    Oh yeah I should add, you'll need to compile the included GNU bintools version for i960 support, and assemble using that GNU assembler. Or follow the instructions in the disassembly repo to download CTOOLS which I think is slightly easier to set up, especially on Windows. If you're planning on building stfremix with that, I'll add that I've not tested with CTOOLS, only with GNU AS, but I think it should work.
    I'll add small mechless Eggman for the next build as well, I guess he's the only unique character left.

    I noticed this, but I actually liked that behavior so I kept it in. Makes it more obvious that the other characters are there.

    Now this is a more difficult change and I left this in because I'm not sure how it really could be fixed. If I figure something out I'll maybe make it align with the original list, but it's a very, very low priority thing so I doubt it'll be soon, if ever.

    Maybe that's related to the character you pick? Stages themselves are, AFAIK. I'll give it a look.
     
  15. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    I'm on Windows, so probably CTOOLS for me. Then again, if I can figure out how to change one of the "If random mode opponent is (whoever)" instructions in the compiled binary to exclude Super Sonic instead, I may not even need CTOOLS.

    Yeah, it kinda just makes sense to.

    I mean, even the rerelease doesn't really make it obvious these three are playable either.

    See, I was thinking of more along the lines of using your "old charlist length" trick to keep the art from drawing by also keeping the cursor from drawing when on boxes 9-11(or 12 with NoMech).

    I know there was a bug that kept North Wind from playing when it logically was supposed to sometimes. Could that have affected what track was played instead?

    Since we're on the subject of music, are you planning to somehow work Sunset Town in for Honey?
     
  16. TDRR

    TDRR

    Member
    To be completely honest, I'm not 100% sure on how the music is picked. I didn't change any of that. It's based on the stage number (amount of stages beat, not the stage ID) in singleplayer but that's about all I looked at. I'll try to give this a proper look.

    If I do figure out how the whole thing works, sure! I could hack it on top but I don't want to make it too inconsistent with the normal music playing logic. Whenever I figure out what that actually is :p
     
  17. Tiberious

    Tiberious

    Yeah, I'm furry. Got a problem? Oldbie
    I notice you didn't quite answer the other question I'd had...

    From get_rand_char:
    What does this look like in the assembled rom_1.bin file? I kept trying to search for the character values in a pattern, but never saw it.

    Otherwise, I was just going to add a new line that added CHAR_SUPERS to the 'ban list', drop Eggman into the character select and rebuild... but even the instructions for setting up CTOOLS is confusing the mess out of me.

    Edit: What I did in the compiled binary was just add the value for CHAR_EGGMAN1 to the end of the character select list, and upped the list length to accommodate. Still functions fine on PS3, and doesn't even crash trying to access a command list; it just defaults to Sonic.
     
    Last edited: May 31, 2024
  18. TDRR

    TDRR

    Member
    Yes, that works because I had to put in a zero byte for padding purposes. So that doesn't overwrite anything.

    As for the fixing the character list, that's more complicated, and needs adding more instructions. This isn't going to really go very well with hex editing, so even if I told you what it assembled to and the offset it was in, it'd be very difficult to do much of anything. Not to mention the instruction only reserves less than a byte for the immediate value to be compared with, so even changing it in a hex editor isn't straightforward.

    Yesterday I did both changes, and if I add Sunset Town to the music rotation and fix the other bugs, I'll release the new update today or tomorrow, so just wait a little if you really want that fixed.
     
  19. biggestsonicfan

    biggestsonicfan

    Tech Member
    1,629
    432
    63
    A small suggestion for the character select screen: Fighting Vipers allows you to choose Mahler by incrementing the array length of the character select list after it's drawn. So perhaps that might be an easier implementation than what exists in the mod currently?
     
    • Informative Informative x 1
    • Useful Useful x 1
    • List
  20. TDRR

    TDRR

    Member
    New update out! This was originally going to be just a bugfix update. Life got in the way so I took the time to make things a lot, lot more interesting. I hope you guys enjoy!

    Changelog:
    -Added no ketchup damage mode, enabled by holding block when pressing start on the title screen.
    -Added mechless Eggman to the selectable roster.
    -Added Super Sonic skin to remix alt mode.
    -Replaced Honey wearing Amy's dress with alternate color Honey for remix alt mode.
    -All 3 characters with a skin in remix alt mode will fight their normal color costume counterpart, instead of a greyscale copy.
    -Sunset Town will now play when any player is Honey in Dynamite Plant.
    -The unused CSS music remix will now play when random mode is enabled.
    -The regional warning screen on bootup is now skipped.
    -Removed Super Sonic and mechless Eggman from the characters that can appear in random mode.
    -Both random mode and no ketchup damage mode are visibly displayed if enabled on the bottom left corner of the CSS.
    Changes directly taken from biggestsonicfan's discoveries:
    -Enabled the unused ice cubes in Aurora Icefield.
    -Fixed oversight in music selection function.

    No video, but in it's absence, have some screenshots:

    Download in the first post as always!

    I'm going to properly look into it for the next update. Thanks for the suggestion.