Actions

SCHG

Sonic Adventure DX: PC/Model Locations

From Sonic Retro

Revision as of 12:17, 28 May 2010 by MainMemory (talk | contribs) (CHRMODELS.DLL: Tails)

Template:SCHG SADX:PC This page is about models.

Model Locations

sonic.exe

Key=0x00400000

Misc. Objects

Address Description Parent Child Sibling
4B4834 Ring None None None
4BFEF4 Rocket Platform None 4BF6B4 None

Dr. Eggman (Cutscenes)

Address Description Parent Child Sibling
49C830 Root of Model None 49C734 None

Amy's Birdie

Address Description Parent Child Sibling
582410 Right Wing 58251C (Right Arm) None None
58251C Right Arm 5827A4 (Left Arm) 582410 (Right Wing) None
582698 Left Wing 5827A4 (Left Arm) None None
5827A4 Left Arm 582940 (Tail) 582698 (Left Wing) 58251C (Right Arm)
582940 Tail 583EE0 (Head) None 5827A4
583EE0 Head 584EAC (Body) None 582940 (Tail)
58418C Right Foot 58443C (Left Foot) None None
58443C Left Foot 584EAC (Body) None 58418C (Right Foot)
584EAC Body None 58443C (Left Foot) 583EE0 (Head)

CHRMODELS.DLL

Key=0x10000000

Sonic

Address Description Parent Child Sibling
55E76C Tail 55E7D0 None None
55F330 Left Shoe Toe
55F948 Left Shoe Heel
560DD0 Right Shoe Toe
5613F8 Right Shoe Heel
563D0C Right Arm Elbow
565C34 Eye Globe 569594 (Head) None None
569594 Head 56998C 565C34 (Eye Globe) None
5698F0 Right Eye
569CE8 Left Eye
56AD48 Body 56ADE4 569E20 None
56AF50 Root of Model (No model data) None 56AF1C None
57BC44 Jump Ball None None None
57D788 Cutscene Mouth 5812AC (Head) None None
5812AC Cutscene Head None 57D788 (Mouth) None
583284 Crystal Ring None None 564CD0
583904 Crystal Ring item None None None
Rolling
Address Description Parent Child Sibling
5729CC Root of Model (No model data) None 572998 None
Metal Sonic
Address Description Parent Child Sibling
58F808 Head 58FAAC 58DB0C None
591068 Root of Model (No model data) None 591034 None
Super Sonic
Address Description Parent Child Sibling
62C4CC Head 62C8C4 628B54 None
62DE88 Root of Model (No model data) None 62DE54 None
62FE6C Jump Ball None None None
Light Speed Dash
Address Description Parent Child Sibling
6837E8 Root of Model (No model data) None None 6837B4
Misc. Models
Address Description Parent Child Sibling
7276E4 Snowboard None None None

Tails

Address Description Parent Child Sibling
42AD54 Root of Model (No model data) None 42AD20 None

Knuckles

Address Description Parent Child Sibling
2E23B0 Root of Model (No model data) None 2E237C None

Amy

Address Description Parent Child Sibling
16460 Root of Model (No model data) None 1642C None

Gamma

Address Description Parent Child Sibling
207290 Root of Model (No model data) None 20725C None

Big

Address Description Parent Child Sibling
12541C Root of Model (No model data) None 1253E8 None

ADV02MODELS.DLL

key=0x10000000

Address Description Parent Child Sibling
261F08 Mecha Sonic None 26178C None

Model Format

Remember: all pointers are 4 Bytes, and need to have a key subtracted from them to find the correct location in a file.
For sonic.exe, subtract 0x00400000.
For DLL files, subtract 0x10000000.
For the dreamcast version, subtract 0x0C900000.

As a rule, data sets occur in the reverse order that these pointers do. In a non-hacked model, the model data always starts with the material structs and goes down the file to the vertex struct, with the exception of the vertex struct. The verts occur right after the mesh struct and the normals are the last data set before the attach struct. The tools sonic team used strictly followed that rule, but the game can operate outside of that constraint so make sure your pointers are always accurate. A crashing game usually means a bad pointer!
Note: these are listed in the order they will appear in the file. However, it is likely that you will start at the OBJECT Struct.

MATERIAL Struct

The game loads as many of these structs as indicated in the attach struct. The format is as follows.

