Actions

SCHG

Difference between revisions of "Sonic the Hedgehog CD (prototype 510)/MMD Breakdown"

From Sonic Retro

(Merging file locations with main page)
m (Text replacement - "Genesis" to "Mega Drive")
 
(20 intermediate revisions by 5 users not shown)
Line 1: Line 1:
__NOTOC__
 
 
{{SCHG SCD 510}}
 
{{SCHG SCD 510}}
 +
==General Information==
 +
===Pointer guidelines===
 +
The MMD header is always at $200000. However, code may be loaded and run from RAM, so any code in an MMD past $100 should be considered running from the offset pointed to at ($2).l
  
== File Locations ==
+
===Header format===
As said in the introduction, SCD consists of many files. You can either extract each file using WinRAR or use this part of the guide to extract them through hex.
+
The MMD header consists of the following:
 
+
{| class="prettytable" style="width:auto;"
This 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.
+
! Location !! Size !! Function
 
 
=== Level *.MMD locations ===
 
This list runs from $B800 to $188B7FF.
 
{| class="prettytable"
 
! Level !! Start Location !! End Location
 
|-
 
| 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
+
| $0 || Byte || DMNA flag
 
|-
 
|-
| PPZ3 Good Future || $24B800 || $28B7FF
+
| $2 || Long || RAM location for RAM run code (Optional)
 
|-
 
|-
| CCZ1 Present || $28B800 || $3CB7FF
+
| $6 || Word || Size of code to be loaded to RAM (Optional)
 
|-
 
|-
| CCZ1 Past || $3CB800 || $40B7FF
+
| $8 || Long || Code entry point
 
|-
 
|-
| CCZ1 Bad Future || $40B800 || $44B7FF
+
| $C || Long || Horizontal Interrupt Location (Optional)
 
|-
 
|-
| CCZ1 Good Future || $44B800 || $48B7FF
+
| $10 || Long || Vertical Interrupt Location (Optional)
|-
 
| 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 ===
+
==Level MMDs==
{| class="prettytable"
 
! Name !! Start Location !! End Location
 
|-
 
| ATTACK.BIN || $1203000 || $1203A77
 
|}
 
  
== Object Layout ==
+
===Object layout===
The object layout of an *.MMD starts at 7320. The object positioning of an object is formatted as follows:
+
The object layout of a level MMD starts at 7320. The object positioning of an object is formatted as follows:
  
 
XXXX YYYY OOSS FFFF
 
XXXX YYYY OOSS FFFF
Line 167: Line 31:
 
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.
 
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 ==
+
===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.
+
The level layout of a level 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.
  
  
Line 183: Line 47:
 
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.
 
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.
  
== Palettes ==
+
===Palettes===
The palettes 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.
+
The palettes are in the same format as the Mega Drive; 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.
+
So color 066C would be blue to 6 lightness, green to 6 lightness, and red to C lightness. This would make <b><font color="#CC6666">THIS COLOR</font></b>. Hopefully you understand this.
  
These are the palette locations in the *.MMDs:
+
These are the palette locations in the level MMDs:
{| class="prettytable"
+
{| class="prettytable" style="width:auto;"
 
! Offset !! Name
 
! Offset !! Name
 
|-
 
|-
Line 231: Line 95:
 
|}
 
|}
  
 +
 +
==References==
 +
<references />
  
 
{{SCHGuides}}
 
{{SCHGuides}}
[[Category:Sonic Community Hacking Guide]]
 

Latest revision as of 04:44, 25 March 2020

SCHG: Sonic CD 510 Beta
Main Article
File Locations
File Locations
Art Editing
Compressed Art
*.MMD Editing
*.MMD Breakdown
Object Layout
Level Layout
Palettes
General Tweaking
General Tweaking

General Information

Pointer guidelines

The MMD header is always at $200000. However, code may be loaded and run from RAM, so any code in an MMD past $100 should be considered running from the offset pointed to at ($2).l

Header format

The MMD header consists of the following:

Location Size Function
$0 Byte DMNA flag
$2 Long RAM location for RAM run code (Optional)
$6 Word Size of code to be loaded to RAM (Optional)
$8 Long Code entry point
$C Long Horizontal Interrupt Location (Optional)
$10 Long Vertical Interrupt Location (Optional)

Level MMDs

Object layout

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

XXXX YYYY OOSS FFFF

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 a level 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:

SCD510LL.png


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.

Palettes

The palettes are in the same format as the Mega Drive; 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 level MMDs:

Offset Name
$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 Palette (line 1)
$670 Sonic 1 level select Palette (line 2)
$690 Sonic 1 level select Palette (line 3)
$6B0 Sonic 1 level select Palette (line 4)
$6D0 Sonic's Palette
$6F0 Zone Palette (line 1)
$710 Zone Palette (line 2)
$730 Zone Palette (line 3)
$750 Mirror of Zone Palette (line 1)
$770 Mirror of Zone Palette (line 2)
$790 Cycling Palette of Level
$7B0 Mirror
$7D0 Mirror
$7F0 Mirror
$EDE4 Amy's Palette (used to substitute zone palette line 1)


References


Sonic Community Hacking Guide
General
SonED2 Manual | Subroutine Equivalency List
Game-Specific
Sonic the Hedgehog (16-bit) | Sonic the Hedgehog (8-bit) | Sonic CD (prototype 510) | Sonic CD | Sonic CD (PC) | Sonic CD (2011) | Sonic 2 (Simon Wai prototype) | Sonic 2 (16-bit) | Sonic 2 (Master System) | Sonic 3 | Sonic 3 & Knuckles | Chaotix | Sonic Jam | Sonic Jam 6 | Sonic Adventure | Sonic Adventure DX: Director's Cut | Sonic Adventure DX: PC | Sonic Adventure (2010) | Sonic Adventure 2 | Sonic Adventure 2: Battle | Sonic Adventure 2 (PC) | Sonic Heroes | Sonic Riders | Sonic the Hedgehog (2006) | Sonic & Sega All-Stars Racing | Sonic Unleashed (Xbox 360/PS3) | Sonic Colours | Sonic Generations | Sonic Forces
Technical information
Sonic Eraser | Sonic 2 (Nick Arcade prototype) | Sonic CD (prototype; 1992-12-04) | Dr. Robotnik's Mean Bean Machine | Sonic Triple Trouble | Tails Adventures | Sonic Crackers | Sonic 3D: Flickies' Island | Sonic & Knuckles Collection | Sonic R | Sonic Shuffle | Sonic Advance | Sonic Advance 3 | Sonic Battle | Shadow the Hedgehog | Sonic Rush | Sonic Classic Collection | Sonic Free Riders | Sonic Lost World
Legacy Guides
The Nemesis Hacking Guides The Esrael Hacking Guides
ROM: Sonic 1 | Sonic 2 | Sonic 2 Beta | Sonic 3

Savestate: Sonic 1 | Sonic 2 Beta/Final | Sonic 3

Sonic 1 (English / Portuguese) | Sonic 2 Beta (English / Portuguese) | Sonic 2 and Knuckles (English / Portuguese)
Move to Sega Retro
Number Systems (or scrap) | Assembly Hacking Guide | 68000 Instruction Set | 68000 ASM-to-Hex Code Reference | SMPS Music Hacking Guide | Mega Drive technical information