Mini‐Event Information - X-Hax/SA2BModdingGuide GitHub Wiki

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 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.

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.
⚠️ **GitHub.com Fallback** ⚠️