offset Type Description Notes
0 4 Bytes Diffuse Color in BRGA format
4 4 Bytes Specular Color in BRGA format
8 4 Bytes Unknown
C Byte Texture ID
D 4 Bytes? Unknown
11 Byte Unknown
12 Byte UV Clamping
13 Byte End of MATERIAL Struct Always $94

POLY Struct

Triangles

Three shorts, indicating the vertices to use.

Quads

Four shorts, indicating the vertices to use.

Strips

A byte indicating the number of strips to load, a byte indicating the direction to read the strips in, followed by an array of shorts indicating which vertices to use.

VColor Struct

An array of BGRA colors for each vertex in the strip.

UV Struct

An array of two shorts representing the U and V coordinates for each vertex in the strip.

MESH Struct

The game loads as many of these structs as indicated in the attach struct. The format is as follows.

offset Type Description Notes
0 Byte Material ID
1 Byte Poly Type $00 = Triangles, $40 = Quads, $C0 = Strips
2 Short Poly Total This is how many polys to load
4 Pointer Polys Read notes on poly data
8 Padding (0x8) PNormal and Pattr Unused by sadx, but are part of official sega model format
10 Pointer Vertex Colors
14 Pointer UV Coordinates

VERTEX Struct

A Float[3] for each vertex, times the total specified in the ATTACH Struct.

ATTACH Struct

Offset Type Description Notes
0 Pointer Vertices
4 Pointer Normals If this is null, the model doesn't use normals.
8 4 Bytes Vertex/Normal Total
C Pointer Meshes
10 Pointer Materials
14 2 Bytes Mesh Total
16 2 Bytes Material Total
18 Float[3] Center
24 Float Radius
28 4 Bytes Null

OBJECT Struct

Offset Type Description Notes
0 4 Bytes Flags See section below.
4 Pointer Attach
8 Float[3] Position
14 4 Bytes[3] Rotation only read first 2 bytes of each
20 Float[3] Scale Ignored for level geometry.
2C Pointer OBJECT Child
30 Pointer OBJECT Relate

Flags

