Recommended Posts

Hey all, I've been working on a hack of the original nhl 94 rom for a while, but I learned about wboy's 30-team rom, which, to be honest, is much easier to edit. So since I already had about 20 teams implemented into my game, I decided to transfer the data over to wboy's rom. So since I had a lot of typing to do, I tried to copy and paste a team on top of the data of the Boston Bruins (the team was just an edited version of the bruins so it worked fine) and it worked, but there is just one little issue: It seems the data for the players (and just the players, I only copied the players and not the entire block of code for the team) is just a little bit shorter than the data on the 30-team rom. Based on the screenshots below, I can tell that this extra chunk of data (highlighted in red) in the team's code is throwing the game off a bit, and it seems to be reading the arena name as a player but with no stats, which is probably the cause of the issue. I tried deleting this chunk of data and replacing it with empty bytes, but nothing worked. Can anyone help me out here?Screen Shot 2018-03-29 at 10.52.22 AM.pngScreen Shot 2018-03-29 at 10.50.49 AM.png

Share this post


Link to post
Share on other sites

You should use NOSE -- http://forum.nhl94.com/index.php?/topic/14217-nose-12b-download/ to transfer over your rosters.

 

This amazing program from wboy will save you TONS of time.  You will literally copy and paste rosters over and the program automatically reshuffles the free bytes for you.  

Make sure to click "auto free bytes" on the teams tab in NOSE.  Highly suggest you get familiar with that program, it's remarkable.

 

  • Like 1

Share this post


Link to post
Share on other sites
6 minutes ago, kingraph said:

You should use NOSE -- http://forum.nhl94.com/index.php?/topic/14217-nose-12b-download/ to transfer over your rosters.

 

This amazing program from wboy will save you TONS of time.  You will literally copy and paste rosters over and the program automatically reshuffles the free bytes for you.  

Make sure to click "auto free bytes" on the teams tab in NOSE.  Highly suggest you get familiar with that program, it's remarkable.

 

Hi kingraph - I've been wanting to use NOSE for a while - but I use a mac. Yeah, I know, Mac sucks, I should probably use WINE or something to emulate windows, but I can't run it on vanilla Mac. If I absolutely have to, I'll get WINE and try out NOSE but I also like the satisfaction of coding the game myself, so if anyone has a solution that would be great. Thanks for the response though and I'll look into nose.

 

Share this post


Link to post
Share on other sites

After hours of attempting to get nose to run on a mac, it's a no-go. Does anyone know how I can redistribute player character lengths? I edit the pointer for the player's name length to display the correct length but the game apparently has no clue how to make this work. Is there anything on this forum with a tutorial for how to redistribute name lengths?

 

Share this post


Link to post
Share on other sites
1 hour ago, KTup710 said:

Hi kingraph - I've been wanting to use NOSE for a while - but I use a mac. Yeah, I know, Mac sucks, I should probably use WINE or something to emulate windows, but I can't run it on vanilla Mac. If I absolutely have to, I'll get WINE and try out NOSE but I also like the satisfaction of coding the game myself, so if anyone has a solution that would be great. Thanks for the response though and I'll look into nose.

 

You may need to change the Team Name Pointer in the Team Data located before the Player Data. You need to set it to the correct offset. And I think you pad empty player data with FFs, not 00s. 

Share this post


Link to post
Share on other sites
16 minutes ago, KTup710 said:

After hours of attempting to get nose to run on a mac, it's a no-go. Does anyone know how I can redistribute player character lengths? I edit the pointer for the player's name length to display the correct length but the game apparently has no clue how to make this work. Is there anything on this forum with a tutorial for how to redistribute name lengths?

 

Try using VirtualBox. It's free to download, then get a Win 7 or XP ISO from the internet, without a license it will still run fine. Pretty simple to set up, but you should be able to run NOSE through it without having to dual-boot to Windows.

 

I have the info for SNES. It is the same as Genesis, except some bytes might be swapped (Little Endian vs. Big Endian). But you can get the general idea where to look for things. The pointers will be at a different location, I believe.

 

SNES ROM Data Offsets (in Hex):

