Jump to content
NHL'94 Forums

Leaderboard

Popular Content

Showing content with the highest reputation since 12/14/2025 in all areas

  1. NHL'94: Fight Edition "It's the same old NHL94, now with fighting!" After working on this since mid-March of 2025, I am proud to present NHL94: Fight Edition. The ROM in this post is just that: the original NHL'94 game, with fighting added in. No changes were made to the core game other than some adjustments to a few players' Fight attribute to allow for more bruisers (more on this in a moment), addition of fighting attribute display, new title screen, and changes to the title screen credits. Fighting logic is almost the same as NHLPA93. I made some slight changes to it, which I will go over. For a more detailed post about how fighting works and the differences between NHLPA93 and the NHL94 patch, you can check out this post - Fight Options: With the addition of @McMarkis' Menu Patch, there are 3 choices for fighting on the Main Menu. These can be selected before starting the game: Off - Fighting is disabled. The game will play just like old school NHL'94. On - Fighting is enabled. "Bruisers" are the only ones who can start a fight, though they can fight most players in the game (more in a moment). In most cases, you will only get into a fight if you are looking for one. On - Arcade Mode - Fighting is enabled, but more players can start a fight. You'll usually average around 2 fights a game in this mode, unless you are looking for blood. Players are more likely to get injured for the game if they lose a fight. Fun mode to play against friends with. The chances to get into a fight depend on the number of Total Checks in the game (you can keep tabs on this by looking at the Game Stats screen while playing and adding up the Checks for each team). In most cases, in a 5 minute period game, the Total Checks needs to be around 30 (10 min and longer periods, the number is 40). Checks after the whistle do count towards this total! This Total Checks gets reset during a fight, so you won't get fights back to back. NOTE: Arcade Mode cuts this Total Checks limit in half! "Bruisers" are players who have a 10 or higher Fight attribute rating. These are displayed on the attribute display screens as a Fight attribute of 71 or above. If you play with line changes, I have put at least 1 of these players for each team on their Chk line. There are over 60 "Bruisers" in the game, at least 1 on each team. In Arcade mode, players who can start a fight only need a Fight attribute of 42 or above. Many usual starters in the game fall in this range. In order to "participate" in a fight, the other player involved in the fight needs a Fight attribute of 14 or above. Attribute Display: If you go to the "Edit Lines" screen, or the "Team Roster" screen in the in-game menu, you can view the Fight attributes of your players. This attribute is last on the list, after Checking: As an example, who can fight on this list? Paul Ranheim - He can participate in a fight, but can't start one (14 rating) Brent Ashton - Can participate in a fight, but can only start one if playing in Arcade Mode (42 rating) Chris Lindberg - He can participate in a fight, but can't start one (28 rating) Craig Berube - "Bruiser", he can start a fight in either mode (85 rating) Theo Fleury - Can participate in a fight, but can only start one if playing in Arcade Mode (42 rating) Sergei Makarov - He will always back down from a fight, in both modes (0 rating) Fight: Inputs: A - Grab B - Body Blow C - Head Shot Body blow and Head shot each do 1 point of damage. The Fight attribute of the player and therefore player's current energy level determine their hit points and the power of the hit (how far the opposing player moves from the hit). After the fight is over, both players head to the penalty box to serve a 5 minute major. Occasionally, the team with the player that started the fight will receive a "Fight Instigator" penalty of 2 minutes. A player currently on the ice will serve this penalty in the box and the other team will get a Power Play. Occasionally, a player will be injured for the game from a fight (bonus head bleeding). This is based on the Chk rating of the player who knocked out the other player, and some RNG. Look at Probert kick some ass here (has the highest Fight in the game): When the 5 min major is over, the players will stay in the box until the next whistle. Other Stuff: One of the important goals of this patch was to make it compatible with ANY NHL94 ROM, including ROM hacks. I was able to add code to expand the ROM to 3MB and beyond by modifying the SRAM code. This allows the patch to be compatible with 32-team ROM hacks (space limitation in the 2MB ROM size). It is also compatible with 30-team ROM hacks. I designed a custom version of the patch that will pull the assets needed from the existing ROM hack and apply the patch, thus keeping any palette swaps and other graphical hacks intact. Also, with the extra space in the ROM now, this opens up the path to other types of hacks and adding sprite and frame animations! The custom ROM author will need to make the necessary changes to the H/F values in order for players to be able to fight. That is up to them on making the changes needed to their rosters. Thanks: I would like to say thank you to everyone who helped in making this possible. @McMarkis, @bcrt2000 and I spent a bunch of time reverse engineering the sprite format. Also @McMarkis provided the menu item hack. Plenty of testers helped to iron things out: @swos, @slapshot67, @77, @Len the Lengend, @Drezz, @jer_33, @halifax, @Mr. T, @Sean, Michael, and others. Everyone here has helped make something deemed impossible, possible. My GitHub link with all the code and the custom ROM patch are here - https://github.com/Chaos81/nhl94-patches Please give me feedback on the ROM, I expect to make some tweaks here and there, and to fix any possible bugs we did not come across. Enjoy the ROM! Donations are appreciated!! Here is my link - http://buymeacoffee.com/chaosnhl94 Current Issues/Bugs: - When opening the ROM in NOSE, you will encounter about 8 error messages. These are related to the menu hack, and you won't be able to make changes to the default menu items. Please make the menu changes in NOSE before applying the hack! After clearing the messages, you will be able to edit the ROM any other way like usual. - In the custom ROM hack, if you need to change the text of the menu (like the period times), you will need to do this in one of the .ASM files in the menu hack folders. Once you clone my GitHub, navigate to: 94_custom_patch/scripts/menu_patch/scripts/Menu/submenuitems.asm You can change the text in that file as needed, then apply the hack to your custom ROM. My goal is to get these fixed in the future. Current Version: 1.01 (Jan. 2, 2026) Updates: - Fixed bug where the game would freeze when changing shootout lineup in Shootout Mode. nhl94_fight_v1.01.bin
    23 points
  2. To give an update (it's been awhile, though plenty of updates on the Discord server): Everything is working. All major bugs have been fixed. There was a bug where sometimes the game would "freeze" for a few frames during knockdown (hesitation bug) and also the fighting players would be punching air during reverse replay (wouldn't flip them in the X direction). It's all fixed. Fighting can be turned ON and Off in the Main Menu (thanks to @McMarkis). Also, an Arcade mode is added. It just makes it more likely to fight as more players can start a fight in Arcade mode along with more injuries from fighting. I adjusted the H/F attribute (Hand/Fighting) of players based on Fighting data that I could find from the 92-93 season. Also made some "historic" adjustments to some players. Every team now has at least 1 player that can fight in the regular mode. You can see the fighting attribute listed in the Edit Lines or Team Roster screens (have to be above a 71 to start a fight). The ROM was also expanded to 3MB, which is a first. This is to allow room for 30 and 32 team ROM hacks, which take up a lot of the extra 1MB space of a 2MB ROM. In order to do this, the SaveRAM code had to be modified to allow it to work with a 3 or 4MB ROM size. This was done and is working as expected. This has been a long trip, but it's almost done. I am making a script to make the patch more custom ROM friendly. There will be a standard NHL '94 ROM available very soon with fighting for everyone to play. I want to thank everyone who helped along the way, and their input to help make the patch better! Now watch Gary Roberts destroy Jeff Brown, from multiple angles! Replay_Fixed.mov
    8 points
  3. Okay time for an update. What to expect: Very unglamourously expanded 3MB ROM. So much of the custom art and some options needed to be edited even though you might not be able to tell. I think I got everything, but let me know if something weird pops up. More obviously, some teams have had their uniforms belatedly updated So they should more closely resemble this season's changes within 16-bit limits. Some on-ice logos got an update, partly due to this as well. This update is still only available in "wide screen" mode. Additional menu option. And, I didn't get any new screen shots, so I'm just going to put this here. NHL 2026 - 94 Edition v3.0.bin
    7 points
  4. Official release date of the ROM will be January 1st, 2026. - Right now, everything is done. I've also made a python script to apply the patch to custom ROMs (28, 30, and 32 team ROM hacks). It will be up to the custom ROM designer to update the H/F values accordingly. I listed info here -
    7 points
  5. I swore to never cross the threshold, 5 years ago. To never pass from 1994 posts to 1995 posts... But I am to break the great seal in honor of @chaos, for using the time stone to go back to the 90's and win the console wars for Genesis.
    5 points
  6. Official release date of the 1.0 ROM is January 1st, 2026. Before we get to that, I need to write up how fighting works. It is mostly based on the same method as NHLPA93. How it works in NHLPA93: The game keeps tracks of a value I will call Check Count. Every time a player falls to the ice from a check, a number is added to the Check Count value, regardless of Home or Away teams. It is a total of checks for both teams. In normal cases, a 1 will be added to the value. If the player has a Fight attribute of 0 (which would be an H/F attribute of 0 or 1), 2 will be added to the value. During every player-player contact (does not have to be a body check), there is a check for fighting. First, there are a number of things that need to be checked before it considers a fight: - Impact needs to be more than 10 decimal (little bumps are less than this) - Players cannot be in the locked in an animation (think laying on the ice as an example) - Players cannot be called for a delayed penalty - Players cannot be goalies - Clock has to be running - Can't be a game highlight - Checks the fight flag of the puck. I don't know why, it doesn't seem ever to be set. - Cant be on a faceoff After those checks, it will do some math with the Check Count and the players' Fight values: Starting value of 40 decimal: Takes result of 40 - CheckCnt, and divides it by 4. Then adds 10 decimal to the result. (40 - CheckCnt) / 4 + 10 = X Next, it takes the player who initiated contact, and compares their fight value to X. If the fight value is less than X, exit. If the player passes the test, then it will look at the other player involved in contact, and compare their fight value to 2. If their fight value is less than 2, then it will exit the checkfight routine completely. It will repeat this whole check for the second player (swaps the 2 players for comparison). First, you need to have enough CheckCnt. If your CheckCnt is 40, then one of the players need a minimum of 10 fight attribute, and the other player needs a minimum of 2 fight attribute to continue with checks. If you have a CheckCnt of 32, then one of the players needs a minimum of 12 fight attribute (fight attribute is always even), and so on. This is the main limiting factor. Should note: a 10 in fight attribute = a 71 on the attribute display pages in the game (Edit Lines screen or Team Roster). OK, so the 2 players met the above criteria, what check is next? The code looks at the ChksF of player with the lower fight attribute: ChksF of player x 2 = Y -Y + 16 decimal = Z If Z is greater than the player's Fight attribute, exit. If Z is less than the player's Fight attribute, then the fight starts. The player with the lower Fight attribute needs to have a minimum amount of ChksF. If the player has a 2 Fight (the minimum for fighting), they need at least 7 ChksF. If the player has a 6 Fight, they need at least 5 ChksF. OK, so the fight is a go. The code will first see if it will assign an Instigator penalty to the team of the player who initiated the fight (the player with the higher Fight in most cases). If penalties are off, it will skip this step: Take the frame counter, and pass the first 2 bits. If they are 0, an Instigator penalty will be assigned to the first available player on the ice for that team (not a goalie, not the fighter, not a player who is "unavailable" (i.e. going to the bench)). If the bits are not 0, there is no Instigator penalty. Before the fight starts, The CheckCnt variable is cleared, along with all the ChksF for the players on each team. The crowd is excitement is boosted, players are put into position for fighting, scrolling is locked, and assignments are given out (assfight for the players fighting, assfwatch for the players not fighting). The players who are not fighting, will look for checking opportunities, and these checks WILL COUNT towards the CheckCnt variable (remember it was cleared moments ago). Gloves are dropped. Both players get assigned the Fighting penalty. Fight begins. The player's fight strength is based on their current energy level (line changes on, if not it's a set value) and their Fight attribute. Energy level, max is $1000 or 4096 decimal. - Multiply energy level by Fight attribute. - Divide by 256. - Divide by 16. (This ends up as divide by 4096). - Compare to 5, if lower, set to 5. This is the player's fight strength. A player who has a Fight attribute of 10, with line changes off (max energy), will have a strength of 10. A player with 8 Fight, max energy, will have a strength of 8. Each taken punch will take 1 off their strength. The higher their strength, the farther the knock back from a connected punch (X velocity is affected). If no one gets knocked down after a period of time (I forget what the time is), the fight will end and both players go to the box. If someone gets knocked down, the player standing is changed to the Fighting Win penalty (get a checkmark), and a possible injury is determined: Injury? Randomize a number from 0-60. - Get winning fighter's Chk value (0-30 decimal scale, Chk attribute * 5 + Hot/Cold + 3rd Per Bonus) - Compare the Chk value to the RNG number. If Chk value is higher, game injury with blood!! If lower, just a stunned loser. The 5 min major for fighting is special. It's a major, so you don't lose a player on ice (you will for Instigator penalty), and the players don't come out of the box once the time is up. They will come out at the next whistle. Differences in my 94 Patch: There are 2 modes: ON and ON-Arcade mode. I'll go over the differences as needed. The whole fight code is the same as 93 with some changes: - I changed the value to compare CheckCnt to based on period length. < 2 min = 20 2-7 min = 30 7-20 min = 40 >= 20 min = 40 Checking league games with 5 min periods, there is an average of about 40 checks a game. Changing it to 30 would allow at least 1 fight in normal conditions. - I changed minimum Fight attribute to start a fight based on mode: On mode = 10 Fight attribute Arcade mode = 6 Fight attribute Minimum to join a fight: 2 for both modes - I changed the minimum ChksF starting value based on period length: Remember, this value is halved in the calculation <2 min = 8 2-7 min = 8 7-20 min = 16 >= 20 min = 16 - I also changed the RNG for injury for Arcade mode, to risk more injuries: ON mode = 0-60 RNG Arcade mode = 0-45 RNG - I set it so there are no fights during OT - I removed the reset of the ChksF for all players (this would really mess with stats on the site). I don't think this is a big factor in repeated fights by the same player. NOTE: These values are customizable in the ASM file for the patch. They are labeled and located near the top for easy access. ROM Changes: Because of the minimum Fight being so high (10), there were only 17 players in the original 94 ROM who could start a fight, compared to 83 in NHLPA93: Stu Grimson ANH F Grant Ledyard BUF D Gord Donnelly BUF D Brad May BUF F Rob Ray BUF F Craig Berube CGY F Bob Probert DET F Louie DeBrusk EDM F Kelly Buchberger EDM F Dave Manson EDM D Mike Peluso OTW F Shawn Cronin PHI D Jay Caufield PIT F Tony Twist QUE F Basil McRae STL F Ken Baumgartnr TOR F Gino Odjick VAN F So, I scoured the internet for more info on fights from 92-93. @77 recommended - https://web.archive.org/web/20190207030347/http://www.dropyourgloves.com/Fights/LeagueSeason.aspx?League=1&Season=1993 I also used hockeyfights.com as a second source. I adjusted H/F for some players based on # of fights and historical significance. I made sure every team has at least one player with 10 fighting or above. Most of these guys are on the bench. You can see the list of players from the attached sheet. There are now 58 players with 10 or higher Fight rating (look at H/F column, and round down to nearest even number) Hope you enjoy the ROM! Let me know if there are any questions! Fighting Players.xlsx
    5 points
  7. Congrats to @chaos for winning his 5th Bud of the Year! He led the way in getting fighting into NHL'94. We never thought we'd see the day that would happen, and it's an incredible achievement! Voting Results chaos - 50 Angryjay - 26 Niuhuskie - 26 Most improved player is @Len the Lengend! Len - 54 Adolfo Oliver - 48 Jeff poutine - 33 Most enjoyable to play against is @TecmoJon! TJ - 52 Hokkee - 33 New Jersey killer - 32 Best player goes to @angryjay93! Angryjay- 119 Professor - 64 Kingraph - 54 Previous Bud of the Year Winners 2009 - smozoma(1) 2010 - smozoma (2) 2011 - smozoma (3) and @dan_lizhot 2012 - smozoma (4) and @DaDonch44 2013 - kingraph 2014 - chaos (1) 2015 - McMikey 2016 - angryjay93 (1) 2017 - slapshot67 2018 - chaos (2) 2019 - chaos (3) 2020 - smozoma (5) 2021 - UltraMagnus 2022- Tickenest 2023 - chaos (4) and angryjay93 (2) 2024 - McMarkis
    4 points
  8. Just in time for the winter solstice. Why go outside in the dark and cold when you can stay inside and play games. The Version 2 update is now ready in the main post. Aside from the rosters and player getting updated, the other most obvious change is the aspect ratio. NHL 2026 - 94 Edition v2.20.bin
    4 points
  9. @chaos Amazing work and dedication making this monumental change to NHL'94. This is something many of us only dreamed of decades ago, so to see you were able to bring it back (and seamlessly into the gameplay!) needs to be commended. I just played a couple games with @halifax and was a blast. Thank you so much for putting the effort into this and getting a great result. This is a game changer for the community and just making sure this gets the proper acknowledgement. -Evan
    3 points
  10. Figured I might as well give a heads up on this one. First, since it has been brought to my attention that the "wide screen" patch does cause some issues with certain playing options, I'm in the process of converting all the updates to a "narrow screen" version. Can't promise how soon that will be just yet but it's on the To Do list. Second in chronology, but not necessarily importance, I have taken some time to look into @chaos's amazing fighting update and I now seem to have an idea of how to apply the patch, as well as what it does and does not do. Since chaos is using the NHLPA'93 sprites as the basis for the fighting animations, that does mean that the different Helmet and Stick patches that @Jkline3 and I have created for our mods are not going to match up. This will take a bit of time to rectify, but as a teaser... I'm liking where this is headed.
    3 points
  11. Just played my first game and can confirm it works on original hardware (Genesis model 1 VA3) with a Mega Everdrive Pro flash cartridge. This is so awesome. Thank you for this.
    3 points
  12. Thanks for the kind offer. I will reach out if I can think if anything. Really what I need is a lifestyle change where I can dedicate a bit of time to this every night, or at least every week. I'm trying to get, I really miss this.
    3 points
  13. Literally you guys need some patience and going through some personal stuff takes priority. Nhl26 is still in the process of being completed all details are completed except the schedule and player cards. The vintage project is still on going. These are not 1 hr projects. There is time research and effort put in.
    3 points
  14. I just want everyone to love 2on2. Platonically.
    2 points
  15. Took a bit longer than we were hoping, but it's nice to have this one complete now. NHL '26 - '94 Edition In recognition of the tradition of adapting EA's well deserved cover athletes to the the 16-bit stage, we're honouring that tradition in the best way possible. New this year, a @Drezz background that does recognise the team got their name on the cup. And giving Dave Reid a break, Bruce is lending his charisma as pre-game analyst. Points leader match up proves that the freeze bug fix is applied. Keeping many of the previous graphics changes including the modernized fonts and watermarks. Did decide to update the Cup this year though. Updated several center ice logos for a lot of coinciding anniversaries or just because teams felt like rebranding, including the new Utah Mammoth. V.1 in narrow view. V.2 in wide view. Colour photos for every player. Obligatory under the hood and minor graphical stuff and acknowledgements: New original custom player attribute stats. All 832 players have colour photos. Thanks @slapshot67 Original JKline player sprite mod based on helmet patch for more accurate and varied uniforms. Pucks that also feature original customized sprites. Puck sprites that change with team colours. Thanks @AdamCatalyst The nets that those pucks can go in have also had their sprites redrawn. New Weight bug fix is applied. Thanks @chaos New Checking formula thanks to that new weight bug fix. New Hot/Cold calculations. SmozROM Ratings consistency fix - player ratings will match hot/cold overall. Thanks @smozoma Freeze Bug applied so no player stats and player name on second line. User Records set to "ON" can still cause crashes with Vegas, Washington and Winnipeg so caution is advised. Expanded goalie roaming area. Go out to the edge of the trapezoid or out to the face off dots to cut down the angle. Thanks @smozoma Goalie can also carry the puck out to the blue line before the automatic whistle. [if play isn't blown for holding the puck too long] Yes we know that the goalie can technically go to the red line, but that would mean having to figure out how to assess delay of game penalties and that's not likely to happen. Goalie Y-button control hack applied. Thanks @clockwise CPU will pull goalie if down by 1 or 2 goals with 1 minute remaining. Thanks @McMarkis Edit Lines hack for any player to play at any position applied. Allows for 4-1 Power play lines. Thanks @TheTome Note that Edit Lines hack does interfere with Saving and Loading Team Lines. Also not that this edit line hack was omitted from the V.2 Edition. Benches have been edited so the coach mod has been removed. EA Sports watermarks have been updated to modern logo. Thanks @Drezz Main menu background hack in use for full custom background image. Also thanks @Drezz New Utah Mammoth name and logo August is a bit early to be thinking about hockey ain't it? Well, yeah, but we're testing some new stats and stuff so why wait. So in a loose reference to the recently completed World Junior Summer Showcase, we figured we'll call this one: Just to keep the old versions in here rather than making a new post or revising history. The NHL '26 - Summer Showcase Edition Obviously this is way too early for the upcoming season so we're still in beta-like mode. Some of the new players have been given new numbers on a "historical precedence or best guess" criteria when conflicts arose. Beyond that, we're trying a few things and wouldn't mind getting some feedback. Some notes, due to how early this is and that there are some depth chart guys that haven't really secured a permanent spot yet, and in the interest of saving some effort later, there are some placeholder players in the game. Please just ignore them as they will be filled in as the actual season gets closer. New for version 3.0.26 Uniform updates. Updated center ice logos. Still didn't include the hack to play any play at any position in this one. Still only in wide screen game play. Now with 100% more fighting. New for version 2.0.20 Roster Updates with trades up to winter holiday roster freeze. New updated player ratings. Updated more center ice logos. Didn't include the hack to play any play at any position in this one. Wide screen game play. New for version 1.0.13 Roster Updates as of the first week of the season. Changed the menu screen to celebrate the NHL's new goal scoring record holder. New for version 0.9.13 Roster Updates. Still a few spots left open, but most are ready for camp. Changed the menu screen to get ready for the new season. Still hyping that cover athlete reveal. No leaks as of yet. New for version 0.9.10 Updated center ice logos for all of the anniversaries happening this year and a couple new [mostly old] looks. A few minor roster updates as summer signings start to wind up. Cover athlete still to be revealed. Much hype to ensue. Newest Version [as of 2026-01-06] NHL 2026 - 94 Edition v3.0.bin Older versions NHL 2026 - 94 Edition v2.22.bin NHL 2026 - 94 Edition v1.13.bin Beta Testing Summer Showcase Versions NHL 2026 - Summer Showcase 0.913.bin NHL 2026 - Summer Showcase 0.91.bin NHL 2026 - Summer Showcase 0.9.bin
    2 points
  16. Thanks for the thoughtful response — I’ll try to answer everything clearly. Frame of reference first: This ROM is based on the original 2on2 league ROM that started 20 years ago. It is not built around current-season rosters. The teams are all-time franchise greats. The goal is to keep teams iconic, recognizable, and balanced for competitive 2-on-2 play. Player ratings / clone ratings Ratings are intentionally cloned. This is by design. In a four-player league, the goal is to let skill decide outcomes, not AI advantages or wildly different attributes. When everyone is relatively equal, games come down to positioning, passing, timing, and execution — which has always been the spirit of the league. So while individual players are historically great, ratings are kept even to preserve competitive integrity. Player selection philosophy Yes — the intent is exactly what you described: Best or most significant players per franchise Some subjectivity is unavoidable, especially for players who split careers across teams Focus on iconic franchise identities, not depth or role players. Teams included / expansion teams The new ROM will be based on the 32-team structure: All major original teams are included Some expansion teams may be excluded Atlanta is likely to be removed Nashville and Columbus are not currently planned (no strong reason to add them at this stage) Two additional teams will be: USA Canada These will feature top online 2on2 coaches from the past 20 years that have played online, rather than NHL / International players. Widescreen Widescreen has not been used previously in this league. It’s not ruled out, but it would require testing and isn’t guaranteed. There are also legacy bugs to address first (for example, line editing crashes — a known issue from the original ROM dating back to 2008). Fighting Fighting is an incredible addition by chaos and may be added, but if included it will likely be disabled during exhibition play. It’s not a core focus of the project and would slow games down. CPU vs human play / 5-on-5 This ROM is still built first and foremost for 2on2 human play, including weekly exhibitions like “2on2uesdays” with players from Discord. (video here Playing vs CPU is still fun, but the ROM is not designed for that experience. A separate 5-on-5 version would be interesting someday, but that’s outside the scope of this project. Final clarification A 20-year anniversary ROM of the 2on2 league Built around all-time franchise greats Focused on skill-based, balanced multiplayer gameplay Not a modern-season or stat-accurate simulation ROM. Hope that clears everything up — appreciate the interest and the detailed feedback. I've attached the last big update rom so you can check it out yourself. *Keep in mind, a lot has changed in the community and in the NHL since 2008 or so when this rom was last updated.* 2on2_update.bin
    2 points
  17. heres a better 94... NOW WITH FIGHTING -more accurate rosters -no duplicate players (i think) -eye and stick patch -penalty box socks and stacking fix (still entering towards middle) -reverse angle penalty box still missing players -stats all vanilla except for the 5 or so players i added, stats came from 95 -fighting stats adjusted on ALL players WISHLIST -faceoff stick tape -bench and penalty box eyes -fighting eye and stick tape better_nhl94.bin
    2 points
  18. This Has Made It To RetroHandhelds....
    2 points
  19. Just tested version 1.01 on real hardware with no issues (tried shootout setup and then played a full game. Experimented a little using a different Genesis (model 1 VA6) and a 32X.
    2 points
  20. Not trying to self promote, but just as a PSA for anyone looking at this mod and to answer the question of when a 2026 mod with fighting will be available; The ROM expansion process does change a lot of the pointers and graphics so unfortunately it's not as simple a process as applying a standard IPS patch. That said, as one of the authors of a current 2026 mod, the good news is that I have figured out the locations of most of the new expanded ROM data and right now it's just a case of reapplying all of those edits again. We do have some of the fighting ratings in place currently as that rating number was shown to relate to injuries as well, but we'll schedule some time to evaluate that as well.
    2 points
  21. Just had to share a story. I frequently get modding suggestions from my brother [some interesting, some too silly to explore] and will give him works in progress to get feedback on. I made a version of a previous mod that he had seen already, with this patch applied, but almost every player had a fighting rating over 60 and I set the default to "Arcade". He was giving me a hard time because "Yeah I've seen this already. What am I supposed to be looking for." and started a game. Five seconds in, a pair of 100 players dropped the gloves and he dropped his controller. "I'm done." followed by a pause and a "What the hell is this?" and some other mutterings that I don't recall because I was laughing too hard. I did end up playing a couple of games where the fights got so out of hand that only three players were on the ice because the rest were in the penalty box or injured, so some scaling back is definitely required, but I feel the gravity of the situation was not missed.
    2 points
  22. 2 points
  23. A Dream Come True Supporting This Amazing NHL 94 Revival 🙌 Hey everyone, Just wanted to drop a quick note to say how incredibly happy I am to see this NHL 94 project come to life. What you’ve accomplished is nothing short of amazing bringing back the magic of this legendary game and making it even better. You’ve made a dream come true for so many of us. To show my appreciation, I’ll be promoting this project for free across all my social media platforms: - TikTok: 55K followers - Facebook: 22K followers - YouTube: 6.5K followers - Instagram: 10K followers I’ll also be adding a link to the game on my website: philthepoete.com I’ll be supporting this from my French-speaking hockey creator side, sharing content, reactions, and love for what you’ve built. You deserve all the recognition for the hard work and passion you’ve poured into this. Let’s keep this momentum going thank you again to everyone involved! Cheers, Phil The Poète
    2 points
  24. I was a little worried when Teppo Numminen took out Pat Verbeek in the first minute of the game, but the rest of the Whalers seemed to not appreciate that. Tried Philadelphia at Detroit next on Arcade Mode. Probert and Cronin decided to set the pace with a draw only minute and a half in and it was gloriously down hill from there. Now I'm wondering how well the patches will work with some of my previous 30 and 32-Team mods. This could get really interesting. All of the thanks for this man.
    2 points
  25. A prototype version of Wayne Gretzky and the NHLPA All-Stars for the Atari Jaguar was recently released by VGHF. I was messing around with it and found this funny message on the roster screen.
    2 points
  26. This worked for me 100%, the only thing that is a slight drawback to this is if you have a device with more of a square screen there will be black bars on top and bottom of the screen, but not gonna lie it looks great on my Retroid Pocket Classic regardless since it has an AMOLED screen, it makes the black bars blend in. Thank you so much for your help, and also thanks Von Ozbourne for all of the work that you have put into these Rom Hacks! I literally play this game every time I go on break at work, makes my day that much more exciting!
    2 points
  27. Here it is. Merry Christmas everyone! 26.DBX.rar
    2 points
  28. NHL Hockey (NHL92), NHLPA Hockey 93, and NHL94 all share a similar proprietary format when it comes to sprites, frames, and animations. While 92 is a little different in the way the frame data is laid out, 93 and 94 are the same. The format used might actually be similar to other EA Sports games at the time (early Madden games). Note, the labels used in the NHL92 source code will be used in this post. What's a sprite? A sprite is a special object that can be moved around and placed on top of, or below the background tiles and other sprites. The amount of sprites that can be displayed on the screen is limited, depending on the console. Sprites are usually small compared to the background they are on. A tile is a group of 8x8 pixels. The sprites in these games vary in tile size. The sprites for the on-ice objects vary from 1x1 to 4x4 tiles. Sprites are used for on-ice objects, crowd aminations, faceoff window, and the zamboni. What's a frame? A frame is a group of sprites. Each frame also has a "hot spot", which is used as a second "anchor point" (i.e. a player's stick blade can be a hot spot in a frame, where the puck will "glue" to when the player has possession). For on-ice objects, there are 549 frames in 92, 649 frames in 93, and 845 frames in 94. What's an animation? An animation is a group of frames that are assigned based on a specific action (i.e. skating with the puck, making a pad stack save, shooting). There are different on-ice objects that the game keeps track of: Fixed Frame Objects (FFO): These objects are tied to the rink scrolling. These vary from game to game. 92 - Player Stars (5), Player star (x2), possession star, gloves/sticks for fighting, center ice logo 93 - Player Stars (5), Player star (x2), possession star, replay cursor, gloves/sticks for fighting 94 - Player Stars (7), Player star (x4), possession star, replay cursor, gloves/sticks for fighting (yes, this is still there, though it points to a blank frame) These are fixed frame objects (there are no animations). SSO (no idea what this stands for): These objects are not tied to rink scrolling. These vary from game to game. 92 - Off-screen player arrows (2), logos (2) on the score bug 93 - Off-screen player arrows (2) 94 - Off-screen player arrows (4) These are also fixed frame objects (there are no animations). Sort Graphics Objects: These are objects that are involved in the action, and are "sorted" on a list depending on their location in the Y, where lower objects on the screen have a higher priority. There are 16 of these objects - 12 skaters (6 per team), 2 nets, the puck, and the puck shadow (which converts to the goal light when a goal is scored). These objects have many different frames and animations that are assigned to them based on game conditions (except for the nets, they have 1 frame each). The Sort Objects are the ones we will concentrate on. These objects each have a data structure that has variables for X/Y/Z positions and velocities, current frame number, current animation list and animation index, player attributes, conditional flags, etc. Not every object uses all the data structure variables (there is no Chk rating for a goal net for example). The data structure size is $80 hex or 128 decimal. They start at RAM location $FFB04A (6 Home Team objects, 6 Away Team objects, 2 goal nets, puck, puck shadow). Sprite Animation List (SPAList) SPAList locations in ROM: 92 - $35B6 93 - $4D8E 94 - $5B1C First, lets look at directions. The object can face 8 different directions (0-7). Direction 0 is facing upward, and we go clockwise from there. Now, lets say the player is skating with the puck. The code assigns the player the SPA (SPrite Animation) of skating with the puck. But, depending on the direction the player is facing, the frames for the animation should be different. So, for each SPA, there is a table containing offsets based on direction. This offset will be used to get the correct animation frame list based on that direction. Also included for each SPA is a flag for repeating the animation. Let's use skating with the puck as an example (SPAskatewp). The player is skating in direction 1. Let's find the direction table, and get the offset to the animation frame list. We will use NHL94 in this example. SPAskatewp = $53E direction = 1 SPAList starts at $5B1C in 94 To get to the table for SPAskatewp, we add SPAskatewp to SPAList - $5B1C+$53E = $605A. Now, each SPA table in the SPAList is 18 bytes long (2 bytes per direction), and the last 2 bytes are for the SPA attribute (which only the first bit is used in the NHL games, for repeating the animation). The frame animation lists for this animation follow immediately after this table. Here is the table at $605A from the ROM: Dir 0 - 00 12 Dir 1 - 00 22 Dir 2 - 00 32 Dir 3 - 00 42 Dir 4 - 00 52 Dir 5 - 00 62 Dir 6 - 00 72 Dir 7 - 00 82 Attrib - 00 00 To get the offset, we take the start of the table ($605A). We add direction*2 to get the offset (in the case of direction 1, 00 22). We take this offset, and add it to the start of the table to get to the animation frame list ($605A + $0022 = $607C). So for SPAskatewp, player skating in direction 1, the animation frame list is at ROM location $607C. The animation frame list will have values in pairs. The pair is Frame # and the time to show the frame (value in video frames). The last frame in the animation will show a negative time (this is how the code knows it's the last frame in the animation). Let's look at our example: Animation frame list at $607C: 00 07 00 0A (frame 7, time 10) 00 08 00 0A (frame 8, time 10) 00 09 00 0A (frame 9, time 10) 00 0A FF F6 (frame 10, time 10) - last frame in animation Each animation frame is displayed for 10 video frames. There are 4 frames total in this animation. Since our repeat flag was 0, the animation does not repeat. The code will take care of changing or restarting this animation if needed. Let's look at our animation: The SPAList contains the table for direction offsets, attribute flags (only repeat is used), and animation frame lists for each animation in the game. OK, so we know how to get the frame for each animation. But how is that frame put together? Remember earlier, I described a frame as a group of sprites with data associated with it. Our SPAskatewp animation is not a single sprite in each frame. Now this is where 92 is vastly different from 93 and 94. In 92, the Frame data and the sprite data bytes are together in one structure. In 93 and 94, they are separated, and the sprite data bytes are a little different. I will go over how they are laid out in 92 then show how they are laid out in 93/94. Frame Data (NHL92) If you look at the 92 source code, the Sprites.anim file starts in the base ROM at address $3D5EE. The first frame data starts at offset 6 ($3D5F4). Here is the layout of each Frame data: Frame data structure (First frame at $3DF54): SprStratt - offset $A: attribute flags (2 bytes) - not used in NHL SprStrhot - offset $C: hotspot data (24 bytes) - though this is 24 bytes, only 4 bytes are used. 2 for Hot Spot X (byte 12-13), 2 for Hot Spot Y (byte 14-15) SprStrnum - offset $24: # of sprites in this frame - 1 SprStrdat - offset $26: start of sprite data bytes (8 bytes per sprite) The Sprite data bytes contain data for each specific sprite in the frame: Sprite Data Bytes: Byte 0-1: Y Global position Byte 2-3: sizetab and top 4 bits of tile data offset Byte 4-5: bottom 11 (0-10) bits of tile data offset, H/V flip priority (bits 11+12), palette (13-15) Byte 6-7: X Global position Let's go over the easy ones: Y Global and X Global: Each Sort Object has an X and Y position stored in its structure. The X and Y Globals of the Sprite Data are added to that X and Y position to determine the upper left corner of the sprite. Sizetab: This is an index for the sizetab table. The sizetab table contains values related to the number of tiles in the sprite. Sizetab table: Lists # of tiles in the sprite, and is linked to their layout: Index | Value | Tile Layout (XY) 0 1 1x1 1 2 1x2 2 3 1x3 3 4 1x4 4 2 2x1 5 4 2x2 6 6 2x3 7 8 2x4 8 3 3x1 9 6 3x2 A 9 3x3 B C 3x4 C 4 4x1 D 8 4x2 E C 4x3 F 10 4x4 To get the index, you need to look at bytes 2-3. Bytes 2-3: Sizetab bytes Byte 2: Upper nibble (top 4 bits) used for the top 4 bits of tile data pointer (more later). Bottom nibble (bottom 4 bits) used as an index to the sizetab table. Byte 3: Not used, always 00 in 92. Tile Data Offset, H/V Priority, Palette: This part gets a little complicated. The tile data offset is 15 bits. The lower 11 bits are in byte 4-5, and the upper 4 bits are in byte 2. Bytes 4-5: Data Offset, Flip and Palette Data Offset: This is used to find the 1st starting tile for the sprite. First 11 bits (0-10) are used for the data pointer. Then the top 4 bits are taken from byte 2 to get the full 15 bits of the offset (these are the upper 4 bits of the offset). The result is then sign-extended long word, multiplied by $20 (32 decimal), and used as an offset to the Spritetiles. Flip: Bits 11 and 12 are used for H and V flip of the sprite. If the lower nibble of byte 4 is 8 or higher, the sprite will be H flipped by default. If the upper nibble of byte 4 is odd, it will be V flipped by default. Later on, depending on the handedness of the player, the whole frame can be flipped before stored in memory. Palette: The last 3 bits (13-15) are used for palette and priority. Bits 13 and 14 will decide which palette to use (Home, Visitor, 1st or 2nd Rink Palette). These bits can be manipulated before stored in memory, depending on if it's a player and what team they are playing for. Bit 15 is priority. If it is set, the sprite will appear in front of the background. If you want a better description of flip and palettes, please check out @AdamCatalyst's awesome post here - Let's look at our SPAskatewp example. We will choose the first frame from the animation, frame 7. But in order to find the data for frame 7, we do not know how long the frame data for 1-6 are (length will vary depending on the # of sprites in each frame). If we open the sprites.anim file in the 92 source, each start frame data structure starts with 53 53. If we were to automate this, we would look at the # of sprites in each frame data (offset $24), multiply that by 8, and add it to $26 (the length of the frame data struct before the sprite data starts) to get our frame data size, and continue through the frame data that way. 41 41 02 24 00 02 Frame 1: 53 53 00 CD 00 C2 00 20 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF FF FC FF EC 00 00 00 00 00 00 00 FF 00 00 FF E7 07 00 46 A0 FF F9 Frame 2: 53 53 00 CD 00 C2 00 30 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF FF FF FF E8 00 00 00 00 00 00 00 FF 00 01 FF E5 07 00 46 98 FF F9 FF FD 20 00 46 0D FF F1 Frame 3: 53 53 00 CD 00 C3 00 20 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF FF FE FF E4 00 00 00 00 00 00 00 FF 00 00 FF E1 07 00 46 90 FF F8 Frame 4: 53 53 00 CD 00 C2 00 20 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF FF FF FF E7 00 00 00 00 00 00 00 FF 00 00 FF E4 07 00 46 88 FF FB Frame 5: 53 53 00 CD 00 C2 00 20 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF 00 01 FF E7 00 00 00 00 00 00 00 FF 00 00 FF E3 07 00 46 80 FF FB Frame 6: 53 53 00 DB 00 C9 00 40 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF 00 10 FF F8 00 01 00 00 00 00 00 FF 00 01 FF E8 07 00 46 78 FF F9 FF F6 24 00 43 4E 00 09 Frame 7: 53 53 00 D8 00 CD 00 40 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF 00 17 FF F6 00 C8 00 00 00 00 00 FF 00 03 FF F2 19 00 46 DE FF FA FF F2 20 00 46 0C 00 12 FF EA 24 00 43 4C FF FC FF E2 20 00 46 0B 00 04 Frame 7, byte $24 and $25 = 00 03, which means 4 sprites in the frame (3+1 =4) Sprite 1: FF F2 19 00 46 DE FF FA Sprite 2: FF F2 20 00 46 0C 00 12 Sprite 3: FF EA 24 00 43 4C FF FC Sprite 4: FF E2 20 00 46 0B 00 04 Lets get the size in tiles and the tile data offsets for each sprite: Sprite 1: FF F2 19 00 46 DE FF FA Sizetab index - lower nibble of Byte 2 = 9, which is a 3x2 tile sprite. Tile data offset: Byte 4+5 = $46DE. To get the first 11 bits, we AND with $7FF = $6DE Byte 2+3 = $1900. To get the top nibble, we need to AND with $F000 = $1000 Since we are 1 bit off (only took 11 of the 12 bits from 4+5), we need to shift right 1 bit (divide by 2) $1000 >> 1 = $800 Now, we OR (or add) the 2 results together - $6DE OR $800 = $EDE. We take our $EDE and mult. by $20 (32 decimal) = $1DBC0 -> this is our offset to the first tile in this sprite. Sprite 2: FF F2 20 00 46 0C 00 12 Sizetab = 0 = 1x1 sprite Tile data offset: $460C AND $7FF = $60C $60C + $1000 ($2000 >> 1) = $160C $160C * $20 = $2C180 Sprite 3: FF EA 24 00 43 4C FF FC Sizetab = 4 = 2x1 sprite Tile data offset: $434C AND $7FF = $34C $34C + $1000 ($2000 >> 1) = $134C $134C * $20 = $26980 Sprite 4: FF E2 20 00 46 0B 00 04 Sizetab = 0 = 1x1 sprite Tile data offset: $460B AND $7FF = $60B $60B + $1000 ($2000 >> 1) = $160B $160B * $20 = $2C160 The sprite tiles in the NHL92 ROM start at $45F16. Each tile is 32 bytes of data (4bpp linear = 4 bits per pixel. 64 pixels are in a single tile, so this = 64 * 4 = 256, divide by 8 bits (8 bits = 1 byte), we get 32 bytes). So our tile data for each sprite starts at: $45F16 + $1DBC0 = $63AD6 - 3x2 sprite. 6 tiles = 192 bytes $45F16 + $2C180 = $72096 - 1x1. 1 tile = 32 bytes $45F16 + $26980 = $6C896 - 2x1. 2 tiles = 64 bytes $45F16 + $2C160 = $72076 - 1x1. 1 tile = 32 bytes Using tile molester (used HFD palette, $19C8): Now, we need to assemble them using the global X and Y positions. Since the player is not located on the ice, we don't have an actual start position to work off of. So I will make a canvas big enough for the sprite, and designate a point near the bottom as the position. Usually the position of the player on the ice is where their feet are in the sprite. Let's get the global X,Y for the sprites: Sprite 1: FF F2 19 00 46 DE FF FA Global Y (Byte 0+1) = FF F2 = -14 decimal Global X (Bytes 6+7) = FF FA = -6 Sprite 2: FF F2 20 00 46 0C 00 12 Y = FF F2 = -14 X = 00 12 = 18 Sprite 3: FF EA 24 00 43 4C FF FC Y = FF EA = -22 X = FF FC = -4 Sprite 4: FF E2 20 00 46 0B 00 04 Y = FF E2 = -30 X = 00 04 = 4 Now we can assemble the frame. The black dot in the bottom shadow is the point used for 0,0. What about the Hot Spot of the frame? Let's look at the frame data again: Frame 7: 53 53 00 D8 00 CD 00 40 00 40 00 00 00 00 00 00 00 FF 00 00 00 00 00 FF 00 17 FF F6 00 C8 00 00 00 00 00 FF 00 03 FF F2 19 00 46 DE FF FA FF F2 20 00 46 0C 00 12 FF EA 24 00 43 4C FF FC FF E2 20 00 46 0B 00 04 Hotspot data starts at offset $C, and is 24 bytes long: 00 00 00 00 00 FF 00 00 00 00 00 FF 00 17 FF F6 00 C8 00 00 00 00 00 FF X Hotspot is bytes 12-13 - 00 17 - 23 decimal Y Hotspot is bytes 13-14 - FF F6 - -10 decimal These are offset from the Sort Cord's XY position, just like the sprites. Since we were able to derive the XY position in the frame (the black dot in bottom shadow), we can find the Hot Spot in the frame as well, 23 decimal to the right, and 10 decimal up: The black dot near the end of the stick blade is the Hot Spot. This is where the puck will "stick" to the blade in this frame. Frame Data (NHL93-94) The frame data in 93 and 94 is different than 92. In 92, everything was combined into one Frame Data structure for each frame (Hot spots, # of sprites, sprite data bytes). Here, it is all split up into different lists (probably to save space). Hotlist table - Contains the X and Y Hot Spots for each frame. 1 byte for each Hot Spot, so 2 bytes for each frame. This is indexed using the current frame # of the Sort Cord : X Hot Spot - Hotlist + frame*2 Y Hot Spot - Hotlist + frame*2 + 1 These are used in word size, so after the byte is retreived, it will sign extend it to word size (i.e $17 = 0017, $F6 = FFF6) Hotlist table locations: NHL93 (v1.1) - $743FE ($512 long) NHL94 - $A44CA ($68A long) # of Sprites - There is no data stored for this. Instead, there's a table of offsets to the sprite data bytes. The code will take the current frame's offset, and the next frame's offset, find the difference, divide by 8 (8 bytes per sprite), and find the # of sprites that way. Sprite Data Bytes - The layout for the sprite data bytes is a little different. Sprite data bytes: Byte 0-1: X Global Byte 2-3: Y Global Byte 4-5: Tile offset Byte 6: Palette/HV Flip byte Byte 7: Sizetab byte Note the differences from 92. We have a full byte for Sizetab, 2 bytes for Tile offset, and a full byte for palette and sprite orientation. This makes the data much easier to deal with compared to 92. So there is no need for extra tricky math here. This layout is just like the layout given in Adam's post below. You can look at that post for a better description. The sprite data bytes are accessed by adding the sprite data offset to the start of the list. Let's look at our example again, the SPAskatewp frame 7. Luckily, there are many frames shared across all 3 games, and this is one of them. So the goal in this example is to get the same data that we got in 92, but from the 94 ROM. (Trivia: the animation for SPAskatewp has an extra frame in 92 than in 93 and 94. It's the still frame of the faced direction from the Directions GIF in this post). Ok, let's get the Hot Spot data for frame 7 first, since that is the easiest: Hotlist table starts at $A44C8 in 94. Hot Spots for frame 7: X Hot Spot - $A44C8 + (7 * 2) = $A44D6 address, which is $17. Sign extend, we get 00 17. Y Hot Spot - $A44C8 + (7 * 2 + 1) = $A44D7 address, which is $F6. Sign extend, we get FF F6. OK, Hot Spot is the same as 92. Now, lets find the # of sprites in frame 7: Frame offset list in 94 starts at $9E724. Frame 7 offset: $9E724 + (7*2) = $9E732 address -> 06 DE We also need frame 8 offset: $9E724 + (8*2) = $9E734 address -> 06 FE $06FE - $06DE = $20 (32 decimal). $20 / 8 (8 bytes per sprite) = 4 sprites in frame Same # of frames as 92. Let's get the sprite data bytes for each sprite in the frame: Sprite data offset list in 94 starts at $9E724. Frame 7 offset = $06DE $9E724 + $6DE = $9EE02 Since we found that there are 4 sprites, we need 32 bytes of data, split into 8 bytes per sprite: Data: FF FA FF F2 00 33 40 09 00 12 FF F2 00 39 40 00 FF FC FF EA 00 3A 40 04 00 04 FF E2 00 3C 40 00 Let's break it up: Sprite 1: FF FA FF F2 00 33 40 09 X Global - FF FA - -6 decimal Y Global - FF F2 - -14 decimal Tile data offset - 00 33 - $33 x $20 = $660 Palette/Flip - 40 - no flip, home team palette (can be changed later) Sizetab - 09 - 3x2 sprite Sprite 2: 00 12 FF F2 00 39 40 00 X - 00 12 - 18 decimal Y - FF F2 - -14 decimal Tile data offset - 00 39 - $39 x $20 = $720 Palette/Flip - 40 - no flip, home team palette (can be changed later) Sizetab - 00 - 1x1 sprite Sprite 3: FF FC FF EA 00 3A 40 04 X - FF FC - -4 decimal Y - FF EA - -22 decimal Tile data offset - 00 3A - $3A x $20 = $740 Palette/Flip - 40 - no flip, home team palette (can be changed later) Sizetab - 04 - 2x1 sprite Sprite 4: 00 04 FF E2 00 3C 40 00 X - 00 04 - 4 decimal Y - FF E2 - -30 decimal Tile data offset - 00 3C - $3C x $20 = $780 Palette/Flip - 40 - no flip, home team palette (can be changed later) Sizetab - 00 - 1x1 sprite Let's use the tile data offsets to find the starting tile data address in the ROM for each sprite: Sprite tiles start at $5DE84 in 94. Offsets: 1 - $660 -> $5DE84 + $660 = $5E4E4 (need 6 tiles, so 192 decimal bytes) 2 - $720 -> $5DE84 + $720 = $5E5A4 (need 1 tile, so 32 bytes) 3 - $740 -> $5DE84 + $740 = $5E5C4 (need 2 tiles, so 64 bytes) 4 - $780 -> $5DE84 + $780 = $5E604 (need 1 tile, so 32 bytes) Let's grab the tiles (using VAN home palette, $4828): And assemble them using the X and Y globals, with a reference point and the Hot Spot: Success! Frame 7 from 92 and 94 both look the same here. Adding sprites? Is it possible? Yes, it is! I added the fighting sprites from 93 into 94 here: This is for another topic though. Because all the frame and sprite related info are right next to each other in the ROM, the tables need to be moved, the offsets updated, and some hard coded pointers need changed. A topic for another day. Table and Data Locations: NHL92: SPAList starts at $35B6 (start of frames.asm in ROM) Frame data starts at $3D5F4 (first frame) Sprite tiles start at $45F16 NHL93 (v1.1 ROM): SPAList - $4DBE-$6446 ($16B8 long) Sprite tiles - $3A3B0-$6FAF0 ($35740 long) Frame sprite data offsets - $6FAF0-$70006 ($516 long, first 2 and last 2 bytes are 00 00, so $512 bytes are used for 649 frames) Sprite data bytes - $70006-$743FE ($43F8 long, 2175 total sprites) Hotlist table - $743FE-$74910 ($512 long) NHL94: SPAList - $5B1C-$76B2 ($1B96 long) Sprite tiles - $5DE84-$9E724 ($408A0 long) Frame sprite data offsets - $9E724-$9EDC2 ($69E long, first 2 and last 2 bytes are just used for start and end, so $69A bytes are used for 845 frames) Sprite data bytes - $9EDC2-$A44CA ($5708 long, 2785 total sprites) Hotlist table - $A44CA-$A4B54 ($68A long, which is 16 bytes shorter, 8 frames worth of XY Hot Spots, than the number of frames. The last 8 frames are the extra arrows and stars for the 3rd and 4th player, and they do not have hotspots.) Big time credit and thanks go to @McMarkis and @bcrt2000. The 3 of us worked hard figuring this all out!
    1 point
  29. Hey there friend. There a few settings you can double check. Go into the retroarch video settings and select the scaling menu. Make sure the aspect ratio setting is at core provided. This way, whichever core (emulator) you're using will be able to select the aspect ratio. Next, exit retroarch to save the configuration change. You can obviously skip this step if if you didn't need to change any setting. Start the game and go into the quick menu, core options, video. Make sure the core provided aspect ratio option is set to auto. That should fix any aspect ratio issues. The only time I'm aware of people really changing the aspect ratio in the retroarch settings is if they are using fancy shader packs with bezels. I've personally never had any issues with Genesis. I've only switched from 4:3 to 8:7 aspect ratios on Nintendo consoles. I hope this helps.
    1 point
  30. I have no idea whether you have been nice or not, but I’ll post a new update tomorrow after 3 and half years of absence.
    1 point
  31. Yes built on SNES NHL 94 but using the player attributes based on NHL 97 which came out Fall of 1996 and when the 96 World Cup took place.
    1 point
  32. I think it's based off Nhl94 SNES version. I will download just to make sure.
    1 point
  33. 1 point
  34. If I may interject with an example, this is a version of the NHL95 base game ROM that I was able to make without having to share many tiles. It did consist of minimizing the number of tiles required for each team and being lucky that it worked out. I was just learning how '95 was put together at the time of making this mod so there was a bit of trial and error, but essentially it came down to getting all of the important bits in there and then a lot of counting tiles when it came to the hex editor portion. All of those striped bits at the bottom represent the location of the hex code that determines how the banner tiles are arranged. The banners are 11 tiles wide, so you can set your hex editor to [11x2] 22 bytes per row to get the data lined up, but then it's counting and putting in the numbers. [I'm glazing over a lot, but this is basically the workflow once you're familiar with the basics] Another option I'd used before was mono-spaced fonts and sharing all of the letters, but that's leaning into the tile counting even further. Actually it looks like I used this method for the team banners in the Pause Menu since there are less tiles to work with. Should probably reiterate that the 34-team mod is a little easier to work with in this regard.
    1 point
  35. Old School TSB NCAA Football NCAA 1970-81.nes
    1 point
  36. If you're using the 34 team ROM, here are the references on how to change the team banners: If you're using the base ROM, that's quite a bit more involved because as you mention, the banners share tiles.
    1 point
  37. I'm gonna come out and say that ANY mod research project prior to original six is HARD work. Especially turn of the century stuff. Record keeping was not the greatest, sources are not completely accurate and unraveling details and tracing back correct information is crazy... (Is his name Harry, or Elmer or Fudge? WHAT IS IT!!?) I have been working on the NHL 94 counterpart to UltraMagnus' project here, and I can confirm - LOTSA WORK
    1 point
  38. A modern-day Jim Simmons, you've attacked this idea with incredible professionalism and taught us even more about the game in the last 10-12 months. All it took was learning to code in a 20+ year-old dead programming language. Thanks for pushing this idea through to completion - incredible work.
    1 point
  39. SIDE TRACK incoming So... years ago when I was modding FIFA International Soccer using the old school blunt force methods from these parts (think BEFORE NOSE etc) I came across some entries in the roster data that was for the team managers. They didn't show up in the roster scroll during squad edits, but I recall changing some of the data and they'd be referenced ingame. I wish I could remember exactly how it was done, but I think it was similar to this hack of switching the bytes to make F into D etc.
    1 point
  40. @von Ozbourne Sometimes the game can crash immediately before the PowerPlay clock initializes. This happens most often when multiple players receive penalties at the exact same moment, or are released from the penalty box at the exact same moment. This patch prevents this crash from happening. Original @ 0x12A2E 4240 4243 41EA 009A Revised @ 0x12A2E 4240 4EB9 001F F800 Patch @ 0x01FF800 4243 347C C6CE 47EA 0364 0838 0006 C2EE 6602 C54B 41EA 009A 4E75
    1 point
  41. When I added in tunnels to the dressing room, it took me a few days of working on evenings and weekend to do up the initial design. The implementation plan to make it technically possible took me a few months, without any guarantee that I could ever get it to work. And that's a success story. I've had countless other ideas that I failed to ever be able to implement, after weeks or months of work. There are so many great ideas out there, but part of the reason that all of our ROMs look different is because the implementation within the technical limitations of the game is SO labour intensive.
    1 point
  42. Here it is! Completely revamped and powered up, my All Time Legends roster hack! I'll try and re-explain and summarize what this hack is about I wanted to keep it as Vanilla 95 as far as the aesthetics as possible, other than splash/intro screens and some of the team banners/logos (Special Thanks to von Ozbourne for helping with that stuff!) I considered making the ice darker like NHL 94 for example but, kept it the light default color, since 95 players probably prefer that. Other small changes that are unique are the pre-game menu team ratings, they're all high of course, based on how many finals they reached, stanley cups each team won, how often they made the playoffs, the actual level of legends their franchise has had over the years, etc. The goal of this was to have rosters for each team made up of players who 1. Played for that franchise for the most games/seasons 2. Scored the most points for that specific franchise 3. Were important players during a special season or winning season for that team. Most players are around the top 20 of all time scorers for the specific franchise, with some exceptions for defenseman, and other situations. Some examples of this would be: Ray Bourque being on Colorado even though he only played there for 2 seasons, because he won the cup there, or Chris Pronger on Anaheim for the same reason. No player will be on more than 3 teams total in this game! This game was meant to be played for Season Mode with Edit Lines on and Penalties on (no offsides of course). Specifically it was made for doing full-control seasons, without simulating any games automatically, since simulating typically is unbalanced as far as team records are concerned. See what team is truly the greatest team in a whole season! I've been doing it by having the cpu play eachother in many of the games (7 minutes is recommended for that with fast forward on your emulator, gets more goals from the cpu!) and then just playing a few games for each team. It's kind of a cool way to nerd out, follow your own season and all the stats for each player/team if you're bored and just wanna play offline! But also, it was meant to be played in historically accurate playoff series! Playoff mode was carefully edited to have every single season's 16 playoff teams be from an actual NHL season, from 91-92 through 22-23. Of course later seasons use the 1-4 1-4 so, for those they simply match up so the top two matchups on the playoff tree in each conference are from one division, and the bottom two matchups are from the other! Some adjustments to the schedule had to be made but all 26 original teams are in Season Mode, yet still all 32 teams (plus all star teams) are in the game! This is a big issue for all the other NHL 95 34 team hacks out there. The teams used in Season Mode are alphabetical, so if you put them A-Z, some important teams are left out. Instead, The original 26 franchises are A-Z, and then the 6 new franchises are A-Z following. Since it's a 'All Time Hack' it makes more sense to use franchises that have been around for 3 decades or more. The 1 team I was unsure what to do with was Winnipeg, as they take up two franchises, so I just decided to have Winnipeg be used in Season Mode as that city has a much richer hockey history than Arizona, and I simply combined players from both franchises since they are both technically Winnipeg from a historical standpoint! Arizona is just players from the original Winnipeg franchise and Phoenix/Arizona. So of course, there have been many other all time roster hacks over the years, so I needed to do something different for this to stand out. The main difference is: Using different players from many different decades for more variety. I wanted to have current players who are still increasing their points and games played for their current franchise on every team! So for example you might see a roster like Montreal and think hey, a few of these guys aren't among their 'best players ever.' Mind you there's a Max of 26 players on each team, with at least 2 being goalies, so Original 6 teams were the hardest to do. But I wanted players from the important seasons for each team, and spread across many decades on those teams. Teams like Montreal might not have as many 'historic legends' from the last 30 years but, those players still are important to their history, especially the ones up there in the all time games played list for the team. It would be boring and repetitive to just have only dynasty players for those teams! Take Philadelphia, players included would be from Philadelphia's 70s, 80s, 97, and 2010 finals teams, mixed in with a couple of their best current players, and other players among the top 15 in Games/Points. It makes the rosters different from these other hacks, and you still have the choice to use only those dynasty and top top legend teams for your Edit Lines. Hopefully I've explained the rosters well enough! I know some people will see a few players and think 'WHY IS HE HERE, AND NOT HIM?' But I can assure you pretty much all the obvious players for each franchise will be there. I definitely didn't go back further than the 1940s as my knowledge doesn't go that far back, and there's already such a wide player pool for the original 6. On top of that, you're really only using 9 forwards and 6 defenseman for the lines, 1 goalie, so I figure hey, the important guys will be on the lines, and if you disagree with some of them, change the lines, open NOSE and change the default lines or edit a few players yourself if you want, make it your own! Anyway, forgive the essay of describing lol I'll shutup now Hope some people truly enjoy this hack! NHL 95 All-Time Legends.bin
    1 point
  43. OK, I'm going to try to actively work on this again after a bit if a hiatus. Since the last update I did go through and create more jersey templates and also finalized the designs for the NHL94 default jerseys (based them off the NHL 95 PC jerseys but some of them needed to be tweaked to be more accurate). They still need to be converted to 3bit color & auto shaded (which I believe I've already written a script to do-- its been a while I've looked at all of this and need to remember what scripts do what 😅) BTW I realize the palette zones are complete broken on the cross checking sprite on the arms and torso-- thats how they are in NHL 95. Whoever worked on them didn't know what they were doing and/or didn't verify they drew those sprites correctly. If this project is successful, I definitely will come back around and fix those sprites. Next steps: create a script that can then render the jerseys out to template sprite sets + per team palettes Import templates & palettes into ROM Update animation frame rendering logic to select correct Jersey Template if above works, continue with work for crest & numbers: create a script that can render crest definition to crest + crest variation tiles & numbers out to number + number variation tiles Figuring out the most efficient way to place the dummy Crest & Number tiles on the animation frames reimport templates into rom update animation frame rendering logic to select correct crest variation & number variation
    1 point
  44. Thanks for liking it. Actually I have to admit that I was confused by your question. I had been tweaking things with a "test bed" ROM for so long that I'd forgotten that this one wasn't already wide screen. i also have to admit that I've gotten so used to the look of wide mode that going back the old-fashioned square screen looks weird. I'll probably roll that out with or shortly after version 1.0 is done [basically just waiting for the teams to figure out their final rosters at this point] Although now I'm wondering if a separate non-wide mode is worth it anymore. Maybe that's too drastic a step and a proper survey should be conducted before making any rash decisions. As for the net camera, to be honest, and I've seen a couple interpretations, but I never really liked the look of it. Given how few pixels there are to work with, it's either a choice of making something big, chunky and ugly, or small, obscure and ugly. Either way, there are some trade offs to be made and I just prefer to keep a clean look for some things.
    1 point
  45. I attached a ZIP file containing the frames for 92-94 in BMP form (this is the output from the EA-NHL-Tools posted above). NHL92-94_Frames.zip
    1 point
  46. While this example was all done manually, @bcrt2000 has made a tool to extract the frames automatically and store them as BMPs. Check it out here - https://github.com/abdulahmad/EA-NHL-Tools
    1 point
  47. So another hockey season is upon us, and I'm 'out the game' on the yearly roster update treadmill, but a few months ago I had some ROM ideas that I've been picking at. Inspired by the Madden '93 Championship Edition, I decided to make a rom featuring the best season from each franchise between NHL 94's release in the fall of 1993 and up to today. Each team will have their roster, uniform, logo, etc... from the season chosen. I wanted to have a balance of teams from all eras, and decided upon the following team lineup: -Anaheim 2007, Cup champs, Giguere/Pronger/Niedermayer/Selanne/Getzlaf -Arizona 2012, Conf finalist, Smith/Yandle/Ekman-Larsson/Whitney -Boston 2011, Cup champs, Thomas/Chara/Bergeron/Marchand -Buffalo 2007, Conf finalist, Miller/Campbell/Vanek/Briere/Drury -Calgary 2004, Cup finalist, Kiprusoff/Iginla -Carolina 2006, Cup champs, Ward/Cole/Staal/Williams -Chicago 2013, Cup champs, Crawford/Keith/Hossa/Toews/Kane -Colorado 2001, Cup champs, Roy/Bourque/Blake/Forsberg/Sakic -Columbus 2019, Lost in 2nd round, Bobrovsky/Werenski/Panarin/Duchene -Dallas 1999, Cup champs, Belfour/Zubov/Hatcher/Modano/Hull -Detroit 1998, Cup champs, Lidstrom/Shanahan/Yzerman/Fedorov -Edmonton 2023, Lost in 2nd round, Ekholm/McDavid/Draisaitl -Florida 2023, Cup finalist, Tkachuk/Barkov -LA 2012, Cup champs, Quick/Doughty/Kopitar/Williams -Minnesota 2015, Lost in 2nd round, Suter/Parise/Koivu/Vanek -Montreal 1993, Cup champs, Roy/Desjardins/Muller/Damphousse -Nashville 2017, Cup finalist, Rinne/Josi/Subban/Forsberg -NJ 2003, Cup champs, Brodeur/Niedermayer/Stevens/Elias/Gomez -NYI 2020, Conf finalist, Lee/Barzal/Bailey -NYR 1994, Cup champs, Richter/Zubov/Leetch/Larmer/Messier/Kovalev -Ottawa 2007, Cup finalist, Redden/Alfredsson/Spezza/Heatley -Philly 1997, Cup finalist, Desjardins/Leclair/Lindros/Renberg -Pittsburgh 2017, Cup champs, Letang/Malkin/Crosby/Kessel -SJ 2010, Conf finalist, Nabokov/Boyle/Blake/Marleu/Thornton/Heatley -Seattle 2023, Lost in 2nd round, Dunn/McCann/Beniers -St Louis 2019, Cup champs, Pietrangelo/Parayko/O'Reilly/Tarasenko -Tampa Bay 2021, Vasilevskiy/Hedman/Point/Stamkos/Kucherov -Toronto 2023, lost in 2nd round, Reilly/Tavares/Matthews/Marner -Vancouver 1994, Cup finalist, Lumme/Brown/Linden/Bure -Vegas 2023, Cup champs, Pietrangelo/Marchessault/Eichel/Stone -Washington 2018, Cup champs, Holtby/Carlson/Ovechkin/Backstrom/Kuznetsov -Winnipeg 2018, Conf finalist, Hellebuyck/Byfuglien/Trouba/Laine/Scheifele/Wheeler This has not been exhaustively tested, so please feel free to leave suggestions or corrections, particularly regarding team/player ratings for balance! Otherwise, this has all the features of my other roms; weight bug, uniform sprite enhancement, graphic hacks on benches and ice lines, updated 3-star formula....etc. NHL 94 30th Anny - Championship Teams.bin
    1 point
  48. I'd like to share a short film that I made for a school assignment last April. I prefer nhl 94 for the snes, but i only had the 95 cartridge at the time (but nhl 95 for the pc is my favourite of the classics).
    1 point
×
×
  • Create New...