This info is for savestates created by Gens/Genecyst (plus any other emulators that use the same format). You will need to understand hexeditors to make use of this info. Most of this info should work in BK3 with no problems.
Converting to PAR code format & vice versa
The Genecyst format savestate places the beginning of the RAM at offset 2478. This means that any savestate addresses will be 2478 addresses above their real RAM address, which are used by PAR codes. You should hopefully know that the format of a PAR code is XXXXXX:YYYY, where X is the address and Y is the value to set to.
Game data covers things like current stage and difficulty etc.
AD58-9 - Round 6 Switches
AD5A - Time Remaining in Round 6
AD5B - Show/enter hidden areas in Round 6
AD67 - Roo selectable
AD68 - 2 Players can select same character
11986 - End Scene
1199D - Stage select available in Options
11F79 - Screen select
11F7B - Scene
11F7D - Stage
The hidden level select allows you to see how the game organises the levels into Rounds & Scenes.
11F84 - Ash selectable
Tells the game whether or not Ash is selectable on the in-game continue character select. 00=No Ash, 01=Selectable Ash
11F85 - Shiva selectable
12381 - Difficulty Setting
12383 - Lives per continue
12391 - Player 1 Master Character Value
12393 - Player 2 Master Character Value
12394-95 - Enable Super Zan
12396-97 - Enable Super Skate
12398-99 - Enable Super Axel
SOR3 stores the data for the onscreen characters' (ie players & punks) status bars in blocks. Each block is (I think) 256 bytes and uses the same layout, so techniques for editing the players can be used to edit the punks and so on. Objects such as bonuses also have blocks but share few of the player/punk values. In this way the game is similar to SOR2. However, lots of the data has been moved around compared to SOR2, so be ready for some changes.
The first block is Player 1, the second Player 2, the third is used only by bosses (anyone confirm this?) and then the rest are the punks, followed by any objects such as containers, bonuses or weapons. The Player 1 block begins at 10379, and to get to the next block you add "100" (it's actually 256 but who cares?), so 10479 is the start of Player 2 data and so on. I will use the same system from the SOR2 Hacking page of having X represent a block number, in this case 3 for P1, 4 for P2 etc.
10X82 (1st digit) - Palette
10X82 (2nd digit)-10X83 - Graphics Location
10X85 - Character
This also doesn't change the graphic set the Genesis is using to create the sprite (especially for punks!). To fully change a punk into another you need to edit both this address and the graphics addresses, which I have yet to isolate. Below is an incomplete & mostly untested list of values that represent the different characters. *=player version
00 - Ash *
0E - Galsia
4E - Chicken
58 - Knife
10XE4 - Health
10XE5 - Health Bar Size
10XE6 - Health shown on screen
10XF9-10XFB - Score
10Y03 - Lives
10Y19 - Continues
10Y5D - Score Stars Displayed
These addresses contain the onscreen text, and can be editing by using my sor3names.tbl file with Hexposure.
P1 Name - 20500-20508
As you will probably know, the graphics you see onscreen are made up of 8x8 tiles (open up Patterns in Genecyst to see them). Inside the savestate is a map of where to place these tiles in order to create the graphics, which can be easily edited. However, it does not affect the actual floor plan of the level, which is stored elsewhere.
Graphics data is spaced throughout the savestate RAM, with the background, foreground etc being spaced apart. The format used is 2 bytes per tile eg. 4085. The tiles are listed in rows from left to right. In SOR3 the background data begins at the very start of RAM, so the tile selected in 2478-9 will be in the top-left corner of the screen.
The first digit of the first byte is the palette of the tile; acceptable values are 0, 2, 4 and 6 which represent the 4 on screen palettes. Use 8, A, C or E to get the game to interpret the tile as being part of the foreground, so it will be visible in front of everything else.
The three remaining numbers are to select which of the many tiles loaded in RAM should be used. In the example above, 085 means the 85th tile. The tiles start at 12498 in the savestate - use TLP to view them.
All info here is for the ROM in binary (.BIN) format. Use SegaTool or similar program to convert a SMD ROM.
Much of the info here can be turned into a PAR/GG code, as the addresses used are identical.
Go to Downloads to download TBL files that will allow you to edit all the in-game text. Below are the addresses and what TBL file to use for them.
5AA - Territory Lockout Text
100 - Header Text
246256 - Character Info Screens
46918 - Ending Credits
The musics assigned to each stage are contained in the addresses below. To convert to the BKIII ROM address simply add FB6. R=Round, S=Scene. Refer to the hidden level select shot if you are unsure which stage it refers to.
24F6 - R1 S1 - Warehouse
The values you can use in these addresses are as follows. I've referred to the BGMs as they appear in the game. Some values don't seem to work on certain stages - both the Robot Y & Shiva stages have FF as a value, which does not work elsewhere.
The palettes are stored in the standard format.
47F20 - Axel Alternate Duel Palette
47F40 - Blaze Alternate Duel Palette
47F60 - Skate Alternate Duel Palette
47F80 - Zan Alternate Duel Palette
47FA0 - Roo Alternate Duel Palette
(For the BK3 address, add 9B8)
13E3F - Starting continues
Number of continues you start with. Normal is 03=2 continues
118B3 - Apple heal amount
118C3 - Chicken heal amount
47F16-1F - Character Select Screen Construction (1)
4846A-73 - Character Select Screen Construction (2)
Further SOR3 hacking info can be found in this forum thread.
comments powered by Disqus