bcrt2000 Posted February 16, 2023 Report Posted February 16, 2023 (edited) Hey all, I've created 3 new tools for NHL95 PC to extract in-game sprites, music & sounds. The sprite extractor leverages gfxpak to get the raw image data out of the PPV files before the sprites are converted to .raw (Photoshop RAW, not Camera RAW) and .bmp format. Note that the music & sound extractors are WIP and aren't perfect. Also note that these are all written in js so they should be very easy to modify & or reverse engineer for importing. Grab them here: https://github.com/abdulahmad/EA-NHL-Tools (each tool has it's own README with more info on it) Here's a sample of some of the extracted sprites: I've also created a few videos where I walk through how I figured out these file formats. It was originally intended for a fellow modder, but I feel like anyone who wants to know more about file format hacking can learn something. Here is a playlist of them: Just an FYI-- I used to be someone who modded the EA NHL PC games starting with NHL 95 and then NHL 98 all the way to NHL 06. If I recall correctly I was the first one who released modded rinks (under the pseudo name Chris and the group RTM but then later with my own name) and also figured out the Centre Ice file format. I have been sad to see threads from 2012-13 with people trying to figure out how mod NHL 95, so I figure I should publish as much as this info as possible. I am working on an Engine remake of NHL 94/95 in Unity so this is why I have been spending so much time hacking. I intend to make more tools soon-- the next one I'm looking to do is around palettes & extracting palettes from NHL 95 PC, and perhaps even 94 Genesis/SNES and have them in a format that can be applied to the extracted sprites and/or potentially even the ability to extract all the sprites with a specified palette. I also have started to create a document with information on all the file formats in NHL 95. I figure I will post that information in this thread as I spend more time on it, and also add it to EA NHL Tools github above. Edited February 16, 2023 by bcrt2000 2 1 1 Quote
sparky9 Posted February 18, 2023 Report Posted February 18, 2023 On 2/16/2023 at 1:46 AM, bcrt2000 said: Hey all, I've created 3 new tools for NHL95 PC to extract in-game sprites, music & sounds. The sprite extractor leverages gfxpak to get the raw image data out of the PPV files before the sprites are converted to .raw (Photoshop RAW, not Camera RAW) and .bmp format. Note that the music & sound extractors are WIP and aren't perfect. Also note that these are all written in js so they should be very easy to modify & or reverse engineer for importing. Grab them here: https://github.com/abdulahmad/EA-NHL-Tools (each tool has it's own README with more info on it) Here's a sample of some of the extracted sprites: I've also created a few videos where I walk through how I figured out these file formats. It was originally intended for a fellow modder, but I feel like anyone who wants to know more about file format hacking can learn something. Here is a playlist of them: Just an FYI-- I used to be someone who modded the EA NHL PC games starting with NHL 95 and then NHL 98 all the way to NHL 06. If I recall correctly I was the first one who released modded rinks (under the pseudo name Chris and the group RTM but then later with my own name) and also figured out the Centre Ice file format. I have been sad to see threads from 2012-13 with people trying to figure out how mod NHL 95, so I figure I should publish as much as this info as possible. I am working on an Engine remake of NHL 94/95 in Unity so this is why I have been spending so much time hacking. I intend to make more tools soon-- the next one I'm looking to do is around palettes & extracting palettes from NHL 95 PC, and perhaps even 94 Genesis/SNES and have them in a format that can be applied to the extracted sprites and/or potentially even the ability to extract all the sprites with a specified palette. I also have started to create a document with information on all the file formats in NHL 95. I figure I will post that information in this thread as I spend more time on it, and also add it to EA NHL Tools github above. Nhl95 PC is my favorite sports PC game.I tried mod WHA https://forum.nhl94.com/index.php?/topic/19459-wha-73-74-nhl95pc-mod/ perhaps someone even liked it. I would welcome any improvements to this great game and I'm really looking forward to it. Quote
bcrt2000 Posted February 23, 2023 Author Report Posted February 23, 2023 (edited) Finished the PAL-to-ACT tool to extract team palettes from the game so you can apply them to extracted sprites. It's available in the 0.4 WIP version. I need to update the QFS extractor so it is able to apply the correct palettes to all images extracted from the game (whereas gfxpak by default will only correctly apply a palette if the palette exists in the same QFS file) before I make 0.4 final. I may create a tool to reverse the process for 0.5 as I'm thinking about creating a team swap mod so that you'd be able to play with all 32 teams in NHL 95 PC-- albeit only 28 teams at a time in the game, and a script that you'd run at startup to choose which teams you want in the game. But at least you'd be able to play a playoffs with all of the teams you like, as well as a regular season with the 26 teams you'd like in that season. And the reason I'd want to reverse the process is that it's much easier to see how well your jersey is going to translate across all sprites if you can do it in Photoshop rather than in JED. Example of extracted palette applied to extracted sprites. Edited February 23, 2023 by bcrt2000 1 Quote
bcrt2000 Posted February 26, 2023 Author Report Posted February 26, 2023 (edited) OK will try to add all the progress I've made since last post. Finished the QFS-To-BMP converter (available on my Github). It will extract almost all the image assets from the game with correct palettes automatically applied. Just need to look into one issue with the CTLogos. Started on an NHL95 Team Swap mod. Super WIP at this point. This won't expand the game to 32 teams in the traditional way like the Genesis ROM hacks have, but it will give you the ability to start the game with 26 of the 32 NHL Teams plus 2 of the 4. Just for simplicity sake the way it will probably work is that the UI will allow you to select 6 or 7 out of the 8 teams in each division to be able to play the game with. Will let you play a playoffs with the 16 teams you want to or a season with the 26 teams you want to. So far I'm quickly prototyping jersey designs in photoshop, created a shader of sorts in Photoshop based on how EA shaded sprites originally in NHL 95 so that I can just work with flat colours and apply the shading on top. Here's an example of how it works with Minnesota plus some prototype designs for other teams: I have also created a document which explains what parts of the .EXE have to be modified to expand the game from 26 to 32 teams. Not a priority for me but a starting point for anyone else. Created a document which explains how Centre Ices work and how to modify them. Documents the .TIL, .MAP and even some locations in the .EXE where this is all configured and how it all works. This may eventually turn into a Centre Ice exporter/importer (especially as I continue on the Team Swap mod, I'd probably want to have a tool). One thing I figured out after running the completed QFS-To-BMP tools is that the palettes used to create the team palettes in HOMEPALS/AWAYPALS.bin are actually stored in the HOMEPAL3/AWAYPAL3.QFS files. Here's how some of the sprites look like with it applied: Here's a comparison between the palette which was extracted via my PAL-To-ACT tools (left) versus the palettes from the QFS (right) Also added two more videos to my NHL 95 hacking series on youtube which go over how palettes work in the game, and what my workflow looks like when working with paletted sprites. And the second video goes over the Centre Ice format The next thing for me to work on is figuring out how to pull NHL 23 ratings + official '22-23 stats and put them in a format that I can both use for my engine remake, and the team swap mod. Edited February 26, 2023 by bcrt2000 1 1 3 Quote
bcrt2000 Posted February 27, 2023 Author Report Posted February 27, 2023 Final release of v0.4 for https://github.com/abdulahmad/EA-NHL-Tools Release notes: 95 Team Swap Mod added (WIP), included prototype jerseys for NSH, CBJ, WPG, MIN, SEA, VGK, All-Star Teams Documentation on expanding NHL95 PC to 32 teams added First release of PAL-To-ACT First release of QFS-To-BMP (all images extracted with correct palettes) First release of Roster-Generator Split out SPIT-To-BMP from PPV-To-BMP Documentation on Centre Ice logos in TIL-To-BMP Added palette support to SPIT-To-BMP 2 Quote
bcrt2000 Posted March 13, 2023 Author Report Posted March 13, 2023 I do have a work in progress rink-graphics importer, that should allow you to not just import Centre Ices, but also board ads & ice ads (both at centre ice & behind the nets), and this is pretty much the biggest piece of the puzzle before I can complete the NHL 95 32-team swap mod, but also felt like I was spending a little too much time on it compared to my engine remake, so I'm putting it on pause for now so that I can get back to coding the engine remake I've been working on. I also was just really busy with work the last few weeks so haven't really worked on much of anything, Want to get my feet wet on working on the game engine again, and then maybe in 2-3 weeks I'll circle back around to the rink graphics importer when I have time. 1 Quote
Jlsegafan2001 Posted March 21, 2023 Report Posted March 21, 2023 I tried to extract MAINDESK.IFF into a WAV file, only for this error to pop up. Is there anything I can do? Quote
smozoma Posted March 21, 2023 Report Posted March 21, 2023 6 minutes ago, Jlsegafan2001 said: I tried to extract MAINDESK.IFF into a WAV file, only for this error to pop up. Is there anything I can do? Looks like an error with the tool you're using (compilation error). Not installed correctly? Missing a dependency? Run the wrong way? (it errors out on the very first character) Quote
Jlsegafan2001 Posted March 22, 2023 Report Posted March 22, 2023 5 hours ago, smozoma said: Looks like an error with the tool you're using (compilation error). Not installed correctly? Missing a dependency? Run the wrong way? (it errors out on the very first character) 1) I downloaded it from releases, so THAT can't be the problem. 2) I installed Node, which didn't do anything. 3) I followed the instructions more carefully, and this was the result: "Conversion complete!" is misleading, as no .wav file called "output.wav" exists on my computer, as you can see here: In the readme, he says this: "To generate the base code I fed ChatGPT a 1985 whitepaper by an EA Employee on the .IFF format." Using ChatGPT as a base might have been the mistake that sealed the program's fate, as AI tends to not be very intelligent at all. Quote
smozoma Posted March 22, 2023 Report Posted March 22, 2023 3 hours ago, Jlsegafan2001 said: 1) I downloaded it from releases, so THAT can't be the problem. 2) I installed Node, which didn't do anything. 3) I followed the instructions more carefully, and this was the result: "Conversion complete!" is misleading, as no .wav file called "output.wav" exists on my computer, as you can see here: In the readme, he says this: "To generate the base code I fed ChatGPT a 1985 whitepaper by an EA Employee on the .IFF format." Using ChatGPT as a base might have been the mistake that sealed the program's fate, as AI tends to not be very intelligent at all. So like I suggested, it wasn't installed correctly -- Node was missing. Also in the readme it says "This isn't perfect, doesn't work with every file. But will work with some of them at least." and discusses the known problems: "The code generated had some issues-- the header definition seemed wrong. This was a real quick & dirty tool to get out so I didn't spend enough time to understand if the documentation wasn't read properly by ChatGPT or if EA had changed the header definition by the time NHL 95 came out. Calculating the size of the destination file also seems to be incorrect. It's something I need to spend more time looking into." And without the chatGPT base, the tool might not even exist at all. Please read instructions carefully. I have had people tell me they don't help you because you are not careful enough and require too much guidance / hand-holding, and it becomes a "boy who cried wolf" situation so that when there actually IS a problem they just expect that you weren't careful so they don't bother trying to help. The people who make these tools are usually very busy, please respect their time by working more carefully. Quote
Jlsegafan2001 Posted March 22, 2023 Report Posted March 22, 2023 Here's proof that Node was installed. Alright... Quote
smozoma Posted March 22, 2023 Report Posted March 22, 2023 33 minutes ago, Jlsegafan2001 said: Here's proof that Node was installed. Alright... Maybe I misunderstood your "2)" point, it sounded like you were saying you installed node after asking for help the first time, but it didn't fix the problem ("didn't do anything"). Quote
Jlsegafan2001 Posted March 22, 2023 Report Posted March 22, 2023 Yeah, I think it was a simple misunderstanding. 1 Quote
smozoma Posted March 22, 2023 Report Posted March 22, 2023 What if you try other IFFs, do any work? The docs say that "some of them" will work Quote
Jlsegafan2001 Posted March 22, 2023 Report Posted March 22, 2023 I get very similar messages, but all that actually happens is a change in the date modified. Quote
Drezz Posted March 22, 2023 Report Posted March 22, 2023 Not all of the headers in the IFF files are the same, so the script isn't set up to read them. It's still a WIP tool. Abdul works on the tool as he works on a particular section of the game. He'll update it when it comes time to access files in that particular part of the game. Quote
bcrt2000 Posted May 3, 2023 Author Report Posted May 3, 2023 Just want to say that I’ve been extremely busy recently. Going to circle back around to this project in a few weeks. 2 Quote
bcrt2000 Posted May 12, 2025 Author Report Posted May 12, 2025 (edited) Hey folks, you may have seen that there has been some activity on my end-- released a tool to extract 92/93/94 sprites, which is in the Tools section of this forum. I was just noodling around and found the list of animation names in the PC version of NHL95. Would be useful for anyone reverse engineering 93/94 and needing to create names for the new animations added since NHL92 gready gready2 gglover gglovel gglovel2 gstickr gstickl gstackr gstackl gdive gswing gskate pflip glide skatewp skate turnl turnr stop passf passb shotf shotb glideback skateback sweepchk shoulderchkl shoulderchkr hipchkl hipchkr burst hold hold2 flail fallfwd fallback celebrate pump wallright wallleft faceoff faceoffr siren bglass stanley catch hook hook2 stumble fake flip injury1 refglide refskate refturnl refturnr refstop reffallback armupglide armupskate armupturnl armupturnr armupstop refpickup refpointgoa refdrop reffowait refrough refcharge refslash refxcheck refhook reftrip refinterfer refhold refabuseoff refbehind faceoffpoke gwallright gwallleft anthem1 anthem2 anthem3 anthem4 anthem5 drink refanthem1 refanthem2 onetimef onetimeb getcup brcup gvcup clap stansk crosscheck boardback boardfront boardright boardleft benchcheckr benchcheckl refpenshot goaliepoke goalieknee gokneehold gofallback gofallglove gofallstick fakeshotf fakeshotb fakeonetimef fakeonetimeb blockleft blockright blockfront blockknee refelbow refhistick and then there seems to be a list of AI routines (from Logic1.asm): defo defd wingd wingo centd cento score stan exben expen bench pen dopen goalie goalieget puckc nearest shoot passrec 3star r3star fowait pnorm pshad pnothing pface pface2 gamemiscon rfaceoff rnorm rcallpen rpickup rgotofo rpointgoal rgetnew anth ranth agotofo benwait initper pgivecup rpenshot apswait abreak Thank you to chaos for identifying the AI routines Edited May 12, 2025 by bcrt2000 1 Quote
bcrt2000 Posted May 12, 2025 Author Report Posted May 12, 2025 Here's another thing I've taken a look at-- the differences of animations between 92-94 Genesis and 94-95 PC: # Sprite Investigation: ## NHL 92: Sprites.anim: Frame 0-548 0-376: player sprites 377-382: arrows 383-385: star 386-396: puck 397-398: net 399-510: goalie sprites 511-534: team centre ice 535-548: goal light ## NHLPA 93: 0-369: identical player sprites as 92 370-375: new fight loss injury sprites 376-382: same as 92 370-376 383-388: arrows 389-391: star 392: new instant replay cross hair 393-403: puck 404-405: net 406-553: goalie sprites (518-553 new save/stick tap anims for 93) 554-567: goal light 568-643: new player animations for 93 (swat puck, hooking, wobble, flip, injury) 644-648: broken glass ## NHL 94 Genesis: 0-351: identical player sprites as 93 352-375: empty fighting sprites 376-382: identical player sprites as 93 383-388: arrows (identical to 93) 389-391: star (identical to 93) 392: instant replay cross hair (identical to 93) 393-403: puck (identical to 93) 404-405: net (identical to 93) 406-537: goalie sprites (identical to 93) 538-561: new goalie twitch animation (goalie animation from 93 in this spot may have been cut?) 562-575: goal light (identical to 93) 576-651: player sprites (swat puck, hooking, wobble, flip, injury) -- same as 568-643 for 93, but without blood on injury 652-656: broken glass (identical to 93) 657-712: new goalie animations (shoulder save, stick save, pokecheck) 713-836: new player animations (one-timer, check into boards) 837-844: player 3/4 arrows/star ## NHL 94 DOS: Sprites 000-875 Crowd Sprites F000-F149 0-351: identical player sprites as 93/94 352-355: arrows 356: mouse control crosshair 357-358: player accepting stanley cup 359-368: faceoff sprites (new for PC) 369-371: national anthem sprites (new for PC) 372-379: goalie/player line change (are these new?) 380-381: national anthem sprites (new for PC) 382: player on bench/penalty box 383-388: arrows (identical to 93/94) 389-391: star (identical to 93/94) 392: instant replay cross hair (identical to 93/94) 393-403: puck (identical to 93/94) 405-406: net (identical to 93/94) 407-553: goalie sprites (identical to 93) 554-567: goal light (same index as 93 but sprites look modified) 568-643: player animations (swat puck, hooking, wobble, flip, injury) -- identical to 93 644-648: broken glass (same index as 93 but sprites look modified) 649-698: referee animations (new for PC) 699-702: between play at bench animations (new for PC) 703-871: referee animations, mouse control UI (new for PC) 872-875: stanley cup skating sprites (new for PC) ## NHL 95 DOS: Sprites 000-875 are identical to 94 (not 100% verified) 876-886: player checked into bench (new for 95 PC) 887: player celebration 888-903: upright crosscheck (new for 95 PC) 904-973: checked into boards (new for 95 PC-- 94 Genesis has similar sprites but seems like these were created from scratch) 974-1071: goalie animations (new for 95 PC-- are these from SNES version?) 1072-1127: shot blocking (new for 95 PC) 1128-1133: referee animations (new for 95 PC) 1 1 Quote
bcrt2000 Posted January 6 Author Report Posted January 6 I have found the location of animations in NHL 94 & 95 for PC NHL94PC Animation data (SPAList) starts at 0x358A6 (Hockey.exe) NHL95PC Animation data (SPAList) starts at 0x110475 (Hockey.exe) The format is identical to NHL92-94 Genesis where it starts with an animation header which has offsets to each direction's animation data, which is then followed by the animation data for each direction. The only differences are: its little endian instead of big endian, so you'll need to byte swap the data for it to be readable the frame data starts at index 0 on PC instead of index 1 on Genesis I would love to build a tool that lets you view all of the animations across 92-97 Genesis, 94-95 PC and 94 SNES (just recently posted another topic on some progress on 94 sprite/frames and animation format). Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.