Jump to content
NHL'94 Forums

TOOL: Hack Applicator (AKA smozROM)


smozoma

Recommended Posts

Here's a program that let's you apply a whole tonne of hacks to your ROMs!

smozROMv100.zip - Windows (executable)

smozROM.py - Linux, Mac (python 3 source code, depends on other files in the zip above)

To use the program, simply drag-and-drop a ROM file onto smozROM.exe (after unzipping the zip file, of course) or smozROM.py.

You'll be asked what hacks to apply (and forced to use the 2nd-assist bug and plus-minus hacks.. nyah), and then asked to name the new ROM file.

If it doesn't work, try installing these and retrying it:

vc 2008 redist sp1

vc 2010 redist

v1.0 (Sept 2, 2010)

Features:

- Weight bug fix
- 0-15 player ratings
- Bodycheck statistics
- Plus-minus (+/-) statistic *see below for how to extract stat
- Base player weight modification for different years
- Improved Three Stars rating formula
- Edit Lines ratings consistency fixes
- Checksum removal

v1.0.1 (Oct 15, 2018) - smozROM.py updated only

Changes: 

- Update code to work on Linux and Mac

--

It also includes an update for NOSE so that NOSE can read the ROMs with the 0-15 ratings and base weight modification ratings. Read "NOSE Update.html" in the zip package.

Tell me if there are any problems.. program crashes, ROM doesn't feel right, etc.

* How to extract the +/- stat

  • Like 1
Link to comment
Share on other sites

pretty damned cool. oh, how I wish SNES was your preferred system...

edit: this may have to do with the fact that I don't know what I'm doing when it comes to Genesis stuff, or it may be that I am running DarWine on a Mac to use this, or it may be that I need to seek out these specific files listed (if so, why not include them?), but, regardless, I'd like some guidance before I make things worse. thanks for your time.

fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.CRT" (9.0.21022.8)

fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.CRT" (9.0.21022.8)

