Difference between revisions of "Sonic Adventure/Level Data Formats"
From Sonic Retro
MainMemory (talk | contribs) m (→LandTable header format) |
MainMemory (talk | contribs) m (moved SCHG:Sonic Adventure/Level Geometry to SCHG:Sonic Adventure/Level Data Formats: page sharing and possible expansion) |
(No difference)
|
Revision as of 16:06, 22 June 2011
SCHG: Sonic Adventure | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dreamcast Gamecube 2004 PC 2010 PC | ||||||||||||||||
|
Disclaimer
Each level in Sonic Adventure is a compiled C++ file with embedded model data. They are usually similar in structure, but there is technically the possibility that some things may be in different locations for different levels.
LandTable header format
Offset | Type | Description |
---|---|---|
0 | Short | COL Count |
2 | Short | Anim Count |
4 | Int | Some type of flag, usually 12, 13 indicates the presence of animations. |
8 | Float | Unknown, usually 3000 |
C | Pointer | COL List |
10 | Pointer | Anim List |
14 | Pointer | Texture file name. Optional.
If not null, a PVM with this name will be loaded to the address pointed to by the texture list pointer. |
18 | Pointer | Texture List |
1C | Int | Unknown |
20 | Int | Unknown |
COL Format
The name COL is an antiquated misnomer, but for lack of a better name, it stuck. This data struct is a reference for loading a level model. It's 0x24 bytes long and works as follows:
Offset | Type | Description |
---|---|---|
0 | Float[3] | Center of collision sphere |
C | Float | Radius of collision sphere |
10 | 8 Bytes | Padding? |
18 | Pointer | Model (OBJECT Struct) |
1C | Int | Unknown |
20 | Int | Surface Flags (see below) |
Surface Flags
These flags are not entirely figured out yet, but here's what is known for sure:
0x00000001 = Solid
0x00000002 = Water (overrides solid flag, makes surface transparent)
0x00000004 = No Friction
0x00000008 = No Acceleration
0x00000080 = Increased Acceleration
0x00000100 = Diggable
0x00001000 = Unclimbable
0x00010000 = Hurt
0x00100000 = Footprints
0x80000000 = Visible
Listing of Header locations
If you wish to use Dude's level rippers with this data, you will have to enter the COL Address in decimal and the COL Count.
Name | File | Address | COL Count | COL Address | Anim Count | Anim Address |
---|---|---|---|---|---|---|
Emerald Coast 1 | STG01.bin | 81554 | 445 | 7D6C0 | 0 | 0 |
Emerald Coast 2 | STG01.bin | DEB60 | 152 | DD600 | 0 | 0 |
Emerald Coast 3 | STG01.bin | 11DD58 | 190 | 11C2A0 | 0 | 0 |
Windy Valley 1 | STG02.bin | D7E0 | 72 | CDC0 | 0 | 0 |
Windy Valley 2 | STG02.bin | DB40 | 23 | D804 | 0 | 0 |
Windy Valley 3 | STG02.bin | F274 | 164 | DB64 | 0 | 0 |