top shelf Posted March 26, 2010 Report Share Posted March 26, 2010 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 Quote Link to comment Share on other sites More sharing options...
top shelf Posted March 26, 2010 Author Report Share Posted March 26, 2010 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 Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 1, 2010 Author Report Share Posted April 1, 2010 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 Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 1, 2010 Report Share Posted April 1, 2010 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. Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 1, 2010 Report Share Posted April 1, 2010 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 Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 1, 2010 Author Report Share Posted April 1, 2010 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?). Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 1, 2010 Report Share Posted April 1, 2010 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? Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 2, 2010 Author Report Share Posted April 2, 2010 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 Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 2, 2010 Report Share Posted April 2, 2010 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. Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 2, 2010 Report Share Posted April 2, 2010 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... Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 3, 2010 Report Share Posted April 3, 2010 (edited) 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 April 3, 2010 by smozoma Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 3, 2010 Report Share Posted April 3, 2010 (edited) 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 April 3, 2010 by smozoma Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 3, 2010 Author Report Share Posted April 3, 2010 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 Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 4, 2010 Author Report Share Posted April 4, 2010 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 ------- Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 4, 2010 Report Share Posted April 4, 2010 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... Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 5, 2010 Author Report Share Posted April 5, 2010 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? Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 5, 2010 Report Share Posted April 5, 2010 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... Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 6, 2010 Author Report Share Posted April 6, 2010 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. Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 6, 2010 Author Report Share Posted April 6, 2010 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. Quote Link to comment Share on other sites More sharing options...
statto Posted April 6, 2010 Report Share Posted April 6, 2010 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. Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 6, 2010 Report Share Posted April 6, 2010 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 . 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... Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 8, 2010 Author Report Share Posted April 8, 2010 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 . 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 Any breakthrough with the banners yet? Quote Link to comment Share on other sites More sharing options...
statto Posted April 8, 2010 Report Share Posted April 8, 2010 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 Any breakthrough with the banners yet? The pointers to the banners are immediately before the banners themselves. This may help. Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 8, 2010 Report Share Posted April 8, 2010 (edited) 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 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 Edited April 8, 2010 by smozoma Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 8, 2010 Report Share Posted April 8, 2010 The pointers to the banners are immediately before the banners themselves. This may help. Is this for 93 or 94? Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 8, 2010 Author Report Share Posted April 8, 2010 Is this for 93 or 94? Unfortunately this must be 94 as in 93 the banners are compressed Quote Link to comment Share on other sites More sharing options...
top shelf Posted April 8, 2010 Author Report Share Posted April 8, 2010 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 Yeh it crashing after the intro screen. Will keep looking to see if I can find whats missing Quote Link to comment Share on other sites More sharing options...
statto Posted April 8, 2010 Report Share Posted April 8, 2010 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. Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 8, 2010 Report Share Posted April 8, 2010 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 saysAnaheim.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 Thanks for the tip, though -- just too bad it's not the same Quote Link to comment Share on other sites More sharing options...
smozoma Posted April 8, 2010 Report Share Posted April 8, 2010 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!) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.