Sonic Adventure 2/Cutscenes
From Sonic Retro
SCHG: Sonic Adventure 2 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Dreamcast GameCube PC | ||||||||||||
|
Contents
Cutscenes
Depending on the version of SA2, the data for the event cutscenes can differ. EXXXX.PRS is the main file, while the _0 to _J files contain miscellaneous resources, such as audio timings and lighting/screen fade information. In the Dreamcast version, the models and animation data for a scene are all contained within the main file, while in SA2B, the animation data was split off into an uncompressed file labeled exxxxmotion.bin. With two exceptions in the DC version - those being E0203 and E0210 - the event files can only be interpreted by the game if the main file is compressed.
Files that are labeled as evmes??.prs contain the subtitle text and their assignments per cutscene. The first ? wildcard starts with either H, D, or L, denoting the text used for the Hero Story, Dark Story, and Last Episode respectively. The second ? wildcard contains a number from 0 to 5, which represents the language. As an example, evmesH1 contains all the English subtitle information for the Hero Story cutscenes. The contents of these files can be edited using SA2CutsceneTextEditor.
Main File Information
The base pointer for the DC version is 0xC600000
The base pointer for SA2B is 0x8125FE60
Offset | Type | Description |
---|---|---|
0 | Pointer | Cutscene asset arrays |
4 | Pointer | Texture list |
8 | UINT32 | Scene count |
C | Pointer | Texture sizes |
10 | Pointer | ARK character reflection control |
14 | Pointer | Blur model array |
18 | Pointer | Mech character parts (Usually contains pointers to their upgrades and weapons) |
1C | Pointer | Tails' tails |
20 | Pointer | Upgrade list |
24 | Pointer | Texture animation data |
28 | UINT32 | Drop shadow control. A value of 01 allows the character drop shadows to be rendered over updated geometry. (SA2B only) |
Cutscene Entity Data
This section of the main file is the source for all things related to camera controls, models, animations, and Big the Cat cameos for the cutscene.
Offset | Type | Description | Notes |
---|---|---|---|
0 | Pointer | Scene Entity Array | |
4 | UINT32 | Scene Entity Count | |
8 | Pointer | Scene Camera Array | |
C | UINT32 | Scene Camera Count | |
10 | Pointer | Particle Motion Array | The animations in this array are used for positioning certain particle effects if the scene uses them |
14 | UINT32 | Particle Motion Count | |
18 | Pointer | Big Cameo Array | |
1C | UINT32 | Scene Frame Count | "Scene 0" will contain the total number of frames for the entire cutscene, as its section stores the cutscene geometry and must remain visible at all times. |
Scene Entity Arrays
This section of the cutscene entity data array controls which models and animations are to be loaded as a singular entity in a scene. The contents of this section are slightly different between game versions.
Dreamcast
Offset | Type | Description | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Pointer | Model | |||||||||||||||||||||||||||||||||
4 | Pointer | Animation | |||||||||||||||||||||||||||||||||
8 | Pointer | Shape Motion | |||||||||||||||||||||||||||||||||
C | UINT32 | Unknown | |||||||||||||||||||||||||||||||||
10 | Float(3) | Position | |||||||||||||||||||||||||||||||||
1C | UINT32 | Flags
|
SA2B
Offset | Type | Description | Notes | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Pointer | Model | ||||||||||||||||||||||||||||||||||
4 | Pointer | Animation | ||||||||||||||||||||||||||||||||||
8 | Pointer | Shape Motion | ||||||||||||||||||||||||||||||||||
C | Pointer | GC Model | This section is primarily used for "Scene 0" whenever the scene geometry was updated. | |||||||||||||||||||||||||||||||||
10 | Pointer | Shadow Model | These models are usually texture-less versions of the character models and are used in cutscenes with GC models | |||||||||||||||||||||||||||||||||
14 | UINT32 | Unknown | ||||||||||||||||||||||||||||||||||
18 | Float(3) | Position | ||||||||||||||||||||||||||||||||||
24 | UINT32 | Flags
|
||||||||||||||||||||||||||||||||||
28 | UINT32 | Display Layer | This is a value between 0 and 4, which is tied to the game's rendering system. The higher values are sometimes used with models that use transparency to improve visibility |
Big the Cat Cameo Data
This section of the cutscene entity data array controls Big's cameos in each of the scenes.
Offset | Type | Description |
---|---|---|
0 | Pointer | Model |
4 | Pointer | Animation array |
8 | UINT32 | Animation count |
C | UINT32 | Unknown |
Upgrade list
The upgrade list is constant throughout the game. To work around a technical limitation with the character models in SA2B, Mech Tails and Mech Eggman were given an upgrade slot each for their windshields, as they would have problems rendering otherwise.
Number | Description |
---|---|
1 | Sonic's Light Shoes |
2 | Sonic's Flame Ring |
3 | Sonic's Bounce Bracelet |
4 | Sonic's Magic Gloves |
5 | Shadow's Air Shoes |
6 | Shadow's Flame Ring |
7 | Knuckles' Shovel Claw (Left) |
8 | Knuckles' Shovel Claw (Right) |
9 | Knuckles' Hammer Glove (Left) |
10 | Knuckles' Hammer Glove (Right) |
11 | Knuckles' Sunglasses |
12 | Knuckles' Air Necklace |
13 | Rouge's Pick Nails |
14 | Rouge's Treasure Scope |
15 | Rouge's Iron Boots |
16 | Rouge's Heart Plates |
17 | Mech Tails' cockpit window (SA2B only) |
18 | Mech Eggman's cockpit window (SA2B only) |
Mech Parts list
The list used to detect mech character parts is constant throughout the game. The way this list works is that each part of the mech is referenced via pointer to its OBJECT struct and pieces that are deemed redundant are rendered invisible. For example, if the player has acquired Mech Tails' Bazooka upgrade, his Vulcan Cannon won't render on his model and vice versa.
The list is essentially split into three sections, with the first two including pointers to the upgrade models and the last section focusing on the regular models if they exist. The order of the upgrades in the list is identical to a set of flags that are found in the game's code, which is the basis for the descriptions found in the table. The Tornado object in E0004 references its Vulcan Cannon where the Bazooka upgrade would normally be referenced. The reasoning for this is unclear at the moment.
The original purpose of this section was to serve as the upgrade application list for cutscenes. As such, all visible upgrades are supported here, but due to the inclusion of a new upgrade list that more closely matches the in-game implementation, the mech characters are the only ones to utilize the feature at all.
ID | Description | ID | Description | ID | Description |
---|---|---|---|---|---|
0 | Sonic's Light Shoes 1* | 31 | Sonic's Light Shoes 2* | 62 | Null |
1 | Sonic's Ancient Light** | 32 | Null | 63 | Null |
2 | Sonic's Magic Gloves* | 33 | Null | 64 | Null |
3 | Sonic's Flame Ring* | 34 | Null | 65 | Null |
4 | Sonic's Bounce Bracelet* | 35 | Null | 66 | Null |
5 | Sonic's Mystic Melody** | 36 | Null | 67 | Null |
6 | Mech Tails' Booster (Left, Node 51) | 37 | Mech Tails' Booster (Right, Node 40) | 68 | Null |
7 | Mech Tails' Bazooka (Root, Node 11) | 38 | Null | 69 | Mech Tails' Vulcan Cannon (Root, Node 3) |
8 | Mech Tails' Laser Blaster (Root, Node 8) | 39 | Null | 70 | Mech Tails' Missile Blaster (Root, Node 5) |
9 | Mech Tails' Mystic Melody** | 40 | Null | 71 | Null |
10 | Knuckles' Shovel Claw 1* | 41 | Knuckles' Shovel Claw 2* | 72 | Null |
11 | Knuckles' Sunglasses* | 42 | Null | 73 | Null |
12 | Knuckles' Hammer Gloves 1* | 43 | Knuckles' Hammer Gloves 2* | 74 | Null |
13 | Knuckles' Air Necklace* | 44 | Null | 75 | Null |
14 | Knuckles' Mystic Melody** | 45 | Null | 76 | Null |
15 | Null | 46 | Null | 77 | Null |
16 | Shadow's Air Shoes 1* | 47 | Shadow's Air Shoes 2* | 78 | Null |
17 | Shadow's Ancient Light** | 48 | Null | 79 | Null |
18 | Shadow's Flame Ring* | 49 | Null | 80 | Null |
19 | Shadow's Mystic Melody** | 50 | Null | 81 | Null |
20 | Mech Eggman's Jet Engine (Right, Node 6) | 51 | Mech Eggman's Jet Engine (Left, Node 11) | 82 | Null |
21 | Mech Eggman's Large Cannon (Root, Node 22) | 52 | Null | 83 | Mech Eggman's Vulcan Cannon (Root, Node 17) |
22 | Mech Eggman's Laser Blaster (Root, Node 24) | 53 | Null | 84 | Mech Eggman's Missile Blaster (Root, Node 19) |
23 | Mech Eggman's Protection Armor (Node 16) | 54 | Null | 85 | Null |
24 | Mech Eggman's Mystic Melody** | 55 | Null | 86 | Null |
25 | Rouge's Pick Nails 1* | 56 | Rouge's Pick Nails 2* | 87 | Null |
26 | Rouge's Treasure Scope* | 57 | Null | 88 | Null |
27 | Rouge's Iron Boots 1* | 58 | Rouge's Iron Boots 2* | 89 | Null |
28 | Rouge's Mystic Melody** | 59 | Null | 90 | Null |
29 | Null | 60 | Null | 91 | Null |
30 | Null | 61 | Null | 92 | Null |
*Assumed upgrade/normal model
**Upgrade doesn't normally have a visual component
Character Node Hierarchy
The node hierarchy for the characters in the cutscenes tends to be quite different from their main game counterparts. As a result, there isn't so much a common skeleton for the cutscene models so much as a different arrangement for the same nodes, with some alterations for what's included within the body's mesh. As a general rule of thumb, any part of the mesh that requires shape motions in the scene is not included with the main model.
Sonic
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Body node (Parent 2) |
4 | Legs + Tail node (Parent) |
5 | Legs + Tail node (Parent 2) |
6 | Left Leg (Parent) |
7 | Left Leg node (hip) |
8 | Left Leg node (thigh) |
9 | Left Leg node (knee) |
10 | Left Leg node (end) |
11 | Left Foot node (Parent) |
12 | Left Foot node (Heel) |
13 | Left Foot node (Toe) |
14 | Left Foot node (End) |
15 | Tail (Parent) |
16 | Tail node (base) |
17 | Tail node (2nd from base) |
18 | Tail node (2nd from end) |
19 | Tail node (end) |
20 | Right Leg (Parent) |
21 | Right Leg node (hip) |
22 | Right Leg node (thigh) |
23 | Right Leg node (knee) |
24 | Right Leg node (end) |
25 | Right Foot node (Parent) |
26 | Right Foot node (Heel) |
27 | Right Foot node (toe) |
28 | Right Foot node (end) |
29 | Chest node (Parent) |
30 | Chest node (middle) |
31 | Head + Arms node (Parent) |
32 | Head + Arms node (Parent 2) |
33 | Right Arm (Parent, contains arm array) |
34 | Right Arm (Parent 2) |
35 | Right Arm node (base) |
36 | Right Arm node (elbow) |
37 | Right Arm node (wrist) |
38 | Right hand (Parent) |
39 | Right hand (Parent 2) |
40 | Face node (Parent) |
41 | Face node (Parent 2) |
42 | Face node (Parent 3) |
43 | Muzzle (Parent) |
44 | Head (Parent) |
45 | Right eye (Parent) |
46 | Right eye |
47 | Left eye (Parent) |
48 | Left eye |
49 | Left Arm (Parent, contains arm array) |
50 | Left Arm (Parent 2) |
51 | Left Arm node (base) |
52 | Left Arm node (elbow) |
53 | Left Arm node (wrist) |
54 | Left hand (Parent) |
55 | Left Hand (Parent 2) |
Shadow
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Body node (Parent 2) |
4 | Legs + Tail node (Parent) |
5 | Legs + Tail node (Parent 2) |
6 | Right Leg (Parent) |
7 | Right Leg node (hip) |
8 | Right Leg node (thigh) |
9 | Right Leg node (knee) |
10 | Right Leg node (end) |
11 | Right Foot node (Parent) |
12 | Right Foot node (Heel) |
13 | Right Foot node (Toe) |
14 | Right Foot node (End) |
15 | Tail (Parent) |
16 | Tail node (base) |
17 | Tail node (2nd from base) |
18 | Tail node (2nd from end) |
19 | Tail node (end) |
20 | Left Leg (Parent) |
21 | Left Leg node (hip) |
22 | Left Leg node (thigh) |
23 | Left Leg node (knee) |
24 | Left Leg node (end) |
25 | Left Foot node (Parent) |
26 | Left Foot node (Heel) |
27 | Left Foot node (toe) |
28 | Left Foot node (end) |
29 | Chest node (Parent) |
30 | Chest node (middle) |
31 | Head + Arms node (Parent) |
32 | Head + Arms node (Parent 2) |
33 | Right Arm (Parent, contains arm array) |
34 | Right Arm (Parent 2) |
35 | Right Arm node (base) |
36 | Right Arm node (elbow) |
37 | Right Arm node (wrist) |
38 | Right hand (Parent) |
39 | Face node (Parent) |
40 | Face node (Parent 2) |
41 | Face node (Parent 3) |
42 | Muzzle (Parent) |
43 | Head (Parent) |
44 | Right eye (Parent) |
45 | Right eye |
46 | Left eye (Parent) |
47 | Left eye |
48 | Left Arm (Parent, contains arm array) |
49 | Left Arm (Parent 2) |
50 | Left Arm node (base) |
51 | Left Arm node (elbow) |
52 | Left Arm node (wrist) |
53 | Left hand (Parent) |
Knuckles
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Body node (Parent 2) |
4 | Legs + Tail node (Parent) |
5 | Legs + Tail node (Parent 2) |
6 | Right Leg (Parent) |
7 | Right Leg node (hip) |
8 | Right Leg node (thigh) |
9 | Right Leg node (knee) |
10 | Right Leg node (end) |
11 | Right Foot node (Parent, contains shoe array) |
12 | Right Foot node (Parent 2) |
13 | Right Foot node (Heel) |
14 | Right Foot node (Toe) |
15 | Right Foot node (End) |
16 | Left Leg (Parent) |
17 | Left Leg node (hip) |
18 | Left Leg node (thigh) |
19 | Left Leg node (knee) |
20 | Left Leg node (end) |
21 | Left Foot node (Parent, contains shoe array) |
22 | Left Foot node (Parent 2) |
23 | Left Foot node (Heel) |
24 | Left Foot node (toe) |
25 | Left Foot node (end) |
26 | Tail (Parent) |
27 | Tail node (base) |
28 | Tail node (2nd from base) |
29 | Tail node (2nd from end) |
30 | Tail node (end) |
31 | Chest node (Parent) |
32 | Chest node (middle) |
33 | Head + Arms node (Parent) |
34 | Head + Arms node (Parent 2) |
35 | Left Arm (Parent, contains arm array) |
36 | Left Arm (Parent 2) |
37 | Left Arm node (base) |
38 | Left Arm node (elbow) |
39 | Left Arm node (wrist) |
40 | Left hand (Parent) |
41 | Face node (Parent) |
42 | Face node (Parent 2) |
43 | Face node (Parent 3) |
44 | Muzzle (Parent) |
45 | Head (Parent) |
46 | Right eye (Parent) |
47 | Right eye |
48 | Left eye (Parent) |
49 | Left eye |
50 | Right Arm (Parent, contains arm array) |
51 | Right Arm (Parent 2) |
52 | Right Arm node (base) |
53 | Right Arm node (elbow) |
54 | Right Arm node (wrist) |
55 | Right hand (Parent) |
Rouge
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Body node (Parent 2) |
4 | Legs + Tail node (Parent) |
5 | Legs + Tail node (Parent 2) |
6 | Right Leg (Parent) |
7 | Right Leg node (hip) |
8 | Right Leg node (thigh) |
9 | Right Leg node (knee) |
10 | Right Leg node (end) |
11 | Right Foot node (Parent, contains shoe array) |
12 | Right Foot node (Parent 2) |
13 | Right Foot node (Heel) |
14 | Right Foot node (Toe) |
15 | Right Foot node (End) |
16 | Left Leg (Parent) |
17 | Left Leg node (hip) |
18 | Left Leg node (thigh) |
19 | Left Leg node (knee) |
20 | Left Leg node (end) |
21 | Left Foot node (Parent, contains shoe array) |
22 | Left Foot node (Parent 2) |
23 | Left Foot node (Heel) |
24 | Left Foot node (toe) |
25 | Left Foot node (end) |
26 | Tail (Parent) |
27 | Tail node (base) |
28 | Tail node (2nd from base) |
29 | Tail node (2nd from end) |
30 | Tail node (end) |
31 | Chest node (Parent) |
32 | Chest node (middle) |
33 | Head + Arms node (Parent) |
34 | Head + Arms node (Parent 2) |
35 | Right Arm (Parent, contains arm array) |
36 | Right Arm (Parent 2) |
37 | Right Arm node (base) |
38 | Right Arm node (elbow) |
39 | Right Arm node (wrist) |
40 | Right hand (Parent) |
41 | Right hand (Parent 2) |
42 | Right thumb node (Parent) |
43 | Right thumb node (middle) |
44 | Right thumb node (tip) |
45 | Right fingers node (Parent) |
46 | Right fingers node (middle) |
47 | Right fingers node (tip) |
48 | Right pinkie node (Parent) |
49 | Right pinkie node (middle) |
50 | Right pinkie node (tip) |
51 | Right hand |
52 | Face node (Parent) |
53 | Face node (Parent 2) |
54 | Face node (Parent 3) |
55 | Muzzle (Parent) |
56 | Head (Parent) |
57 | Right eye (Parent) |
58 | Right eye |
59 | Left eye (Parent) |
60 | Left eye |
61 | Left Arm (Parent, contains arm array) |
62 | Left Arm (Parent 2) |
63 | Left Arm node (base) |
64 | Left Arm node (elbow) |
65 | Left Arm node (wrist) |
66 | Left hand (Parent) |
67 | Left Hand (Parent 2) |
68 | Left thumb node (Parent) |
69 | Left thumb node (middle) |
70 | Left thumb node (tip) |
71 | Left fingers node (Parent) |
72 | Left fingers node (middle) |
73 | Left fingers node (tip) |
74 | Left pinkie node (Parent) |
75 | Left pinkie node (middle) |
76 | Left pinkie node (tip) |
77 | Left hand |
Mech Tails
ID | Description |
---|---|
0 | Mech's Root node |
1 | Mech's Legs node (Parent) |
2 | Mech's Chest node (Parent) |
3 | Vulcan Cannon |
4 | Vulcan Cannon node |
5 | Missile Blaster node (base) |
6 | Missile Blaster node (barrel) |
7 | Missile Blaster node (tip) |
8 | Laser Blaster node (base) |
9 | Laser Blaster node (barrel) |
10 | Laser Blaster node (tip) |
11 | Bazooka node (base) |
12 | Bazooka node (barrel) |
13 | Bazooka node (tip) |
14 | Cannon node |
15 | Pilot's root node |
16 | Pilot's Chest node |
17 | Pilot's Left Arm node (base, contains array for arm) |
18 | Pilot's Left Arm node (Parent) |
19 | Pilot's Left Arm node (Armpit) |
20 | Pilot's Left Arm node (elbow) |
21 | Pilot's Left Arm node (wrist) |
22 | Pilot's Right arm node (base, contains array for arm) |
23 | Pilot's Right arm node (Parent) |
24 | Pilot's Right arm node (armpit) |
25 | Pilot's Right arm node (elbow) |
26 | Pilot's Right arm node (wrist) |
27 | Pilot's Face node (Parent) |
28 | Pilot's Face node (Parent 2) |
29 | Pilot's Face node (Parent 3) |
30 | Pilot's Right eye |
31 | Pilot's Left eye |
32 | Pilot's face node (end) |
33 | Yoke node |
34 | Lock-on Laser node |
35 | Mech's Right foot node (Parent) |
36 | Mech's Right foot node (Parent 2) |
37 | Mech's Right foot node (base) |
38 | Mech's Right foot node (calf, Parent) |
39 | Mech's Right foot node (calf) |
40 | Booster (Right) |
41 | Mech's Right foot node (Foot, Parent 1) |
42 | Mech's Right foot node (Foot, Parent 2) |
43 | Mech's Right foot node (Foot, Parent 3) |
44 | Mech's Right foot node (Foot) |
45 | Mech's Right foot node (Foot, tip) |
46 | Mech's Left foot node (Parent) |
47 | Mech's Left foot node (Parent 2) |
48 | Mech's Left foot node (base) |
49 | Mech's Left foot node (calf, Parent) |
50 | Mech's Left foot node (calf) |
51 | Booster (Left) |
52 | Mech's Left foot node (Foot, Parent 1) |
53 | Mech's Left foot node (Foot, Parent 2) |
54 | Mech's Left foot node (Foot, Parent 3) |
55 | Mech's Left foot node (Foot) |
56 | Mech's Left foot node (Foot, tip) |
Mech Eggman
ID | Description |
---|---|
0 | Root node |
1 | Mech's Legs node (Parent) |
2 | Mech's Right Leg node (base) |
3 | Mech's Right Leg node (calf) |
4 | Mech's Right Foot node (heel) |
5 | Mech's Right Foot node (toe) |
6 | Jet Engine (Right) |
7 | Mech's Left Leg node (base) |
8 | Mech's Left Leg node (calf) |
9 | Mech's Left Leg node (heel) |
10 | Mech's Left Leg node (toe) |
11 | Jet Engine (Left) |
12 | Mech's Chest node (Parent) |
13 | Blaster node |
14 | Lock-on Laser node |
15 | Accessories node? (Parent) |
16 | Protection Armor |
17 | Vulcan Cannon |
18 | Vulcan Cannon node |
19 | Missile Blaster node (base) |
20 | Missile Blaster node (barrel) |
21 | Missile Blaster node (tip) |
22 | Large Cannon |
23 | Large Cannon node |
24 | Laser Blaster node (base) |
25 | Laser Blaster node (barrel) |
26 | Laser Blaster node (tip) |
27 | Laser Blaster node (glow) |
28 | Pilot's root node |
29 | Pilot's chest node (Contains array for the body) |
30 | Pilot's Arms node (Parent) |
31 | Pilot's Left Arm node (Parent) |
32 | Pilot's Left Arm node (base) |
33 | Pilot's Left Arm node (elbow) |
34 | Pilot's Left Arm node (wrist) |
35 | Pilot's Left hand node (Parent) |
36 | Pilot's Right Arm node (Parent) |
37 | Pilot's Right arm node (base) |
38 | Pilot's Right arm node (elbow) |
39 | Pilot's Right arm node (wrist) |
40 | Pilot's Right hand node (Parent) |
41 | Pilot's Face node (Parent) |
42 | Pilot's Face node (Parent 2) |
43 | Pilot's Face node (Parent 3) |
Tails
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Chest node (Parent) |
4 | Chest node (middle) |
5 | Head + Arms node (Parent) |
6 | Head + Arms node (Parent 2) |
7 | Left Arm (Parent, contains arm array) |
8 | Left Arm (Parent 2) |
9 | Left Arm node (base) |
10 | Left Arm node (elbow) |
11 | Left Arm node (wrist) |
12 | Left hand (Parent) |
13 | Left hand (Parent 2) |
14 | Right Arm (Parent, contains arm array) |
15 | Right Arm (Parent 2) |
16 | Right Arm node (base) |
17 | Right Arm node (elbow) |
18 | Right Arm node (wrist) |
19 | Right hand (Parent) |
20 | Right Hand (Parent 2) |
21 | Face node (Parent) |
22 | Face node (Parent 2) |
23 | Face node (Parent 3) |
24 | Eyes (Parent) |
25 | Left Eye |
26 | Right eye |
27 | Muzzle (Parent) |
28 | Head (Parent) |
29 | Body node (Parent 2) |
30 | Legs + Tail node (Parent) |
31 | Legs + Tail node (Parent 2) |
32 | Right Leg (Parent) |
33 | Right Leg node (hip) |
34 | Right Leg node (thigh) |
35 | Right Leg node (knee) |
36 | Right Leg node (end) |
37 | Right Foot node (Parent, contains shoe array) |
38 | Right Foot node (Parent 2) |
39 | Right Foot node (Heel) |
40 | Right Foot node (Toe) |
41 | Right Foot node (End) |
42 | Tails (Parent) |
43 | Right tail |
44 | Left tail |
45 | Left Leg (Parent) |
46 | Left Leg node (hip) |
47 | Left Leg node (thigh) |
48 | Left Leg node (knee) |
49 | Left Leg node (end) |
50 | Left Foot node (Parent, contains shoe array) |
51 | Left Foot node (Parent 2) |
52 | Left Foot node (Heel) |
53 | Left Foot node (toe) |
54 | Left Foot node (end) |
Eggman
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Chest node (Parent) |
4 | Chest node (middle) |
5 | Head + Arms node (Parent) |
6 | Head + Arms node (Parent 2) |
7 | Left Arm (Parent) |
8 | Left Arm node (base) |
9 | Left Arm node (elbow) |
10 | Left Arm node (wrist) |
11 | Left Hand node (Parent) |
12 | Left Hand node (Parent 2) |
13 | Right Arm (Parent) |
14 | Right Arm node (base) |
15 | Right Arm node (elbow) |
16 | Right Arm node (wrist) |
17 | Right hand node (Parent) |
18 | Right hand node (Parent 2) |
19 | Face node (Parent) |
20 | Face node (Parent 2) |
21 | Face node (Parent 3) |
22 | Body node (Parent 2) |
23 | Legs node (Parent) |
24 | Legs node (Parent 2) |
25 | Right Leg node (Parent) |
26 | Right Leg node (hip) |
27 | Right Leg node (thigh) |
28 | Right Leg node (knee) |
29 | Right Leg node (End) |
30 | Right Foot node (Parent) |
31 | Right Foot node (calf) |
32 | Right Foot node (heel) |
33 | Right Foot node (toe) |
34 | Left Leg node (Parent) |
35 | Left Leg node (hip) |
36 | Left Leg node (thigh) |
37 | Left Leg node (knee) |
38 | Left Leg node (end) |
39 | Left Foot node (Parent) |
40 | Left Foot node (calf) |
41 | Left Foot node (heel) |
42 | Left Foot node (toe) |
Amy
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Body node (Parent 2) |
4 | Legs + Tail node (Parent) |
5 | Legs + Tail node (Parent 2) |
6 | Right Leg (Parent) |
7 | Right Leg node (hip) |
8 | Right Leg node (thigh) |
9 | Right Leg node (knee) |
10 | Right Leg node (end) |
11 | Right Foot node (Parent) |
12 | Right Foot node (Heel) |
13 | Right Foot node (Toe) |
14 | Right Foot node (End) |
15 | Tail (Parent) |
16 | Tail node (base) |
17 | Tail node (2nd from base) |
18 | Tail node (2nd from end) |
19 | Tail node (end) |
20 | Left Leg (Parent) |
21 | Left Leg node (hip) |
22 | Left Leg node (thigh) |
23 | Left Leg node (knee) |
24 | Left Leg node (end) |
25 | Left Foot node (Parent) |
26 | Left Foot node (Heel) |
27 | Left Foot node (toe) |
28 | Left Foot node (end) |
29 | Chest node (Parent) |
30 | Chest node (middle) |
31 | Head + Arms node (Parent) |
32 | Head + Arms node (Parent 2) |
33 | Face node (Parent) |
34 | Face node (Parent 2) |
35 | Muzzle (Parent) |
36 | Eyes (Parent) |
37 | Right eye |
38 | Left eye |
39 | Face node (Parent 3) |
40 | Head (Parent) |
41 | Right Arm (Parent, contains arm array) |
42 | Right Arm (Parent 2) |
43 | Right Arm node (base) |
44 | Right Arm node (elbow) |
45 | Right Arm node (wrist) |
46 | Right hand (Parent) |
47 | Right hand (Parent 2) |
48 | Left Arm (Parent, contains arm array) |
49 | Left Arm (Parent 2) |
50 | Left Arm node (base) |
51 | Left Arm node (elbow) |
52 | Left Arm node (wrist) |
53 | Left hand (Parent) |
54 | Left Hand (Parent 2) |
Super Sonic/Super Shadow
ID | Description |
---|---|
0 | Root node |
1 | Root node 2 (Main array for the body) |
2 | Body node (Parent) |
3 | Body node (Parent 2) |
4 | Legs + Tail node (Parent) |
5 | Legs + Tail node (Parent 2) |
6 | Right Leg (Parent) |
7 | Right Leg node (hip) |
8 | Right Leg node (thigh) |
9 | Right Leg node (knee) |
10 | Right Leg node (end) |
11 | Right Foot node (Parent, contains shoe array) |
12 | Right Foot node (Parent 2) |
13 | Right Foot node (Heel) |
14 | Right Foot node (Toe) |
15 | Right Foot node (End) |
16 | Left Leg (Parent) |
17 | Left Leg node (hip) |
18 | Left Leg node (thigh) |
19 | Left Leg node (knee) |
20 | Left Leg node (end) |
21 | Left Foot node (Parent, contains shoe array) |
22 | Left Foot node (Parent 2) |
23 | Left Foot node (Heel) |
24 | Left Foot node (toe) |
25 | Left Foot node (end) |
26 | Tail (Parent) |
27 | Tail node (base) |
28 | Tail node (2nd from base) |
29 | Tail node (2nd from end) |
30 | Tail node (end) |
31 | Chest node (Parent) |
32 | Chest node (middle) |
33 | Head + Arms node (Parent) |
34 | Head + Arms node (Parent 2) |
35 | Left Arm (Parent, contains arm array) |
36 | Left Arm (Parent 2) |
37 | Left Arm node (base) |
38 | Left Arm node (elbow) |
39 | Left Arm node (wrist) |
40 | Left hand (Parent) |
41 | Left hand (Parent 2) |
42 | Face node (Parent) |
43 | Face node (Parent 2) |
44 | Face node (Parent 3) |
45 | Muzzle (Parent) |
46 | Head (Parent) |
47 | Right eye (Parent) |
48 | Right eye |
49 | Left eye (Parent) |
50 | Left eye |
51 | Right Arm (Parent, contains arm array) |
52 | Right Arm (Parent 2) |
53 | Right Arm node (base) |
54 | Right Arm node (elbow) |
55 | Right Arm node (wrist) |
56 | Right hand (Parent) |
57 | Right Hand (Parent 2) |
EXXXX_0 Information
In earlier version of Sonic Adventure 2, the event files that had an additional number as a suffix contained all the additional data for the cutscene. The final builds adjusted this system so that the various languages would utilize files that only contained their subtitle and audio timings. EXXXX_0 was originally meant to contain data related to the Japanese language setting, but the final builds repurposed them to contain and load the external graphical effects used in each cutscene.
Screen Effects
Information starting at 0x9800 denotes any screen effects that occur within the scene, such as fades or color changes. Each chunk of this information is 64 bytes long, with the last 32 bytes acting as a buffer. There are a total of 64 possible entries that can be implemented for this section.
Offset | Type | Description | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | UINT32 | Frame in which the screen information takes effect | ||||||||||||||
4 | Byte | Effect type
| ||||||||||||||
5 | Char Array [3] | Null | ||||||||||||||
8 | Char Array [4] | ASCII color (ARGB) | ||||||||||||||
C | Byte | Fadeout check | ||||||||||||||
D | Byte | Null | ||||||||||||||
E | INT16 | Screen texture ID* | ||||||||||||||
10 | UINT32 | Visible time* | ||||||||||||||
14 | INT16 | Position X* | ||||||||||||||
16 | INT16 | Position Y* | ||||||||||||||
18 | Float | Width* | ||||||||||||||
1C | Float | Height* |
*These values are used in combination with the texture screen effect IDs
Simple Particle Effect Information
Information starting at 0xA800 pertains to simple particle effects present in the cutscene, such as flashing lights or the sun. Each piece of data is 56 bytes long, with the last 32 bytes acting as a buffer. There are a total of 2048 possible entries that can be implemented for this section.
Offset | Type | Description | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | UINT32 | Frame in which the particle information takes effect | ||||||||||||||||||||||||||||||||||||||||
4 | Byte | Particle ID
| ||||||||||||||||||||||||||||||||||||||||
5 | Byte | Particle Motion ID | ||||||||||||||||||||||||||||||||||||||||
6 | INT16 | Null | ||||||||||||||||||||||||||||||||||||||||
8 | Float | Texture ID* | ||||||||||||||||||||||||||||||||||||||||
C | Float | Pulse Control* | ||||||||||||||||||||||||||||||||||||||||
10 | Float | Unknown* | ||||||||||||||||||||||||||||||||||||||||
14 | Float | Particle Size* |
*Custom particles treat these values as depicted in the list, while normal particles treat these as displacement values
Object Lighting Information
Starting at 0x26800 are 68-byte chunks that dictate the object lighting information for the corresponding cutscene. The last 20 bytes can be considered a buffer for now. Lighting information is split into four sections of 256 entries each and all four sets are combined at runtime, depending on the entity flag settings. The Dreamcast version only applies the first section's information by default unless the multi-light entity flags are set, while SA2B applies all four lighting sets at all times. "Scene 0" entities ignore all lighting instructions by default unless the multi-light entity flags are set. There are a total of 1024 possible entries that can be implemented for this section.
Offset | Type | Description |
---|---|---|
0 | UINT32 | Frame in which the lighting information takes effect |
4 | UINT32 | Fade control. 1 is a hard cut, while 2 is a fade-in from the previous set of instructions |
8 | Float | Light Direction Vector (X-Component) |
C | Float | Light Direction Vector (Y-Component) |
10 | Float | Light Direction Vector (Z-Component) |
14 | Float | Red |
18 | Float | Green |
1C | Float | Blue |
20 | Float | Light intensity |
24 | Float | Ambient R |
28 | Float | Ambient G |
2C | Float | Ambient B |
Blur Effect Information
Information starting at 0x37800 denotes the controls for motion blur effects used by models in the blur array. Each chunk is 64 bytes in size. There are 64 total blur effect entries per cutscene.
Offset | Type | Description | Notes |
---|---|---|---|
0 | UINT32 | Frame in which the blur information takes effect | |
4 | UINT32 | Effect duration | |
8 | Char Array [6] | Blur Model ID | A maximum of six model IDs can be entered here. IDs are determined by their placement in the blur models array |
E | UINT16 | Null | |
10 | UINT32 | Blur Entity Count |
Animated Particle Effect Information
Information starting at 0x38800 pertains to specific animated particle effects that are loaded in a cutscene, such as smoke clouds and moving sparkles. Each data chunk is 64 bytes in size. There are a total of 64 possible entries that can be implemented for this section.
Offset | Type | Description | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Float(3) | Position | ||||||||||||||||||||||||||||||||||||
C | Float(3) | Rotation and Speed controls | ||||||||||||||||||||||||||||||||||||
18 | UINT16 | Unknown | ||||||||||||||||||||||||||||||||||||
1A | UINT16 | Unknown | ||||||||||||||||||||||||||||||||||||
1C | UINT16 | Unknown | ||||||||||||||||||||||||||||||||||||
1E | UINT16 | Unknown | ||||||||||||||||||||||||||||||||||||
20 | UINT32 | Frame in which the particle information begins to play | ||||||||||||||||||||||||||||||||||||
24 | Float(3) | Particle spread controls | ||||||||||||||||||||||||||||||||||||
30 | UINT32 | Number of particle instances | ||||||||||||||||||||||||||||||||||||
34 | UINT32 | Unknown | ||||||||||||||||||||||||||||||||||||
38 | UINT32 | Particle ID
| ||||||||||||||||||||||||||||||||||||
3C | UINT32 | Unknown |
Video Overlay Information
Information starting at 0x39800 determines whether or not an FMV overlay is meant to be loaded in a scene. Depending on the settings, the video can either be superimposed over the screen, or a mesh that's in the cutscene. The chunks are 64 bytes long, with the last 16 acting as a buffer. There are a total of 64 possible entries that can be implemented for this section.
In the Dreamcast and GameCube versions, .m1v files are loaded for these cases. The 2012 re-release checks for and loads the .sfd equivalents of the video overlays.
Offset | Type | Description | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | UINT32 | Frame in which the video begins to play | ||||||||||||||||
4 | INT16 | X Position. Positive values push the video overlay to the right. | ||||||||||||||||
6 | INT16 | Y Position. Positive values push the video overlay down. | ||||||||||||||||
8 | Float | Depth value. A higher value means the video overlay will be pushed further away from the screen | ||||||||||||||||
C | Byte | Overlay type
| ||||||||||||||||
D | Byte | Overlay texture ID*. Any meshes that use the texture ID denoted here will have the specified texture replaced with the video. | ||||||||||||||||
E | UINT16 | Null | ||||||||||||||||
10 | Text | Name of the video file that's to be loaded |
*This is used in combination with the "Mesh overlay" type.
EXXXX_1-J Information
Suffix | Language |
---|---|
1 | English |
2 | French |
3 | Spanish |
4 | German |
5 | Italian (2012 port only) |
J | Japanese |
The start of the file contains subtitle data. Each data set is 8 bytes long and is tied to the subtitle order found in the appropriate evmes?? file.
There are a maximum of 256 subtitle entries per cutscene.
Offset | Type | Description |
---|---|---|
0 | INT32 | Frame in which the subtitle is set to appear. A value of -1 in this slot indicates that the subtitle will be used as the opening text crawl for the cutscene. |
4 | UINT32 | Number of frames in which the subtitle is to remain onscreen. |
Information starting at 0x800 and continuing until the end of the file contains audio timings for voices and BGM for each language. Each chunk is 72 bytes in size. Voice clip playback is determined by the cutscene ID, so a value used by E0000 will not be the same as the value used by E0102, for example.
There are a maximum of 512 audio entries per cutscene.
Offset | Type | Description |
---|---|---|
0 | UINT32 | Frame in which the audio clip begins to play |
4 | Byte | SFX initializer. FF is considered a null value and is ignored |
5 | Byte | Credits initializer and scroll speed control. This is hardcoded to only work with E0210. FF is a null value |
6 | UINT16 | Number of the voice clip that's to be loaded if applicable. This number is added to a default value set by each cutscene and the result is compared against a master array to load the desired voice clip. FF FF denotes a null entry |
8 | Text | Name of audio track that's to be loaded, if applicable. Placing a hex value of 30 in this spot will stop the current audio track from playing |
18 | Text | Name of jingle that's to be loaded, if applicable. No cutscenes appear to use this feature |
Mini-Event Scenes
Scenes that are labeled as MEXXXX.PRS in the event files are cutscenes that occur within a game state, such as before certain boss fights like Big Foot and Flying Dog. The contents of these files are not as robust as those of the main cutscenes, often only containing animation and shape motion data for the designated characters. As these scenes rely on the player models, specific parts of their body are omitted and replaced with cutscene-specific variants for the duration of the scene, with the exception of Mech Eggman as he only requires animation data. The contents of these files can be broken down as follows:
Offset | Type | Description |
---|---|---|
0 | UINT32 | Character flags |
4 | Pointer | Camera information |
8 | Pointer | Sonic's pointer array (if applicable) |
C | Pointer | Shadow's pointer array (if applicable) |
10 | Pointer | Mechless Tails' pointer array (unused) |
14 | Pointer | Mechless Eggman's pointer array (unused) |
18 | Pointer | Knuckles' pointer array (if applicable) |
1C | Pointer | Rouge's pointer array (if applicable) |
20 | Pointer | Mech Tails' pointer array (unused) |
24 | Pointer | Mech Eggman's pointer array (if applicable) |
For Sonic, Shadow, and Knuckles' player models, any models attached to nodes 42 (Left Hand), 47 (Mouth), 49 (Head), and 61 (Right Hand) will be omitted for the duration of the scene. Rouge only omits models attached to nodes 47 and 49.
The order for each character's pointer array always begins with the player model's animations, followed by the model -> animation -> shape motion data sets for each cutscene model. The head's data goes first, followed by the mouth, then the left hand, and finally the right hand.
The DC base pointer for these scenes is 0xCB00000
The base pointer for these scenes in SA2B is 0x816DFE60
MEXXXX_0-5 Information
Suffix | Language |
---|---|
0 | Japanese |
1 | English |
2 | French |
3 | Spanish |
4 | German |
5 | Italian (2012 port only) |
Much like the _1 to _J files for the main event cutscenes, MEXXXX_0 to _5 dictates audio and subtitle information for the mini-event scenes. These files are uncompressed.
The start of the file contains subtitle timings and their duration. Each data set is 8 bytes in size and is tied to the subtitle order found in the appropriate evmes?? file.
There are a maximum of 32 subtitle entries per cutscene.
Offset | Type | Description |
---|---|---|
0 | UINT32 | Frame in which the subtitle is set to appear |
4 | UINT32 | Number of frames in which the subtitle remains onscreen after it has been loaded |
Information starting at 0x100 contains timings for each language. Each chunk is 76 bytes in size. Note that voice clip entries are dependent on the cutscene's internal ID, so the "first" entry of ME0001 isn't the same as the one found in ME0007, for example.
There are a maximum of 64 effect timings per cutscene.
Offset | Type | Description |
---|---|---|
0 | UINT32 | Frame in which the instruction is set to begin |
4 | Byte | Screen control. 1 is a normal fade-in, while 2 maintains the screen fade tint until the mini-event is finished. |
5 | Byte | Sound effect ID that is to be loaded, if applicable. FF is considered a null value |
6 | Byte | Unknown |
7 | Byte | Null (00) |
8 | UINT16 | Number of the voice clip that's to be loaded if applicable. This number is added to a default value set by each cutscene and the result is compared against a master array to load the desired voice clip. Valid entries are written as 00 ??, while FF FF is a null value. |
A | Byte | BGM control. Setting this value to 2D (45) will cause the level's music to play at the frame specified. |
1A | Byte | Jingle control. No cutscenes use this feature by default |
2C | Float | Rumble power. This determines the strength and duration of the rumble feature |
References