Team Pointers (E27E7 (927719) - E2856 (927830):
Points to Team Data Offsets.  This list determines the order of the teams in the ROM.  Starting Pointer position is at E27E7 (for ANH).  The Team Data is not in the same order, some teams are out of order (Ex., ANH and FLA are at the end).

Reading Pointers:

Each pointer is 4 bytes (the last 2 bytes are 9C 00, not needed).  The first 2 bytes need to be converted to be used to point to the start of Team Data.

Example - Anaheim: 

E27E7 E27E8- 4F EB

Swap bytes (because of Little Endian)- EB 4F

Subtract 80 00 - 6B 4F

Add 02 00 (Header offset) - 6D 4F

Add 0E 00 00 - 0E 6D 4F = Team Data Pointer

Simplified:

EB 4F + 0D 82 00 = 0E 6D 4F

Start of Team Data:

E2857 (First Instance of 55 00 0E 00).  First Set of Data is for ASE team in original ROM (Team in ASE position)

Starting with E2857:

0 and 1: Offset + 5500 (85 bytes in decimal) : Player Data Start
2 and 3: Offset + 0E00 (14 bytes): Palette?

4 and 5: Start of Team Name Length bytes (Offset + value)

6 and 7: ???

8 and 9: Next 2 bytes: Palette again (seems to always be 0E 00)?

10 and 11: Number of Goalies - Offset + value (Value seems to always be 13 00 or 19 in dec) .  

12 and 13: (15 00 normally) - Lines - Offset + value (15 00 or 21 bytes in dec).  

14: Offense and Defense Strength

15: Home and Away Strength

16: PP and PK Strength

17: Number of Players.   First nibble is # of F, second is # of D

18: Overall Rating.  Value in Hex.

19 and 20: Number of Goalies.  The 2 bytes starting at that position control number of goalies on team, up to 4 (11 00 for example would be 2 goalies).  All non zero values are a goalie.  

21: Lines.  Values are roster offset, starting with 1 (not zero).  G, LD, RD, LW, C, RW, XA (7 bytes).  Spaced with a 00 between lines.  Best, SC1, SC2, CHK, PP1, PP2, PK1, PK2.  Block starts and also ends in 00.

Player Data:

Player Data Starts 85 bytes (0x55) from Start offset

XX 00 "PLAYER NAME" XX 123456789ABCDE

XX = "Player name length" + 2 (the two bytes in front of the name) in hex.
00 = Null (Nothing)

"PLAYER NAME"

XX = Jersey # (decimal)

1 = Weight
2 = Agility

3 = Speed
4 = Off. Aware.

5 = Def. Aware.
6 = Shot Power

7 = Checking
8 = Stick Hand (Uneven = Right. Even = Left. 0/1 will do.) 

9 = Stick Handling
A = Shot Accuracy

B = Endurance
C = ? (Roughness on Genesis)

D = Passing
E = Aggression

=========================
--## ## ## ## ## ## ## --
=========================



=========================
-- GOALIE STATS --
=========================

XX 00 "PLAYER NAME" XX 123456 789A BCDE

XX = Player name length + 2 (the two bytes in front of the name) in hex.
00 = Null (Nothing)

"PLAYER NAME"

XX = Jersey # (decimal)

1 = Weight
2 = Agility
3 = Speed
4 = ?
5 = Def. Aware.
6 = Puck Cont.

7 = ? (0)
8 = Handness (Uneven = Right. Even = Left.)
9 = ? (0)
A = ? (0)

B = Stick Right
C = Stick Left
D = Glove Right
E = Glove Left

At the end of the Player Data, before the start of Team Name Data, there are 2 bytes (02 00).

Team Name Data:

Team Name Data starts at the end of Player Data (offset given in First 2 bytes after 15 00 0E 00 in Team Data).

First offset: Length of Team City (including this byte)

 AA 00 "TEAM CITY" BB 00 "TEAM ABV" CC 00 “TEAM NICKNAME” DD 00 “TEAM ARENA”

AA - Length of Team City (includes AA and 00)
BB - Length of Team Abv (includes BB and 00)
CC - Length of Team Nickname (includes CC and 00)
DD - Length of Team Arena (includes DD and 00)

All Name Data is in ASCII format.

 

Share this post


Link to post
Share on other sites
46 minutes ago, chaos said:

Try using VirtualBox. It's free to download, then get a Win 7 or XP ISO from the internet, without a license it will still run fine. Pretty simple to set up, but you should be able to run NOSE through it without having to dual-boot to Windows.

 

I have the info for SNES. It is the same as Genesis, except some bytes might be swapped (Little Endian vs. Big Endian). But you can get the general idea where to look for things. The pointers will be at a different location, I believe.

 


SNES ROM Data Offsets (in Hex):

Team Pointers (E27E7 (927719) - E2856 (927830):
Points to Team Data Offsets.  This list determines the order of the teams in the ROM.  Starting Pointer position is at E27E7 (for ANH).  The Team Data is not in the same order, some teams are out of order (Ex., ANH and FLA are at the end).

Reading Pointers:

Each pointer is 4 bytes (the last 2 bytes are 9C 00, not needed).  The first 2 bytes need to be converted to be used to point to the start of Team Data.

Example - Anaheim: 

E27E7 E27E8- 4F EB

Swap bytes (because of Little Endian)- EB 4F

Subtract 80 00 - 6B 4F

Add 02 00 (Header offset) - 6D 4F

Add 0E 00 00 - 0E 6D 4F = Team Data Pointer

Simplified:

EB 4F + 0D 82 00 = 0E 6D 4F

Start of Team Data:

E2857 (First Instance of 55 00 0E 00).  First Set of Data is for ASE team in original ROM (Team in ASE position)

Starting with E2857:

0 and 1: Offset + 5500 (85 bytes in decimal) : Player Data Start
2 and 3: Offset + 0E00 (14 bytes): Palette?

4 and 5: Start of Team Name Length bytes (Offset + value)

6 and 7: ???

8 and 9: Next 2 bytes: Palette again (seems to always be 0E 00)?

10 and 11: Number of Goalies - Offset + value (Value seems to always be 13 00 or 19 in dec) .  

12 and 13: (15 00 normally) - Lines - Offset + value (15 00 or 21 bytes in dec).  

14: Offense and Defense Strength

15: Home and Away Strength

16: PP and PK Strength

17: Number of Players.   First nibble is # of F, second is # of D

18: Overall Rating.  Value in Hex.

19 and 20: Number of Goalies.  The 2 bytes starting at that position control number of goalies on team, up to 4 (11 00 for example would be 2 goalies).  All non zero values are a goalie.  

21: Lines.  Values are roster offset, starting with 1 (not zero).  G, LD, RD, LW, C, RW, XA (7 bytes).  Spaced with a 00 between lines.  Best, SC1, SC2, CHK, PP1, PP2, PK1, PK2.  Block starts and also ends in 00.

Player Data:

Player Data Starts 85 bytes (0x55) from Start offset

XX 00 "PLAYER NAME" XX 123456789ABCDE

XX = "Player name length" + 2 (the two bytes in front of the name) in hex.
00 = Null (Nothing)

"PLAYER NAME"

XX = Jersey # (decimal)

1 = Weight
2 = Agility

3 = Speed
4 = Off. Aware.

5 = Def. Aware.
6 = Shot Power

7 = Checking
8 = Stick Hand (Uneven = Right. Even = Left. 0/1 will do.) 

9 = Stick Handling
A = Shot Accuracy

B = Endurance
C = ? (Roughness on Genesis)

D = Passing
E = Aggression

=========================
--## ## ## ## ## ## ## --
=========================



=========================
-- GOALIE STATS --
=========================

XX 00 "PLAYER NAME" XX 123456 789A BCDE

XX = Player name length + 2 (the two bytes in front of the name) in hex.
00 = Null (Nothing)

"PLAYER NAME"

XX = Jersey # (decimal)

1 = Weight
2 = Agility
3 = Speed
4 = ?
5 = Def. Aware.
6 = Puck Cont.

7 = ? (0)
8 = Handness (Uneven = Right. Even = Left.)
9 = ? (0)
A = ? (0)

B = Stick Right
C = Stick Left
D = Glove Right
E = Glove Left

At the end of the Player Data, before the start of Team Name Data, there are 2 bytes (02 00).

Team Name Data:

Team Name Data starts at the end of Player Data (offset given in First 2 bytes after 15 00 0E 00 in Team Data).

First offset: Length of Team City (including this byte)

 AA 00 "TEAM CITY" BB 00 "TEAM ABV" CC 00 “TEAM NICKNAME” DD 00 “TEAM ARENA”

AA - Length of Team City (includes AA and 00)
BB - Length of Team Abv (includes BB and 00)
CC - Length of Team Nickname (includes CC and 00)
DD - Length of Team Arena (includes DD and 00)

All Name Data is in ASCII format.

 

You're literally a hero bud. This is all I needed, now I can copy/paste and just make a few changes to make the game recognize the bytes. I might try virtualbox, but this is all I really need to get the work done in my hex editing software. Have a great day, thanks so much.

  • Like 1

Share this post


Link to post
Share on other sites

Thanks guys, without you this project I'm working on would be just a pipe dream.

 

Share this post


Link to post
Share on other sites
5 hours ago, KTup710 said:

Thanks guys, without you this project I'm working on would be just a pipe dream.

 

Good luck, any questions let me know. The note about Little Endian doesn't apply to Genesis, you dont have to flip the bytes. So the stuff that uses 4 bytes (like  Team Pointers) will already be in the correct format.

 

Example - Anaheim: 

E27E7 E27E8- 4F EB (In Genesis, it will already be EB 4F)

Swap bytes (because of Little Endian for SNES)- EB 4F

 

I use 0xED for Hex editor in Mac. Use the older version though, the newer one for 10.11+ has when cutting and pasting I remember.

http://www.suavetech.com/0xed/ - I use 1.0.11 on newer Mac OS and it works fine.

Make the spacing in bytes too, makes it easier to look at.

Share this post


Link to post
Share on other sites
1 hour ago, chaos said:

Good luck, any questions let me know. The note about Little Endian doesn't apply to Genesis, you dont have to flip the bytes. So the stuff that uses 4 bytes (like  Team Pointers) will already be in the correct format.

 


Example - Anaheim: 

E27E7 E27E8- 4F EB (In Genesis, it will already be EB 4F)

Swap bytes (because of Little Endian for SNES)- EB 4F

 

I use 0xED for Hex editor in Mac. Use the older version though, the newer one for 10.11+ has when cutting and pasting I remember.

http://www.suavetech.com/0xed/ - I use 1.0.11 on newer Mac OS and it works fine.

Make the spacing in bytes too, makes it easier to look at.

I appreciate all the help bud, I've been using a program called hex fiend for the past few month and I'm pretty comfortable with it, it's pretty simple, but maybe I'll check it out, thanks again and have a good one!

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

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

    There are no registered users currently online