These flags have (or don't have) various effects on how the model data is used.

Bit Value Description
0 1 Don't apply position values. Seems to have no actual effect.
1 2 Don't apply rotation values. Seems to have no actual effect.
2 4 Don't apply scale values. Seems to have no actual effect.
3 8 Don't render this model. Does not affect level geometry.
4 16 This model has no children. Seems to have no actual effect.
5 32 Rotation values are in ZYX order. Seems to have no actual effect.
6 64 Don't include this model for animations. Does not affect level geometry.
7 128  ??? Seems to have no actual effect.

Model Editing Tutorial

Disclaimer

"The information below on model editing is old, outdated, and generally a pain. It should be ignored, but for the moment I am way too lazy to give it an update proper. Look to the right for a list of much more useful, up-to-date, and pertinent information." - Dude

Alright, so you want to edit models in SADX.

First off you need to think of what character you want to edit.

Let's say you want to do Sonic. His head model is name group5674388.

The 5674388 is the decimal offset in CHRMODELS.DLL you need to go to. Use a calculator to convert this number to hexadecimal; in this case the value is 569594.

Open CHRMODELS.DLL in a hex editor. Open the "go to" window (usually done by pressing Ctrl+G). If your editor supports decimal you can just paste in the original value, or you can choose hexadecimal and use that number. Most models end in something like _4 or _20; you only need the numbers before the dash.

Once you have gone to the offset for Sonic's head, you will see 04 00 00 00 (or 0400 0000, depending on how your hex editor is set up; every 2 numbers/letters is one hex byte).

So you want to skip the first 4 bytes, in this case that is 04 00 00 00. You should now see 68 95 56 10 (or another value for a different model). These four bytes are the next offset you want to go to, but they are in little endian and have had 10000000 added to them. Reverse the order of the bytes and subtract 10000000 to get 00569568, and then go to this address.

This time we do NOT skip the first 4 bytes, we select the first 4 bytes which are 78 73 56 10 and once again, reverse the byte order and subtract 10000000. You should get 00567378.

Go to this offset. You are now at the model =D. what you need to do now, is export your edited model in .obj format. (When editing the model do not use symmetry modifiers or mirror the model! You must edit each vertex by hand, you can't mirror it)

Drop your .obj file on obj2vt.exe and you will get an out.vt. Open the out.vt in a hex editor and check how many bytes it has. Off the top of my head, I believe sonic has around 4,000 something. well, check how many bytes that has, and go back to CHRMODELS.DLL. Select a block, the same size as the other file and hit the delete key. Go back to out.vt and select everything and copy it. Paste it in CHRMODELS.DLL were you deleted the old model.

Save, and it should work.

Animation Locations

CHRMODELS.DLL

Sonic

Address Description
5C310C Standing
60EE6C Standing -> Surf Stance
610AF4 Surf Stance
5C85E4 Looking around
61660C Bored Comment
61A8A4 Bored Comment 2
61660C Bored Comment 2 -> Standing
6125AC Lean Forward
613E94 Lean Back
5CC0CC Walk 1
5CF9D4 Walk 2
5D320C Walk 3
5D64A4 Run 1
5E7CE4 Run 2
5D9674 Jump (in air)/Spindash (on ground)
5D9674 Roll
5DB61C Spring flight
5DEED4 Spring flight -> Falling
5E241C Falling
5E512C Landing
5D914C Skid stop
5F194C Push (start)
5F46E4 Push (loop)
5FABC4 Take damage
5FF48C Hurt landing
5D914C Skid Stop
68788C Air Flip
5EDB24 Hit wall 1
60A7EC Hit wall recovery
5F7D44 Slow backflip
5F63AC turn around
60C434 Slide stance
5F7DDC Spin Ball (no flash)
68A424 Pick up object
68C82C object Run
6999AC Object stop
69B194 Object Turnaround
68DA54 Object stand
6902BC Object walk
5DB61C Trampoline Flight
67642C Trampoline Backflip
5DB61C Trampoline Flight 2
678DB4 Trampoline Flip 2
5DB61C Trampoline Flight 3
673AA4 Slip
67A9AC Slip
6804DC slow frontflip
6CACEC Hanging
6B39CC Pull
6B5234 Shake Tree
6EC184 Pick up object
6EDE5C Shake object
6EFA74 Stop shaking
6AEFEC Standing -> Pick up
6B0854 idle holding tree
691774 object jump
693C1C object jump -> object fall
695754 Object fall
697824 Object landing
6A3404 Throw object
6A825C Toss object
6ABFCC Air throw
6AE064 Air toss
68A424 Put object down
6EA6FC Light dash flight
6C848C Ready to pull
6DA174 monkeybars (broken eyes)
6DDE54 monkeybars (broken eyes)
6DBFD4 monkeybars (broken eyes)
6B8B1C climbing ladder
6BAAC4 Shot from cannon
6E1B3C Slipping on ice
6E5304 Jump pad invert
6E732C Flight to jump pad
610AF4 Surfer stance
6C53AC Win level
6C6AE4 Win -> Standing
6AEFEC Standing -> holding tree
6B0854 holding tree
6BE124 holding rocket
6BC4FC holding rocket
6D0C24 gassed/drunk sonic
5FABC4 pain flight
5D9674 Spin
6E9454 breathe bubble
6F824C Drowning
5FABC4 hit
606EE4 death 1
67E3D4 Falling
66120C Sky Deck grasping cylinder
65F6A4 Sky Deck cylinder shimmy
65B9DC Sky Deck cylinder shimmy (other way)
6633C4 slide down Sky Deck cylinder
665D3C slide down Sky Deck cylinder -> Sky Deck grasping cylinder
670224 holding icicle
671EAC Slipping on icicle
667804 jumping from icicle
6690BC Flight from icicle
6690BC latching onto icicle
66BE64 moving left on icicle
66EBDC moving right on icicle
66EBDC instance of 100
7147EC snowboard stance
723514 turning on board
7214AC turning on board
719A84 jumping on board
717FFC Jumping on Board -> Falling on Board
72539C board stance 2
727214 board stance 2
71F734 wavering on board
71C9CC hit on board
70E814 Falling on board
7103CC Falling on board
7133D4 hit on board
70AF64 Standing on board
70CB8C eh more boarding animations
702BC4 Jump trick 1
70935C Jump trick 2
7372A4 Jump trick 3
7372A4 Jump trick 4
6F9C24 Spin jump trick
72A1F4 Spin jump trick
72B95C Spin jump trick -> Falling on Board
6FDACC Melon grab
716584 Crouch on board
5D9674 Spin
64B6A4 Shower
64EDBC Shower 2
657D14 Shower 3
64389C Shake off water
61CD24 Pet chao
61DE4C Pet chao loop
61F2C4 Stop petting chao
62161C Whistle
638ECC Super Sonic Standing
633064 Super Sonic Standing -> Moving 1
63418C Super Sonic Moving 1
635334 Super Sonic Moving 2
635334 Super Sonic Moving 3
638EDC Super Sonic Spring Flight
638EE4 Super Sonic Spring Flight -> Falling
638EEC Super Sonic Falling
638EF4 Super Sonic Landing?
638EFC Super Sonic Victory
638F04 Super Sonic Victory -> Standing
638ED4 Super Sonic Jumping
59F424 Metal Sonic Hover

Tails

Address Description
4FF9F4 Standing
4FF9F4 Landing
4FF9F4 Standing after landing (animates faster)
4FF9F4  ?
52C81C Standing -> Looking Around
531774 Looking Around
52C81C Looking Around -> Standing
50DEB4 Lean Forwards
50F6AC Lean Backwards
50263C Walking 1
4D4154 Walking 2
4D4154 Walking 3 (Tail Effect)
4D569C Running 1
4D569C Running 2
4D730C Jumping (in air)/Spindash (on ground)
4D730C Rolling
4D73A4 Spin ball
47D9AC Spring Flight
47E664 Spring Flight -> Falling
47F41C Falling
481BF4 Landing
4DE1E4 Braking
4E067C Turning
50263C Walking?
4F3E8C Pushing
4C0FF4 Pushing Loop
4A79B4 Hurt
4ABA9C Hurt Landing
4B4794 Dying
4B661C Dying w/ head shaking?
517064  ?
517064 Drowning
4DE1E4  ?
4D130C Tumbling
4860FC Tumbling -> Sitting
488F74 Sitting -> Standing
4D8B2C Tumbling -> Standing
48A9CC Flying
48C644 Flying reached maximum height
48E3DC Flying falling
48F9F4 more Flying
48F9F4 more Flying
48E3DC Flying reached limit
471204 Tail Attack
47521C Spin Tail Attack
476954 Spin Tail Attack
47796C Spin Tail Attack
478904 Spin Tail Attack
479A3C Spin Tail Attack
47AD94 Spin Tail Attack
47BCBC Spin Tail Attack
47CC34 Spin Tail Attack
472BDC Spin Tail Attack
473BD4 Spin Tail Attack
4BD2D4 Victory
4BEBDC Victory -> Standing
4C8D5C Standing -> Failure
4CAC14 Failure
497E5C Pick Up object
499E34 Walking with object 2
49CF0C Braking with object
49E804 Turn around with object
49FEDC Holding object
4A1D14 Walking with object 1
47D9AC  ?
47E664  ?
47D9AC  ?
47E664  ?
47F41C  ?
47D9AC  ?
481BF4  ?
4FF9F4  ?
4FF9F4  ?
4E5EC4  ?
4D6E34 Shaking tree
51889C Holding object -> Nuzzle object
51A294 Nuzzle object
51BC2C Nuzzle object -> Holding object
4F3E8C Standing -> Holding tree
4F5C54 Holding tree
497E5C  ?
497E5C Falling with object
497E5C  ?
497E5C  ?
4ED88C  ?
4F34B4 Throw object on ground
4ED88C  ?
4F34B4 Throw object in air
497E5C Put down object

Animation Format

Offset Type Description
0 Pointer Model (OBJECT Struct)
4 Pointer Section 2
Offset Type Description
0 Pointer Frame Data
4 4 Bytes Total frame count
8 2 Bytes Data flags
A 2 Bytes Unknown (Always? 2)

Flags:
0x1: Contains Position data
0x2: Contains Rotation data
0x4: Contains Scale data

The next section contains data in the following order, as the flags dictate:
Position Data pointer
Rotation Data pointer
Scale Data pointer
4 Byte Position Data frame count
4 Byte Rotation Data frame count
4 Byte Scale Data frame count

Position/Scale data:

Offset Type Description
0 4 Bytes Frame number
4 Float X
8 Float Y
C Float Z

Rotation data:

Offset Type Description
0 4 Bytes Frame number
4 4 Bytes X
8 4 Bytes Y
C 4 Bytes Z

If the position, rotation and scale data exist, they will override the values from the OBJECT Struct.

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