ARE Format (Area Static Blueprint)
An .are file is an area’s static setup: its name, whether it counts as interior or exterior, its weather and grass, its sun and moon lighting and fog, and the scripts that fire at area level. Everything that moves around in the area, creatures and doors included, lives in the module’s GIT rather than here.
This page documents ARE’s field defaults, the confirmed-dead legacy fields still written by older tools, and the 52-field swoop-racing minigame subsystem. Evidence is drawn from Ghidra decompilation of
swkotor.exe(K1 GOG build), cross-checked against a full K1 install’s vanilla.arecorpus. The tables below are lookup surfaces, meant to be searched rather than read start to end.
At a Glance
| Property | Value |
|---|---|
| Extension(s) | .are |
| Magic Signature | ARE / V3.2 |
| Type | Area Static Blueprint |
| Rust Reference | View rakata_generics::Are in Rustdocs |
Field Schema
The format’s field families, as an orientation before the full list.
| Category | Covers | Representative fields |
|---|---|---|
| Core Identity & State | The area’s tag, localized name, and interior/exterior state flags | Tag, Name, Flags, RestrictMode |
| Weather & Terrain | Rain, snow, and lightning chances, wind strength, and grass rendering | ChanceRain, WindPower, Grass_TexName |
| Lighting & Fog | Separate sun and moon ambient/diffuse tints, fog ranges, and shadow limits | SunAmbientColor, MoonFogNear, ShadowOpacity |
| Stealth XP | The stealth-run XP pool an area can award | StealthXPMax, StealthXPCurrent, StealthXPLoss |
| Event Hooks | The area-level event scripts | OnEnter, OnExit, OnHeartbeat, OnUserDefined |
| Map & Rooms | Minimap projection data and the per-room sound list | Map, Rooms |
| Minigame | The optional nested swoop or turret minigame configuration | MiniGame |
Note
The ARE never gets re-saved. It gets re-copied. When a module is saved, the engine doesn’t parse or rewrite a single ARE field.
CSWSModule::SaveModuleFinishhands the area’s staticAREresource to a generic “copy this resource type verbatim” helper, which looks up whatever ARE the resource manager currently has bound for that area and copies it byte-for-byte into the save archive. Every engine rule and clamping behaviour documented on this page (weather truncation, fog clamping, tag lowercasing, and so on) applies only to the initial parse when a module is freshly loaded, never to the save/resume cycle.The area’s dynamic, session-changeable state, meaning weather, stealth XP, map exploration, cameras and transition flags, lives entirely in the module’s GIT resource instead, not in a re-saved ARE. If you’re building a save-editing tool, patch the GIT; don’t expect to patch an ARE inside a save archive.
Engine Audits & Decompilation
Read from CSWSArea::LoadArea at 0x0050e190 in swkotor.exe. Provenance: derived, not attested. The rows below have not been separately re-derived, so they sit on the reverse-engineering queue.
The initial LoadArea dispatch branches out to parse the .are GFF, .lyt layout, .git instance tracking, and .pth bounds. The engine processes roughly 61 scalar fields, 4 scripts, 3 lists, and a nested minigame struct within the LoadAreaHeader subroutine.
Core Environmental Identity
| Field Category | Engine Property & Behavioural Quirk |
|---|---|
| Identity | Name (LocString), Comments (String), ID (Int) -> Standard definition strings. All three default unconditionally when absent: Name to an empty localized string, Comments to an empty string, ID to 0. Creator_ID (Int) and Version (DWord) share the same unconditional-0 default. |
| Identity | Tag (String) -> Lowercased on load (via CExoString::LowerCase), the only tag that is. Absent, it stamps an empty string and that empty string goes through SetTag all the same, so the case pass runs whether or not the file supplied anything. |
| Scripts | OnHeartbeat, OnUserDefined, ... -> CResRef script payloads. |
| State Flags | Flags (DWord) -> Bit 0 explicitly marks an Interior environment. |
| State Flags | RestrictMode (Byte) -> Hardcoded Event: Changing this to a non-zero value during gameplay forces CSWPartyTable::UnstealthParty. RestrictMode follows the carry-over mechanism, and the constructor zero-initializes it before LoadAreaHeader’s single pass runs, so an absent field is functionally 0. That resolved 0 also explains why a missing field can never trigger the hardcoded event on its own: UnstealthParty only fires on a byte that’s both non-zero and different from the previous stored value, and a defaulted 0 satisfies neither. |
| Identity | CameraStyle (Int), DefaultEnvMap (ResRef), LoadScreenID (WORD) -> All three default unconditionally when absent: CameraStyle to 0, DefaultEnvMap to an empty resref, LoadScreenID to 0. |
Interior areas lose their weather If
Flags(Bit 0) marks the area as interior, the engine zeroes every weather property on load, discarding whatever the file set.
Weather & Terrain Generation
| Field | Type | Engine Evaluation |
|---|---|---|
ChanceFog | INT | Stored persistently as an integer. Defaults to 0 if missing, unconditional, the same read shape as ChanceRain/ChanceSnow/ChanceLightning/WindPower (all default 0 too), just not narrowed to a byte. When the area’s interior flag is set, ChanceFog gets zeroed a second time in the post-process pass alongside the other four, so an interior area’s fog chance is forced to 0 twice over rather than once. |
ChanceRain, ChanceSnow, ChanceLightning, WindPower | INT | Warning: The engine explicitly truncates these INT properties to 8-bit bytes at runtime. Values over 255 silently wrap around. All four default to 0 if missing, unconditional. |
Grass_TexName | ResRef | If empty or invalid, the engine forces a hard fallback to "grass". |
AlphaTest | FLOAT | Defaults to 0.2 (older tools commonly assume 0.0). |
ModSpotCheck, ModListenCheck | INT | Perception-check modifiers. Both default to 0 if missing, unconditional. |
Grass_Density, Grass_QuadSize, Grass_Prob_LL/LR/UL/UR | FLOAT | Grass rendering density and per-corner spawn probabilities. All six default to 0.0 if missing, unconditional, identical read shape across the set. |
Area Lighting & Sun/Moon Tracking
KOTOR handles dynamic sunlight constraints separately between Sun and Moon.
| Property Groups | Type | Engine Evaluation |
|---|---|---|
Fog Ranges (MoonFogNear/Far, SunFogNear/Far) | FLOAT | Default 10000.0. The engine clamps values to >= 0.0. |
Tints (*AmbientColor, *DiffuseColor, *FogColor) | DWORD | Read as DWORD colour masks. All nine (MoonAmbientColor, MoonDiffuseColor, MoonFogColor, SunAmbientColor, SunDiffuseColor, SunFogColor, DynAmbientColor, Grass_Ambient, Grass_Diffuse) default to 0 if missing, unconditional, identical read shape across the set. |
Environment Shadows (ShadowOpacity, *Shadows) | BYTE | Toggles and opacities for render limits. SunFogOn, SunShadows, MoonFogOn, MoonShadows default to 0/false if missing, unconditional. Unescapable, StealthXPEnabled, and StealthXPLoss are the one group in this table that genuinely follows the carry-over mechanism rather than stamping a fresh literal, functionally identical to 0/false in practice, since LoadAreaHeader only ever runs once, immediately after construction, on a single call path. |
DayNightCycledoesn’t inherit its own constructed default. The area constructor setsday_night_cycle = 1(cycle on) before any GFF read happens, but the read itself uses a hardcoded literal0as its fallback, not the constructed value, so an area missingDayNightCycleloads with the cycle forced off, silently overriding what the object was built with. This looks like it could be an engine oversight (the constructor’s own default is never actually reachable through this load path), but intent aside, the mechanism is unambiguous: absent means0, not1.IsNightandLightingSchemeshare the ordinary unconditional-0pattern with no such mismatch.NoRest,TransPending,TransPendNextID, andTransPendCurrIDalso carry over a constructed value (all0/false), same practical outcome as an unconditional default given the single-call-path caveat above.
Grass_Emissiveand the entireDirty*overlay set are confirmed dead in this K1 build, not merely unread. None of their field-name strings,Grass_Emissive,DirtyARGBOne/Two/Three,DirtySizeOne/Two/Three,DirtyFormulaOne/Two/DirtyFormulaThreandDirtyFuncOne/Two/Three, exist anywhere inswkotor.exe’s string table, verified against a binary-wide search that does find every neighbouringGrass_*field. This is stronger than “the loader doesn’t consume it”: no code path in this build can even look these fields up. Treat them the same asDisableTransit/NoHangBack/PlayerOnly/PlayerVsPlayerbelow, toolset-only and invisible to K1’s engine.
Map Transitions & Saving states
| Feature Category | Engine Evaluation & Triggers |
|---|---|
| Zoom Bias | MapZoom evaluates to a default scaling scalar of 1, not 0. |
The map block sits behind three gates
The geographic vectors, MapResX and the coordinate structs like WorldPt1X, are read only when all three hold:
- A minimap TGA or TPC asset matching the level name exists on disk.
- The
Mapsub-struct is present in the GFF. MapResX’s resolved value is nonzero.
MapResX reads with an unconditional literal default of 0, so an absent MapResX is a gating sentinel rather than merely a zero. That 0 is tested directly, and where it holds the engine skips NorthAxis, MapPt* and WorldPt* entirely and falls through to a disabled map with MapZoom fixed at 1.
Where the block is read, MapPt goes through a dual path checking whether the field is formally FLOAT or INT. An absent MapPt1X, MapPt1Y, MapPt2X or MapPt2Y resolves to 0 either way: the INT branch reads a literal 0, and the FLOAT branch’s 0.0 survives its floor conversion. NorthAxis defaults to 0. WorldPt1X, WorldPt1Y, WorldPt2X and WorldPt2Y are independent FLOAT reads defaulting to 0.0, with no gating between them.
StealthXPCurrent chains its default off StealthXPMax
Both are snapshotted as DWORDs, and they default by different mechanisms. StealthXPMax uses the ordinary carry-over, its own prior value, zero-initialised by the constructor. StealthXPCurrent defaults to whatever StealthXPMax just resolved to, not to its own prior value.
On a fresh load both land on 0 either way, so only the mechanism differs. After the read the engine clamps StealthXPCurrent down to StealthXPMax where it exceeds it.
Per-Room EnvAudio
Each entry in the Rooms list carries its own EnvAudio INT, read by LoadAreaHeader alongside that room’s AmbientScale, defaulting to 0 when absent. It’s a genuine per-room reverb/environment-audio zone selector, not inert data: CSWRoom::SetRoomEnvAudioProps matches each room by name and copies its EnvAudio/AmbientScale pair into the client-side audio setup that runs when an area loads. (The exact downstream reverb table or effect it selects wasn’t traced past that per-room handoff.)
Don’t confuse this with a same-named field on the GIT’s own area-level AreaProperties struct (see GIT’s AreaProperties.EnvAudio). That one is a different struct entirely, and unlike this per-room field, it’s never read by anything.
Rooms and PartSounds: Remaining Field Defaults, and Two Confirmed-Dead Fields
No entry-level presence-chain abort exists in either list: the room loop and the nested PartSounds loop both process every index regardless of whether an individual GetListElement call succeeds, so a partially-specified entry is always kept, with each field defaulting independently.
RoomName defaults to an empty string if missing, unconditional. It is the same name SetRoomEnvAudioProps matches against a live room, so an empty RoomName simply never matches anything. AmbientScale defaults to 0.0, unconditional and independently gated from EnvAudio’s own default (the two are read back-to-back but neither gates the other). ForceRating and DisableWeather are confirmed dead the same decisive way as Grass_Emissive/Dirty* above: neither field-name string exists anywhere in swkotor.exe, confirmed by a binary-wide search. Toolset-only in this build.
PartSounds entries: Looping defaults to 0/false, unconditional. ModelPart defaults to an empty string, unconditional. OmenEvent is read as a CExoString, not the INT its name might suggest, confirmed by its sole cross-reference in the binary landing on a ReadFieldCExoString call inside this exact loop, and defaults to an empty string, unconditional. Sound defaults to an empty resref, unconditional; the (possibly-default) result is appended to the room’s sound list regardless of whether the file actually supplied one.
Expansion_List Defaults
Expansion_Name defaults to an empty localized string if missing, unconditional. Expansion_ID defaults to 0, unconditional. The list itself is only processed at all if the Expansion_List field is present in the GFF, a list-level gate rather than a per-entry one. Once inside, no entry is ever dropped for a missing field, same as Rooms/PartSounds above.
The Minigame Struct
Read via CSWMiniGame::Load (0x006723d0). If a minigame context triggers, the .are reads the nested Type (DWORD mapping 1=Swoop, 2=Turret), then the float properties governing movement:
| Field | Default / Constraint |
|---|---|
LateralAccel | Defaults to 60.0. |
MovementPerSec | 6.0 for swoops, 90.0 for turrets, 0.0 otherwise. |
Bump_Plane | Clamped to 0..3. |
| Nested Arrays | The struct needs sub-struct Player arrays (Models, Camera, Axes) and Enemy/Obstacles lists to work. |
The Player struct, each Enemies list entry, and each Obstacles list entry are three genuinely different shapes rather than siblings sharing one flat layout. Player and Enemies share a common vehicle base (hitpoints, a nested weapon Gun_Banks list, Scripts, Sounds) with Player adding its own movement/track-boundary fields on top, while Obstacles are a much lighter leaf with only a Scripts struct. See the Swoop & Turret Minigame Deep Dive for the full field-by-field breakdown and absent-field defaults.
Implemented Linter Rules (Rakata-Lint)
Phase 1 (intra-resource, no context)
Implemented under rakata_lint::rules::are.
- ARE-001 (Context Discards): Warns when interior areas (
Flags & 1) carry non-zeroChanceRain,ChanceSnow,ChanceLightning, orWindPower; the engine discards weather for interiors. - ARE-002 (Weather Truncation): Warns when
ChanceRain,ChanceSnow,ChanceLightning, orWindPowerexceed 255; the engine truncates these to bytes at runtime. - ARE-003 (Fog Clamping): Warns when
MoonFogNear/FarorSunFogNear/Farare negative; the engine clamps fog distances to >= 0.0. - ARE-004 (Tag Lowercasing): Warns when
Tagcontains uppercase characters; the engine lowercases area tags on load. - ARE-005 (Toolset Fields): Informs when
DisableTransit,NoHangBack,PlayerOnly, orPlayerVsPlayerare set; never read by the K1 engine.
Phase 2 (resource existence, requires LintContext)
Implemented under rakata_lint::rules::are_range.
- ARE-006 (Resref Existence): Warns when any of
OnEnter,OnExit,OnHeartbeat, orOnUserDefined(.ncs) does not resolve, or when anyRooms[i].PartSounds[j].Sound(.wav) does not resolve in the configured resource sources.
Pending
- Grass Texture Fallback: Informs when
Grass_TexNameis empty; the engine treats this as the literal string"grass". - Texture / MiniGame Resref Existence:
DefaultEnvMap,Grass_TexName, and the nested MiniGame model / track / music graph. ResourceTypeCode mapping for engine-specific texture and model packs is still being audited.
Every label the schema declares
Generated from the schema, so no label can be quietly left out. How to read these tables.
What the engine does with each field
| Field | Type | Engine | When absent |
|---|---|---|---|
Rooms[].ForceRating | INT | never reads it: neither field-name string exists anywhere in swkotor.exe, confirmed by a binary-wide search; toolset-only in this build | not one constant; we substitute 0 |
Rooms[].DisableWeather | BYTE | never reads it: neither field-name string exists anywhere in swkotor.exe, confirmed by a binary-wide search; toolset-only in this build | not one constant; we substitute 0 |
DisableTransit | BYTE | never reads it: ARE-005 records DisableTransit, NoHangBack and PlayerVsPlayer as toolset fields the K1 engine never reads | not one constant; we substitute 0 |
NoHangBack | BYTE | never reads it: ARE-005 records DisableTransit, NoHangBack and PlayerVsPlayer as toolset fields the K1 engine never reads | not one constant; we substitute 0 |
PlayerVsPlayer | BYTE | never reads it: ARE-005 records DisableTransit, NoHangBack and PlayerVsPlayer as toolset fields the K1 engine never reads | not one constant; we substitute 0 |
Grass_Emissive | DWORD | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyARGBOne | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtySizeOne | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyFormulaOne | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyFuncOne | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyARGBTwo | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtySizeTwo | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyFormulaTwo | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyFuncTwo | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyARGBThree | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtySizeThree | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyFormulaThre | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
DirtyFuncThree | INT | never reads it: Grass_Emissive and the entire Dirty* overlay set are confirmed dead in this K1 build rather than merely unread; none of their field-name strings exist | not one constant; we substitute 0 |
Fields nobody has examined
Whether the engine reads these has not been established, which is not the same as establishing that it does not. Where When absent carries an answer, that half is settled.
| Field | Type | When absent |
|---|---|---|
ID | INT | stamps 0 |
Creator_ID | INT | stamps 0 |
Version | DWORD | stamps 0 |
Comments | CExoString | stamps "" |
Name | CExoLocString | stamps empty |
Tag | CExoString | stamps "" |
OnHeartbeat | CResRef | NOT EXAMINED; we substitute "" |
OnUserDefined | CResRef | NOT EXAMINED; we substitute "" |
OnEnter | CResRef | NOT EXAMINED; we substitute "" |
OnExit | CResRef | NOT EXAMINED; we substitute "" |
Flags | DWORD | stamps 0 |
CameraStyle | INT | stamps 0 |
DefaultEnvMap | CResRef | stamps "" |
Unescapable | BYTE | keeps 0 |
RestrictMode | BYTE | keeps 0 |
ChanceRain | INT | stamps 0 |
ChanceSnow | INT | stamps 0 |
ChanceLightning | INT | stamps 0 |
WindPower | INT | stamps 0 |
ChanceFog | INT | stamps 0 |
MoonAmbientColor | DWORD | stamps 0 |
MoonDiffuseColor | DWORD | stamps 0 |
MoonFogColor | DWORD | stamps 0 |
SunAmbientColor | DWORD | stamps 0 |
SunDiffuseColor | DWORD | stamps 0 |
SunFogColor | DWORD | stamps 0 |
DynAmbientColor | DWORD | stamps 0 |
MoonFogNear | FLOAT | stamps 10000.0 |
MoonFogFar | FLOAT | stamps 10000.0 |
SunFogNear | FLOAT | stamps 10000.0 |
SunFogFar | FLOAT | stamps 10000.0 |
MoonFogOn | BYTE | stamps 0 |
SunFogOn | BYTE | stamps 0 |
MoonShadows | BYTE | stamps 0 |
SunShadows | BYTE | stamps 0 |
DayNightCycle | BYTE | stamps 0 |
IsNight | BYTE | stamps 0 |
ShadowOpacity | BYTE | stamps 0 |
LightingScheme | BYTE | stamps 0 |
NoRest | BYTE | keeps 0 |
ModSpotCheck | INT | stamps 0 |
ModListenCheck | INT | stamps 0 |
Grass_Diffuse | DWORD | stamps 0 |
Grass_Ambient | DWORD | stamps 0 |
Grass_Density | FLOAT | stamps 0.0 |
Grass_QuadSize | FLOAT | stamps 0.0 |
Grass_TexName | CResRef | NOT EXAMINED; we substitute "" |
Grass_Prob_LL | FLOAT | stamps 0.0 |
Grass_Prob_LR | FLOAT | stamps 0.0 |
Grass_Prob_UL | FLOAT | stamps 0.0 |
Grass_Prob_UR | FLOAT | stamps 0.0 |
AlphaTest | FLOAT | stamps 0.2 |
StealthXPMax | DWORD | NOT EXAMINED; we substitute 0 |
StealthXPCurrent | DWORD | not one constant; our reader works it out from other fields |
StealthXPLoss | DWORD | keeps 0 |
StealthXPEnabled | BYTE | keeps 0 |
TransPending | BYTE | keeps 0 |
TransPendNextID | BYTE | keeps 0 |
TransPendCurrID | BYTE | keeps 0 |
LoadScreenID | WORD | stamps 0 |
Rooms | List | NOT EXAMINED; we substitute container |
Rooms[].PartSounds | List | not one constant; we substitute container |
Rooms[].PartSounds[].Looping | BYTE | NOT EXAMINED; we substitute 0 |
Rooms[].PartSounds[].ModelPart | CExoString | NOT EXAMINED; we substitute "" |
Rooms[].PartSounds[].OmenEvent | CExoString | NOT EXAMINED; we substitute "" |
Rooms[].PartSounds[].Sound | CResRef | NOT EXAMINED; we substitute "" |
Rooms[].RoomName | CExoString | stamps "" |
Rooms[].EnvAudio | INT | stamps 0 |
Rooms[].AmbientScale | FLOAT | stamps 0.0 |
Expansion_List | List | NOT EXAMINED; we substitute container |
Expansion_List[].Expansion_Name | CExoLocString | stamps empty |
Expansion_List[].Expansion_ID | INT | stamps 0 |
Map | Struct | NOT EXAMINED; we substitute container |
Map.MapResX | INT | stamps 0 |
Map.NorthAxis | INT | stamps 0 |
Map.MapZoom | INT | stamps 1 |
Map.MapPt1X | FLOAT | stamps 0.0 |
Map.MapPt1Y | FLOAT | stamps 0.0 |
Map.MapPt2X | FLOAT | stamps 0.0 |
Map.MapPt2Y | FLOAT | stamps 0.0 |
Map.WorldPt1X | FLOAT | stamps 0.0 |
Map.WorldPt1Y | FLOAT | stamps 0.0 |
Map.WorldPt2X | FLOAT | stamps 0.0 |
Map.WorldPt2Y | FLOAT | stamps 0.0 |
MiniGame | Struct | not one constant; the field holds the absence |
MiniGame.Type | DWORD | NOT EXAMINED; we substitute 0 |
MiniGame.MovementPerSec | FLOAT | NOT EXAMINED; we substitute 0.0 |
MiniGame.LateralAccel | FLOAT | NOT EXAMINED; we substitute 60.0 |
MiniGame.Bump_Plane | DWORD | NOT EXAMINED; we substitute 0 |
MiniGame.DoBumping | BYTE | NOT EXAMINED; we substitute 0 |
MiniGame.UseInertia | BYTE | NOT EXAMINED; we substitute 0 |
MiniGame.DOF | DWORD | NOT EXAMINED; we substitute 0 |
MiniGame.Music | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Far_Clip | FLOAT | NOT EXAMINED; we substitute 100.0 |
MiniGame.Near_Clip | FLOAT | NOT EXAMINED; we substitute 0.1 |
MiniGame.CameraViewAngle | FLOAT | NOT EXAMINED; we substitute 65.0 |
MiniGame.Player | Struct | NOT EXAMINED; the field holds the absence |
MiniGame.Player.Camera | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Player.CameraRotate | BYTE | NOT EXAMINED; we substitute 0 |
MiniGame.Player.Minimum_Speed | FLOAT | the page does not say; we substitute -1.0 |
MiniGame.Player.Maximum_Speed | FLOAT | stamps 100.0 |
MiniGame.Player.Accel_Secs | FLOAT | not one constant; we substitute -1.0 |
MiniGame.Player.TunnelXPos | FLOAT | stamps 0.0 |
MiniGame.Player.TunnelXNeg | FLOAT | stamps 0.0 |
MiniGame.Player.TunnelYPos | FLOAT | NOT EXAMINED; we substitute 0.0 |
MiniGame.Player.TunnelYNeg | FLOAT | NOT EXAMINED; we substitute 0.0 |
MiniGame.Player.TunnelZPos | FLOAT | stamps 0.0 |
MiniGame.Player.TunnelZNeg | FLOAT | stamps 0.0 |
MiniGame.Player.TunnelInfinite | Vector3 | NOT EXAMINED; we substitute (0.0, 0.0, 0.0) |
MiniGame.Player.Start_Offset_X | FLOAT | stamps 0.0 |
MiniGame.Player.Start_Offset_Y | FLOAT | stamps 0.0 |
MiniGame.Player.Start_Offset_Z | FLOAT | stamps 0.0 |
MiniGame.Player.Target_Offset_X | FLOAT | stamps 0.0 |
MiniGame.Player.Target_Offset_Y | FLOAT | stamps 0.0 |
MiniGame.Player.Target_Offset_Z | FLOAT | stamps 0.0 |
MiniGame.Player.Models | List | NOT EXAMINED; we substitute container |
MiniGame.Player.Models[].Model | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Player.Models[].RotatingModel | BYTE | NOT EXAMINED; we substitute 1 |
MiniGame.Player.Track | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Player.Hit_Points | DWORD | the page does not say; we substitute 0 |
MiniGame.Player.Max_HPs | DWORD | the page does not say; we substitute 0 |
MiniGame.Player.Sphere_Radius | FLOAT | the page does not say; we substitute -1.0 |
MiniGame.Player.Invince_Period | FLOAT | stamps 0.0 |
MiniGame.Player.Bump_Damage | INT | stamps 0 |
MiniGame.Player.Num_Loops | INT | the page does not say; we substitute -10 |
MiniGame.Player.Scripts | Struct | NOT EXAMINED; we substitute container |
MiniGame.Player.Scripts.OnDamage | CResRef | stamps "" |
MiniGame.Player.Scripts.OnDeath | CResRef | stamps "" |
MiniGame.Player.Scripts.OnFire | CResRef | stamps "" |
MiniGame.Player.Scripts.OnHitObstacle | CResRef | stamps "" |
MiniGame.Player.Scripts.OnTrackLoop | CResRef | stamps "" |
MiniGame.Player.Scripts.OnCreate | CResRef | stamps "" |
MiniGame.Player.Scripts.OnHeartbeat | CResRef | stamps "" |
MiniGame.Player.Scripts.OnAnimEvent | CResRef | stamps "" |
MiniGame.Player.Scripts.OnHitBullet | CResRef | stamps "" |
MiniGame.Player.Scripts.OnHitFollower | CResRef | stamps "" |
MiniGame.Player.Sounds | Struct | NOT EXAMINED; we substitute container |
MiniGame.Player.Sounds.Engine | CResRef | stamps "" |
MiniGame.Player.Sounds.Death | CResRef | stamps "" |
MiniGame.Player.Gun_Banks | List | NOT EXAMINED; we substitute container |
MiniGame.Player.Gun_Banks[].BankID (required) | DWORD | stamps 4294967295 |
MiniGame.Player.Gun_Banks[].Gun_Model (required) | CResRef | not one constant; we substitute "" |
MiniGame.Player.Gun_Banks[].Bullet | Struct | NOT EXAMINED; the field holds the absence |
MiniGame.Player.Gun_Banks[].Bullet.Damage (required) | DWORD | not one constant; we substitute 0 |
MiniGame.Player.Gun_Banks[].Bullet.Lifespan (required) | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Player.Gun_Banks[].Bullet.Rate_Of_Fire (required) | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Player.Gun_Banks[].Bullet.Speed (required) | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Player.Gun_Banks[].Bullet.Target_Type (required) | DWORD | not one constant; we substitute 0 |
MiniGame.Player.Gun_Banks[].Bullet.Bullet_Model | CResRef | stamps "" |
MiniGame.Player.Gun_Banks[].Bullet.Collision_Sound | CResRef | stamps "" |
MiniGame.Player.Gun_Banks[].Fire_Sound | CResRef | stamps "" |
MiniGame.Player.Gun_Banks[].Sensing_Radius | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Player.Gun_Banks[].Horiz_Spread | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Player.Gun_Banks[].Vert_Spread | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Player.Gun_Banks[].Inaccuracy | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Mouse | Struct | not one constant; the field holds the absence |
MiniGame.Mouse.AxisX | DWORD | NOT EXAMINED; we substitute 0 |
MiniGame.Mouse.AxisY | DWORD | NOT EXAMINED; we substitute 0 |
MiniGame.Mouse.FlipAxisX | BYTE | NOT EXAMINED; we substitute 0 |
MiniGame.Mouse.FlipAxisY | BYTE | NOT EXAMINED; we substitute 0 |
MiniGame.Enemies | List | NOT EXAMINED; we substitute container |
MiniGame.Enemies[].Trigger | BYTE | stamps 0 |
MiniGame.Enemies[].Models | List | NOT EXAMINED; we substitute container |
MiniGame.Enemies[].Models[].Model | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Enemies[].Models[].RotatingModel | BYTE | NOT EXAMINED; we substitute 1 |
MiniGame.Enemies[].Track | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Enemies[].Hit_Points | DWORD | the page does not say; we substitute 0 |
MiniGame.Enemies[].Max_HPs | DWORD | the page does not say; we substitute 0 |
MiniGame.Enemies[].Sphere_Radius | FLOAT | the page does not say; we substitute -1.0 |
MiniGame.Enemies[].Invince_Period | FLOAT | stamps 0.0 |
MiniGame.Enemies[].Bump_Damage | INT | stamps 0 |
MiniGame.Enemies[].Num_Loops | INT | the page does not say; we substitute -10 |
MiniGame.Enemies[].Scripts | Struct | NOT EXAMINED; we substitute container |
MiniGame.Enemies[].Scripts.OnDamage | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnDeath | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnFire | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnHitObstacle | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnTrackLoop | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnCreate | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnHeartbeat | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnAnimEvent | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnHitBullet | CResRef | stamps "" |
MiniGame.Enemies[].Scripts.OnHitFollower | CResRef | stamps "" |
MiniGame.Enemies[].Sounds | Struct | NOT EXAMINED; we substitute container |
MiniGame.Enemies[].Sounds.Engine | CResRef | stamps "" |
MiniGame.Enemies[].Sounds.Death | CResRef | stamps "" |
MiniGame.Enemies[].Gun_Banks | List | NOT EXAMINED; we substitute container |
MiniGame.Enemies[].Gun_Banks[].BankID (required) | DWORD | stamps 4294967295 |
MiniGame.Enemies[].Gun_Banks[].Gun_Model (required) | CResRef | not one constant; we substitute "" |
MiniGame.Enemies[].Gun_Banks[].Bullet | Struct | NOT EXAMINED; the field holds the absence |
MiniGame.Enemies[].Gun_Banks[].Bullet.Damage (required) | DWORD | not one constant; we substitute 0 |
MiniGame.Enemies[].Gun_Banks[].Bullet.Lifespan (required) | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Enemies[].Gun_Banks[].Bullet.Rate_Of_Fire (required) | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Enemies[].Gun_Banks[].Bullet.Speed (required) | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Enemies[].Gun_Banks[].Bullet.Target_Type (required) | DWORD | not one constant; we substitute 0 |
MiniGame.Enemies[].Gun_Banks[].Bullet.Bullet_Model | CResRef | stamps "" |
MiniGame.Enemies[].Gun_Banks[].Bullet.Collision_Sound | CResRef | stamps "" |
MiniGame.Enemies[].Gun_Banks[].Fire_Sound | CResRef | stamps "" |
MiniGame.Enemies[].Gun_Banks[].Sensing_Radius | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Enemies[].Gun_Banks[].Horiz_Spread | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Enemies[].Gun_Banks[].Vert_Spread | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Enemies[].Gun_Banks[].Inaccuracy | FLOAT | not one constant; we substitute 0.0 |
MiniGame.Obstacles | List | NOT EXAMINED; we substitute container |
MiniGame.Obstacles[].Name | CResRef | NOT EXAMINED; we substitute "" |
MiniGame.Obstacles[].Scripts | Struct | NOT EXAMINED; we substitute container |
MiniGame.Obstacles[].Scripts.OnCreate | CResRef | stamps "" |
MiniGame.Obstacles[].Scripts.OnHeartbeat | CResRef | stamps "" |
MiniGame.Obstacles[].Scripts.OnAnimEvent | CResRef | stamps "" |
MiniGame.Obstacles[].Scripts.OnHitBullet | CResRef | stamps "" |
MiniGame.Obstacles[].Scripts.OnHitFollower | CResRef | stamps "" |
PlayerOnly | BYTE | NOT EXAMINED; we substitute 0 |