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.
To learn how to convert this information into a PAR code go to SOR3 Hacking.
1207B - Screen Select
This is a powerful address that tells the game to move from one screen to another. Changing this can produce some corrupted graphics, especially if you try to move from in-game. The values in-between values appear to have the same function; for example, both 08 and 0A take you to the demo, and 1C and 1E both take you to the ending.
120B4 - Time Remaining
120BB - Stage
120BD - Set Number
120E3 - Difficulty Setting
12187 - Starting Stage
SOR2 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. The first block is Player 1, the second Player 2, and then the punks, then any objects such as containers, bonuses or weapons. I'm pretty sure that the Player 1 block begins at 11379, and to get to the next block you add "100" (it's actually 256 but who cares?), so 11479 is the start of Player 2 data.
In the info below the 3rd digit of the offset address is X. Simply replace these with 3 for P1, 4 for P2, 5 for first punk, 6 for second punk and so on. For some of the offsets a Y is used. This is X+1, so for Player 1's data Y is 3+1=4 . You will hopefully notice that you can move from block in Hexposure simply by pressing Page Down. This allows you to easily compare values, as if you are on the sprite address for P1, pressing Page Down will take straight to the equivalent for P2, and a second press will take you to that for the first punk.
11X7B - Sprite X co-ordinate
11X82 (1st digit) - Palette
11X82 (2nd digit)-11X83 - Graphics Location
11X85 - Character
You will notice that the hex value increases in multiples of 2. Putting in an odd value, such as 03 or 0B, produces some weird results with both players and punks, creating characters which cannot cause damage and that have messed up icon pics. 01, 03 & 05 give "hyper" versions of Max, Axel, and Blaze respectively, but these are horribly bugged and were clearly not intended as a cheat.
The ninjas are listed three times, presumerably as the AI for the differently-armed versions is so different.
Interestingly, this value does not change for punks that are armed, or for when the bikers are on their bikes. This must be controlled elsewhere.
Placing a punk value in the player 1 or 2 address crashes the game, but does change the sprite to the selected one. If you do this on the character select screen however, you get an "enemy select" screen, where you can scroll through most of the enemy sprites (generally messed up and/or using the palette). Check it out in this savestate from Felipe Moniz.
11X95 - "Real" X co-ordinate
11XC4-11XC5 - Number of KOs
11XEC-11XEE - Position of status bar
508800Changing the values tends to screw up the display, and putting in very large values tends to turn the status bar into part of the background. Just thought I'd warn you.
11XFO-11XF7 - Character name
11XF9 - Health
11XFB - Lives
11Y0E-11Y10 - Score
All the info from this is carried around inside a savestate. It's very easy to edit as it uses the same format as some of the above. Each part of the table takes up 16 bytes, so you move between the same data for each entry in the table by pressing up/down. XX represents 1A for first place, 1B for second and 23 for tenth. Y as before is X+1.
12XX8-12XXA - Score
12XXB - Round
12XXC - Character
12XXD-12XXF - Initials
12XY0 - Difficulty
12XY2-12XY3 - Number of KOs
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.
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.
Note: You will probably need to read the guide to understand how to edit this data.
The SOR2 savestate contains a number of palettes loaded from the ROM for use in game (although only 4 will used at any one time). These begin at 11078 and seem to extend up to (but not including) 112A8, which presumably means that 18 palettes are being stored, which seems slightly improbable. Entering palette values of above 3 doesn't seem to access the 15 palettes above 3, so what may happen is that the game redefines where to look in the list of loaded palettes for it's palettes, and so changes the colours that way.
Any changes you make to the palettes will last only until the end of the stage when the palettes are changed for the new graphics. Below are those known for definite. Putting one of the palette values below into the 1st digit of 11X82 should hopefully change that sprites palette, but things may not happen exactly as anticipated as I don't fully understand what's going on yet.
11078-11097 - Palette 0
All the text in SOR2 uses the standard text format, so you will not need to construct a font table (although some the symbols will not show up - see here for values). Offsets here are usually approximate and give the start of the text only. You will notice that Sammy and Skate are referred to as different characters.
255E - Damage inflicted by Axel's knee attack
Same format as health bar ie number of pixels converted into hex. Normal amount is 08.
255F - Sound effect to play for Axel's knee attack
2576 - Damage inflicted by Axel's double knee attack
2577 - Sound effect to play for Axel's double knee attack
Compressed Art Locations
99D6 - Round 1-1
Note: The above list is still incomplete.
Search out the value 99D6. This is for Round 1-1. When you get
to this value you should see : 01 00
Note: These are untested sound effects
The Genesis/Megadrive has a total colour palette of 256 colours (comprising of 16 shades of red, blue and green in different combinations) but it can only use a fraction of these at once. It uses four 16 colour palettes, meaning that at most there are going to be 64 colours onscreen. Each palette is usually dedicated to certain sprites onscreen. Here's what the 4 palettes deal with in SOR2.
Palette 0: The players, the punks (generally not bosses) in their "normal" colours, the status bar and the onscreen items such as weapons and containers
Palette 1: The punks onscreen in different colours and most bosses.
Palette 2: Background graphics (sometimes foreground too)
Palette 3: Foreground graphics (sometimes background too)
To see this for yourself take a screenshot with Genecyst and open it in Paint Shop Pro (it helpfully arranges the colours in 4 rows of 16). Open the palette and move the cursor across the image to see that the colours on certain sprites are restricted to a certain palettes. Doing this also allows you to discover what colours each palette contains, so you can convert them and find them in the ROM/savestate.
The first colour of each palette is a transparent colour that obviously doesn't show up on screen (although on a real Genesis/Megadrive this is used as the border colour above and below the screen). This means that only 15 of the 16 colours are used, bringing the number on screen down to just 60.
The 16 colour palette in all Genesis/Megadrive games is made up of 32 bytes, with 2 bytes (4 digits) for each colour. As you should hopefully know, a colour on a monitor is a combination of Red, Blue and Green, of which there are 256 (ie 0-255) shades. Since the Genesis/Megadrive has only 16 shades to work with, each RGB component can be stored as a single hex number ie 0 to E. The first digit of the first byte is always 0. Then the colours are entered in as BGR (don't ask why it isn't RGB). So the values of the bytes to give a light grey colour would be like this inside a ROM/savestate: 0EEE. A palette is simply stored as 16 of these in a row with no spaces between.
Converting a RGB colour to Genesis/Megadrive format
An example RGB colour is 224,100,50, which gives this orange. To convert this to Genesis format we have to turn this combination of 256 shades of RGB into a combination only 16 shades of RGB. To do this we first divide each part by 16. If you end up with anything after the decimal point just round down (never up) to the last interger. This, in the example above, gives 14,6,3. We then convert to hex (use Windows calculator if you're not sure), and forget the 0 at the start of each number, giving us E,6,3. Finally we rearrange this into BGR order and put a nought in front to give 036E, which is how the orange would be stored in a ROM or savestate.
Converting a Genesis/Megadrive format colour to RGB
To convert the other way you do the reverse; lose the first nought, rearrange from BGR into RGB, convert to decimal and multiply each part by 16.
You can put some interesting text characters into the game (ROM or savestate) where the blue font is used. Below is a list of values that will be worth using - you could put Axel's face into the text but that would look crap...
Further SOR2 hacking info can be found in this forum thread.
comments powered by Disqus