Jump to content
NHL'94 Forums

TOOL: NHL 92 Sprite Extractor (ANIM To BMP)-- NEW 93/94 Sprite Extractor released


Recommended Posts

Posted (edited)

Hey folks. I just released a tool which allows the extracting of .ANIM sprite files (which are included in the source code for NHL92 and also embedded into the ROM-- for convenience they are in the repo). The Readme.md also includes a detailed description of the file format.

You can use the default Palette that is embedded in the .ANIM file, or pass in a custom team's palette (also included in the repo for convenience).

https://github.com/abdulahmad/EA-NHL-Tools/tree/main/ANIM-To-BMP

 

Special thanks to @chaos & @McMarkis on collaborating to figure out the file format. We've been looking at these in an effort to understand the NHL94 animation format better so that chaos can add the fighting sprites to his fighting mod for NHL 94.

image.png

image.pngimage.pngimage.png

 

Now I'm going to see if I can get this going for NHL93 & 94 sprites.

Edited by bcrt2000
  • Wow 1
Posted

Holy frack!!!! This is amazing! I would love to know more about the underlying logic, if you were willing to share.

Posted
1 hour ago, AdamCatalyst said:

Holy frack!!!! This is amazing! I would love to know more about the underlying logic, if you were willing to share.

I will see if I get time. I’m so jazzed about figuring out 93/94 that it’s hard to stop. Did you read the readme.md in the repo? It has the full detailed description of the data structure.

also, hot tip— you can copy and paste the code from animToBmp.js into something like Grok and ask it to explain the code to you… I extensively used grok to read the NHL92 source code and figure out the finer details of the file format

Posted

No no, haven't downloaded. If there is an MD, that will probably be enough. Thanks! Been using Claude myself, want to try the latest Grok and Gemini. Thanks again for this.

  • Like 1
Posted
On 5/9/2025 at 9:41 AM, AdamCatalyst said:

Holy frack!!!! This is amazing! I would love to know more about the underlying logic, if you were willing to share.

I plan to write a post this week describing exactly what's going on.

The gist:

Each "action" is an animation. These animations are based on an action the player is doing (i.e. shooting, skating, skating with puck, checking, etc). There is a list of each frame in the animation and a timer based on how long to display that frame. This is also based on direction the player is facing (i.e. different animation frames if they are skating up compared to skating to the right).

Each frame has data associated with it. This data includes the "hot spot" X and Y (center of the hit box), and the number of sprites in the frame.

Each sprite will have their own data, which provides the tile size (1x1, 2x4, etc), the offset of the sprite from the player's XY position on the ice (used for aligning the sprites together), the offset to the tile used for the sprite, and information regarding the palette and H/V flip priority. This is the same as what you found for your crowd animation sprites.

The layout of all this data in 92 is a bit different than 94. But both 93 and 94 use the same format. We've figured out both sets.

 

  • Like 1
  • bcrt2000 changed the title to TOOL: NHL 92 Sprite Extractor (ANIM To BMP)-- NEW 93/94 Sprite Extractor released
Posted (edited)

93/94 Extractor has been released: https://github.com/abdulahmad/EA-NHL-Tools/tree/main/ANIM94-To-BMP

Thank you to @chaos & @McMarkis for helping make this happen.

NHLPA93 Sprites example:

image.png

image.png

NHL 94 sprites example:

image.png

image.png

 

I haven't added the 93/94 palettes to the repo. When I get some time I'll do that. It still has the 92 palettes for convenience though.

