-
Posts
93 -
Joined
-
Last visited
-
Days Won
32
Content Type
Profiles
Forums
Events
Everything posted by McMarkis
-
Prototyping adding PC style Sprites to NHL94 on Genesis
McMarkis replied to bcrt2000's topic in Sega Hacking Projects
These look fantastic. -
How to: Add Custom Menu Items to the Game Setup Screen v1.0 (2025 04 29) 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.
-
Looks fantastic, Speed boosts are insane. Love it.
-
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. Patch: Download the patch tool to create your own ROM or patch an existing ROM.
-
- 1
-
-
Fixing the "Handedness" in the Face-Off Insets
McMarkis replied to AdamCatalyst's topic in General Questions & Discussion
I agree with Chaos, If your code is working keep that. The AI generated code is overkill and was just there as a reference as a possible way to reduce the number of TST instructions. But it can often be wrong and needs to be iterated through to get the correct answer. -
Fixing the "Handedness" in the Face-Off Insets
McMarkis replied to AdamCatalyst's topic in General Questions & Discussion
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. Hack-jack existing code Jump to new code and NOP extra instructions 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! -
Fixing the "Handedness" in the Face-Off Insets
McMarkis replied to AdamCatalyst's topic in General Questions & Discussion
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? -
Thanks @AdamCatalyst! Glad I was able to help progress your masterpiece. Love the detail you put in all your forum posts, it keeps us all motivated to help out.
-
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
I'm not sure how @chaos does it, he may have an easier way, but here is the method I use: I compile the NHL 92' source code from the github repo using the included batch file. This produces a listing file (nhl92.lst) that contains both the source code and the compiled binary (hexadecimal) values. I search the nhl92.lst file for the routine, comment or code I’m looking for—in this example, the updatescroll routine. The left-hand side of the listing file contains the offset in the nhl92.bin file along with the generated hex values (70C0) 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. I then open the nhl94.bin in HxD editor and I search for the hex value 70C0. 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. -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
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. -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
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.. -
Some really nice touches to this ROM. Love the intermission music, and the crowd colors look great.
-
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
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. @chaosThanks for the IDA comments, made it easy to map from 92' to 94' -
I love seeing all the creative ways people are enjoying your ROM @AdamCatalyst — On real hardware with CRTs, Miyoo Mini, and even the Switch! The screenshots they share make it even better. We need a compilation of all the screenshots on different devices.
- 297 replies
-
- 1
-
-
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
In your Wide Mode ROM @ Location 1601A if you modify 54 40 to 56 40, this will move the ref window to the right. 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 -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
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. 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 -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
I found it in the 92 code, I can move the whole faceoff window over. The bad news is it just adds to x, so it will always push it right. Is that what you wanted? I still have to map it to the 94 code where its happening. But progress -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
For item 2: Medium Priority. Face-Off overlay (right side) appears in the wrong spot. Could you point out where in the code you think this is happening? I can then review the '92 source code, make some adjustments, and test how they affect it, with the goal of mapping it to '94 so you can fix this. -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
Looks good, you hijack the original code, point to new code, run the original code + the hack. Looks like the hack is setting the VDP to change the screen resolution. I'm no expert either, just started picking on the gens side of things. 33FC 8C00 00C0 0004 4EF9 0001 20D6 4E75 -
NHL '94: Wide Display Mode (“widescreen”) Hack v2.0
McMarkis replied to AdamCatalyst's topic in Sega Hacking Projects
Can you help me find where the Penalty Call Sideboards view is initiated? Try location 120C8 in your Wide mode rom. I know this line of code calls the Set Horizontal method when a penalty is called. Feel free to message me on discord as well to discuss. -Mark. -
Compiling 'NHL Hockey' Source Code Happy to share that the 'NHL Hockey' (92) source code now compiles successfully. The code is available on my GitHub repository—enjoy exploring and building upon it! Community discoveries and tools are welcome and will be added to the repository for everyone’s benefit. Please feel free to share suggestions, report issues, or submit pull requests! For convenience, you can simply download the zip file and run the included build.bat file. Technical Info For those interested, below is some more detailed info on what was needed to get the code compiling. The original compiler used to build the source code was not included, so a different compiler ASM68k was used to compile the source. Each compiler is different and makes decisions / optimizations based on the opcode. IE move vs moveq vs move.l specific changes were needed. The included Macros needed to be written differently to work with this compiler. Custom Hex Macro needed to be written. Math: Power of 2 was not supported and needed to be re-written. RSSET was needed to create symbol definitions without generating data. DS. vs RS. Globals weren't needed Parent labels were needed in some instances were calculations were being performed on local labels Used the original symbols file and bin file to compare opcodes and ram locations. 99.91% match now Findings From Source TBD - Will update with info as it comes in. Such as file formats etc.
-
HOW TO: Save + Show Body Checks Per Player [SNES]
McMarkis replied to McMarkis's topic in How-To & Reference
NERD Notes: Had to steal some RAM from the Penalty Summary Ram Map. Left enough room for 20 penalties. Highest ever recorded was 14 penalties. There is a "Checks For" RAM Map of 52 bytes starting at Wram address 168E. First 26 bytes for home team, next 26 bytes for away team. Each byte is associated with the Roster Index # for the player. IE: If Chicago was the home team; 168E = Belfour, 168F = Waite, 1690 = Roenick... If Pittsburgh was the away team. 16A8 = Barrasso 16A9 = Wregget 16AA = Lemieux. There is a "Checks Against" RAM Map of 52 bytes starting at Wram address 16C2. First 26 bytes for home team, next 26 bytes for away team. Each byte is associated with the Roster Index # for the player. IE: If Chicago was the home team; 16C2 = Belfour, 16C3= Waite, 16C4 = Roenick... If Pittsburgh was the away team. 16DC= Barrasso 16DD = Wregget 16DE = Lemieux. {$13c3+[$95]} = Jersey# of Player doing the hit {$12a3+[$95]} = Player Roster Index -1 of player doing the hit [0 based that's why] {$13c3+[$91]} = Jersey# of Player being hit {$12a3+[$91]} = Player Roster Index -1 of player being hit [0 based that's why] Detailed info can be found in Dev Notes RetroArch SAVE STATE Info: offset = 65430 decimal for RetroArch 1.17 Snes 9x ================================= // Home Player Stats // Checks fseek($fr, 8864 + $offset + $i); $Chksfor = hexdec(bin2hex(fread($fr, 1))); fseek($fr, 8916+ $offset + $i); 8854 $ChksA = hexdec(bin2hex(fread($fr, 1))); ================================= // Away Player Stats //Checks fseek ($fr,8890+ $offset + $i); 8828 $Chksfor = hexdec(bin2hex(fread($fr, 1))); fseek ($fr,8942+ $offset + $i); $ChksA = hexdec(bin2hex(fread($fr, 1))); -
Problem: GENS was tracking Body Checks per player in the game as a hidden stat, while the SNES version was not. We would like to record Checks For and Against in the SNES version as a stat so it can be extracted from the save state and used on the website. Technical Details: When a Body Check is recorded in the game, also record who performed the check and the player that was checked, similar to the other Player Stats (G, A, Sh) This can now be extracted from the save state with all the other stats. Plus you can also choose to show the Checks For, in the Player Stats Screen. Patch: Download the patch tool to patch an existing ROM, or create a new one. Hex Version: Replace old hex values with new hex values. (Just use the patch tool, its easier)
-
HOW TO: Fix Missing Extra Attacker Bug [SNES]
McMarkis replied to McMarkis's topic in How-To & Reference
Just released it, I really want to start up the Pond Hockey 3v3 proper with 1 Defense and 2 Forwards. This allows us to do that now. -
Have you ever wanted to put Ray Bourque as a forward? This hack enables the option in Edit Lines to assign forwards and defensemen to any position Technical Details: The SNES code was performing very specific checks to prevent Forwards and Defense from swapping positions. I wrote new code that displays all forwards and defense in Edit Lines. I combined this code with the Missing Extra Attacker Bug Fix, to allow the swapping of forwards and defense. Patch: Download the patch tool to patch an existing ROM, or create a new one. Hex Version: 1) Replace old hex values with new hex values. (Just use the patch tool, its easier) =========================== Headerless ROM (.SFC) =========================== ROM Offsets: (hex) D8C96 Old: C9 01 00 New: 20 78 CE ROM Offsets: (hex) D8E1A Old: 10 21 22 00 93 9B New: EA EA EA 4C BA CE ROM Offsets: (hex) DCE78 Old: FF New: 48 A5 A5 18 6D 9F 1D 85 95 AE 9F 1D E8 A5 95 20 72 8D CF 8F 1D 9F F0 07 C6 95 CA D0 F0 80 1E CA A5 A5 18 6D 9F 1D ED 8B 1D 85 95 20 72 8D 48 A5 A5 86 AF 18 6D AF 00 85 95 68 20 7C 8D 68 C9 01 00 60 22 00 93 9B 8D A3 1D 22 00 D3 9E A5 A5 8D AB 1D 22 DC 92 9B 18 6D A3 1D 8D A3 1D AD AB 1D 4C 3B 8E =========================== Headered ROM (.SMC) =========================== ROM Offsets: (hex) D8E96 Old: C9 01 00 New: 20 78 CE ROM Offsets: (hex) D901A Old: 10 21 22 00 93 9B New: EA EA EA 4C BA CE ROM Offsets: (hex) DD078 Old: FF New: 48 A5 A5 18 6D 9F 1D 85 95 AE 9F 1D E8 A5 95 20 72 8D CF 8F 1D 9F F0 07 C6 95 CA D0 F0 80 1E CA A5 A5 18 6D 9F 1D ED 8B 1D 85 95 20 72 8D 48 A5 A5 86 AF 18 6D AF 00 85 95 68 20 7C 8D 68 C9 01 00 60 22 00 93 9B 8D A3 1D 22 00 D3 9E A5 A5 8D AB 1D 22 DC 92 9B 18 6D A3 1D 8D A3 1D AD AB 1D 4C 3B 8E
- 1 reply
-
- 1
-