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...
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
:
offset
is a file-relative offset to
data of a section,size
is size in bytes of a section.Section ID | Description |
---|---|
Camera set definitions | |
Room script | |
Footstep sound bank | |
Environment sound bank | |
Unknown | |
Spawn point definitions | |
Trigger definitions | |
Point light configuration | |
Fog and directional light configuration | |
Pushable object grid information | |
Route information | |
Background sound configuration |
Contained in section with index 0. TODO
Contained in section with index 1. For more information see "Script Format".
TODO
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
positionX
, positionY
, and positionZ
define the starting player
position in the 3D space (unit: centimeters).rotationY
defines the starting player rotation around the Y axis.
(unit: integer rotation, where 0x8000
is π. Internally it's a 16-bit signed integer, so 0x8000
would overflow to -0x8000
, which is -π).Contained in section with index 10. TODO
Contained in section with index 11. TODO
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...
struct Color32BGRA {
u8 blue;
u8 green;
u8 red;
u8 alpha;
}; // size: 4 bytes
struct ColorRGBAF {
f32 red;
f32 green;
f32 blue;
f32 alpha;
}; // 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 towardsCamera;
}; // size: 96 bytes
struct FogSection {
u32 tag; // Always set to 2
u32 count;
u32 offsets[count];
FogConfig configurations[count];
Color32BGRA backgroundColor;
};
where in FogConfig
:
enabled
signifies whether the configuration should be used. If set to zero, the game won't apply it even if it's specified in the camera set configuration,fogBegin
describes how far from the camera should the fog start,fogEnd
describes how far from the camera should the fog end. At the end of fog, all geometry that has the fog attribute enabled will be rendered with the fogColor
,fogColor
is the color used for simple linear distance fog rendering,stageAmbient
is the ambient color of the stage, as in color without applied lighting. (Lighting between stage and objects is separate, stage only receives lighting from things like gunshots and whatnot. Overall lighting is baked into vertex colors),objectAmbient
is the ambient color of the objects, including things like items and characters,shadowConfig
is a value that specifies what type of shadow should any kind of character have and what opacity it should have. (meaning),shadowRotation
describes which way the silhouette shadows should be rotated,dirLightDiffuse
is the diffuse color (factor for the applied lighting) of the directional light that is applied to objects,dirLightAmbient
is the ambient color of the directional light,dirLightSpecular
is the specular color of the directional light (seemingly unused by the game?),dirLightRotation
describes the direction of the directional light,towardsCamera
can be set to 1 to force the game to ignore dirLightRotation
and direct the light from the camera position towards the target.in FogSection
:
tag
is just a magic value that the game looks at for sanity checks, should be set to 2,offsets
is an array of offsets to individual fog configurations,backgroundColor
is the color that the game will use to clear the screen before rendering the scene.NOTE: The alpha channel of colors inside fog structures is ignored and is there for padding purposes.
Bits | Meaning |
---|---|
Client player shadow mode | |
Other player shadow mode | |
NPC shadow mode | |
Enemy shadow mode |
Mode ID | Meaning |
---|---|
Silhouette shadow | |
No shadow | |
Round shadow | |
No shadow |
Contained in section with index 14. TODO
Contained in section with index 15. TODO
Contained in section with index 16.
struct ivec3 {
s32 x, y, z;
};
struct vec3 {
f32 x, y, z;
};
struct SoundWalkArea {
u32 priority;
ivec3 area[8];
u8 material[2];
u8 _padding[2];
}; // size: 104
struct SoundSource {
u32 enabled;
u32 sound;
vec3 position;
u32 curve;
u32 behavior;
}; // size: 28
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
:
priority
is self-explanatory, higher value means higher priority over other overlapping areas,area
is an array of coordinates for an arbitrary 3D convex shape describing the area in which the material should be applied,material
describes which sound programs in the RDT footstep sound bank (section 2) will be played. Can play sounds from two different programs simultaneously.in SoundSource
:
enabled
has to be non-zero for the entry to do anything,sound
is the sound ID in the RDT environment sound bank (section 3), specific to FILE #1: if the 16th bit is set (0x80xx
), lower 8-bits are a file index to an ADX file in the sXXenv.afs
scenario-specific AFS archive, FILE #2 will just disable the source if the 16th bit is set,position
is the position of the sound source in the 3D space. Used for panning and volume calculation,curve
is the index of the lookup table used for calculating the volume,behavior
describes the mode in which the source will operate. 0 is normal, 1 will play random sounds in the range of <sound, sound+2>
, 2 and higher will probably crash the game (at least in FILE #2).in SoundConfSection
:
walkAreaCount
is the amount of SoundWalkArea
entries in the section,soundSrcCount
is the amount of SoundSource
entries in the section,offsets
are section-relative offsets to SoundWalkArea
entries,defaultMaterial
is the material used when the player is outside every walk area,reverbDepth
is the volume of the reverb in the range of <0x0000, 0x7fff>
reverbDelay
and reverbFeedback
are completely irrelevant due to the used reverb config by the game (Studio Large), which does not utilize those variables at all.Last updated on 2025-02-09.