SSF (Sound Set File)
Sound sets map specific generic triggers (e.g. “Battle Cry”, “Agony”, “Selected”) to physical sound references by mapping enum hooks to strings.
At a Glance
| Property | Value |
|---|---|
| Extension(s) | .ssf |
| Magic Signature | None |
| Type | Enum-String Mapping |
| Rust Reference | View rakata_formats::Ssf in Rustdocs |
Data Model Structure
The rakata-formats crate maps SSF files into the Ssf structure. It parses the raw table offset and builds a collection of 28 nullable sound reference integers mapped directly back to their standard gameplay triggers.
Engine Audits & Decompilation
The following documents the engine’s exact load sequence for Sound Set mappings mapped from swkotor.exe.
(Decompilation logic for this section was audited and verified via native Ghidra pipeline against swkotor.exe, explicitly pulling from CSoundSet::GetStrres at 0x00678820.)
| Pipeline Event | Ghidra Provenance & Engine Behavior |
|---|---|
| Finding the Table | The parser reads a single 4-byte integer (DWORD) at offset +0x08. This number acts as a direct distance pointer, telling the game explicitly where the audio mapping table begins inside the file payload. |
| Reading the Slots | Starting directly at that pointer, the engine grabs exactly 28 continuous integers. Each position in this span represents a hardcoded character action (e.g. slot 1 is always ‘Battle Cry’, slot 2 is always ‘Agony’). |
| Handling Blanks | Obviously, not all characters have recorded audio for every obscure trigger. If a sound slot is supposed to be empty, it utilizes the default sentinel value 0xFFFFFFFF (-1) to let the engine know to skip playback. |
Note
1-Indexed Triggers When modders fire off audio events using gameplay scripts, the event identifiers are natively 1-indexed (1 to 28). To find the matching audio string underneath, the engine simply subtracts
1behind the scenes to correctly navigate the literal0-indexedarray in memory.