err:module:import_dll Library MSVCR90.dll (which is needed by L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\python31.dll") not found

err:module:import_dll Library python31.dll (which is needed by L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\smozROM.exe") not found

err:module:import_dll Library msvcr90.dll (which is needed by L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\smozROM.exe") not found

err:module:LdrInitializeThunk Main exe initialization for L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\smozROM.exe" failed, status c0000135

Edited by trudatman
Link to comment
Share on other sites

pretty damned cool. oh, how I wish SNES was your preferred system...

edit: this may have to do with the fact that I don't know what I'm doing when it comes to Genesis stuff, or it may be that I am running DarWine on a Mac to use this, or it may be that I need to seek out these specific files listed (if so, why not include them?), but, regardless, I'd like some guidance before I make things worse. thanks for your time.

fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.CRT" (9.0.21022.8)

fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.CRT" (9.0.21022.8)

err:module:import_dll Library MSVCR90.dll (which is needed by L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\python31.dll") not found

err:module:import_dll Library python31.dll (which is needed by L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\smozROM.exe") not found

err:module:import_dll Library msvcr90.dll (which is needed by L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\smozROM.exe") not found

err:module:LdrInitializeThunk Main exe initialization for L"Z:\\Users\\tru\\Desktop\\games\\Fusion363i(2)\\smozROMv100\\smozROM.exe" failed, status c0000135

Might be a darwine problem.. Windows has those missing files by default I think (at least, no one else has had an issue so far?).

Here are the extra files you need. I think you just need to put the files into the smozROM directory.

Microsoft.VC90.CRT.zip

If any windows guys report a similar problem, I'll include them in the main package.

Link to comment
Share on other sites

DAMN IT! the .exe is not something I can drag other files onto, nor can I rightclick the file and force it to open it with that .exe, because it needs to run through DarWine. AARGH! thanks, though.

Link to comment
Share on other sites

DAMN IT! the .exe is not something I can drag other files onto, nor can I rightclick the file and force it to open it with that .exe, because it needs to run through DarWine. AARGH! thanks, though.

can you get command line functionality in the folder? (like terminal...)

the command is >smozROM.exe romname.bin

Link to comment
Share on other sites

I have no clue what that means.

Link to comment
Share on other sites

- 0-15 player ratings

- Base player weight modification for different years

- Improved Three Stars rating formula

- Edit Lines ratings consistency fixes

- Checksum removal

hoping you could explain those parts a bit, especially the 0-15 thing (what was it before?). does checksum removal fix the checksum or delete it, and if it deletes it, why is that better? thanks.

Link to comment
Share on other sites

hoping you could explain those parts a bit, especially the 0-15 thing (what was it before?). does checksum removal fix the checksum or delete it, and if it deletes it, why is that better? thanks.

- 0-15 player ratings

The original game rates player attributes on a 0-6 scale. To translate to a 0-99 scale, it multiplies the ratings by 18, then adds a random value from -9 to +8. (with a few special cases..)

I hacked it so you can rate players on a scale from 0-15, so you can rates guys more accurately.

- Base player weight modification for different years

The original game rates players' weight from 0-15, then calculates their weight in pounds as 140+8*Wgt. But if you go back to the 1970s or earlier, guys weighed so much less than they do now, so if you make a ROM for way back when, guys are all rated really low in weight, so they move too quickly and there isn't variety. This hack changes the 140 to a different value that matches the usual weights of the era. I calculated correct values back to 1917, so if you want to create a ROM from back then.. guys won't all be 0-3 in weight : ).

- Improved Three Stars rating formula

It used to rate guys like this:

goal: 11000 star points, assist: 10100, shutout: 75000 points, sv%:95%: 23000 pts, shot:10 (or 1000 if the game is tied). Not very exciting.

I made it:

goal: 11000, assist: 7000, shot: 500, check: 500, goal against goalie: -11000, shot against: 4000, shutout: 22000

(or something like that)

It gives more interesting 3 stars.

- Edit Lines ratings consistency fixes

gone over this many times for you already.

The Edit Lines ratings are inaccurate. I made a bunch of different hacks for fixing it (disabling the random bonus, or making them match)

- Checksum removal

The checksum is different from SNES where you're supposed to have one. On the Genesis, you don't need one. But for some reason, the programmers at EA decided to program one right into the game... and if the checksum is wrong, the game won't run (you'll just get a blank screen). So this removes the checksum calculating code.

Link to comment
Share on other sites

- 0-15 player ratings

The original game rates player attributes on a 0-6 scale. To translate to a 0-99 scale, it multiplies the ratings by 18, then adds a random value from -9 to +8. (with a few special cases..)

I hacked it so you can rate players on a scale from 0-15, so you can rates guys more accurately.

ah, nice action.

- Base player weight modification for different years

The original game rates players' weight from 0-15, then calculates their weight in pounds as 140+8*Wgt. But if you go back to the 1970s or earlier, guys weighed so much less than they do now, so if you make a ROM for way back when, guys are all rated really low in weight, so they move too quickly and there isn't variety. This hack changes the 140 to a different value that matches the usual weights of the era. I calculated correct values back to 1917, so if you want to create a ROM from back then.. guys won't all be 0-3 in weight : ).

wow... all the way back to 1917! averages based on decades? I guess I'll see if/when I get this thing running.
- Improved Three Stars rating formula

It used to rate guys like this:

goal: 11000 star points, assist: 10100, shutout: 75000 points, sv%:95%: 23000 pts, shot:10 (or 1000 if the game is tied). Not very exciting.

I made it:

goal: 11000, assist: 7000, shot: 500, check: 500, goal against goalie: -11000, shot against: 4000, shutout: 22000

(or something like that)

It gives more interesting 3 stars.

hmm... I never had many problems with the way the stars were calculated (assuming the SNES calculations are similar, which reads as about right), but I certainly understand the draw to tinkering with it (read: anything). do you feel like you have it nailed or is there anything you would/do consider adjusting?

- Edit Lines ratings consistency fixes

gone over this many times for you already.

The Edit Lines ratings are inaccurate. I made a bunch of different hacks for fixing it (disabling the random bonus, or making them match)

gotcha. I guess I thought this was something else. I hope you know that I very much appreciate the help you continue to provide. this place is full of smart and helpful folks. you are a resource and a friend... if you accept friends from the other side of the console aisle!

- Checksum removal

The checksum is different from SNES where you're supposed to have one. On the Genesis, you don't need one. But for some reason, the programmers at EA decided to program one right into the game... and if the checksum is wrong, the game won't run (you'll just get a blank screen). So this removes the checksum calculating code.

hmm... weird. again, thank you for all that you do. I wish the SNES crew had a code genius like you working on tools and resources for SNES ROMs. I'm trying to learn it all, but it comes slowly and I doubt I'll be making programs (guides, maybe, for concise and accurate manuals would certainly benefit the site) to help other hacking novices. well, I am plugging away at a Genesis ROM and running into plenty of barriers for every success. there have been successes, though... enough to demonstrate clearly that Genesis hacking is easier, if only by the .bin format's ease with tiling. blah, blah, blah... point is: thank you!

edit: want to be clear that I don't downplay the assistance/guides/programs of those who do SNES hacking. point there was that we could always use more bright minds.

Edited by trudatman
Link to comment
Share on other sites

just found out my Windows version is too old to use this or the other modifier. damn it! if I posted a file, would somebody be willing to run the ratings, stars and +/- things on it? that would be nice. holler!

Link to comment
Share on other sites

just found out my Windows version is too old to use this or the other modifier. damn it! if I posted a file, would somebody be willing to run the ratings, stars and +/- things on it? that would be nice. holler!

attach it to a PM and send it and i'll do it

(but i refuse to 'holler' B) )

Link to comment
Share on other sites

thanks, buddy! working in NOSE right now. will send later, when I'm done with rosters and lines. very much appreciated.

Link to comment
Share on other sites

  • 1 month later...

Oh the stuff you can do on gens :) That's some fantastic stuff right there.. Especially love the individual hits thingy :o That's probably one of my most wanted features (after season mode). xot82 made me aware of it just a couple of days ago, I was stunned! :D

I was looking through smozROM.py briefly to see if I thought it was at all possible to implement on SNES, but I don't know :D Hopefully xot82 can figure it out. I just haven't been hacking at all in over a year, and like three years since I did it to some extent.. :/

Did you figure out the individual hits, toi and +/- by yourself? Either way, very impressive!

Link to comment
Share on other sites

those hacked statistics are not shown in-game, but rather in some extractable packet for use with a statistics recorder of some sort.

Link to comment
Share on other sites

those hacked statistics are not shown in-game, but rather in some extractable packet for use with a statistics recorder of some sort.

Yes I know that (you could probably make so it's shown in-game as well though, instead of PIM or something like that).. And I've already got one of those (it would only be a matter of adding the new stuff to it), all I'm curious about is if it's possible to implement in a SNES rom at all. :)

Link to comment
Share on other sites

I was looking through smozROM.py briefly to see if I thought it was at all possible to implement on SNES, but I don't know :D Hopefully xot82 can figure it out. I just haven't been hacking at all in over a year, and like three years since I did it to some extent.. :/

Did you figure out the individual hits, toi and +/- by yourself? Either way, very impressive!

These are code hacks, not data hacks, so it's not transferable to SNES. (they are different games, and on different systems, so the code is completely different, though it does roughly the same thing (make a hockey game..))

TOI was actually being recorded all along, I just stumbled across it. I don't know if it's in the SNES version or not.

The game also actually recorded "checks for" for each player originally, in memory after goals, assists, shots, PIM (and then Checks For, which was not displayed). I modified it so it replaces PIM with checks for (which is why Checks For shows up in Player Stats if you apply the weight bug fix), and then checks against where the original checks for was. PIM is no longer recorded, so it must be calculated from the Penalty Summary in the stat extractor.

Displaying +/- in-game is not going to happen for several reasons... 1) i'm not actually keeping a +/- score for each player, i'm just recording who was on the ice for each goal (so +/- is calculated by the stat extractor, not the hack code) 2) if i did calculate +/- in the hack and replace PIM with that, then we lose either Checks for or Checks Against. 3) The game doesn't know how to write negative numbers to the screen :)

