Jump to content
NHL'94 Forums

McMarkis

Members
  • Posts

    62
  • Joined

  • Last visited

  • Days Won

    12

McMarkis last won the day on March 13

McMarkis had the most liked content!

1 Follower

Profile Information

  • Location
    Toronto Ontario Canada

Previous Fields

  • Preferred System
    SNES
  • Favorite Way To Score
    Slapshot

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

McMarkis's Achievements

Explorer

Explorer (4/14)

  • Reacting Well Rare
  • Conversation Starter Rare
  • Dedicated Rare
  • First Post Rare
  • Collaborator Rare

Recent Badges

39

Reputation

  1. Unfortunately no, this logic happens after the game has decided the puck is going in the net. I still have to find the code for shooting and goalie save logic. But anything that was going to hit the post will now be a goal.
  2. 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: 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) Changing this value from #$000D to a larger hex value (000F) will make the crossbar height higher (Not visually just in code) Changing this value from #$0012 to a larger hex value (0014) should make one side of the net wider (Not visually just in code) 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) 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. 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. https://github.com/Mhopkinsinc/NHL94SNESVault/releases Hex Version: 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
  3. If I recall, this code only runs during breakaways, separate from regular penalty logic. Would have to see what the logic after setting the penalty shot flag is doing, and see if it can be called from regular penalty logic.
  4. 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 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 Download the patch tool to create your own ROM or patch an existing ROM https://github.com/Mhopkinsinc/NHL94SNESVault/releases Hex Version: 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
  5. 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: Modified Code: Change the BMI (Branch If Minus) to BRA (Branch Always) Download the patch tool to create your own ROM or patch an existing ROM https://github.com/Mhopkinsinc/NHL94SNESVault/releases Hex Version: 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
  6. 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: Hijack Instruction LDY.B and LDA.W and JSR (Jump) to the new code we wrote. Run new code that checks if the goalie is in net and if L+R are pressed for player 1 or 2. 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. https://github.com/Mhopkinsinc/NHL94SNESVault/releases nhl94.sfc Hex Version: 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.
  7. Updated with Hex values so it can be done manually.
  8. 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 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 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. 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. 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.
  9. 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 Finding RAM values like the ones used to identify how the CPU pulls the goalie. Trace Logging RAM values to see what code is being run Tools that you need SNES debug emulator MESEN2 NHL 94' rom in .sfc or .smc format
  10. 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: SNES debug emulator MESEN2 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 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 #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). #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). #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). #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.
  11. 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. 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 ROM Offset: (hex)F8668-F8669 Change: 18 00 to 3C 00 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!
  12. 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. 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. BONUS INFO: This is all setup already on the SNES GitHub repo along with other Hacks. Check it out!
  13. 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. 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.
  14. 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. 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 [2] New code to turn on Defense Control for Home and Away teams. Line 11391 [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. 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. nhl94.sfc
  15. 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: Hijack Instruction before the problem code and run new code (One_Min_Pen) 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. 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. https://github.com/Mhopkinsinc/NHL94SNESVault/releases nhl94.sfc Hex Version: 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
×
×
  • Create New...