Sonic the hedgehog CD

Sonic the hedgehog CD Beta 510 hacking guide

By Sonic 65 on June 29 2005.
Thanks to Nemesis and Erik JS.


For these notes, I am assuming you know the hexadecimal system and have basic hacking skills. If you do not, I suggest you go to the SSRG and read the tutorials there.

SCD works differently from any other Sonic game. All of the level data (level layout, compressed art, Sonic sprites, etc) is stored in its respective *.MMD file. *.MMD files are contained within the ISO.

Thanks to this system, there is an astounding repetetiveness in each *.MMD. Each *.MMD has its own Sonic sprite, even though Sonic looks the same throughout the whole game. Each  *.MMD has its own checkpoint art, even though the checkpoints never change art. This means that there are 70 versions of one common piece of art. If you want to edit that art fully, you must comb through each level *.MMD and substitute the regular art with the replaced art.

The level *.MMDs have the filename format RXYZ__.MMD:

X is the zone. R1 is zone 1.

Y is the act R12 is zone 1, act 2.

Z is the time period. There are 4 letters that can be put here; A, B, C, or D. A is the present period. B is the past period. C is the bad future period. D is the good future period. So R12D__.MMD would contain act 2 of zone 1, in the good future period.

File locations

As said in the introduction, SCD consists if many files. This part of the guide will tell you what offset each file is located at in the ISO. Note that this list is incomplete; only 71 of the 88 files in SCD 510 are listed here.

Level *.MMD locations:
This list runs from B800 to 188B7FF.

PPZ1 Present: B800 - 4B7FF

PPZ1 Past: 4B800 - 8B7FF

PPZ1 Bad Future: 8B800 - CB7FF

PPZ1 Good Future: CB800 - 10B7FF

PPZ2 Present: 10B800 - 14B7FF

PPZ2 Past: 14B800 - 18B7FF

PPZ2 Bad Future: 18B800 - 1CB7FF

PPZ2 Good Future: 1CB800 - 20B7FF

PPZ3 Bad Future: 20B800 - 24B7FF

PPZ3 Good Future: 24B800 - 28B7FF

CCZ1 Present: 28B800 - 3CB7FF

CCZ1 Past: 3CB800 - 40B7FF

CCZ1 Bad Future: 40B800 - 44B7FF

CCZ1 Good Future: 44B800 - 48B7FF

CCZ2 Present: 48B800 - 4CB7FF

CCZ2 Past: 4CB800 - 50B7FF

CCZ2 Bad Future: 50B800 - 54B7FF

CCZ2 Good Future: 54B800 - 58B7FF

CCZ3 Bad Future: 58B800 - 5CB7FF

CCZ3 Good Future: 5CB800 - 60B7FF

TTZ1 Present: 60B800 - 64B7FF

TTZ1 Past: 64B800 - 68B7FF

TTZ1 Bad Future: 68B800 - 6CB7FF

TTZ1 Good Future: 6CB800 - 70B7FF

TTZ2 Present: 70B800 - 74B7FF

TTZ2 Past: 74B800 - 78B7FF

TTZ2 Bad Future: 78B800 - 7CB7FF

TTZ2 Good Future: 7CB800 - 80B7FF

TTZ3 Bad Future: 80B800 - 84B7FF

TTZ3 Good Future: 84B800 - 88B7FF

QQZ1 Present: 88B800 - 8CB7FF

QQZ1 Past: 8CB800 - 90B7FF

QQZ1 Bad Future: 60B800 - 94B7FF

QQZ1 Good Future: 94B800 - 98B7FF

QQZ2 Present: 98B800 - 9CB7FF

QQZ2 Past: 9CB800 - 100B7FF

QQZ2 Bad Future: 100B800 - 104B7FF

QQZ2 Good Future: 104B800 - 108B7FF

QQZ3 Bad Future: 108B800 - 10CB7FF

QQZ3 Good Future: 10CB800 - 110B7FF

WWZ1 Present: 110B800 - 114B7FF

WWZ1 Past: 114B800 - 118B7FF

WWZ1 Bad Future: 118B800 - 11CB7FF

WWZ1 Good Future: 11CB800 - 120B7FF

WWZ2 Present: 120B800 - 124B7FF

WWZ2 Past: 124B800 - 128B7FF

WWZ2 Bad Future: 128B800 - 12CB7FF

WWZ2 Good Future: 12CB800 - 130B7FF

WWZ3 Bad Future: 130B800 - 134B7FF

WWZ3 Good Future: 134B800 - 138B7FF

SSZ1 Present: 138B800 - 13CB7FF

SSZ1 Past: 13CB800 - 140B7FF

SSZ1 Bad Future: 140B800 - 144B7FF

SSZ1 Good Future: 144B800 - 148B7FF

SSZ2 Present: 148B800 - 14CB7FF

SSZ2 Past: 14CB800 - 150B7FF

SSZ2 Bad Future: 150B800 - 154B7FF

SSZ2 Good Future: 154B800 - 158B7FF

SSZ3 Bad Future: 158B800 - 15CB7FF

SSZ3 Good Future: 15CB800 - 160B7FF

MMZ1 Present: 160B800 - 164B7FF

MMZ1 Past: 164B800 - 168B7FF

MMZ1 Bad Future: 168B800 - 16CB7FF

MMZ1 Good Future: 16CB800 - 170B7FF

MMZ2 Present: 170B800 - 174B7FF

MMZ2 Past: 174B800 - 178B7FF