One thing I should note is that unlike '92, the default .anim palette doesn't seem to work with all of the sprites-- as you can see for example, blood is not coloured correctly with the '93 sprites. And if you don't pass in a custom palette for 93/94, the player sprites have kind of wild colors (although it's possible it was the palette that was used for player sprite creation).

Edited by bcrt2000
  • Thanks 1
  • Wow 1
Posted (edited)

A few notes I wanted to add, mainly because I’ve been having so much fun getting back into hacking/reverse engineering the games, and have been thinking about this stuff a lot.

 

1. I think I will update the exporter at some point to use the correct palette for blood and other non-player sprites. Again, I think the palette that they used in the .anim file is invalid, so it’s kind of a hack

2. I eventually will revise the export tool to generate a reversible export, and also create an import tool, and also create an NHL92 -> 93/94 anim converter and 93/94 -> 92 anim converter

3. But first I am looking into creating a buildable disassembly of 93/94. I think that’s where I want things to be— I don’t want to have to deal with manually adjusting addresses in roms when adding new sprites/tiles. You should just be able to drop in new sprites and build. And the baby steps of this are me just getting better at the process of working with disassembly tools and doing something a little easier— making the NHL92 source code bitwise perfect with the retail version. I’ve made good progress so far. I’m hoping can get it done by this weekend.

4. I also want to get 92 to the point where it’s fully ripped apart— I want to disassemble hockey.snd & ealogo.bin, figure out the fm/sfx formats. And then also maybe build .map/jim export/import tools along side the .anim export/import. Then theoretically you could go from full source code + raw image/sound assets to a built rom.

 

5a. I’ve started to get ideas on how to improve jerseys on Genesis and get them to look as good as the PC version (or better). I have a couple of ideas. The more basic one is just adding the crest as an additional sprite to each player “frame”. We would just need some logic which could select the right tile based on the team when the code is grabbing tile data.
 

5b. The more advanced ideas for improved jerseys involve rendering the 256 color pc sprites either into 16 color set templates or 16 color team jersey sets. The latter idea would be huge size wise and likely would require bank switching. Maybe we could save space in either case by excluding tiles that are identical across template sets/jersey sets.

Edited by bcrt2000
  • Love 1
  • Thanks 1
Posted

@bcrt2000 Re: #5. Another thing you may want to consider, is that the game uses the same Sprites for all teams, which requires many inauthentic compromises where two elements have to share the same colour, even if in real life they are coloured differently. If the game was able to choose from multiple different sprite sets, it could look much more authentic. This wouldn't even require any new drawing, just different sprite sets where the colours have been applied differently to the uniforms. If you did this in '94, I could help a bit, as I have a few different uniform options already done.

Re: #2. I will wait with the anticipation at the idea of being able to export, revise, and re-import into '94.

I'm so glad you are doing this!

  • Love 1
Posted (edited)
37 minutes ago, AdamCatalyst said:

@bcrt2000 Re: #5. Another thing you may want to consider, is that the game uses the same Sprites for all teams, which requires many inauthentic compromises where two elements have to share the same colour, even if in real life they are coloured differently. If the game was able to choose from multiple different sprite sets, it could look much more authentic. This wouldn't even require any new drawing, just different sprite sets where the colours have been applied differently to the uniforms. If you did this in '94, I could help a bit, as I have a few different uniform options already done.

Re: #2. I will wait with the anticipation at the idea of being able to export, revise, and re-import into '94.

I'm so glad you are doing this!

Yeah on #5– totally with you there. I actually edited my post and gave more details on what I was thinking, and that’s one of my ideas. Either render out multiple jersey templates that can be more accurate, or go all the way and just literally render out a sprite set per jersey (which is insane from the space side of things but I have a couple of ideas in my head to achieve said space— either bank switching or sega cd storage/program Ram— or a combination of both).

The ultimate idea in my head is taking the pc sprites and expanding the color zones to be per pixel… so that you can essentially use textures at that point to create a fully accurate jersey (or render out any sort of template you want), no compromises. Could also be expanded for proper gloves, goalie masks, pads, etc. Would be pretty intense to touch up every sprite to this level though.

Edited by bcrt2000
  • Thanks 1
Posted (edited)

Here is the repo: https://github.com/abdulahmad/EA-NHL-Tools

I have been linking to subfolders with the specific tools which is why they don’t have the code checkout prompt.

I need to do a round of cleanups to the documentation, and do a proper new release. Coming shortly. At the same time, haven’t wanted to stop my momentum. The partially developed JIM tools are there— extracting and rebuilding the JIM works perfectly, but the tool which color reduces an image and outputs something that can be imported into a Jim file is not done yet. And there is no documentation yet (other than what the CLI will tell you).

That, and I need to do a release of the cleaned up NHL92 source with options to build the retail or rev a build. Once I finish fixing the Jim tool bug I’ll release all this and put up some posts.

And then next on my list:

- SND extractor/builder

- ANIM importer

- start of 93/94 buildable disassembly

Edited by bcrt2000
  • Thanks 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...