Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 .are corpus. The tables below are lookup surfaces, meant to be searched rather than read start to end.

At a Glance

PropertyValue
Extension(s).are
Magic SignatureARE / V3.2
TypeArea Static Blueprint
Rust ReferenceView rakata_generics::Are in Rustdocs

Field Schema

The format’s field families, as an orientation before the full list.

CategoryCoversRepresentative fields
Core Identity & StateThe area’s tag, localized name, and interior/exterior state flagsTag, Name, Flags, RestrictMode
Weather & TerrainRain, snow, and lightning chances, wind strength, and grass renderingChanceRain, WindPower, Grass_TexName
Lighting & FogSeparate sun and moon ambient/diffuse tints, fog ranges, and shadow limitsSunAmbientColor, MoonFogNear, ShadowOpacity
Stealth XPThe stealth-run XP pool an area can awardStealthXPMax, StealthXPCurrent, StealthXPLoss
Event HooksThe area-level event scriptsOnEnter, OnExit, OnHeartbeat, OnUserDefined
Map & RoomsMinimap projection data and the per-room sound listMap, Rooms
MinigameThe optional nested swoop or turret minigame configurationMiniGame

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::SaveModuleFinish hands the area’s static ARE resource 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 CategoryEngine Property & Behavioural Quirk
IdentityName (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.
IdentityTag (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.
ScriptsOnHeartbeat, OnUserDefined, ... -> CResRef script payloads.
State FlagsFlags (DWord) -> Bit 0 explicitly marks an Interior environment.
State FlagsRestrictMode (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.
IdentityCameraStyle (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

FieldTypeEngine Evaluation
ChanceFogINTStored 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, WindPowerINTWarning: 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_TexNameResRefIf empty or invalid, the engine forces a hard fallback to "grass".
AlphaTestFLOATDefaults to 0.2 (older tools commonly assume 0.0).
ModSpotCheck, ModListenCheckINTPerception-check modifiers. Both default to 0 if missing, unconditional.
Grass_Density, Grass_QuadSize, Grass_Prob_LL/LR/UL/URFLOATGrass 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 GroupsTypeEngine Evaluation
Fog Ranges (MoonFogNear/Far, SunFogNear/Far)FLOATDefault 10000.0. The engine clamps values to >= 0.0.
Tints (*AmbientColor, *DiffuseColor, *FogColor)DWORDRead 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)BYTEToggles 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.

DayNightCycle doesn’t inherit its own constructed default. The area constructor sets day_night_cycle = 1 (cycle on) before any GFF read happens, but the read itself uses a hardcoded literal 0 as its fallback, not the constructed value, so an area missing DayNightCycle loads 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 means 0, not 1. IsNight and LightingScheme share the ordinary unconditional-0 pattern with no such mismatch. NoRest, TransPending, TransPendNextID, and TransPendCurrID also carry over a constructed value (all 0/false), same practical outcome as an unconditional default given the single-call-path caveat above.

Grass_Emissive and the entire Dirty* 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/DirtyFormulaThre and DirtyFuncOne/Two/Three, exist anywhere in swkotor.exe’s string table, verified against a binary-wide search that does find every neighbouring Grass_* 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 as DisableTransit/NoHangBack/PlayerOnly/PlayerVsPlayer below, toolset-only and invisible to K1’s engine.

Map Transitions & Saving states

Feature CategoryEngine Evaluation & Triggers
Zoom BiasMapZoom 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:

  1. A minimap TGA or TPC asset matching the level name exists on disk.
  2. The Map sub-struct is present in the GFF.
  3. 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:

FieldDefault / Constraint
LateralAccelDefaults to 60.0.
MovementPerSec6.0 for swoops, 90.0 for turrets, 0.0 otherwise.
Bump_PlaneClamped to 0..3.
Nested ArraysThe 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.

  1. ARE-001 (Context Discards): Warns when interior areas (Flags & 1) carry non-zero ChanceRain, ChanceSnow, ChanceLightning, or WindPower; the engine discards weather for interiors.
  2. ARE-002 (Weather Truncation): Warns when ChanceRain, ChanceSnow, ChanceLightning, or WindPower exceed 255; the engine truncates these to bytes at runtime.
  3. ARE-003 (Fog Clamping): Warns when MoonFogNear/Far or SunFogNear/Far are negative; the engine clamps fog distances to >= 0.0.
  4. ARE-004 (Tag Lowercasing): Warns when Tag contains uppercase characters; the engine lowercases area tags on load.
  5. ARE-005 (Toolset Fields): Informs when DisableTransit, NoHangBack, PlayerOnly, or PlayerVsPlayer are set; never read by the K1 engine.

Phase 2 (resource existence, requires LintContext)

Implemented under rakata_lint::rules::are_range.

  1. ARE-006 (Resref Existence): Warns when any of OnEnter, OnExit, OnHeartbeat, or OnUserDefined (.ncs) does not resolve, or when any Rooms[i].PartSounds[j].Sound (.wav) does not resolve in the configured resource sources.

Pending

  • Grass Texture Fallback: Informs when Grass_TexName is 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

FieldTypeEngineWhen absent
Rooms[].ForceRatingINTnever reads it: neither field-name string exists anywhere in swkotor.exe, confirmed by a binary-wide search; toolset-only in this buildnot one constant; we substitute 0
Rooms[].DisableWeatherBYTEnever reads it: neither field-name string exists anywhere in swkotor.exe, confirmed by a binary-wide search; toolset-only in this buildnot one constant; we substitute 0
DisableTransitBYTEnever reads it: ARE-005 records DisableTransit, NoHangBack and PlayerVsPlayer as toolset fields the K1 engine never readsnot one constant; we substitute 0
NoHangBackBYTEnever reads it: ARE-005 records DisableTransit, NoHangBack and PlayerVsPlayer as toolset fields the K1 engine never readsnot one constant; we substitute 0
PlayerVsPlayerBYTEnever reads it: ARE-005 records DisableTransit, NoHangBack and PlayerVsPlayer as toolset fields the K1 engine never readsnot one constant; we substitute 0
Grass_EmissiveDWORDnever 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 existnot one constant; we substitute 0
DirtyARGBOneINTnever 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 existnot one constant; we substitute 0
DirtySizeOneINTnever 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 existnot one constant; we substitute 0
DirtyFormulaOneINTnever 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 existnot one constant; we substitute 0
DirtyFuncOneINTnever 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 existnot one constant; we substitute 0
DirtyARGBTwoINTnever 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 existnot one constant; we substitute 0
DirtySizeTwoINTnever 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 existnot one constant; we substitute 0
DirtyFormulaTwoINTnever 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 existnot one constant; we substitute 0
DirtyFuncTwoINTnever 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 existnot one constant; we substitute 0
DirtyARGBThreeINTnever 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 existnot one constant; we substitute 0
DirtySizeThreeINTnever 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 existnot one constant; we substitute 0
DirtyFormulaThreINTnever 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 existnot one constant; we substitute 0
DirtyFuncThreeINTnever 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 existnot 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.

FieldTypeWhen absent
IDINTstamps 0
Creator_IDINTstamps 0
VersionDWORDstamps 0
CommentsCExoStringstamps ""
NameCExoLocStringstamps empty
TagCExoStringstamps ""
OnHeartbeatCResRefNOT EXAMINED; we substitute ""
OnUserDefinedCResRefNOT EXAMINED; we substitute ""
OnEnterCResRefNOT EXAMINED; we substitute ""
OnExitCResRefNOT EXAMINED; we substitute ""
FlagsDWORDstamps 0
CameraStyleINTstamps 0
DefaultEnvMapCResRefstamps ""
UnescapableBYTEkeeps 0
RestrictModeBYTEkeeps 0
ChanceRainINTstamps 0
ChanceSnowINTstamps 0
ChanceLightningINTstamps 0
WindPowerINTstamps 0
ChanceFogINTstamps 0
MoonAmbientColorDWORDstamps 0
MoonDiffuseColorDWORDstamps 0
MoonFogColorDWORDstamps 0
SunAmbientColorDWORDstamps 0
SunDiffuseColorDWORDstamps 0
SunFogColorDWORDstamps 0
DynAmbientColorDWORDstamps 0
MoonFogNearFLOATstamps 10000.0
MoonFogFarFLOATstamps 10000.0
SunFogNearFLOATstamps 10000.0
SunFogFarFLOATstamps 10000.0
MoonFogOnBYTEstamps 0
SunFogOnBYTEstamps 0
MoonShadowsBYTEstamps 0
SunShadowsBYTEstamps 0
DayNightCycleBYTEstamps 0
IsNightBYTEstamps 0
ShadowOpacityBYTEstamps 0
LightingSchemeBYTEstamps 0
NoRestBYTEkeeps 0
ModSpotCheckINTstamps 0
ModListenCheckINTstamps 0
Grass_DiffuseDWORDstamps 0
Grass_AmbientDWORDstamps 0
Grass_DensityFLOATstamps 0.0
Grass_QuadSizeFLOATstamps 0.0
Grass_TexNameCResRefNOT EXAMINED; we substitute ""
Grass_Prob_LLFLOATstamps 0.0
Grass_Prob_LRFLOATstamps 0.0
Grass_Prob_ULFLOATstamps 0.0
Grass_Prob_URFLOATstamps 0.0
AlphaTestFLOATstamps 0.2
StealthXPMaxDWORDNOT EXAMINED; we substitute 0
StealthXPCurrentDWORDnot one constant; our reader works it out from other fields
StealthXPLossDWORDkeeps 0
StealthXPEnabledBYTEkeeps 0
TransPendingBYTEkeeps 0
TransPendNextIDBYTEkeeps 0
TransPendCurrIDBYTEkeeps 0
LoadScreenIDWORDstamps 0
RoomsListNOT EXAMINED; we substitute container
Rooms[].PartSoundsListnot one constant; we substitute container
Rooms[].PartSounds[].LoopingBYTENOT EXAMINED; we substitute 0
Rooms[].PartSounds[].ModelPartCExoStringNOT EXAMINED; we substitute ""
Rooms[].PartSounds[].OmenEventCExoStringNOT EXAMINED; we substitute ""
Rooms[].PartSounds[].SoundCResRefNOT EXAMINED; we substitute ""
Rooms[].RoomNameCExoStringstamps ""
Rooms[].EnvAudioINTstamps 0
Rooms[].AmbientScaleFLOATstamps 0.0
Expansion_ListListNOT EXAMINED; we substitute container
Expansion_List[].Expansion_NameCExoLocStringstamps empty
Expansion_List[].Expansion_IDINTstamps 0
MapStructNOT EXAMINED; we substitute container
Map.MapResXINTstamps 0
Map.NorthAxisINTstamps 0
Map.MapZoomINTstamps 1
Map.MapPt1XFLOATstamps 0.0
Map.MapPt1YFLOATstamps 0.0
Map.MapPt2XFLOATstamps 0.0
Map.MapPt2YFLOATstamps 0.0
Map.WorldPt1XFLOATstamps 0.0
Map.WorldPt1YFLOATstamps 0.0
Map.WorldPt2XFLOATstamps 0.0
Map.WorldPt2YFLOATstamps 0.0
MiniGameStructnot one constant; the field holds the absence
MiniGame.TypeDWORDNOT EXAMINED; we substitute 0
MiniGame.MovementPerSecFLOATNOT EXAMINED; we substitute 0.0
MiniGame.LateralAccelFLOATNOT EXAMINED; we substitute 60.0
MiniGame.Bump_PlaneDWORDNOT EXAMINED; we substitute 0
MiniGame.DoBumpingBYTENOT EXAMINED; we substitute 0
MiniGame.UseInertiaBYTENOT EXAMINED; we substitute 0
MiniGame.DOFDWORDNOT EXAMINED; we substitute 0
MiniGame.MusicCResRefNOT EXAMINED; we substitute ""
MiniGame.Far_ClipFLOATNOT EXAMINED; we substitute 100.0
MiniGame.Near_ClipFLOATNOT EXAMINED; we substitute 0.1
MiniGame.CameraViewAngleFLOATNOT EXAMINED; we substitute 65.0
MiniGame.PlayerStructNOT EXAMINED; the field holds the absence
MiniGame.Player.CameraCResRefNOT EXAMINED; we substitute ""
MiniGame.Player.CameraRotateBYTENOT EXAMINED; we substitute 0
MiniGame.Player.Minimum_SpeedFLOATthe page does not say; we substitute -1.0
MiniGame.Player.Maximum_SpeedFLOATstamps 100.0
MiniGame.Player.Accel_SecsFLOATnot one constant; we substitute -1.0
MiniGame.Player.TunnelXPosFLOATstamps 0.0
MiniGame.Player.TunnelXNegFLOATstamps 0.0
MiniGame.Player.TunnelYPosFLOATNOT EXAMINED; we substitute 0.0
MiniGame.Player.TunnelYNegFLOATNOT EXAMINED; we substitute 0.0
MiniGame.Player.TunnelZPosFLOATstamps 0.0
MiniGame.Player.TunnelZNegFLOATstamps 0.0
MiniGame.Player.TunnelInfiniteVector3NOT EXAMINED; we substitute (0.0, 0.0, 0.0)
MiniGame.Player.Start_Offset_XFLOATstamps 0.0
MiniGame.Player.Start_Offset_YFLOATstamps 0.0
MiniGame.Player.Start_Offset_ZFLOATstamps 0.0
MiniGame.Player.Target_Offset_XFLOATstamps 0.0
MiniGame.Player.Target_Offset_YFLOATstamps 0.0
MiniGame.Player.Target_Offset_ZFLOATstamps 0.0
MiniGame.Player.ModelsListNOT EXAMINED; we substitute container
MiniGame.Player.Models[].ModelCResRefNOT EXAMINED; we substitute ""
MiniGame.Player.Models[].RotatingModelBYTENOT EXAMINED; we substitute 1
MiniGame.Player.TrackCResRefNOT EXAMINED; we substitute ""
MiniGame.Player.Hit_PointsDWORDthe page does not say; we substitute 0
MiniGame.Player.Max_HPsDWORDthe page does not say; we substitute 0
MiniGame.Player.Sphere_RadiusFLOATthe page does not say; we substitute -1.0
MiniGame.Player.Invince_PeriodFLOATstamps 0.0
MiniGame.Player.Bump_DamageINTstamps 0
MiniGame.Player.Num_LoopsINTthe page does not say; we substitute -10
MiniGame.Player.ScriptsStructNOT EXAMINED; we substitute container
MiniGame.Player.Scripts.OnDamageCResRefstamps ""
MiniGame.Player.Scripts.OnDeathCResRefstamps ""
MiniGame.Player.Scripts.OnFireCResRefstamps ""
MiniGame.Player.Scripts.OnHitObstacleCResRefstamps ""
MiniGame.Player.Scripts.OnTrackLoopCResRefstamps ""
MiniGame.Player.Scripts.OnCreateCResRefstamps ""
MiniGame.Player.Scripts.OnHeartbeatCResRefstamps ""
MiniGame.Player.Scripts.OnAnimEventCResRefstamps ""
MiniGame.Player.Scripts.OnHitBulletCResRefstamps ""
MiniGame.Player.Scripts.OnHitFollowerCResRefstamps ""
MiniGame.Player.SoundsStructNOT EXAMINED; we substitute container
MiniGame.Player.Sounds.EngineCResRefstamps ""
MiniGame.Player.Sounds.DeathCResRefstamps ""
MiniGame.Player.Gun_BanksListNOT EXAMINED; we substitute container
MiniGame.Player.Gun_Banks[].BankID (required)DWORDstamps 4294967295
MiniGame.Player.Gun_Banks[].Gun_Model (required)CResRefnot one constant; we substitute ""
MiniGame.Player.Gun_Banks[].BulletStructNOT EXAMINED; the field holds the absence
MiniGame.Player.Gun_Banks[].Bullet.Damage (required)DWORDnot one constant; we substitute 0
MiniGame.Player.Gun_Banks[].Bullet.Lifespan (required)FLOATnot one constant; we substitute 0.0
MiniGame.Player.Gun_Banks[].Bullet.Rate_Of_Fire (required)FLOATnot one constant; we substitute 0.0
MiniGame.Player.Gun_Banks[].Bullet.Speed (required)FLOATnot one constant; we substitute 0.0
MiniGame.Player.Gun_Banks[].Bullet.Target_Type (required)DWORDnot one constant; we substitute 0
MiniGame.Player.Gun_Banks[].Bullet.Bullet_ModelCResRefstamps ""
MiniGame.Player.Gun_Banks[].Bullet.Collision_SoundCResRefstamps ""
MiniGame.Player.Gun_Banks[].Fire_SoundCResRefstamps ""
MiniGame.Player.Gun_Banks[].Sensing_RadiusFLOATnot one constant; we substitute 0.0
MiniGame.Player.Gun_Banks[].Horiz_SpreadFLOATnot one constant; we substitute 0.0
MiniGame.Player.Gun_Banks[].Vert_SpreadFLOATnot one constant; we substitute 0.0
MiniGame.Player.Gun_Banks[].InaccuracyFLOATnot one constant; we substitute 0.0
MiniGame.MouseStructnot one constant; the field holds the absence
MiniGame.Mouse.AxisXDWORDNOT EXAMINED; we substitute 0
MiniGame.Mouse.AxisYDWORDNOT EXAMINED; we substitute 0
MiniGame.Mouse.FlipAxisXBYTENOT EXAMINED; we substitute 0
MiniGame.Mouse.FlipAxisYBYTENOT EXAMINED; we substitute 0
MiniGame.EnemiesListNOT EXAMINED; we substitute container
MiniGame.Enemies[].TriggerBYTEstamps 0
MiniGame.Enemies[].ModelsListNOT EXAMINED; we substitute container
MiniGame.Enemies[].Models[].ModelCResRefNOT EXAMINED; we substitute ""
MiniGame.Enemies[].Models[].RotatingModelBYTENOT EXAMINED; we substitute 1
MiniGame.Enemies[].TrackCResRefNOT EXAMINED; we substitute ""
MiniGame.Enemies[].Hit_PointsDWORDthe page does not say; we substitute 0
MiniGame.Enemies[].Max_HPsDWORDthe page does not say; we substitute 0
MiniGame.Enemies[].Sphere_RadiusFLOATthe page does not say; we substitute -1.0
MiniGame.Enemies[].Invince_PeriodFLOATstamps 0.0
MiniGame.Enemies[].Bump_DamageINTstamps 0
MiniGame.Enemies[].Num_LoopsINTthe page does not say; we substitute -10
MiniGame.Enemies[].ScriptsStructNOT EXAMINED; we substitute container
MiniGame.Enemies[].Scripts.OnDamageCResRefstamps ""
MiniGame.Enemies[].Scripts.OnDeathCResRefstamps ""
MiniGame.Enemies[].Scripts.OnFireCResRefstamps ""
MiniGame.Enemies[].Scripts.OnHitObstacleCResRefstamps ""
MiniGame.Enemies[].Scripts.OnTrackLoopCResRefstamps ""
MiniGame.Enemies[].Scripts.OnCreateCResRefstamps ""
MiniGame.Enemies[].Scripts.OnHeartbeatCResRefstamps ""
MiniGame.Enemies[].Scripts.OnAnimEventCResRefstamps ""
MiniGame.Enemies[].Scripts.OnHitBulletCResRefstamps ""
MiniGame.Enemies[].Scripts.OnHitFollowerCResRefstamps ""
MiniGame.Enemies[].SoundsStructNOT EXAMINED; we substitute container
MiniGame.Enemies[].Sounds.EngineCResRefstamps ""
MiniGame.Enemies[].Sounds.DeathCResRefstamps ""
MiniGame.Enemies[].Gun_BanksListNOT EXAMINED; we substitute container
MiniGame.Enemies[].Gun_Banks[].BankID (required)DWORDstamps 4294967295
MiniGame.Enemies[].Gun_Banks[].Gun_Model (required)CResRefnot one constant; we substitute ""
MiniGame.Enemies[].Gun_Banks[].BulletStructNOT EXAMINED; the field holds the absence
MiniGame.Enemies[].Gun_Banks[].Bullet.Damage (required)DWORDnot one constant; we substitute 0
MiniGame.Enemies[].Gun_Banks[].Bullet.Lifespan (required)FLOATnot one constant; we substitute 0.0
MiniGame.Enemies[].Gun_Banks[].Bullet.Rate_Of_Fire (required)FLOATnot one constant; we substitute 0.0
MiniGame.Enemies[].Gun_Banks[].Bullet.Speed (required)FLOATnot one constant; we substitute 0.0
MiniGame.Enemies[].Gun_Banks[].Bullet.Target_Type (required)DWORDnot one constant; we substitute 0
MiniGame.Enemies[].Gun_Banks[].Bullet.Bullet_ModelCResRefstamps ""
MiniGame.Enemies[].Gun_Banks[].Bullet.Collision_SoundCResRefstamps ""
MiniGame.Enemies[].Gun_Banks[].Fire_SoundCResRefstamps ""
MiniGame.Enemies[].Gun_Banks[].Sensing_RadiusFLOATnot one constant; we substitute 0.0
MiniGame.Enemies[].Gun_Banks[].Horiz_SpreadFLOATnot one constant; we substitute 0.0
MiniGame.Enemies[].Gun_Banks[].Vert_SpreadFLOATnot one constant; we substitute 0.0
MiniGame.Enemies[].Gun_Banks[].InaccuracyFLOATnot one constant; we substitute 0.0
MiniGame.ObstaclesListNOT EXAMINED; we substitute container
MiniGame.Obstacles[].NameCResRefNOT EXAMINED; we substitute ""
MiniGame.Obstacles[].ScriptsStructNOT EXAMINED; we substitute container
MiniGame.Obstacles[].Scripts.OnCreateCResRefstamps ""
MiniGame.Obstacles[].Scripts.OnHeartbeatCResRefstamps ""
MiniGame.Obstacles[].Scripts.OnAnimEventCResRefstamps ""
MiniGame.Obstacles[].Scripts.OnHitBulletCResRefstamps ""
MiniGame.Obstacles[].Scripts.OnHitFollowerCResRefstamps ""
PlayerOnlyBYTENOT EXAMINED; we substitute 0