Jump to content
NHL'94 Forums

McMarkis

Members
  • Posts

    62
  • Joined

  • Last visited

  • Days Won

    12

Posts posted by McMarkis

  1. Disable / Reduce frequency of the puck hitting the posts


    Problem:
    Reduce the Insane amount of times the puck hits the post in SNES.

    Solution:
    There are a few things you can do:

    • Remove the check to see if the puck hits the cross bar or post, this results in a goal when it normally would hit the post.
    • Keep the check but make the cross bar height higher and or the side posts further out.
    • Keep the Crossbar check but skip the posts check. This would probably be the best balance if you still want some posts in the game.

    Technical Details:

    The code below is executed when the puck is about to go into the net. As mentioned above there are a few hacks you can apply.

    Code:

    1. Hijacking the code at this location; we can jump to the goal logic (jmpToGoalLogic) and skip all the post checks. (Always a goal, no post)
    2. Changing this value from #$000D to a larger hex value (000F) will make the crossbar height higher (Not visually just in code)
    3. Changing this value from #$0012 to a larger hex value (0014) should make one side of the net wider (Not visually just in code)
    4. Changing this value from #$FFEF to a smaller hex value (FFEB) should make the other side of the net wider (Not visually just in code)

    image.png

    New Code:

    I simply chose option 1; to skip all the logic that checks if the post was hit, and always jump to the Goal Logic.

    image.png

    I have included that patch in the tool and the Hex example below.

    Download the patch tool to create your own ROM or patch an existing ROM.

    image.png

    https://github.com/Mhopkinsinc/NHL94SNESVault/releases

    Hex Version:

    image.png

    1) Replace old hex value with new hex value.

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F1230
    Old: AD F9 0D
    New: 4C 0F 92
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F1430
    Old: AD F9 0D 
    New: 4C 0F 92

     

    • Love 1
  2. Disable Penalty Shots


    Problem:
    Request for the option to turn off Penalty Shots.

    Solution:
    This hack allows you to disable Penalty Shots regardless if Penalties are On or Off.

    Technical Details:

    The change is simple but finding it was tricky. We just have to branch to the code that signals no penalty shot.

    Old Code:

    1) Checks if the BreakAwayActive flag is set and if it is, Branches to 9EC068, this code sets up a flag to call a penalty shot.
    2) The code at 9EC068 Sets a flag to call a penalty shot by setting the value to #$FFFF

    image.png

    New Code:

    1) Still checks if the BreakAwayActive flag is set but now it Branches to 9EC06D instead of the 9EC068
    2) The code at 9EC06D sets a flag to signal NO penalty shot by setting the value to #$0000

    image.png

    Download the patch tool to create your own ROM or patch an existing ROM

    image.png

    https://github.com/Mhopkinsinc/NHL94SNESVault/releases

    Hex Version:

    image.png

    1) Replace old hex value with new hex value.

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F4064
    Old: 03 
    New: 08
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F4264
    Old: 03 
    New: 08

     

    • Love 1
  3. Disable Interference Penalty With Penalties ON


    Problem:
    Request to disable Interference penalties as certain individuals despise it, and feel it is called too often in SNES.

    Solution:
    This hack allows you to disable the Interference Penalty while still keeping all other penalties ON.

    Technical Details:

    This one was simple, we just have to prevent the check to assess goalie interference by skipping.

    Old Code:

    image.png

    Modified Code: Change the BMI (Branch If Minus) to BRA (Branch Always)

    image.png

    Download the patch tool to create your own ROM or patch an existing ROM

    image.png

    https://github.com/Mhopkinsinc/NHL94SNESVault/releases

    Hex Version:

    image.png

    1) Replace old hex value with new hex value.

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F3AA8
    Old: 30 
    New: 80
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F3CA8
    Old: 30 
    New: 80

     

    • Love 2
    • Thanks 1
  4. Pull Goalie with L+R Trigger


    Problem:
    Pausing the game to pull the goalie kills game flow.

    Solution:
    This hack allows you to pull / insert the goalie by pressing L+R trigger buttons. Also plays the beep SFX to notify users of the action.

    Technical Details:

    Similar to the "Defense Ctrl" code injection method, we have to swap out some of the existing code and insert a jump to new code that we create. This new code will be placed in the free space at the end of the 9E bank.

    Old Code:

    image.png

    Hijack Instruction LDY.B and LDA.W and JSR (Jump) to the new code we wrote.

    image.png

    Run new code that checks if the goalie is in net and if L+R are pressed for player 1 or 2.

    image.png

    I have included the rom to play around with or compare for differences if interested. Or you can download the tool and create your own ROM.

    image.png

    image.png

    https://github.com/Mhopkinsinc/NHL94SNESVault/releases

    nhl94.sfc

    Hex Version:

    image.png

    1) Hijack old code and point to the new code

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F50BF-F50C3
    Old: A4 91 B9 AA 17 
    New: 20 6E FB EA EA
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F52BF-F52C3
    Old: A4 91 B9 AA 17 
    New: 20 6E FB EA EA

    2) Insert new code that allows you to pull goalie with L+R Trigger

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F7B6E-F7BC4
    OLD: FF's
    NEW: A2 00 00 AC 91 00 B9 AA 17 C9 00 FF D0 01 60 B9 C1 FB DD 84 1C F0 09 E8 E8 E0 04 00 D0 F1 80 2D BD 76 07 29 FF 00 C9 30 00 D0 22 B9 AA 17 F0 07 C9 FF FF F0 02 80 16 49 FF FF 99 AA 17 22 07 D4 9F A9 00 70 85 64 A9 05 00 22 7D A1 80 A4 91 B9 AA 17 60 01 00 02 00
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F7D6E-F7DC4
    OLD: FF's
    NEW: A2 00 00 AC 91 00 B9 AA 17 C9 00 FF D0 01 60 B9 C1 FB DD 84 1C F0 09 E8 E8 E0 04 00 D0 F1 80 2D BD 76 07 29 FF 00 C9 30 00 D0 22 B9 AA 17 F0 07 C9 FF FF F0 02 80 16 49 FF FF 99 AA 17 22 07 D4 9F A9 00 70 85 64 A9 05 00 22 7D A1 80 A4 91 B9 AA 17 60 01 00 02 00

    Limitations:

    • This only works for Player 1 and Player 2, if both players are on the same team, Player 1 gets control of this option.
    • Only works during game play, you can't pull / insert your goalie in between whistles.
    • Love 1
    • Like 1
    • Wow 3
  5. Trace Logging


    In this tutorial we will be taking the RAM values we found in the finding RAM values tutorial , and tracing where the code in the ROM, is writing to that RAM value. Confused?
    Basically we are tracing whenever the Away teams goalie (CPU) is being pulled because of a powerplay, or in the 3rd period when the CPU is losing by 1 or 2 goals.

    Setup emulator and launch the game:


    • This builds on the first tutorial, so I assume you already have the MESEN2 emulator installed and know how to launch the rom.
    • Get the game to a position where you are winning by 1 or 2 goals in the third period with close to 1:20 minutes left. Then make a save state and pause the game.
    • File ==>Save State ==>Select an empty slot

    image.png

    Launch the Trace Logger:


    Now were going to add a trace condition to Log writes for the Away Goalies Ram Address $17AC

    • Click Debug ==> Trace Logger

    image.png

    image.png

    This looks confusing, but the only thing you really need to understand here is the trace condition.

    • #1 in the screen shot (Condtion) needs to copied from here and pasted in. IsWrite && MemAddress >= $017AC && MemAddress  <=$017AD
      • What this is doing is anytime a write (IsWrite) is happening to RAM (MemAddress) greater than or equal to (>=) $017AC and (&&) less than (<=) $017AD; log it to the trace window. $017AC + $017AB contains the Away teams goalie.
    • #2 in the screen shot (Clear log) needs to be pressed to clear the log before you start the game again.
    • #3 allows you to save the log file to your computer if you want. (Not required for this example)

    Now we are going to play the game again and make sure the CPU has the puck and is over the center ice line with less than 1 minute left. This will cause the CPU to pull its goalie and we should see a trace in the log appear.

    image.png

    If everything goes according to plan, you should see some traces show in the Trace log window when the goalie gets pulled.

    • #1 in the screen shot is the RAM value for the away goalie we were talking about $17AC
    • #2 in the screen shot is the new value it was set to FF 00; this means Pulled goalie in the game.
    • #3 in the screen shot is the location in the ROM .sfc file that code executed to set the RAM value.
      • This one is a little tricker to understand. We can now look at the decompiled rom and see exactly what game code was running that sets this value. We will cover this in a more advanced topic.
        image.png

    Homework:


    • You now have the general knowledge to find RAM values in the emulator and then trace them to find the exact location in the ROM where that logic is.
    • Use what you have learned to try and find other RAM values that you may be interested in. Maybe try and find the game clock ticking down in RAM.
    • If this didn't work for you, just restore the save state and try again.
    • Love 1
  6. NHL 94 [SNES] ROM / RAM Hacking School


    As a tribute to @Tony H and his ROM hacking tutorial on the GENS side, I have created a version of his tutorials for SNES.

    SNES Tutorials


    Tools that you need


    1. SNES debug emulator MESEN2
    2. NHL 94' rom in .sfc or .smc format

     

     

     

    • Love 1
    • Thanks 1
  7. Finding Ram Values


    In this tutorial we will be searching for RAM values, like the ones used to identify how the CPU pulls the goalie. The Home and Away team goalies are stored in the emulators RAM, we will learn how to find those values in RAM by doing a simple search in the emulator.

    Tools that you need:


    1. SNES debug emulator MESEN2
    2. NHL 94' rom in .sfc or .smc format

    Setup emulator and launch the game:


    • Launch the emulator and load the rom ==>File ==>Open
    • (Optional, keyboard works fine) Setup your joystick under settings ==> Input ==> SNES ==> Port 1 Setup
    • Setup a Regular Season game and navigate to the Start Game screen

    image.png

    Launch the Memory Search:


    Now were going to do a simple Memory Search to find the starting Home Goalie Ram value

    • Click Debug ==> Memory Search

    image.png


    image.png

    • #1 in the screen shot (Compare To) needs to be set to Previous Search Value
    • #2 in the screen shot (Operator) needs to be set to Equal
    • #3 in the screen shot will apply the Search filters to all the Work RAM memory, Go ahead and click the Apply Filter button.
    • Results: You can't tell right now, but the results have filtered out some of the RAM values that have changed, this is good.

    Now we are going to change the Goalie to Racicot and perform another search, because we increased the goalie from the first Goalie - Roy to the second Goalie - Racicot, we want to search for RAM values that have increased (Greater than).

    image.png

    • #4 in the screen shot (Compare To) needs to be set to Previous Search Value
    • #5 in the screen shot (Operator) needs to be set to Greater than
    • #6 in the screen shot will apply the Search filters to all the Work RAM memory, Go ahead and click the Apply Filter button.
    • #7 in the screen shot shows the results, we have filtered down a lot of values, this is good.

    Now we are going to change the Goalie back to Roy and perform another search, because we decreased the goalie from the second Goalie - Racicot back to the first Goalie - Roy, we want to search for RAM values that have decreased (Less than).

    image.png

    • #8 in the screen shot (Compare To) needs to be set to Previous Search Value
    • #9 in the screen shot (Operator) needs to be set to Less than
    • #10 in the screen shot will apply the Search filters to all the Work RAM memory, Go ahead and click the Apply Filter button.
    • #11 in the screen shot shows the results; wow, we have filtered down to 2 values. One of these is our Home teams Goalie RAM value. $126D or $17AA

    One last trick here is to leave Roy as the starting goalie, making sure you haven't changed it from the last search, and start the game. We can apply another filter during game play for RAM values that haven't changed (Equal).

    image.png

    • #12 in the screen shot (Compare To) needs to be set to Previous Search Value
    • #13 in the screen shot (Operator) needs to be set to Equal. 
    • #14 in the screen shot will apply the Search filters to the remaining Work RAM memory, Go ahead and click the Apply Filter button.
    • #15 in the screen shot shows the results. Only one value left $17AA, this is our Home teams Goalie RAM value.

    Now you can see the value for $17AA change from 00 (Roy) to 01 (Racicot) or FF (No Goalie)

    Homework:


    • Using the same steps above, see if you can find the Away teams RAM value. Just make sure you set your controller to the away team for this exercise.
    • Love 1
  8. Real Time Clock [SNES]


    Note:
    Full credit to @Brodeur30 & @kingraph for the original GENS hack.

    Problem:
    Request for the Real Time Clock feature to be implemented on the SNES. This enables period and penalty durations to correspond with actual real-world time, meaning a 5-minute period is equivalent to 5 real minutes.

    Modify The Time Clock To Be Real Time:
    Want to make the time clock use real time instead of 2.5x speed?

    ROM Offset: (hex)F85B6-F85B7
    Change: AA 0A to 44 04

    The above change will slow the clock down to real time.

    image.png

    Modify The Penalty Clock To Be Real Time:
    Want to make the penalty clock real time?

    ROM Offset: (hex)F3F66-F3F67
    Change: 18 00 to 3C 00

    image.png

    ROM Offset: (hex)F8668-F8669
    Change: 18 00 to 3C 00

    image.png

    The above 2 changes will make the penalty clock real time.

    BONUS INFO:
    This is all setup already on the SNES GitHub repo along with other Hacks. Check it out!

    • Love 1
  9. Pull CPU Goalie earlier when losing [SNES]


    Problem:
    Would like the CPU to pull its goalie earlier in the 3rd period when losing by 1 or more goals.

    Pull CPU Goalie earlier in the 3rd:
    Want to change how early the CPU pulls its goalie when losing?

    ROM Offset: (hex)00F5150-00F5151
    Change: 3D 00 to 96 00

    The above change will pull the goalie with 2:30 remaining in the 3rd period.

    image.png

    Pull CPU Goalie when losing by more than 2 goals:
    You can also modify how many goals the CPU is losing by when the goalie gets pulled.

    ROM Offset: (hex)000F5148
    Change: 03 to 04

    The above change will pull the goalie when losing by 1, 2 or 3 goals.

    image.png

    BONUS INFO:
    This is all setup already on the SNES GitHub repo along with other Hacks. Check it out!

    • Love 1
  10. Pull CPU Goalie earlier when losing


    Note:
    Thanks to @chaos & @smozoma for assisting with some 68K assembly knowledge sharing.

    Pull CPU Goalie earlier in the 3rd:
    Want to change how early the CPU pulls its goalie when losing?

    ROM Offset: (hex)0000F766-0000F767
    Change: 00 3C to 00 96

    The above change will pull the goalie with 2:30 remaining in the 3rd period.

    image.png

    Pull CPU Goalie when losing by 1 goal instead of 2:
    You can also modify how many goals the CPU is losing by when the goalie gets pulled.
    **There is currently a bug in GENS where it will only pull the goalie if its equal to this value. See below patch by @smozoma to fix this.

    ROM Offset: (hex)0000F75F
    Change: 02 to 01

    The above change will pull the goalie when losing by 1 goal instead of 2 goals.

    image.png

    • Love 2
    • Thanks 1
    • Like 2
    • Wow 2
  11. Turn On Defense Control By Default


    Note:
    Full credit to @smozoma for the original hack. This post details the process of incorporating it into the disassembled ROM, allowing it to be recompiled into the game with configurable options. Tutorials to follow in the future on how you can recompile the rom yourself.

    Problem:
    Defense Control is turned off as a default setting in the game, but the majority of SNES players favor having it enabled from the start.
    image.png
    Solution:
    The same as the original hack, we have to swap out some of the existing code and insert a jump to new code we create. This new code will be placed in the free space at the end of the 9F bank.
    [1] Hijack old code and have it jump to the new code we add at the bottom of the bank. Line 322

    image.png
    [2] New code to turn on Defense Control for Home and Away teams. Line 11391
    image.png
    [3] I've introduced a variable named !Defense_Control, which you have the option to enable or disable during the compilation of your ROM. The intention is to add more configurable variables for ROM building in the future. Currently, there are two additional variables available: one to adjust penalty duration and another to activate the hidden 30-second periods.
    image.png

    BONUS INFO:
    The code we initially diverted from was actually responsible for determining the starting goalie in the game. This opens up potential for further modifications, such as automatically  starting the 2nd goalie, or even enabling on-the-fly pulling of the goalie without needing to pause the game.
    image.png
    image.png

    nhl94.sfc

    • Love 2
    • Thanks 1
  12. Enable 1 Minute Penalties


    Problem:
    The SNES rom crashes when you try to modify penalties to be 1 minute, as the game developers never expected there to be 1 minute penalties.


    Solution:
    Modify the penalty length in the ROM and skip the problematic check for 0 or 1 if the penalty length is one minute.

    Technical Details:

    Similar to the "Defense Ctrl" code injection method, we have to swap out some of the existing code and insert a jump to new code that we create. This new code will be placed in the free space at the end of the 9E bank.

    Problem Code:

    image.png

    Hijack Instruction before the problem code and run new code (One_Min_Pen)

    image.png

    Run new code to skip the compare if we know its a one minute penalty and continue like normal as if it was a 2 min penalty.

    image.png

    I have included the 1 min penalty rom to play around with or compare for differences if interested. Or you can download the tool and create your own ROM.

    image.pngimage.png

    https://github.com/Mhopkinsinc/NHL94SNESVault/releases

    nhl94.sfc

    Hex Version:

    image.png

    1) Change all the penalties from 02 minutes to 01 minutes.

    Headerless ROM (.SFC)
    ROM Offsets: (hex) 54C7,54E9,550B,552B,554B,556B,558C,55B1,55C9
    Change:02 to 01
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) 56C7,56E9,570B,572B,574B,576B,578C,57B1,57C9
    Change:02 to 01

    2) Hijack old code and point to the new code

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F3417-F3419
    Change:29 FF 00 to 4C 5B FB
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F3617-F3619
    Change:29 FF 00 to 4C 5B FB

    3) Insert new code that fixes the bug

    Headerless ROM (.SFC)
    ROM Offsets: (hex) F7B5B-F7B6D
    Change: FF's to C9 01 04 F0 05 C9 01 0A D0 03 4C 21 B4 29 FF 00 4C 1A B4
    
    Headered ROM (.SMC)
    ROM Offsets: (hex) F7D5B-F7D6D
    Change: FF's to C9 01 04 F0 05 C9 01 0A D0 03 4C 21 B4 29 FF 00 4C 1A B4

     

    • Love 1
    • Thanks 1
    • Like 1
  13. Enable Hidden "30 Second" Periods


    I think this hack was originally found in the GENS version but may not have been fully documented. Here is the link to my GENS post, its slightly different.

    Guess what? Buried deep in the ROM, like a pirate's treasure, there's a sneaky '30 Second' period option playing hide-and-seek! If you're up for a bit of digital treasure hunting and want to unlock this secret in your ROM, just tweak these Hex values

    Headerless Rom
    ROM Offset: (hex) 000EACD7 
    Change: 03 to 04

    It's like whispering a secret code to open a hidden chamber! But beware, once you activate it, your game time could disappear faster than a fart in the wind – one minute you're playing, the next, poof! It's all over!

    image.png

    image.png

    nhl94.sfc

    • Love 1
    • Thanks 1
  14. NHL 94 SNES


    This post contain information about editing the SNES version of NHL 94'. Similar to the thread created on the GENS side, I thought I would try and get this going on the SNES side as well. I have also created a GITHUB repository (NHL 94' SNESVault), that contains a disassembled version of NHL 94' for SNES. The goal is to have the GITHUB repository contain all the documentation and code for the SNES version of NHL 94'

    Last update


    • Last Update 3.12.2024

    SNES 94' Editors


    • SNES 94' Editor [Team / Player editor] @statto
    • nhl94e [NHL 94' Player name & stats editor / Import new Player profile images] @haydenkale

    SNES 94' Tools


    SNES 94' Bug Fixes


    • [None Yet]

    SNES 94' Hacks


    SNES 94' Graphics


    • Decompress2 [Extract/Decompress Player Profile Images from SNES 94' rom]

    SNES 94' Audio & Music


    • [TO DO]

    SNES 94' Game Genie Codes


    • [TO DO]

    Tutorials


    SNES 94' Roms


    SNES Debug Emulators


    • MESEN2 [SNES emulator with excellent debug tools]
    • BSNES-Plus [SNES emulator with great debug tools]
    • Geiger’s snes9x [SNES emulator with good debug tools]
    • no$sns [SNES emulator with good debug tools]
    • vSNES [Old tool used more for graphics save state debug]

    SNES 65c816 (Assembly) Info


    • 65c816 [Opcodes for Super Nintendo]

    SNES 65c816 Tools


    • ASAR [SNES assembler / ROM patcher]
    • DiztinGUIsh [SNES disassembler & trace log capture tool.]
    • LunarAddress [SNES Address Conversion from SNES to PC location]

    Coding Tools


    • VS Code [Multi OS tool used to edit the disassembled SNES NHL 94' ASM files] 
    • HxD [Windows based Hex editor for editing a compiled SNES rom]
    • Beyond Compare [Multi OS tool used to compare files for changes/differences]

    F.A.Q


    • Love 2
    • Thanks 3

  15. I'm aware this topic has come up before, but I've decided to document it here for easy reference in one place.

    Guess what? Buried deep in the ROM, like a pirate's treasure, there's a sneaky '30 Second' period option playing hide-and-seek! If you're up for a bit of digital treasure hunting and want to unlock this secret in your ROM, just tweak these Hex values

    ROM Offset: (hex)000F7927
    Change: 03 to 04

     

    Quote

    To activate this feature on the original cartridge, just press and hold the A and C buttons on the player 1 controller until you reach the Start Game screen. Doing so will set the period time to a swift 00:30 seconds.

    It's like whispering a secret code to open a hidden chamber! But beware, once you activate it, your game time could disappear faster than a fart in the wind – one minute you're playing, the next, poof! It's all over!

    image.png

    image.png

    nhl94_30seconds.bin

    • Love 1
    • Thanks 1
×
×
  • Create New...