Sign in to follow this  
top shelf

SNES 93 - Expanding ROM to more teams

Recommended Posts

You can now download:

SNES 93 with checksum disabled

SNES 93 with checksum disabled and expanded

This now means you edit this game in an hex editor without it crashing. However, will add some offsets soon so hopefully and editor can be put together.

It may not have the whistles and bells of the other games - but the game play is really great.

93.zip

Share this post


Link to post
Share on other sites

To kick off - Team offsets for 93. Please tell me if any data is incorrect.

Team Offset

BOS 0001858B

BUF 00018833

CGY 00018AE6

CHI 00018D83

DET 00019032

EDM 000192DD

HFD 0001957E

LI* 00019ADF

LA* 00019823

MIN 00019D7D

MTL 0001A00E

NJ 0001A2D8

NYR 0001A583

OTW 0001A83F

PHI 0001AA52

PIT 0001AD02

QUE 0001AF9D

SJ 0001B26A

STL 0001B516

TBY 0001B7C3

TOR 0001B9FA

VAN 0001BCA8

WSH* 0001C204

WPG* 0001BF4F

ASE 00018068

ASW 000182F6

Share this post


Link to post
Share on other sites

Goalie offsets

ASE 0x000180BC

ASW 0x0001834A

BOS 0x000185DF

BUF 0x00018887

CGY 0x00018B3A

CHI 0x00018DD7

DET 0x00019086

EDM 0x00019331

HFD 0x000195D2

LAK 0x00019887

NYI 0x00019B33

MIN 0x00019DD1

MTL 0x0001A062

NJD 0x0001A32C

NYR 0x0001A5D7

OTW 0x0001A893

PHI 0x0001AAA6

PIT 0x0001AD56

QUE 0x0001AFF1

SJS 0x0001B26A

STL 0x0001B56A

TBL 0x0001B817

TOR 0x0001BA4E

VAN 0x0001BCFC

WPG 0x0001BFA3

WSH 0x0001C258

Share this post


Link to post
Share on other sites
To kick off - Team offsets for 93. Please tell me if any data is incorrect.