(but yes, I came up with the hacks myself :) the player ratings out of 15 instead of 6 was the hardest hack, requiring the most work)

Link to comment
Share on other sites

These are code hacks, not data hacks, so it's not transferable to SNES. (they are different games, and on different systems, so the code is completely different, though it does roughly the same thing (make a hockey game..))

TOI was actually being recorded all along, I just stumbled across it. I don't know if it's in the SNES version or not.

The game also actually recorded "checks for" for each player originally, in memory after goals, assists, shots, PIM (and then Checks For, which was not displayed). I modified it so it replaces PIM with checks for (which is why Checks For shows up in Player Stats if you apply the weight bug fix), and then checks against where the original checks for was. PIM is no longer recorded, so it must be calculated from the Penalty Summary in the stat extractor.

Displaying +/- in-game is not going to happen for several reasons... 1) i'm not actually keeping a +/- score for each player, i'm just recording who was on the ice for each goal (so +/- is calculated by the stat extractor, not the hack code) 2) if i did calculate +/- in the hack and replace PIM with that, then we lose either Checks for or Checks Against. 3) The game doesn't know how to write negative numbers to the screen :)

(but yes, I came up with the hacks myself :) the player ratings out of 15 instead of 6 was the hardest hack, requiring the most work)

Hehe.. I didn't have high hopes, I just thought it would be worth a shot (to look through it and see what it was).. The hacks I've been doing have been pretty much straight up transferable, just switch little/big endian and some different offsets. :) Oh well, still great too see this stuff (even though it's for GENS, heh). With the skills some of you guys have, wouldn't you have been able to make an actual hockey game? :D It baffles me that there aren't any real like indie hockey games or something like that, not that I've heard of anyway. :(

Edited by Xstioph
Link to comment
Share on other sites

Displaying +/- in-game is not going to happen for several reasons... 1) i'm not actually keeping a +/- score for each player, i'm just recording who was on the ice for each goal (so +/- is calculated by the stat extractor, not the hack code) 2) if i did calculate +/- in the hack and replace PIM with that, then we lose either Checks for or Checks Against. 3) The game doesn't know how to write negative numbers to the screen :)