MMZ2 Bad Future: 178B800 - 17CB7FF

MMZ2 Good Future: 17CB800 - 180B7FF

MMZ3 Bad Future: 180B800 - 184B7FF

MMZ3 Good Future: 184B800 - 188B7FF

*.BIN locations:
ATTACK.BIN: 1203000 - 1203A77

*.MMD breakdown

Object layout:
The object layout of an *.MMD starts at 7320. The object positioning of a object is formatted as follows:


I think this is the same type of positioning as S1. XXXX is 2 bytes long, and is the X location of the object. YYYY is 2 bytes long as well, and is the Y location of the object. OO is a byte long, and is the primary object type. SS is also a byte long, and is the object's subtype. An object's subtype is a value that is used to determine what type of one object it is. For example, take the Orbinaut from LZ in S1. If you changed its subtype to a certain value, it would never fire its spikes like the Orbinaut in SLZ.

Level layout:
The level layout of an *.MMD begins at 3AB76. It's basically an array of tile values. An array is just a huge collection of data, to put it simply. The values go left to right for one row, and then after that row is cleared go to the next row. Let's say I wanted to make the following level layout.

00 00 00 00
00 00 00 12 
09 09 11 10

Pretend that the 09 is normal ground, 10 is deeper ground, 11 is the first part of a slope going up, and 12 is the second part of a slope going up. This would appear in a grid of tiles as:

This would appear in hex as 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 09 09 09 09 09 09 11 10. I hope that you understood this section.

The palletes are in the same format as the Genesis; 0BGR. For example, 068A would be blue to 6 lightness, green to 8 lightness, and red to A lightness. Note that the colors can only be in increments of two.

So color 066C would be blue to 6 lightness, green to 6 lightness, and red to C lightness. This would make this color.  Hopefully you understand this.

These are the palette locations in the *.MMDs:

5D0: Sonic 1 palette (line 1)

5F0: Sonic 1 palette (line 2)

610: Sonic 1 palette (line 3)

630: Sonic 1 palette (line 4)

650: Sonic 1 level select pallete (line 1)

670: Sonic 1 level select pallete (line 2)

690: Sonic 1 level select pallete (line 3)

6B0: Sonic 1 level select pallete (line 4)

6D0: Sonic's pallete

6F0: Zone Pallete (line 1)

710: Zone Pallete (line 2)

730: Zone Pallete (line 3)

750: Mirror of Zone Pallete (line 1)

770: Mirror of Zone Pallete (line 2)

790: Cycling Pallete of Level

7B0: Mirror

7D0: Mirror

7F0: Mirror

EDE4: Amy's pallete (used to substitute zone pallete line 1)

Compressed art

This is an extremely (to the power of 9000) incomplete list of the compressed art contained in SCD 510. Strangely, there are two instances of one compressed item for each *.MMD; one in the *.MMD area and one in the A***** area. This is soon going to be converted so it will refer to the *.MMD area, but for now it refers to the A***** area. If I continue this, the list will be completed in two months, but if I use the *.MMD area, it will take only about half a month to finish.

Note that these locations are for the actual SCD ISO.

A036C8: PPZ Present 8x8s

A06C4E: Unknown

A07B2A, A47B2A: Conveyor belt

A07C8A, A44DB8, A47C8A: Unknown; switch?

A07CDC, A07E9A: Animals (bird, squirrel)

A08AD4: Unknown; spiky bush?

A08B8A: Unknown; I have no idea

A08CCE: Rotund beetle badnik

A09BA0, A09F9C: Unknown; OMG ANOTHER ONE

A0B40A, A4B40A, A8B40A: Text that says '1000' when mapped

A0B42C, A4B42C, A8B42C: Bricks

A0B512, A4B512, A8B512: Unknown

A39E0A: Giant ring

A3A214, A7A214: GOAL sign

A3A3D4, A7A3D4: End-of-level spinning signpost

A3A9A0, A7A9A0: End-of-level text and HUD (in determining score)

A3B6AA, A7B6AA: Title card

 A3C75A, A7C75A: Unknown

A3CA66, A7CA66: Springs

A3CC88, A7CC88: Monitors

A3D28C, A7D28C: Explosions

A3D774, A7D774: Rings

A3DDE8, A7DDE8: HUD, as used in level

A3DF14, A7DF14: Checkpoint

A3E06E, A7E06E: Unknown; flowers?

A3E290, A7E290: Big blocky letters; never seen them in the game

A44CD8: Unknown; ???

A44E0A: Unknown; ????

A44E88: Small metal platform with yellow and black stripes

A44F50: Unknown; platform?

A45B82: Spike balls

A45C44: Metal platform with multiple layers

A45D24: Garbled graphics; may be mappings

A45F7C: Machine using rockets

A46AB6: Metal Sonic's machine

A46C8E: Metal Sonic

General tweaking

It's tweaking time! This section will give you steps to do some general tweaking of the ISO, and why that does what it does.
How many rings to lose when hit:
In your hex editor, search for 33 FC 00 00 00 FF 12 20. This basically moves 000000 to 00FF12 (the offset in the RAM that contains how many rings you have) when you get hit. Change the 0000 to whatever value you want. If you want to lose no rings entirely, change 33 FC 00 00 00 FF 12 20 to 4E 71 4E 71 4E 71 4E 71. That tells the game to do nothing. Note that this code appears in every *.MMD.

Back to: Sonic the hedgehog CD
Table of contents