-
Notifications
You must be signed in to change notification settings - Fork 2
Mini‐Event Information
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
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 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 |
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 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 mini-events appear to use this feature by default. |
2C | Float | Rumble control. This determines the power of the rumble feature. |