Sonic Adventure 2/Cutscenes
Cutscene Filenames
The following is a list of all the event cutscenes in each version of Sonic Adventure 2. Generally speaking, events are split into three categories: main cutscenes, mini-event scenes, and FMV sequences.
Files pertaining to the events are stored within the EVENT folder of the game's directory, while FMV sequences that are played over cutscenes appear in the main directory.
| Filename | Description | Notes |
|---|---|---|
| E0000 | Hero Story Intro | |
| ME0001 | F-6t BIG FOOT Cutscene | Mini-Event |
| E0002 | Sonic Encounters Shadow | |
| E0003 | Knuckles Meets Rouge | |
| E0004 | Tails Flies to Prison Island | |
| E0005 | Tails vs. Eggman Aftermath | |
| E0006 | Sonic Escapes from his Cell | |
| ME0007 | Sonic vs. Shadow 1 Cutscene | Mini-Event, Sonic's version |
| ME0008 | Green Forest Story Cutscene | Mini-Event, only played in Story Mode |
| ME0010 | Pumpkin Hill Story Cutscene | Mini-Event, only played in Story Mode |
| E0011 | Sonic and Friends Witness the ARK's Power | |
| ME0012 | Unused | Sonic appears onscreen, moves his head, fingers, and mouth, all with a stationary camera angle. Most likely used to test Sonic's animations during the mini-event cutscenes and as the template for all mini-events before they're completed. |
| ME0013 | Aquatic Mine Story Cutscene | Mini-Event, only played in Story Mode |
| E0014 | Where's Eggman? | |
| E0015 | Eggman Threatens the President | |
| E0016 | Sonic and Friends Locate Eggman's Pyramid Base | |
| E0017 | Knuckles Begins Looking for the Gate Keys | |
| ME0018 | King Boom Boo Cutscene | Mini-Event |
| E0019 | Eggman Ambushes Sonic and Friends Inside the Base | |
| E0021 | Team Sonic Arrives on the ARK | |
| E0022 | Sonic Receives a Ransom Call from Eggman | |
| ME0023 | Knuckles vs. Rouge Cutscene | Mini-Event, Knuckles' version |
| E0024 | Knuckles vs. Rouge Aftermath | |
| E0025 | Sonic and Eggman Face Off in the Research Lab | |
| E0026 | Sonic Saves Himself and Rushes to the Eclipse Cannon | |
| E0027 | Sonic vs. Shadow 2 Prelude (Hero) | |
| E0028 | Hero Story Ending | |
| E0050 | "17:30 In a mountainous region" |
Before Pumpkin Hill begins, timestamp only |
| E0051 | "Day X 18:00" | Before Eggman's televised threat is played in Hero Story, timestamp only |
| E0052 | "20:21 Mountainous region: Mine" |
Before Aquatic Mine begins, timestamp only |
| E0053 | "Outside Space Colony ARK Cannon countdown: 1 hour 26 minutes" |
Before Meteor Herd begins, timestamp only |
| E0054 | "Inside Space Colony ARK Cannon countdown: 41 minutes" |
Before Crazy Gadget begins, timestamp only |
| E0100 | Dark Story Intro | |
| E0101 | Eggman Awakens Shadow | |
| E0102 | Shadow Instructs Eggman to Find More Chaos Emeralds | |
| E0103 | Rouge Meets Knuckles | |
| ME0104 | Sand Ocean Story Cutscene | Mini-Event, only played in Story Mode |
| E0105 | Eggman Hears of Shadow's Highway Robbery | |
| E0106 | Shadow's Pathos | |
| E0107 | Shadow Encounters Sonic | |
| ME0108 | Egg Quarters Story Cutscene | Mini-Event, only played in Story Mode |
| E0109 | Rouge Follows Eggman to Space Colony ARK | |
| ME0110 | Lost Colony Story Cutscene | Mini-Event, only played in Story Mode |
| E0111 | Gathering of the Dark | |
| E0112 | Team Dark Arrives on Prison Island | |
| E0113 | Eggman's Plan is Complicated by Tails and Amy | |
| ME0114 | Security Hall Story Cutscene | Mini-Event, only played in Story Mode |
| ME0115 | R-1/A FLYING DOG Cutscene | Mini-Event |
| E0116 | Shadow's Conscience Begins to Surface | |
| ME0117 | Sonic vs. Shadow 1 Cutscene | Mini-Event, Shadow's version |
| E0118 | Sonic vs. Shadow 1 Aftermath | |
| E0119 | Shadow Remembers Maria | |
| E0120 | Eggman Reworks His Plan | |
| E0121 | Sky Rail Story Cutscene | Mini-Event, only played in Story Mode |
| E0122 | Shadow Spots the Tornado | |
| E0123 | Eggman's Hidden Base Ambush Fails | |
| E0124 | Rouge Learns the Truth About Project Shadow | |
| ME0125 | Knuckles vs. Rouge Cutscene | Mini-Event, Rouge's version |
| E0126 | Knuckles vs. Rouge Aftermath | Almost identical to E0024 |
| E0127 | Eggman's Final Plan to Crush the Heroes | |
| E0128 | Eggman Sets a Diabolical Trap for Sonic | |
| E0129 | Mystery of Shadow the Hedgehog | |
| E0130 | Sonic vs. Shadow 2 Prelude (Dark) | |
| E0131 | Dark Story Ending | |
| E0150 | "20:22 Desert area" |
Before Sand Ocean begins, timestamp only |
| E0151 | "22:18 In the pyramid" |
Before Egg Quarters begins, timestamp only |
| E0152 | "22:41 Inside Space Colony ARK" |
Before Lost Colony begins, timestamp only |
| E0153 | "Day X 18:00" | Before Eggman's televised threat is played in Dark Story, timestamp only |
| E0154 | "ARK: Central control room Cannon countdown: 2 hours 11 minutes" |
Before E0124 begins, timestamp only |
| E0200 | Last Episode Intro | |
| E0201 | The ARK Falls | |
| E0203 | Gerald's Diary and Madness | |
| E0204 | Amy Reasons with Shadow | |
| E0205 | Sonic and Knuckles Approach the Core | |
| E0206 | Knuckles Stops the Chaos Emeralds | |
| E0207 | Sonic and Shadow Transform | |
| E0208 | Shadow Gives His Life to Save the World | |
| E0210 | Last Episode Ending/Credits | |
| E0211 | Epilogue | |
| E0350 | Dreamcast Intro | DC only, SA2B contains an early unfinished version of the sequence |
| E0360 | SA2B Intro | SA2B Only, Japanese logo |
| E0361 | SA2B Intro | SA2B Only, English logo |
| E0400 | Sonic Adventure 2 Trailer | SA2: The Trial only, video file |
| E0401 | Dreamcast Intro | 2012 port only, video file |
| E0409 | Prison Island Explodes | Video file |
| E0411 | Eggman's Televised Threat | Video file |
| E0420 | Sonic and Friends go to Space | Video file, Hero version |
| E0428 | The Eclipse Cannon Malfunctions | Video file |
| E0429 | Dark Story Trailer | Video file |
| E0430 | Last Episode Trailer | Video file |
| E0524 | Sonic and Friends go to Space | Video file, Dark version |
| E0532 | Hero Story Trailer | Video file |
| E0602 | Gerald's Revenge | Video file |
| E0609 | The ARK is Neutralized | Video file |
Main 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.
The main cutscenes can be previewed using SA2 Event Viewer and their contents can be extracted with the use of splitEvent. Editing the contents and rebuilding with buildEvent is mostly functional, but some changes can cause issues. For a more hands-on experience, using the SAIO add-on for Blender is recommended.
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 entity 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 information |
| 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 | Notes |
|---|---|---|---|
| 0 | Pointer | Model | |
| 4 | Pointer | Animation | |
| 8 | Pointer | Shape Motion | |
| C | Pointer | Texture Animation Settings | Applies texture animation data using the same system applied throughout the game instead of using the custom Event variant defined in the header. No cutscenes use this feature. |
| 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 | Pointer | Texture Animation Settings | Applies texture animation data using the same system applied throughout the game instead of using the custom Event variant defined in the header. No cutscenes use this feature. |
| 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 |
Entity Flags
The entity flags determine the settings used for models contained within the given scene entity. These values produce different results depending on the game version, with SA2B's system appearing to be incomplete.
| ID (Hex) | Description | Notes |
|---|---|---|
| 1 | Use Simple Draw | |
| 2 | Use Easy Draw | |
| 4 | Use Multi-Light 1 | |
| 8 | Use Multi-Light 2 | |
| 10 | Use Multi-Light 3 | |
| 20 | Use Multi-Light 4 | |
| 40 | Modifier Volume | This flag must be set when a modifier volume is used in order for it to properly render. |
| 80 | Reflect Model | Setting this flag allows the entity to have a reflected model in cutscenes that use the reflection feature. |
| 100 | Blur Model | Setting this flag allows the entity to generate a motion blur effect. The effect is incomplete and never properly used in-game. |
| 200 | Force Simple Draw | Overrides all other draw functions that are set for the entity. |
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) |
Upgrade Override/"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 given the "hide" object flag to render them 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.
Italics indicate an assumed upgrade/normal model, and bold denotes that the upgrade doesn't normally have a visual component.
| 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 |
Effect Files
EXXXX_0 Information
Originally, cutscene files that had a numbered suffix (e.g. E0000_1) would contain all the graphical features and subtitle/audio timings for each cutscene, all of which could change depending on the language. This was changed in the final release so that the languages would only alter audio/subtitle timings as necessary, as only that information would require tweaking.
The EXXXX_0 files were meant to store subtitle data and audio timings for the Japanese language setting, but in all retail versions of SA2, they were repurposed to store graphical effects and features for each specific cutscene. The following is a list of what can be found in each segment of the file.
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.
The maximum number of screen effect entries per cutscene is 64.
Italics indicate that the values are used in combination with the texture screen effect IDs.
| 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 | UINT16 | Screen texture ID |
| 10 | UINT32 | Visible time |
| 14 | INT16 | X Position |
| 16 | INT16 | Y Position |
| 18 | Float | Width |
| 1C | Float | Height |
Screen Effect Types
| ID | Description |
|---|---|
| 1 | Screen fade-in |
| 2 | Screen cut-in |
| 3 | Texture fade-in |
| 4 | Texture cut-in |
| 5 | Background fade-in |
| 6 | Background cut-in |
Simple Particle Effects
Information starting at 0xA800 denotes any simple particle effects that are loaded in the scene, such as flashing lights or the sun. Each chunk of this information is 56 bytes long, with the last 32 bytes acting as a buffer.
The maximum number of simple particle effect entries per cutscene is 2048.
Italics indicate that the custom particles treat these values as depicted in the list, while normal particles treat these as displacement values.
| Offset | Type | Description | Notes |
|---|---|---|---|
| 0 | UINT32 | Frame in which the particle information takes effect | |
| 4 | Byte | Particle ID | |
| 5 | Byte | Particle Motion ID | |
| 8 | Float | Texture ID | |
| C | Float | Pulse Control | X displacement for normal particles |
| 10 | Float | Unknown | This is a constant used for the "Pulsing texture cancel" ID, otherwise it's Y displacement for normal particles |
| 14 | Float | Size |
Simple Particle IDs
| ID | Description |
|---|---|
| 0 | Null |
| 1 | Dust puff |
| 2 | Sparkle |
| 3 | Sparkle |
| 4 | Dirt patch |
| 5 | Fire blast |
| 6 | Steam |
| 7 | Snow blast |
| 8 | Sun |
| 9 | Sun cancel |
| A | Water splash |
| B | Smoke cloud |
| C | Steam puff |
| D | Rocket steam puff |
| E | Flame puff |
| F | Null |
| 10 | Invalid |
| 11 | Pulsing texture |
| 12 | Pulsing texture cancel |
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 certain settings and game versions. Dreamcast uses the first set of instructions and a combination of the other three via enabling specific entity flags, while SA2B will always use the first two sets of lighting information while ignoring the other two sets. "Scene 0" models are always given a default lighting value unrelated to these parameters, with the Dreamcast version allowing for the usage of entity flags to apply certain lighting combinations.
There are a maximum of 1024 possible lighting entries per cutscene.
| 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 | Single ambient 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 |
|---|---|---|
| 0 | UINT32 | Frame Start |
| 4 | UINT32 | Effect Duration |
| 8 | Char Array [6] | Blur Model ID |
| E | UINT16 | Null |
| 10 | UINT32 | Blur Entity Count |
Particle Generator Effect Information
Information starting at 0x38800 denotes any particle generators that are loaded in the scene, such as sparkles or smoke clouds. Each chunk of this information is 64 bytes long.
The maximum number of particle generator entries per cutscene is 64.
| Offset | Type | Description |
|---|---|---|
| 0 | Float(3) | Position |
| C | Float(3) | Velocity |
| 18 | UINT16 | Added Rotation Z |
| 1A | UINT16 | Added Rotation Y |
| 1C | UINT16 | Added Rotation X |
| 1E | UINT16 | Unknown |
| 20 | UINT32 | Frame in which the particle information takes effect |
| 24 | INT32 | Particle rotation constant |
| 28 | Float | Particle spread |
| 2C | INT32 | Particle Y Scale |
| 30 | UINT32 | Number of particle instances |
| 34 | UINT32 | Model ID |
| 38 | UINT32 | Particle ID |
| 3C | UINT32 | Frame Delay between generated particles |
Particle Generator IDs
| ID | Description |
|---|---|
| 0 | Invalid |
| 1 | Dust cloud |
| 2 | Sparkle |
| 3 | Sparkle |
| 4 | Dirt patches |
| 5 | Fire blast |
| 6 | Steam |
| 7 | Snow blast |
| 8 | Invalid |
| 9 | Invalid |
| A | Water splash |
| B | Smoke cloud |
| C | Steam puff |
| D | Rocket steam puff |
| E | Flame puff |
| F | Null |
| 10 | Invalid |
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 onto a mesh that's in the cutscene. The chunks are 48 bytes long, with the last 16 acting as a buffer.
The maximum number of video entries is 64.
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. |
| 6 | INT16 | Y Position. |
| 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. This is used in combination with the "Mesh overlay" type. |
| E | INT16 | Null |
| 10 | Text | Name of the video file that's to be loaded |
Video Overlay IDs
| ID | Description |
|---|---|
| 0 | Null |
| 1 | Screen overlay |
| 2 | Mesh overlay |
| 3 | Screen overlay |
| 4 | Screen overlay |
| 5 | Pause video |
| 6 | Resume video |
EXXXX_1-J Information
| Suffix | Language |
|---|---|
| 1 | English |
| 2 | French |
| 3 | Spanish |
| 4 | German |
| 5 | Italian (2012 port only) |
| J | Japanese |
Subtitle Timings
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 external evmes?? file.
There are a maximum of 256 possible entries for subtitle timings.
| Offset | Type | Description |
|---|---|---|
| 0 | INT32 | Frame in which the subtitle is set to appear. A value of -1 in this slot will set the mapped subtitle text as the opening text crawl for the cutscene. |
| 4 | UINT32 | Number of frames in which the subtitle is to remain onscreen. |
Audio/Misc. Entries
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 using the cutscene ID, so a value used by E0000 will not be the same as a value used by E0102, for example.
The maximum number of audio entries is 512.
| Offset | Type | Description |
|---|---|---|
| 0 | UINT32 | Frame in which the audio clip begins to play |
| 4 | Byte | SFX initializer. Setting this value to 0 will start sound effect playback at the frame specified |
| 5 | Byte | Credits control. FF is a null entry and the effect seems to only work with E0210. Higher values reduce the scrolling speed of the credits |
| 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 the jingle that's to be loaded, if applicable. No cutscenes appear to use this feature. |
| 28 | UINT32 | Determines the VSync mode used by the cutscene. The entry seemingly only accepts values of 0 and 2, with the latter locking the cutscene's framerate to 30FPS when set. Only the first entry's value is read at runtime. This value does nothing in SA2B. |
Mini-Events
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 assets found within the main mini-event files can be extracted with splitEvent. They can be repacked with buildEvent, but at the moment, there are file size limitations that prevent elaborate editing from being possible if not handled correctly. If the final file size exceeds roughly 550kb, the game will crash.
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 |
| C | Pointer | Shadow's pointer array |
| 10 | Pointer | Mechless Tails' pointer array |
| 14 | Pointer | Mechless Eggman's pointer array |
| 18 | Pointer | Knuckles' pointer array |
| 1C | Pointer | Rouge's pointer array |
| 20 | Pointer | Mech Tails' pointer array |
| 24 | Pointer | Mech Eggman's pointer array |
Any models that are referenced by specific model IDs in each character's model information will be rendered invisible for the duration of these scenes. The way this works is that the game directly alters flags within the referenced model's data to achieve this effect, which can have adverse effects if the reference points to a joined mesh, i.e. an arm can be rendered invisible if the targeted model ID only points to the hand and the two parts are one continuous mesh. Please refer to each character's model ID lists found here for more information.
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.
Subtitle Timings
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 timing entries per file.
| 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 |
Effect Data
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 entries of these settings per file.
| Offset | Type | Description |
|---|---|---|
| 0 | UINT32 | Frame in which the instruction is set to begin |
| 4 | Byte | Screen fade control |
| 5 | Byte | Sound effect ID that is to be loaded, if applicable. FF is considered a null value.
|
| 6 | Byte | Secondary sound effect ID that is to be loaded, if applicable. No cutscenes intentionally use this value. |
| 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 mini-events appear to use this feature by default. |
| 2C | Float | Rumble control. This determines the power of the rumble feature. |
Screen Fades
| ID | Description |
|---|---|
| 1 | Fade In (Darkens First) |
| 2 | Fade Out |
| 3 | Fade In from Fade Out |
| 4 | Fade Out |
Player/Camera Positions and Rotations
Information starting at 0x1400 controls the positioning/rotation data for both the characters and the event camera.
| Offset | Type | Description |
|---|---|---|
| 0 | Float(3) | Event position data. All characters and the camera will have this value applied to them. |
| C | INT32(3) | Player rotation data. This value affects all characters present in the cutscene. |
| 18 | INT32 | Camera Y Rotation |
| General Information | File Formats • Levels • Texture Files • Voice List • Music Files • Game Builds |
|---|---|
| Character Information | Model Data • Animation Files • Actions • Animation Lists |
| Other | Cutscenes • Sound Effects |