Just adding a note: top shelf's offsets are without a header. If your ROM starts with a bunch of '00' values in the first 0x0200 bytes, then that's a header and it can be removed so these offsets work for you. If you want to keep the header (though it's totally useless), add 0200 onto top shelf's offsets.

Also, the team pointers can be found at 0x018000 (no offset). These are useful for editors since they allow you to discover the display order of the teams, and to change the display order. (See this post for an explanation of how SNES pointers work: http://forum.nhl94.com/index.php?showtopic=11634)

Goalie presence pointers are at an offset of 0x54 within each team.

Share this post


Link to post
Share on other sites

At the start of each team data section is the value 0x8e, which is the length of the team's header. skip ahead 8e bytes to get to the first player in the team.

Offset 0x04: 2-byte little-endian value of the length of the team data up to the team city name. for boston, it's 9B02, which is 029B in big-endian. skip ahead 029B bytes and you are 2 bytes ahead of the 'Boston' string (the 2 bytes are the length of the city name, 0800->0008)

I think that at an offset of 0x4c into each team are the offense/defense/home/away/pp/pk strengths

Share this post


Link to post
Share on other sites
Also, the team pointers can be found at 0x018000 (no offset).

All the team pointers also seem to come contain the bank byte ($83) - this makes sense/ looks correct for the bank starting 0x018000. On the expanded rom the free bytes start at 0x0080000. It should be bank $90 (from what I understand). Apparently it should be possible to change just the pointer without an ASM hack but I can't get it to work - Probably I'm doing something wrong/missing something!!! .

Smoz - perhaps you want to have a look (did you notice this when you came across the team pointers?).

Share this post


Link to post
Share on other sites
All the team pointers also seem to come contain the bank byte ($83) - this makes sense/ looks correct for the bank starting 0x018000. On the expanded rom the free bytes start at 0x0080000. It should be bank $90 (from what I understand). Apparently it should be possible to change just the pointer without an ASM hack but I can't get it to work - Probably I'm doing something wrong/missing something!!! .

Smoz - perhaps you want to have a look (did you notice this when you came across the team pointers?).

i'm afraid i don't know about this bank stuff.. do you have a document i can read about it?

Share this post


Link to post
Share on other sites

About the SNES memory map.

http://www.zophar.net/documents/snes/snes-memory.html

http://www.romhacking.net/docs/%5B193%5Dmemmap.txt

Is quite a lot of pages about this.

I can't find a lot of stuff about how to use the free space of an expanded rom.

About using free space for NES

http://kingmike.emuxhaven.net/romhelp/NESromexp.txt

Share this post


Link to post
Share on other sites

Sorry, if the $90 bank didn't work, I don't know where to go from there. I tried it and it looks like it doesn't even read that bank number in the pointer, it just keeps using the $83 bank.

Share this post


Link to post
Share on other sites

I found this info:

The Data Bank Register is used to reach out to any address within the 16 megabyte address space of the 65816. When any of the addressing modes that specify a 16-bit address are used, the Data Bank byte is appended to the instruction address. This allows access to all 16 megabytes without having to resort to 24-bit addressing instruction, and helps enable code that can operate from any bank.

http://www.defence-force.org/computing/oric/coding/annexe_2/

I think this suggests that somewhere in the code, there is an instruction loading data bank $83 in the Data Bank Register, and then the team info is being retrieved using just the lower 2 bytes of the pointer -- the specified data bank is ignored. That must be why you usually need to change the code of the game when expanding a ROM...

Share this post


Link to post
Share on other sites

I was able to get it to read a team name from expanded memory!

I'll write up a HowTo for fixing the game... I don't want to fix it all, since it will be a fair bit of work to convert the whole game to read team names and such from expanded memory.

Edited by smozoma

Share this post


Link to post
Share on other sites

Here is my tutorial / brain dump for getting a ROM to read data from the expanded memory banks.

---------------------------------

Part 1 - get software, expand ROM

---------------------------------

download lunar expand and unzip it to somewhere.

download snes9x debugger v1.43 ep9r8 ("Full" version)

The debugger is zipped in the 7zip format (better than plain zip). If you don't have software for that, get it at http://www.7-zip.org/

Unzip the snes9x debugger somewhere.

Make a copy of the ROM. this is the ROM you'll edit.

open the copy in the debugger. it'll complain about a header. say yes/ok to delete the header. close the debugger.

expand the copy of the ROM to 1 MB

---------------------------------

Part 2 - copy team data to extended memory

---------------------------------

copy the data from 18000-1c4b8 and paste to 80000

in the pointers at 80000-80067, change the databank parts, $8300, to $9000.

What databank did we move it to?

The original databank is 83 (hex), and the location is 18000 (hex). Subtract 80 to get 3. Databank 83 corresponds to the ROM offset at 3 times 8000, which is 18000.

We copied data to location 80000. 80000 divided by 8000 is 10. Therefore, it's databank 10+80 = 90.

---------------------------------

Part 3 - set up our test data

---------------------------------

We're going to change some values on PIT and CHI (the default teams) so we can see if our fixes work.

DO NOT CHANGE THE ORIGINAL DATA IN BANK 83! We're trying to get our changes in the expanded bank to display.

@82D52, change  55, PIT's shooting and skating ratings to 34
@82d92		  "Barrasso" to "Bxrrasso"
@82DD0		  0F, the length of Lemieux's name, to 0D, to cut off the last 2 chars of his name ("Mario Lemie")!
@82DD8		  "Lemieux" to "Lxmieux"
@82DDF		  66, Lemieux's number, to 11
@82DE1		  CF to 99 to change Lemieux's speed and offensive awareness each to 60.
@82F8E		  "Pittsburgh" to "Pxttsburgh"
@82F9A		  "PIT" to "PXT"

Make corresponding changes for Chicago, because we need to make sure we catch any cases where the code is separate for the home and away teams.

There will be more things to try changing later, but that's all I'll specify for now...

---------------------------------

Part 4 - the fix I already found for the menu screen

---------------------------------

First I'll explain what the code is doing, then I'll explain how to fix it (it's obvious once you understand the code, though). Having this background should make it easier to correctly find the code to change.

Part 5 will explain how to actually find these bits of code to change.

(note: before the code below, the "Y" register is set to the team index, times 4. So if Boston (team 0) is selected in the main menu, Y = 0x4 = 0. If BUF (team 1), Y = 1x4 = 4...

@7f28f

value: A90080

Go to this webpage:

http://www.defence-force.org/computing/oric/coding/annexe_2/

Search for the value A9. You'll see that A9 is a CPU instruction called "LDA #constant". It LoaDs 'The Accumulator' (the "A" in "LDA") with the value "constant" (ie a number, as opposed to an address or register).

In this case, "constant" is 0080. Because we're on the SNES, this is a big-endian number (ie its bytes are backwards). In little-endiant, it's 8000. This happens to be the value that would correspond to the first byte in a databank! In this case, it corresponds to the team pointers found at 018000 in the ROM (or 0083:8000 in databank notation). But how does it know what databank to use?.... Let's look at the next instructions:

value: 8537

85 = STA directpage

I guess we are SToring the Accumulator (which holds the value 8000) in page 37.. whatever that means.. Next instruction:

value: A98300

Another LDA #constant, this time with the value (in little-endian) of 0083.. our databank!

value: 8539

STA directpage 39

Store the databank value in 39...

value: B737

B7 = LDA [dp],Y. It's LoaDs the Accumulator with a value from a directpage(??), with an offset of Y (where, in this case, Y is the team index times 4).

In the debugger, I found that when selecting Boston in the main menu this instruction set the Accumulator to the value "858B" -- which is the pointer for Boston!

So, I guess when using LDA, it uses directpage 39 to store the databank to use? Maybe that's configured in code earlier than here.. but for the time being, I'll assume it's irrelevant.

So, obviously, the fix for this code is to set the "8300" at offset 7F295 to "9000" in the A9/LDA instruction. Do this and save your ROM...

Run the ROM, and you should see the team names displayed as Pxttsburgh and Cxicago.

Can you just search through the ROM for A98300 and change them all to A99000? No, because the point (as i see it?) of expanding the ROM is to move JUST the team data from bank 83 into bank 90, which leaves extra space for changing the number of players on teams or changing the player name lengths. If you change all instances of that instruction, then you break the loading of that extra data in bank 83.

---------------------------------

Part 5 - How to find code to fix

---------------------------------

You need to use breakpoints in the snes9x debugger to find where in the code it reads the data.

Load the emulator and load your edited ROM (the one that prints Pxttsburgh).

A "Debug Console" window will pop up. The game won't start until you hit the "Run" button, but don't do that yet.

Since we got it to change the team names, we will now try to change the player names that display in the menu screen. The first ones it does are "27 Jeremy Roenick" and "66 Mario Lemieux". So, we can see that it reads their number and their name.. so we should try to add breakpoints that catch the game reading those.

The location of Lemieux's name (when he's on PIT, not the All Stars) in the original data bank is @1ADD0. In databank format, this address is 0083ADD0. His name data starts with the value 0F, which is the length of his name.

The location of Lemieux's number is at 1ADDF. This is 83ADDF in databank format.

In the Debug Console, click the "Breakpoints" button and type in 83ADD0 and add a checkmark under "Read" and hit OK. Whenever the emulator catches the game trying to access this byte of memory, it will freeze the game and print out the CPU instruction that read the data. Sweeeet.

Also add a Read breakpoint for 83ADDF (his number)

NOTE: if you reload the ROM, then it forgets to monitor your breakpoints.. you need to go back into Breakpoints and hit OK to get it to monitor them again.

Hit the Run button.

The game loads, then wait a couple seconds and then hit Enter on your keboard ("Start") to advance to the main menu.

It freezes! So, it caught the game trying to read the number of bytes in Lemieux's name.. and if you check the printout in the Debug Console, it shows:

	$84/ECE6 67 33	   ADC [$33]  [$83:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc

This says: in bank $84, address ECE6, the instruction "ADC [$33]" read the value in [$83:ADD0]. The instruction is represented as 6733 in the ROM.

So, if you go to 84:ECE6 in the ROM (offset (84-80)*8000-8000 + ECE6 = @26CE6), you'll find the values 6733. The code you need to change is around here somewhere...

(Write this conversion down, because you will need it often!)

But, let's keep forcing some breakpoints to see if we can find out a little more information..

Hit the Run button again, and it loads the menu screen, you'll see the player sprite skate into the picture box, and then it'll free again with another instruction in the printout. Keep hitting Run until you see "66 Mario Lemieux" printed to the screen, and then it moves on to the next player and freezes again. Then hit it a few more times to pass over the next couple players. You'll end up with a printout that looks like this (I added line numbers and descriptions for each one):

	$84/ECE6 67 33	   ADC [$33]  [$83:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc (line 1. no menu screen displayed when frozen here)
$84/EB94 A7 33	   LDA [$33]  [$83:ADD0]   A:0000 X:0000 Y:0005 P:envmxdiZc (line 2. player sprite displayed, then freezes)
$84/EB97 B7 33	   LDA [$33],y[$83:ADDF]   A:000F X:0000 Y:000F P:envmxdizc (line 3. still frozen)
$84/EBFF A7 33	   LDA [$33]  [$83:ADD0]   A:0014 X:0000 Y:000A P:envmxdizc (line 4. still frozen)
$84/EDAF 67 33	   ADC [$33]  [$83:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc (line 5. the player moves out, then it freezes here)
$84/EDAF 67 33	   ADC [$33]  [$83:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc (line 6. next player comes in and it freezes here)
$84/EDAF 67 33	   ADC [$33]  [$83:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc (line 7. the player moves out, then it freezes here)

... if you keep going, you notice it doesn't freeze for the goalie, but it freezes again for the other players...

A few guesses at what's going on here..

line 1: It grabs the player name length. I don't know why, though... this is the one that was read before the menu showed up, before the player sprite even showed up on the screen, so I don't know what it was used for... Anyway, move on...

line 2: here, it moves to the player and grabs the player name length. it then skips over the name to the number location:

line 3: it grabs the player number, then prints it.

line 4: it goes back to the player name length so it can print the player name.

line 5: not sure why it freezes..

line 6: it needs to skip over lemieux in order to get to jagr to print his info.

line 7: not sure why it freezes here...

It doesn't freeze for the goalie because his data is before Lemieux, so it doesn't need to skip him.

Let's try to fix the first line's instruction so it uses the expanded bank. This instruction is at $84/ECE6, which translates to @26CE6 (remember the formula above, (84-80)*8000-8000+ECE6 ?)

- In your hex editor, go to @26CE6. Make sure you see the expected values, 6733.

- Search backwards for the first instance of 83 you can find.

- I see an instance at @26CB1. Hey, it's preceeded by A9, just like in the fix in part 4.. this looks promising.

- So, change the A98300 to A99000.

- Also, add another couple breakpoints, this time to the expanded data: 90ADDF Read and 90ADD0 Read.

- Reload the ROM, re-enable breakpoints (!don't forget!), and try tracing through the code again.

- OK, it didn't use any of the expanded data (it always says [$83:ADD0/F] instead of [$90:ADD0/F]. So that change didnt' work.. change it back in case we broke something! :) I suspect that this was the databank for reading the team banners.

- Search back farther to find another 83... There is another at @25587. The surrounding bytes are AB008364.. this doesn't look promising. AB=PLB, 00=Break. This 83 is probably an instruction (83=STA), not a data bank number.

- I accidentally searched forward and found another 83 at @26D97, as part of A98300.. promising.. maybe the code backtracks after this. Try changing it to A99000.

- Do the trace again (re-enable breakpoints!)

- It worked! It even fixed ALL our lines of code, not just one. Wow, that accident was nice...

	$84/ECE6 67 33	   ADC [$33]  [$90:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc
$84/ED28 A7 33	   LDA [$33]  [$90:ADDF]   A:FFFD X:0000 Y:0000 P:envmxdizc
$84/ED37 A7 33	   LDA [$33]  [$90:ADDF]   A:FFFA X:0000 Y:0000 P:eNvmxdizc
$84/EB94 A7 33	   LDA [$33]  [$90:ADD0]   A:0000 X:0000 Y:0005 P:envmxdiZc
$84/EBFF A7 33	   LDA [$33]  [$90:ADD0]   A:0014 X:0000 Y:000A P:envmxdizc
$84/EDAF 67 33	   ADC [$33]  [$90:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc
$84/EDAF 67 33	   ADC [$33]  [$90:ADD0]   A:ADD0 X:0000 Y:0000 P:eNvmxdizc

But wait.. it doesn't load the next player's name.. what's wrong?

- OK, do the trace again, but look closely when it prints Mario's name: "11 Mario Lxmie"

- Oh right, I forgot I changed the player name length in the extended data from 0F to 0D! It appears that changing this breaks the game. So change it back to 0F.

- I also changed the number to 11. Leave that the same, though.

---------------------------------

Part 6 - Your Turn!

---------------------------------

Run the game again, keeping the breakpoints from part 5. We'll see if we can use them to fix the numbers and names in the rest of the game.

Hit Enter when the menu displays to go into the game.

Notice that the Shooting and Skating of PIT are still set to 5 and 5, even though we changed them to 3 and 4 in the expanded data.. those will have to be fixed later..

Also notice that it says "Mario Lemieux" in the Ron Barr text, but that didn't trip our breakpoints.. If you do a search in the ROM for Mario Lemieux, you'll find that the Ron Barr text is canned data at @261a3. Probably not important...

Hit Enter to go into the game and it freezes a bunch of times at the breakpoints and gives you this:

	$80/B2B0 A7 33	   LDA [$33]  [$83:ADD0]   A:ADD0 X:0000 Y:0000 P:envmxdizc
$80/B2B0 A7 33	   LDA [$33]  [$83:ADD0]   A:ADD0 X:0002 Y:0000 P:envmxdizc
$80/B2B0 A7 33	   LDA [$33]  [$83:ADD0]   A:ADD0 X:0004 Y:0000 P:envmxdiZc
$80/B2C6 A7 33	   LDA [$33]  [$83:ADDF]   A:ADDF X:0004 Y:0000 P:eNvmxdizC (picks up lemieux's number)
$80/B2B0 A7 33	   LDA [$33]  [$83:ADD0]   A:ADD0 X:0006 Y:0000 P:envmxdizc
$80/B2B0 A7 33	   LDA [$33]  [$83:ADD0]   A:ADD0 X:0008 Y:0000 P:envmxdizc

You can see that it's reading from bank 83, not 90.

Now try to find the 83 to change to 90 to fix these instructions... they are close together, so you *probably* only need to change one instruction.

$80/B2B0 -> (80-80)*8000-8000+B2B0 -> @32B0

$80/B2C6 -> (80-80)*8000-8000+B2C6 -> @32C6

Try looking for 83 before @32B0.

TIP: make use of save-states to make debugging easier. Shift+F1= save slot 1. F1 = load slot 1. Shift F2= save slot 2. etc...

Some things I noticed:

Instant replay works and displays Lemieux's number from the expanded data (#11).. that's good!

The names and numbers in the TEAM ROSTER page aren't changed. Your Lemieux name/number trace should catch that. Fix that next. Maybe that will also fix the player attributes at the same time (speed, agility, etc).

Barrasso's name isn't edited in the PAUSE screen.

---------------------------------

Part 7 - Making Sure You Got Everything

---------------------------------

To be absolutely sure you've fixed everything that needs fixing, you need to zero-out the team data from 18000-1c4b8. If the game runs without crashing or behaving oddly, you're good.

I would try putting traces on every individual byte in the team header data, too, before zero-ing it out. (This is easier in the Sega debugger where you can tag access to whole swaths of memory at once.. maybe there is a feature in the SNES debugger to do this, but I didn't look for it)

Edited by smozoma

Share this post


Link to post
Share on other sites

Wow - Smoz this is amazing in such a short time. :)

Few things to add:

CHI to CXI - @3AC6

Player ratings on team roster screen - @27C81

Still to be found:

To change the player names and number on team roster screen

goalies on edit menu

Share this post


Link to post
Share on other sites

Changes player no. and name in team roster screen - @4FCD8

Goalie name in pause menu - @7ED5B

This means everything in part 3 should now work from $90. ^_^

Still included in the team data at 18000 bank $83 is team lines, number of goalies, team ratings and team palettes. Can this left as it is Smoz or will it have to be moved? I haven't tried expanding a roster yet to see what happens.

-------

some other pointers that maybe useful:

blanks out team roster info @27C81

blanks out rink data @78FD2

-------

Share this post


Link to post
Share on other sites
Still included in the team data at 18000 bank $83 is team lines, number of goalies, team ratings and team palettes. Can this left as it is Smoz or will it have to be moved? I haven't tried expanding a roster yet to see what happens.

Anything in that team data header will have to be moved.

If you add another team, that team needs its own team header data...

Share this post


Link to post
Share on other sites
Anything in that team data header will have to be moved.

If you add another team, that team needs its own team header data...

What is in the team header - which palette to use, value to identify the team what else?

Also there are 5 digits in the team data which I don't know what they are? This is after the palettte info.

away palette then ? ? ? PP adv then ? ? No of fowards then No of defensemen

Not sure if this is going to cause a problem when adding more teams??

--------

More information

@3711 uniform palettes

@7D774 goalies 1-4 on the team roster screen

@7DDFC team ratings

@7EB71 team lines on the team roster screen

Still need pointers for No of fowards then No of defensemen I'm guessing.

Smoz - whats the plan of action now?

Share this post


Link to post
Share on other sites
What is in the team header - which palette to use, value to identify the team what else?

Also there are 5 digits in the team data which I don't know what they are? This is after the palettte info.

away palette then ? ? ? PP adv then ? ? No of fowards then No of defensemen

Not sure if this is going to cause a problem when adding more teams??

I don't know what all of it is.

I don't think you need to know what all the data does, as long as you make sure that the game accesses the bytes in the expanded data bank and not the original data bank.

You'll need to put a trace on each byte to see where it gets accessed, and then edit the code so it uses the right bank.

Still need pointers for No of fowards then No of defensemen I'm guessing.

I think that somewhere in the team header is a byte that has the number of players and number of D (it's not a pointer, it's a value).

I suspect it's the 79th byte (value c7 for ASW, 12 forwards, 7 D).

Smoz - whats the plan of action now?

You need to do traces for all the bytes in the team data header to fix those.

I've been trying to figure out how to decompress graphics for SNES '94, but it's not going well.

wboy took a long time between releasing the 94 30-team ROM and the 93 30-team ROM, which I think illustrates how difficult and time-consuming it is to fix all the code to work with extra teams. And he knew what he was doing for the 93 version and still took a long time.. we don't know what we're doing, and we're working on SNES, a much less hacker-friendly system... :)

Share this post


Link to post
Share on other sites
I think that somewhere in the team header is a byte that has the number of players and number of D (it's not a pointer, it's a value).

I suspect it's the 79th byte (value c7 for ASW, 12 forwards, 7 D).

You need to do traces for all the bytes in the team data header to fix those.

Sorry don't think I explained things very well. I had already found the values C7 etc. Yes I think these are the values for the number of players and number of D. Even if I can find the pointer for this not sure how to test it (like the other data) as you can't edit the team lines in 93. Also for the missing data God knows??

Probably need to find the bytes to add/remove teams then perhaps work backwards/in the dark to see what works and what doesn't.

Share this post


Link to post
Share on other sites
I've been trying to figure out how to decompress graphics for SNES '94, but it's not going well.

wboy took a long time between releasing the 94 30-team ROM and the 93 30-team ROM, which I think illustrates how difficult and time-consuming it is to fix all the code to work with extra teams. And he knew what he was doing for the 93 version and still took a long time.. we don't know what we're doing, and we're working on SNES, a much less hacker-friendly system... :)

I have found the data for adding/removing a team. :)

@7F36A is 001A (26 teams). Example: change to 0018 to remove ASE and ASW.

If you make it bigger will crash when you go beyond ASW because no more teams exist.

Not sure about playoff data but don’t think that matters for the moment.

Smoz - I’m not sure if you want to leave the banners for the moment and see if you can add a team (I will try as well). I know there are still bits to find but it may be a little easier now or maybe not to see if anything works. I know you said it may crash without the banners and it might but from doing it on genesis I think the extra teams did run without the banners (the SNES version seemed to still run when I removed the rink data) but don’t quote me on that as it was a while since I did it. I think if we can just get one part to work (e.g. the extra teams to run if it’s possible) then that will be a platform to build on.

Share this post


Link to post
Share on other sites
I have found the data for adding/removing a team. :)

@7F36A is 001A (26 teams). Example: change to 0018 to remove ASE and ASW.

If you make it bigger will crash when you go beyond ASW because no more teams exist.

Not sure about playoff data but don’t think that matters for the moment.

Smoz - I’m not sure if you want to leave the banners for the moment and see if you can add a team (I will try as well). I know there are still bits to find but it may be a little easier now or maybe not to see if anything works. I know you said it may crash without the banners and it might but from doing it on genesis I think the extra teams did run without the banners (the SNES version seemed to still run when I removed the rink data) but don’t quote me on that as it was a while since I did it. I think if we can just get one part to work (e.g. the extra teams to run if it’s possible) then that will be a platform to build on.

If 93 is like 94 playoff data immediately follows the last team and is in the format 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F and then repeats. That specific example would put the first 16 teams in the playoffs alphabetically.

If 93 is like 94 there will be pointers to the banner data before the banner data begins. If you could figure out a way to move this to blank space you might have a shot at team expansion.

Share this post


Link to post
Share on other sites
Sorry don't think I explained things very well. I had already found the values C7 etc. Yes I think these are the values for the number of players and number of D. Even if I can find the pointer for this not sure how to test it (like the other data) as you can't edit the team lines in 93. Also for the missing data God knows??

Probably need to find the bytes to add/remove teams then perhaps work backwards/in the dark to see what works and what doesn't.

Have you tried putting a breakpoint on that byte yet, to see if the game ever accesses it? It is possible the byte is never actually accessed -- it might just be there in preparation for 94 when you can edit lines. If that is the case, then there is nothing to update for that byte, since it's never used.

My guesses on when it might access that byte: when there is an injury or a penalty to a defenseman, it might need to access the byte to find out where the defenseman are, to find a replacement.

Smoz - I’m not sure if you want to leave the banners for the moment and see if you can add a team (I will try as well). I know there are still bits to find but it may be a little easier now or maybe not to see if anything works. I know you said it may crash without the banners and it might but from doing it on genesis I think the extra teams did run without the banners (the SNES version seemed to still run when I removed the rink data) but don’t quote me on that as it was a while since I did it. I think if we can just get one part to work (e.g. the extra teams to run if it’s possible) then that will be a platform to build on.

I think the tutorial I made should be enough info to add a new team. I don't play this game, so I don't really want to spend a lot of time fixing it, when there are dedicated 93 fans who can do it :angry:. If you're stuck in a particular spot, I can try to help (once in a while it can be hard to find the bank byte to fix when it's in some completely different area of the ROM).

What I've spent my time on lately is trying to find the logos in '94, since that'll be necessary for adding teams to that game.. once they are found, I think the tutorial can be used again for that game, by some SNES 94 fans...

Share this post


Link to post
Share on other sites
Have you tried putting a breakpoint on that byte yet, to see if the game ever accesses it? It is possible the byte is never actually accessed -- it might just be there in preparation for 94 when you can edit lines. If that is the case, then there is nothing to update for that byte, since it's never used.

My guesses on when it might access that byte: when there is an injury or a penalty to a defenseman, it might need to access the byte to find out where the defenseman are, to find a replacement.

I think the tutorial I made should be enough info to add a new team. I don't play this game, so I don't really want to spend a lot of time fixing it, when there are dedicated 93 fans who can do it :lol:. If you're stuck in a particular spot, I can try to help (once in a while it can be hard to find the bank byte to fix when it's in some completely different area of the ROM).

Haven't had time to look yet for the missing bytes but will do. Something is missing because the game doesn't run when I blank out the original bytes. Your guess might be right as it would make sense to have it there. I think you were right about the lack of banners crashing the game, as I found some notes, and must have been thinking of an earlier stage - oh well.

If you don't like 93 then that's fair enough I will carry on and see if I can this part to work but if your willing to help when I get stuck thats great :anger:

Any breakthrough with the banners yet?

Share this post


Link to post
Share on other sites
If you don't like 93 then that's fair enough I will carry on and see if I can this part to work but if your willing to help when I get stuck thats great :anger:

Any breakthrough with the banners yet?

The pointers to the banners are immediately before the banners themselves. This may help.

Share this post


Link to post
Share on other sites
Haven't had time to look yet for the missing bytes but will do. Something is missing because the game doesn't run when I blank out the original bytes. Your guess might be right as it would make sense to have it there. I think you were right about the lack of banners crashing the game, as I found some notes, and must have been thinking of an earlier stage - oh well.

If you don't like 93 then that's fair enough I will carry on and see if I can this part to work but if your willing to help when I get stuck thats great :anger:

Any breakthrough with the banners yet?

If you've tried adding extra teams already, try taking them out until you can get the game working when just moving the team data to the new bank and blanking it out in the old bank. If you've caught all the accesses to the different bytes in the team data, then I think the game shouldn't crash. If it's crashing, then you're probably missing something.

When you say the game doesn't run, do you mean the intro doesn't even run, or does it freeze later on, in the menu screen or the gameplay? If the intro screen doesn't run, that's weird. I would expect it to freeze/crash in the menu or in the game.

I haven't looked at the banners. Actually, I'm not sure where start when looking for those :lol:

Edited by smozoma

Share this post


Link to post
Share on other sites
The pointers to the banners are immediately before the banners themselves. This may help.

Is this for 93 or 94?

Share this post


Link to post
Share on other sites
Is this for 93 or 94?

Unfortunately this must be 94 as in 93 the banners are compressed :anger:

Share this post


Link to post
Share on other sites
If you've tried adding extra teams already, try taking them out until you can get the game working when just moving the team data to the new bank and blanking it out in the old bank. If you've caught all the accesses to the different bytes in the team data, then I think the game shouldn't crash. If it's crashing, then you're probably missing something.

When you say the game doesn't run, do you mean the intro doesn't even run, or does it freeze later on, in the menu screen or the gameplay? If the intro screen doesn't run, that's weird. I would expect it to freeze/crash in the menu or in the game.

I haven't looked at the banners. Actually, I'm not sure where start when looking for those :anger:

Yeh it crashing after the intro screen. Will keep looking to see if I can find whats missing

Share this post


Link to post
Share on other sites
Yeh it crashing after the intro screen. Will keep looking to see if I can find whats missing

Never played 93 but 94 there's just one banner image and the palette changes based on the team, unlike GENS where each banner is its own image. In 94 there's a place which says

Anaheim.Boston.Calgary.Chicago.Dallas

...

93 may be the same unless the banners are all graphical.

Share this post


Link to post
Share on other sites
Never played 93 but 94 there's just one banner image and the palette changes based on the team, unlike GENS where each banner is its own image. In 94 there's a place which says

Anaheim.Boston.Calgary.Chicago.Dallas

...

93 may be the same unless the banners are all graphical.

Unfortunately, 93 banners appear to be different than 94 banners. It doesn't have that name table.

The SNES 93 banners look exactly like the ones in Genesis 94 (whereas in SNES 94, they are different), so I'm pretty sure that means they are images :anger:

Thanks for the tip, though -- just too bad it's not the same

Share this post


Link to post
Share on other sites
Yeh it crashing after the intro screen. Will keep looking to see if I can find whats missing

It's important to only change one thing at a time, because if you change more than one and it breaks, you don't know what broke it.

You shouldn't blank anything out until you've verified using breakpoints that it never gets read from the old bank (83) anymore.

Blank out things in parts, not all at once. Like start by blanking out the city names and verifying that everything still works (in the game, too, not just the menu). after that:

- team abbreviations

- skater names

- goalie names

- header bytes, but just one or two at a time

(It's really a pain that the SNES debugger doesn't let you put breakpoints on a range of values, like the Genesis debugger can. it's quite limiting having to do individual addresses!)

Share this post


Link to post
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.

Sign in to follow this