Jump to content
NHL'94 Forums

McMarkis

Members
  • Posts

    100
  • Joined

  • Last visited

  • Days Won

    34

Posts posted by McMarkis

  1. On 3/27/2026 at 10:18 PM, von Ozbourne said:

    There wouldn't happen to be an easy way to expand that highlight area to the full width again in the case where you are using this mod for something other than having a mini logo on the side is there?

    New Banner test.png

     

    Hey @von Ozbourne

    Yeah, I actually hijacked the original routine there so the flashing palette doesn’t hit the logo part of the banner.

    If you want the full-width highlight back, you can just revert that change and restore the original function.

    At ROM offset 0x17652, change:

    4E F9 00 20 01 80 => (This may be slightly different depending on the size of your rom)

    to:

    48 E7 FF F0 30 7C

    That should bring it back to the original behaviour :) 

    -Mark.

  2. Hey @von Ozbourne

    What you’re seeing is actually related to the ROM size impacting the SRAM routines.

    Once the ROM grows past a certain size, it starts to conflict with the SRAM handling code used for things like User Records, Player Cards, and Continue Playoffs. 

    Chaos put together a proper fix for this (included in his fighting ROM), which relocates/adjusts the SRAM handling so it continues to work even with the larger ROM sizes.

    I’ve updated the patching tool so that when the 30/32 team option is selected, it also applies the SRAM fix automatically.
    image.png

    I gave it a quick test on Adam's 32 team ROM and it resolved the player names not showing during the roll call. All other features were working as well.

    You can try re-patching the ROMs you mentioned using the updated tool, this should fix the issues you mentioned.

  3. On 3/15/2026 at 10:51 PM, von Ozbourne said:

    Although all of my ROMs have @Drezz's modified menu background now, so that's going to complicate things for the time being.

    Lol. I really just wanted the Mini Logos during game play, but the banners just looked so retro.

    The issue is that there are simply too many tiles to fit in VDP RAM when a custom background is used along with all of the banners.

    Good news is, I noticed that in the 30/32-team ROMs they only load the home and away banners into the top portion of VDP memory. I might take a look at what changes were made in those ROMs and try loading only the selected teams’ banners into that same area. If that works, it should free up enough space to make everything fit.

    image.pngimage.png

     

     

  4. NHL '94: Mini Logos + Banners 


    v1.1 - Released 2026-03-22
    image.png

    I’ve been working on a patch that brings the classic NHL Hockey ’92 Mini Logos and Banners back to NHL ’94.

    To make things easier for everyone, I also built a browser-based patcher that lets you apply the Mini Logos and/or Banners to any ROM, no batch files, installs, or setup needed.

    The web app includes instructions and a quick tutorial.

    Feedback, suggestions, or bug reports are all welcome!

    Web App Link: https://mhopkinsinc.github.io/MiniLogos/


    Features:

    • Default 28 team support for Mini Logos + Banners.
    • Works with Widescreen Mode ROMs.
    • Tested on the NHL '94 Base ROM and Fighting ROM.
    • Support for 30/32 team ROMs (You may have to edit your own logos and banners).
    • Export and Import functionality for modifying your own Mini Logos + Banners.

    image.png

     


    Default Mini Logos + Banners:

    For the default version, I created a banner set that closely matches the originals, with minor adjustments to fit the text, match the background colors, and accommodate the additional teams introduced in ’94.


    image.png

    image.png

     


    DREZZ Styled Mini Logos + Banners:

    A huge shout-out to @Drezz for designing some amazing custom Mini Logos & Banners for the 28/30/32 team ROMs.

    The 28/32 team versions are included in the Tile Editor section of the app by selecting the "Drezz" style variant.

    image.png

    image.png

     


    Known Issues:

    1. Any custom ROM that has modified the background on the Team selection screen causes tile corruption.
      For now you will need to disable the "Team Select Banners" until this is resolved.

      image.png
       
    2. Some custom ROMs also modify the default palette, which may cause color corruption.
      In those cases, you may need to create your own custom Mini Logos and Banners with custom palette for those ROMs.

    All builds were tested with the Genesis Plus GX emulator.

    If you experience any technical issues, you may want to try running the ROM in that emulator.

    If you report a problem, please include:

    • The exact emulator version or console you’re using.
    • The ROM you were trying to patch.
    • The patching features you selected.
    • Any custom .aseprite files you used.
       

    Technical Notes:

    Currently, the new code and tiles are inserted at the end of the ROM.

    If this conflicts with your ROM layout or you need the data placed elsewhere, leave a comment. I can likely extend the tool to allow you to specify the starting ROM address for the inserted data/tiles.

    I provide this patch (along with several other NHL '94 patches) in my GitHub repository, if you'd like to review the code or apply the patch using a simple batch file with no UI.

    -Mark

    • Love 3
  5. On 2/5/2026 at 8:18 PM, Brodeur30 said:

     I would be very interested to hear more about what inspired you to create this patching engine and specifically to implement a Fake Shot. Well done, it is very rewarding to do Fake Shots in-game, and I would be very interested to make other kinds of adjustments to the control scheme.

    Hey @Brodeur30,

    Thanks for the kind words! The idea for the patching engine grew out of some earlier work I was doing on the SNES NHL ’94 disassembly using DiztinGUIsh and ASAR, which lets you modify assembly and rebuild the ROM.

    Then in 2024 when the NHL Hockey (’92) source code surfaced, I spent some time figuring out how to compile it with the SN 68k Genesis compiler so we could better understand how the original game worked.

    While making a few NHL ’94 Genesis mods, I noticed most patches were still being shared as raw hex edits. Around the same time Chaos was disassembling the 94' ROM in IDA Pro, which made me think it would be much easier if we could apply patches directly in assembly instead of hex. The patching engine grew out of that idea, and I first used it for things like the Fake Shot, menu tweaks, and then to help with Chaos’ fighting patch.

    The Fake Shot came from an idea someone posted in the discord, I first tired it in the NHL 92 Source code and then ported it over to 94.

    Anyway, that’s the long answer to a short question and probably more than anyone ever wanted to know about how a fake shot ended up in a 30-year-old hockey game 😄

    • Thanks 1
  6. How to: Add Custom Menu Items to the Game Setup Screen

    v1.0 (2025 04 29)


     image.gif
     

    Info:


    I've put together a GitHub repo showing how to add custom menu items to the game setup screen in NHL '94. Using this method, I’ve created five example patches, all included in the repo.

    • Fake Shot (New functionality)
    • Weight Bug (Chaos 120 decimal patch)
    • 5 Minutes, 99 Min OT to Period Lengths
    • Fighting - (Coming Soon)
    • Multi Menu, with everything combined

    You’ll also find a master "multi menu" example that demonstrates how to combine multiple patches into a single ROM. This approach works with custom ROMs too—you'll just need to update the insertion RAM address to match your rom.

    This is more of an advanced level patch geared towards ROM modders. It allows you to edit the source code of these patches to change the behavior as well. Any questions please drop in the forum and we will keep this updated and make improvements over time. We can probably wrap a User Interface tool around these patches in the future, but I wanted to get it out now so people could start using it, and provide feedback.

    Patch:


    I recommend visiting the GitHub repository and checking out the README. It provides details on all the patches I've created using this method.

    Here is the direct link to download the zip package containing all the examples. Each folder in the zip package has a README.md file with instructions.
     

    Version Notes


    • v1.0 Initial Release.

    Known Issues


    • In Demo Mode, Goalie Control + User Record options are editable, but should not be.
    • Love 6
    • Like 4
  7. Problem:
    There is a bug in the SNES code responsible for calculating the Hot/Cold Bonus for every player attribute (Speed, Agility, etc.). The details can be found here.
    TLDR; As a result, no attribute receives a negative bonus; instead, the attribute is consistently given the maximum boost (100) if the bonus was negative.

    Solution:
    This patch will show the true attribute value (100) in Edit Lines when the bug happens.
    image.png

    Patch:

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

     

    • Love 1
  8. I believe @chaos dreams in m68k assembly now, so I would defer to him about assembly sins 😁. Below are a few of my thoughts.
    I converted you HEX values to assembly code, and made the smallest of changes for the branching.

    I personally like JSR.L so i can just do RTS commands to return back to the original code. I haven't tested this, but your pattern seems good.

    1. Hack-jack existing code
    2. Jump to new code and NOP extra instructions
    3. Perform New code and return on exit.
    ;Hijack Old code and call to new code
        JSR.L   $0007FEDC           ; Call new subroutine (long)
        NOP                  	; No operation
        NOP                  	; No operation
        
    ;Start of Your new subroutine @7FEDC    
        BTST.B  #7,$0062(A3)        ; Test bit 7 (bottom)
        BEQ.S   .bottom             ; If bottom, branch (short)
        
        TST.B   $0074(A3)           ; Test if hand = RIGHT
        BEQ.S   .exit               ; If RIGHT, exit (short)
        BRA.S   .add3               ; Not RIGHT, do add3 (short)
    
    .bottom:
        TST.B   $0074(A3)           ; Test if hand = RIGHT
        BNE.S   .exit               ; If LEFT, exit (short)
    
    .add3:
        ADDQ.W  #3,D0               ; Add 3 to D0
    
    .exit:
        RTS                         ; Return from subroutine    

    AI Suggestions:

    My gut was telling me that you can probably simplify the multiple BTST & TST scenarios with some combo statement. So I asked Claude AI to help, and it suggested the following.

    Break down the problem into a matrix like (Truth) table to help understand the possible combinations.

    • You want to add 3 when the player is Left handed and top position?
    • You want to add 3 when the player is Right handed and bottom position?
    Position(bit7) Hand      EOR Result    BTST #7   Add 3?
    TOP(0)         RIGHT(0)     0            0        No
    TOP(0)         LEFT(1)      1            1        Yes    <-- Add 3
    BOTTOM(1)      RIGHT(0)     1            1        Yes    <-- Add 3
    BOTTOM(1)      LEFT(1)      0            0        No

    Something like this now possibly, I haven't tested this code.

    JSR.L   $0007FEDC           ; Call subroutine (long)
        NOP                         ; Padding/placeholder
        NOP                         ; Padding/placeholder
    
    ;Start of Your new subroutine @7FEDC    
        MOVE.W  D1,-(SP)            ; Save original D1 value since we are overwriting it
        MOVE.B  $0074(A3),D1        ; Get hand orientation
        EOR.B   $0062(A3),D1        ; XOR with position
        BTST    #7,D1               ; Test result
        BNE.S   .add3              ; If NOT equal, add3
        BRA.S   .exit              ; Otherwise exit
    
    .add3:
        ADDQ.W  #3,D0               ; Add 3 to D0
    
    .exit:
        MOVE.W  (SP)+,D1            ; Restore D1
        RTS

    I know this is a bit of a brain dump—I went full over-explainer mode here. If anything’s unclear, just holler, and I’ll happily clarify. Honestly, though, I’m being a bit selfish because it’d be amazing to rope in another brave soul into the wonderful, weird world of assembly. Welcome to the dark side—we have opcodes!

    • Thanks 1
    • Haha 1
  9. LOL, @AdamCatalyst, diving into source code assembly and the listing file? You're leveling up fast! I wouldn't be surprised if you're rewriting this entire game next.

    Just to clarify, this is what I am seeing when I test with Montreal (Home), LA (Away) 1st period.

    • 1st image is Muller (Lefty) Home team (Bottom).
    • 2nd image is Bellows (Righty) Home team (Bottom).
    • 3rd image is Gretzky (Lefty) Away Team (Top)
    • 4th image is Carson (Righty) Away Team (Top)

    Your saying the stance is wrong?

    • When your a lefty like muller in image 1, it should actually be the 2nd image? where your left hand is on the lower portion of the stick.
    • You can't find the code that controls this?


    image.pngimage.pngimage.pngimage.png

  10. 1 hour ago, AdamCatalyst said:

    Thank-you for this! Turns out I am jumping at shadows. That controls the X-Position of the background, which I had already identified. I just had no way of knowing where the source code corresponded to compiled code! How would I go about trying to go from instructions in the source to compiled code in the ROM?

    I'm not sure how @chaos does it, he may have an easier way, but here is the method I use:

    1. I compile the NHL 92' source code from the github repo using the included batch file.
    2. This produces a listing file (nhl92.lst) that contains both the source code and the compiled binary (hexadecimal) values.
    3. I search the nhl92.lst file for the routine, comment or code I’m looking for—in this example, the updatescroll routine.
    4. The left-hand side of the listing file contains the offset in the nhl92.bin file along with the generated hex values (70C0)
      1. For instance, 0000C2D2 is the ROM location of the instruction in the nhl92.bin file, and 70C0 is the binary (hex) value generated by the moveq #-192+128,d0 instruction.
    5. I then open the nhl94.bin in HxD editor and I search for the hex value 70C0.
      1. In this case, the code was found at offset 15F3E (second screenshot)

    Additionally, @chaos has shared a decompiled version of NHL '94 with me, which includes many comments copied over from the NHL '92 source code. This is incredibly helpful because it makes the instructions easier to read and provides useful context with comments.
    image.png


    image.png

     

    • Thanks 1
  11. 2 hours ago, chaos said:

    This subroutine starts at 15F34.

    15F3E is the moveq -64, d0.

    You can try changing 15F3E from 70 C0 to 70 E0 and see if that works. Or change it to 70 FE (that's 32 pixels in each direction)

     

    You da man, Looks like Adam already changed it from 70 C0 to 70 E0 in his ROM. 
    Must be a different scroll happening when in Horizontal mode for the penalty box.
    I'm still convinced it has something to do with the Skateto Routine.

    • Like 1
  12. Hey @AdamCatalyst,

    I did a quick search for the UpdateScroll routine in the 94' code but I haven't had much luck locating it.

    However I noticed the X and Y coordinates that the player should skate to are set before calling the Skateto routine. I would assume somewhere the origin would be referenced and the X,Y offset would be added to that.

    I will keep digging around, and let you know if I find anything..

    image.png

    • Thanks 1
  13. Hey @AdamCatalyst Base 94 Rom: The '94 code is slightly different than '92, but I gave it a quick test for the home team in 94' and it works.

    Location 0xC918
    Original 70 0B 
    • Try changing 0B to a lower number to move the home players X position to the left.
    • The code further down just takes this value from d0 and makes it negative for the away team.
    • This automatically adjust the away player by the same amount without any further changes. (Confirmed)

    Let me know if it works.

    image.png

    @chaosThanks for the IDA comments, made it easy to map from 92' to 94':)

  14. image.png

    • In your Wide Mode ROM @ Location 1601A if you modify 54 40 to 56 40, this will move the ref window to the right.
      • image.png
    • The original 68k instruction is adding decimal value 2 to the D0 register. So changing the 54 to 56 adds #3 to D0 etc.
      • add    #2,d0
    • I think the text overlay may be a little more tricky. Still looking into that.
    • For reference, if anyone else comes across this, the routine is located in the 92 source code under showref, which is part of video.asm @chaos
  15. In your Wide Mode ROM at location FB5E, the instruction currently sets the X position for when the faceoff window is on the left side.

    • The current calculation is #8 + 46, d0 (Left side). By changing 70 36 to 70 40, it modifies the calculation to #8 + 46 + 10, which moves the window 10 units to the right.

    Similarly, at location FB68, the X position is set for when the faceoff window is on the right side.

    • The current calculation is #(18 * 8 ) + 46, d0 (Right side). Changing 303C 00BE to 303C 00B4 adjusts the calculation to #(18 * 8 ) + 46 - 10, shifting the window 10 units to the left.

    That should allow you to move the window around anywhere you want in any direction.

    • image.png
       

    For reference, if anyone else comes across this, the routine is located in the 92 source code under puckfaceoff2, which is part of logic.asm

    image.png

    • Like 1
    • Wow 1
×
×
  • Create New...