... What are your recommendations regarding a program that can extract these numbers? I'm using Donch's stat extractor for NHL '94 but I can't see any reference made to players on the ice when each goal is scored - nor can I see any reference to Time On Ice. Any help you can give me with this would be very much appreciated.

Link to comment
Share on other sites

  • 4 weeks later...

... What are your recommendations regarding a program that can extract these numbers? I'm using Donch's stat extractor for NHL '94 but I can't see any reference made to players on the ice when each goal is scored - nor can I see any reference to Time On Ice. Any help you can give me with this would be very much appreciated.

I have added a link to the info about how to extract the +/- stat

Link to comment
Share on other sites

  • 3 weeks later...

Hey,

i have a crash, with window 7

Fatal Python error: cannot get zipimporter instance...

Signature du problème :

Nom d’événement de problème: APPCRASH

Nom de l’application: smozROM.exe

Version de l’application: 0.0.0.0

Horodatage de l’application: 4c4482bf

Nom du module par défaut: python31.dll

Version du module par défaut: 3.1.1150.1013

Horodateur du module par défaut: 4a897148

Code de l’exception: 40000015

Décalage de l’exception: 0008a2f5

Version du système: 6.1.7600.2.0.0.768.3

Identificateur de paramètres régionaux: 1036

Information supplémentaire n° 1: 6d83

Information supplémentaire n° 2: 6d8319bcb82f9c11c7c0a41405746fc7

Information supplémentaire n° 3: 8e19

Information supplémentaire n° 4: 8e19a438affb421ef7e4bf14da7f0e4d

any ide ?

thanks

Link to comment
Share on other sites

Wild guess since I have no ideas...

Are you trying to run the file from inside a the zip? You need to extract all the files first.

If that's not it, hit me up on AIM next time you see me and I'll try to figure it out with you.

Link to comment
Share on other sites

Wild guess since I have no ideas...

Are you trying to run the file from inside a the zip? You need to extract all the files first.

If that's not it, hit me up on AIM next time you see me and I'll try to figure it out with you.

No that's not the prob...

the files ware unzip... :)

we talk on aim then...

Link to comment
Share on other sites

No that's not the prob...

the files ware unzip... :)

we talk on aim then...

As a temporary workaround, if you want to bother, you can install Python (the programming/scripting language smozROM is written in) and run the program directly from the source code file. It's easy enough.

  1. Install Python v3 (Windows x86 MSI Installer or Windows X86-64 MSI Installer depending on if your computer is 64 bit or not (if you're not sure, try either one until it works!)). You just download the .msi file, double-click it, and follow the usual instructions.
  2. Instead of dragging-and-dropping a ROM onto smozROM.exe, you drag-and-drop a ROM onto smozROM.py, which is in the src folder.

Link to comment
Share on other sites

... I've looked everywhere here for the offset hex that gives the three stars. Can anyone help me with this? Thanks in advance.

I'm pretty sure there isn't one. I think it's calculated and displayed on the fly.

Link to comment
Share on other sites

  • 2 years later...

What do you mean by drag the file on to the exe file? It crashes when you do that.

Link to comment
Share on other sites

normal drag and drop. what error does it give?

see post #26 here for a workaround (install python programming language, drag and drop onto the source file, instead of the .exe)

Link to comment
Share on other sites

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.

  • Who's Online   0 Members, 1 Anonymous, 72 Guests (See full list)

    • There are no registered users currently online
×
×
  • Create New...