Outbreak's RDT Format

Table of Contents

Overview

In Resident Evil Outbreak, RDT files contain supplementary gameplay data related to a particular room in a given scenario. An RDT file contians information like the sound bank data for footstep sounds, sound bank data for environment sounds, camera definitions, lighting configuration, triggers, spawn points, pushable object grid information, etc...

Binary Format

Header of any given RDT file is as follows...

struct RDTSectionDef {
    u32 offset;
    s32 size;
}; // size: 8 bytes

struct RDTHeader {
    RDTSectionDef sections[32];
};

where in RDTSectionDef:

Section Table

Section ID Description
0
Camera set definitions
1
Room script
2
Footstep sound bank
3
Environment sound bank
4
Unknown
7
Spawn point definitions
10
Trigger definitions
11
Point light configuration
13
Fog and directional light configuration
14
Pushable object grid information
15
Route information
16
Background sound configuration

Section Information

Camera sets

Contained in section with index 0. TODO

Script

Contained in section with index 1. For more information see "Script Format".

Sound banks

TODO

Spawn points

Spawn points are contained in section with index 7.

When teleporting players from the script, often than not, these spawn points are used to determine where the player will end up. That includes initial player spawn.

NOTE: Certain script opcodes apply the teleportation only after a demo is played.

The section format can be described as follows...

struct SpawnPoint {
    s32 positionX;
    s32 positionZ;
    s32 rotationY;
    s32 unknown0;
    s32 unknown1;
    s32 positionY;
    s32 unknown2;
    s32 unknown3;
}; // size: 20 bytes

struct SpawnPointsSection {
    u32 count;
    SpawnPoint points[count];
};

where

Triggers

Contained in section with index 10. TODO

Lighting

Contained in section with index 11.

This section contains information on point lights present in the scene. A collection of point lights is a package and the game allows to switch between light packages in scripts. Individual point lights inside of a package can be enabled or disabled from scripts as well.

struct vec3 {
    f32 x, y, z;
}; // size: 12 bytes

struct ColorRGBAF {
    f32 r, g, b, a;
}; // size: 16 bytes

struct Light {
    ColorRGBAF diffuse;
    ColorRGBAF ambient;
    vec3       position;
    f32        attenuation;
    f32        range;
}; // size: 52 bytes

struct LigPackage {
    s32   enabled;
    u32   lightCount;
    u8    unused[108];
    Light lights[lightCount];
};

struct LigSection {
    u32 tag; // Always set to 4
    u32 packageCount;
    u32 offsets[packageCount]; // Offsets to LigPackage
};

where in Light:

in LightPackage:

Fog

Contained in section with index 13.

This section contains basic fog and directional light configurations. Which specific configuration is used is determined by the current camera set.

Format of this section can be described as follows...

// Pay attention to channel order!
struct Color32BGRA {
    u8  b, g, r, a;
}; // size: 4 bytes

struct ColorRGBAF {
    f32 r, g, b, a;
}; // size: 16 bytes

struct FogConfig {
    u32         enabled;
    f32         fogBegin;
    f32         fogEnd;
    Color32BGRA fogColor;
    Color32BGRA stageAmbient;
    Color32BGRA objectAmbient;
    u32         shadowConfig;
    s16         shadowRotation[4];
    ColorRGBAF  dirLightDiffuse;
    ColorRGBAF  dirLightAmbient;
    ColorRGBAF  dirLightSpecular;
    s32         dirLightRotation[2];
    s32         dirLightFromCamera;
}; // size: 96 bytes

struct FogSection {
    u32         tag; // Always set to 2
    u32         count;
    u32         offsets[count];
    FogConfig   configurations[count];
    Color32BGRA backgroundColor;
};

where in FogConfig:

in FogSection:

NOTE: The alpha channel of colors inside fog structures is ignored and is there for padding purposes.

Shadow config description

Bits Meaning
0-7
Shadow opacity
16-17
Client player shadow mode
18-19
Other player shadow mode
20-21
NPC shadow mode
22-23
Enemy shadow mode

Shadow mode description

Mode ID Meaning
0
Silhouette shadow
1
No shadow
2
Round shadow
3
No shadow

When a silhouette shadow is not available for the character (the SDW file was not loaded for various reasons or does not exist), the game will default to the round shadow.

Shadow config examples

Description Bytes
No shadows FF 00 55 00
All silhouette FF 00 00 00
All round FF 00 AA 00

Examples above have all 0xFF (maximum) shadow opacity.

Pushable object grid

Contained in section with index 14.

Pushable objects exist on a grid within a room, where each cell is 50cm x 50cm x 50cm. This section contains information for that grid, as well as markers that can be referenced in scripts for conditionals.

struct vec3 {
    f32 x, y, z;
}; // size: 12 bytes

struct Marker {
    u8 enabled;
    u8 unused;
    u8 x;
    u8 z;
}; // size: 4 bytes

struct PushableObjectGridSection {
    vec3   position;
    u32    width;
    u32    height;
    u32    pushCollision[288];  // array count derived from 96*96/32
    u32    climbCollision[288]; // array count derived from 96*96/32
    Marker markers[8];
}; // size: 2356 bytes

where in PushableObjectGridSection:

Routes

Contained in section with index 15. TODO

Background sound

Contained in section with index 16.

struct ivec3 {
    s32 x, y, z;
}; // size: 12 bytes

struct vec3 {
    f32 x, y, z;
}; // size: 12 bytes

struct SoundWalkArea {
    u32   priority;
    ivec3 area[8];
    u8    material[2];
    u8    _padding[2];
}; // size: 104 bytes

struct SoundSource {
    u32  enabled;
    u32  sound;
    vec3 position;
    u32  curve;
    u32  behavior;
}; // size: 28 bytes

struct SoundConfSection {
    u32 walkAreaCount;
    u32 soundSrcCount;
    u32 offsets[walkAreaCount];

    SoundWalkArea walkAreas[walkAreaCount];
    SoundSource   sources[soundSrcCount];

    u8  defaultMaterial[2];
    u8  _padding[2];
    u32 unknown;
    u32 reverbDepth;
    u32 reverbDelay;
    u32 reverbFeedback;
};

where in SoundWalkArea:

in SoundSource:

in SoundConfSection:

Last updated on 2025-08-31.