t2-demo-parser 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/DataBlockParsers.js
CHANGED
|
@@ -1070,19 +1070,19 @@ function energyProjectileDataUnpack(bs) {
|
|
|
1070
1070
|
// LinearFlareProjectileData (extends LinearProjectileData)
|
|
1071
1071
|
// ============================================================
|
|
1072
1072
|
function linearFlareProjectileDataUnpack(bs) {
|
|
1073
|
-
//
|
|
1073
|
+
// Bit layout from unpackData FUN_0063dc80; names from initPersistFields
|
|
1074
|
+
// FUN_0063d870 (numFlares 0x168 S32, size[3] 0x16c F32, flareColor
|
|
1075
|
+
// 0x178, flareModTexture 0x188, flareBaseTexture 0x18c).
|
|
1074
1076
|
const result = linearProjectileDataUnpack(bs);
|
|
1075
|
-
//
|
|
1076
|
-
result.numFlares = bs.
|
|
1077
|
+
// S32 (offset 0x168): raw 4-byte read of an integer field.
|
|
1078
|
+
result.numFlares = bs.readS32();
|
|
1077
1079
|
// ColorF via FUN_0043f040 (packed 4×U8 at offset 0x178)
|
|
1078
1080
|
result.flareColor = readColorF(bs);
|
|
1079
1081
|
// 2 readString (offsets 0x188, 0x18c)
|
|
1080
|
-
result.
|
|
1081
|
-
result.
|
|
1082
|
-
// 3×F32 loop (offset 0x16c, count=3)
|
|
1083
|
-
result.
|
|
1084
|
-
result.flareModTexture = bs.readF32();
|
|
1085
|
-
result.smokeSize = bs.readF32();
|
|
1082
|
+
result.flareModTexture = bs.readString();
|
|
1083
|
+
result.flareBaseTexture = bs.readString();
|
|
1084
|
+
// 3×F32 loop (offset 0x16c, count=3): size[0..2].
|
|
1085
|
+
result.sizes = [bs.readF32(), bs.readF32(), bs.readF32()];
|
|
1086
1086
|
return result;
|
|
1087
1087
|
}
|
|
1088
1088
|
// ============================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBlockParsers.js","sourceRoot":"","sources":["../src/DataBlockParsers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BitStream } from \"./BitStream.js\";\nimport type { ClassRegistry } from \"./ClassRegistry.js\";\nimport type {\n SimDataBlock,\n GameBaseDataBlock,\n ShapeBaseDataBlock,\n ShapeBaseImageDataBlock,\n PlayerDataBlock,\n VehicleDataBlock,\n FlyingVehicleDataBlock,\n HoverVehicleDataBlock,\n WheeledVehicleDataBlock,\n StaticShapeDataBlock,\n TurretDataBlock,\n TurretImageDataBlock,\n ItemDataBlock,\n ProjectileDataBlock,\n LinearProjectileDataBlock,\n GrenadeProjectileDataBlock,\n SeekerProjectileDataBlock,\n SniperProjectileDataBlock,\n ShockLanceProjectileDataBlock,\n ELFProjectileDataBlock,\n RepairProjectileDataBlock,\n TargetProjectileDataBlock,\n TracerProjectileDataBlock,\n EnergyProjectileDataBlock,\n LinearFlareProjectileDataBlock,\n BombProjectileDataBlock,\n FlareProjectileDataBlock,\n ExplosionDataBlock,\n DebrisDataBlock,\n SplashDataBlock,\n ShockwaveDataBlock,\n ParticleEmitterDataBlock,\n ParticleDataBlock,\n AudioDescriptionDataBlock,\n AudioProfileDataBlock,\n AudioEnvironmentDataBlock,\n AudioSampleEnvironmentDataBlock,\n DecalDataBlock,\n CameraDataBlock,\n SensorDataBlock,\n TriggerDataBlock,\n ForceFieldBareDataBlock,\n ParticleEmissionDummyDataBlock,\n CommanderIconDataBlock,\n PrecipitationDataBlock,\n FireballAtmosphereDataBlock,\n LightningDataBlock,\n StationFXVehicleDataBlock,\n StationFXPersonalDataBlock,\n CannedChatItemDataBlock,\n MissionMarkerDataBlock,\n TSShapeConstructorDataBlock,\n EffectProfileDataBlock,\n JetEffectDataBlock,\n RunningLightDataBlock,\n HudImageEntry,\n ImageState,\n ParticleKey,\n} from \"./dataBlockDataTypes.js\";\n\n// ============================================================\n// Helper functions\n// ============================================================\n\n/**\n * Read a DataBlock reference: flag(1b) + readClassId (11 bits).\n * From decompiled binary: uses FUN_00436d10 (readClassId) which reads\n * getBitCount(getNextPow2(0x800)) = 11 bits.\n * If flag is false, sets objectId to -1 (0xFFFFFFFF).\n */\n/** particleEngine.cc: PDC_MAX_TEX. */\nconst ParticleDataMaxTextures = 50;\n\nfunction readDataBlockRef(bs: BitStream): number | null {\n return bs.readFlag() ? bs.readInt(11) : null;\n}\n\n/**\n * Read a ranged signed 32-bit integer.\n * Encodes value as unsigned offset from min.\n */\nfunction readRangedS32(bs: BitStream, min: number, max: number): number {\n return bs.readRangedU32(0, max - min) + min;\n}\n\n/**\n * Read a packed ColorF: 4 bytes (32 bits total), each converted to [0..1] float.\n * From decompiled binary: FUN_0043f040 calls FUN_0043efe0 which reads 4 × stream->read(1, &byte).\n * Each byte is multiplied by 1/255.0 to produce the float value.\n * NOTE: This is NOT 4×F32 (128 bits) — it's 4×U8 (32 bits).\n *\n * Colour representation follows the engine's own field type: fields the\n * engine stores as ColorF (this reader) are normalised to [0, 1]; fields\n * it stores as ColorI (sensorColor, sensor group colours) keep the raw\n * 0–255 bytes.\n */\nfunction readColorF(bs: BitStream): {\n r: number;\n g: number;\n b: number;\n a: number;\n} {\n return {\n r: bs.readInt(8) / 255,\n g: bs.readInt(8) / 255,\n b: bs.readInt(8) / 255,\n a: bs.readInt(8) / 255,\n };\n}\n\n/**\n * Read a DataBlock boolean field: 8 bits (1 byte), as written by stream->write(sizeof(bool), &val).\n * NOTE: This is different from readFlag() which reads 1 bit via BitStream::readFlag().\n * Many DataBlock fields use write(sizeof(bool)) instead of writeFlag().\n */\nfunction readBool(bs: BitStream): boolean {\n return bs.readBool();\n}\n\n/** Read a ranged float: min + readFloat(bits) * (max - min). */\nfunction readRangedF32(\n bs: BitStream,\n min: number,\n max: number,\n bits: number,\n): number {\n return min + bs.readFloat(bits) * (max - min);\n}\n\n/**\n * Read a U32 count and reject it unless `minBitsPerEntry × count` bits\n * remain: exhausted reads return 0 without throwing, so a corrupt count\n * would otherwise spin allocating until memory ran out.\n */\nfunction readCheckedCount(\n bs: BitStream,\n minBitsPerEntry: number,\n what: string,\n): number {\n const count = bs.readU32();\n if (count > bs.getRemainingBits() / minBitsPerEntry) {\n throw new Error(`Invalid ${what}: ${count}`);\n }\n return count;\n}\n\n// ============================================================\n// Base class parsers (inheritance chain)\n// ============================================================\n\n// SimDataBlock → GameBaseData: 0 bits on wire (no-op)\n\n/**\n * ShapeBaseData::unpackData — critical base class for most game objects.\n *\n * Verified against decompiled binary FUN_005e63e0 (Tribes2.exe).\n * NOTE: The field order differs from V12 engine reference source.\n * The Tribes 2 binary groups booleans and DataBlock refs differently,\n * and the sensor color uses 4×U8 (not 4×F32), among other differences.\n */\nfunction shapeBaseDataUnpack(bs: BitStream): ShapeBaseDataBlock {\n const result: ShapeBaseDataBlock = {};\n\n // computeCRC — flag; if true: U32 mCRC\n // Binary: readFlag → this+0xc0; if true: read(4) → this+0xbc\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName — readString → this+0x44\n result.shapeName = bs.readString();\n\n // 9 conditional F32 fields (flag + F32 if non-default)\n // Binary: each is readFlag, if true: read(4) → field offset\n if (bs.readFlag()) result.mass = bs.readF32(); // → 0x74\n if (bs.readFlag()) result.drag = bs.readF32(); // → 0x78\n if (bs.readFlag()) result.density = bs.readF32(); // → 0x7c\n if (bs.readFlag()) result.maxEnergy = bs.readF32(); // → 0x80\n if (bs.readFlag()) result.cameraMaxDist = bs.readF32(); // → 0xa4\n if (bs.readFlag()) result.cameraMinDist = bs.readF32(); // → 0xa8\n if (bs.readFlag()) result.cameraDefaultFov = bs.readF32(); // → 0xac\n if (bs.readFlag()) result.cameraMinFov = bs.readF32(); // → 0xb0\n if (bs.readFlag()) result.cameraMaxFov = bs.readF32(); // → 0xb4\n\n // debrisShapeName — readString → this+0x48\n result.debrisShapeName = bs.readString();\n\n // sensorRadius — flag; if true: readInt(10) + 4×U8 (RGBA bytes)\n // Binary: readInt(10) → this+0x15c (cast to float), then 4 × read(1) → 0x160-0x163\n // sensorColor is a ColorI in the engine, so the bytes are kept as-is.\n if (bs.readFlag()) {\n result.sensorRadius = bs.readInt(10);\n result.sensorColor = {\n r: bs.readInt(8),\n g: bs.readInt(8),\n b: bs.readInt(8),\n a: bs.readInt(8),\n };\n }\n\n // heat — flag; if true: F32 → this+0x50\n if (bs.readFlag()) result.heat = bs.readF32();\n\n // cmdCategory — readString → this+0x164\n result.cmdCategory = bs.readString();\n\n // cmdMiniIconName — readString → this+0x168\n // NOTE: V12 has cmdIcon (DataBlockRef) here, but binary has readString.\n result.cmdMiniIconName = bs.readString();\n\n // 3 boolean flags: canControl, canObserve, observeThroughObject\n // Binary: 3 readFlags → this+0x16c, 0x16d, 0x16e\n result.canControl = bs.readFlag();\n result.canObserve = bs.readFlag();\n result.observeThroughObject = bs.readFlag();\n\n // 3 more boolean flags (grouped together in binary, different from V12)\n // Binary: this+0x325, 0x329, 0x32a\n result.emap = bs.readFlag(); // 0x325\n result.isInvincible = bs.readFlag(); // 0x329\n result.renderWhenDestroyed = bs.readFlag(); // 0x32a\n\n // 4 DataBlock refs using readClassId (FUN_00436d10 = readInt(11))\n // Binary: each is readFlag + readClassId → this+0x70, 0x60, 0x68, 0x58\n result.cmdIcon = readDataBlockRef(bs); // 0x6c/0x70\n result.explosion = readDataBlockRef(bs); // 0x5c/0x60\n result.underwaterExplosion = readDataBlockRef(bs); // 0x64/0x68\n result.debris = readDataBlockRef(bs); // 0x54/0x58\n\n // 3 more boolean flags\n // Binary: this+0x32b, 0x326, 0x327\n result.inheritEnergyFromMount = bs.readFlag(); // 0x32b\n result.firstPersonOnly = bs.readFlag(); // 0x326\n result.useEyePoint = bs.readFlag(); // 0x327\n\n // shieldEffectLifetimeMS — U32 → this+0x94\n result.shieldEffectLifetimeMS = bs.readU32();\n\n // shieldEffectScale — flag; if true: 3×F32\n // Binary: readFlag, if true: read(4) × 3 → this+0x98, 0x9c, 0xa0\n // NOTE: This field is NOT in the V12 reference source — Tribes 2 addition.\n if (bs.readFlag()) {\n result.shieldEffectScale = bs.readPoint3F();\n }\n\n // HUD images loop (8 iterations, NumHudRenderImages=8)\n // Binary: do-while uVar4 < 8 at offset this + uVar4*4 + 0x174\n const hudImages: HudImageEntry[] = [];\n for (let i = 0; i < 8; i++) {\n const hasFriendly = bs.readFlag();\n if (!hasFriendly) continue;\n const friendlyName = bs.readString(); // → this + i*4 + 0x174\n const hasEnemy = bs.readFlag();\n const enemyName = hasEnemy ? bs.readString() : undefined; // → this + i*4 + 0x194\n const img: HudImageEntry = {\n friendlyName,\n enemyName,\n renderCenter: bs.readFlag(), // → this + i + 0x1f4\n renderModulated: bs.readFlag(), // → this + i + 0x1fc\n renderAlways: bs.readFlag(), // → this + i + 0x204\n renderDistance: bs.readFlag(), // → this + i + 0x20c\n renderName: bs.readFlag(), // → this + i + 0x214\n };\n hudImages.push(img);\n }\n if (hudImages.length > 0) result.hudImages = hudImages;\n\n return result;\n}\n\n// ============================================================\n// ShapeBaseImageData (weapon mount data — 31 states)\n// ============================================================\n\nfunction shapeBaseImageDataUnpack(bs: BitStream): ShapeBaseImageDataBlock {\n // Extends GameBaseData directly (0 parent bits)\n const result: ShapeBaseImageDataBlock = {};\n\n // computeCRC — flag; if true: U32\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName\n result.shapeName = bs.readString();\n\n // mountPoint — U32\n result.mountPoint = bs.readU32();\n\n // offsetTransform — flag(isIdentity); if NOT identity: readAffineTransform\n if (!bs.readFlag()) {\n result.offset = bs.readAffineTransform();\n }\n\n // firstPerson — flag\n result.firstPerson = bs.readFlag();\n\n // mass — F32\n result.mass = bs.readF32();\n\n // usesEnergy — flag\n result.usesEnergy = bs.readFlag();\n\n // minEnergy — F32\n result.minEnergy = bs.readF32();\n\n // hasFlash — flag\n result.hasFlash = bs.readFlag();\n\n // projectile — readDataBlockRef\n result.projectile = readDataBlockRef(bs);\n\n // muzzleFlash — readDataBlockRef (confirmed at offset 0xce4 in binary)\n result.muzzleFlash = readDataBlockRef(bs);\n\n // isSeeker — flag; if true: 4×F32 + flag + F32\n result.isSeeker = bs.readFlag();\n if (result.isSeeker) {\n result.seekerRadius = bs.readF32();\n result.maxSeekAngle = bs.readF32();\n result.seekerLockTime = bs.readF32();\n result.seekerFreeTime = bs.readF32();\n result.isTargetLockRequired = bs.readFlag();\n result.maxLockRange = bs.readF32();\n }\n\n // cloakable — flag\n result.cloakable = bs.readFlag();\n\n // lightType — readRangedU32(0, 3); if != 0: F32 + S32 + 4×writeFloat(7)\n result.lightType = bs.readRangedU32(0, 3);\n if (result.lightType !== 0) {\n result.lightRadius = bs.readF32();\n result.lightTime = bs.readS32();\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n }\n\n // shellExitDir — 3×F32 (mathWrite Point3F)\n result.shellExitDir = bs.readPoint3F();\n\n // shellExitVariance — F32\n result.shellExitVariance = bs.readF32();\n\n // shellVelocity — F32\n result.shellVelocity = bs.readF32();\n\n // casing — readDataBlockRef\n result.casing = readDataBlockRef(bs);\n\n // accuFire flag (confirmed at offset 0xc88 in binary, before state loop)\n result.accuFire = bs.readFlag();\n\n // State loop (31 iterations, MaxStates=31)\n const states: ImageState[] = [];\n for (let i = 0; i < 31; i++) {\n const hasName = bs.readFlag();\n if (!hasName) continue;\n\n const name = bs.readString();\n\n // 11 transition values, each readInt(5), in the ENGINE's packing\n // order (binary-verified; the old names here were rotated by two\n // slots and consumers had to carry a remap table): NotLoaded,\n // Loaded, NoAmmo, Ammo, NoTarget, Target, NotWet, Wet, TriggerUp,\n // TriggerDown, Timeout. Values are 1-based state indices (0 = no\n // transition).\n const transitionOnNotLoaded = bs.readInt(5);\n const transitionOnLoaded = bs.readInt(5);\n const transitionOnNoAmmo = bs.readInt(5);\n const transitionOnAmmo = bs.readInt(5);\n const transitionOnNoTarget = bs.readInt(5);\n const transitionOnTarget = bs.readInt(5);\n const transitionOnNotWet = bs.readInt(5);\n const transitionOnWet = bs.readInt(5);\n const transitionOnTriggerUp = bs.readInt(5);\n const transitionOnTriggerDown = bs.readInt(5);\n const transitionOnTimeout = bs.readInt(5);\n\n // timeoutValue — flag(!=default) then F32\n const timeoutValue = bs.readFlag() ? bs.readF32() : undefined;\n // waitForTimeout — flag\n const waitForTimeout = bs.readFlag();\n // fire — flag\n const fire = bs.readFlag();\n // ejectShell — flag\n const ejectShell = bs.readFlag();\n // scaleAnimation — flag\n const scaleAnimation = bs.readFlag();\n // direction — flag\n const direction = bs.readFlag();\n // reload — flag (confirmed at offset 0xe2a in binary, between direction and energyDrain)\n const reload = bs.readFlag();\n // energyDrain — flag(!=default) then F32\n const energyDrain = bs.readFlag() ? bs.readF32() : undefined;\n // loaded — readInt(3)\n const loaded = bs.readInt(3);\n // spin — readInt(3)\n const spin = bs.readInt(3);\n // recoil — readInt(3)\n const recoil = bs.readInt(3);\n // sequence — flag(!=default) then readSignedInt(16)\n const sequence = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // sequenceVis — flag(!=default) then readSignedInt(16)\n const sequenceVis = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // flashSequence — flag\n const flashSequence = bs.readFlag();\n // ignoreLoadedForReady — flag\n const ignoreLoadedForReady = bs.readFlag();\n // emitter — readDataBlockRef; if present: F32 + S32\n const emitter = readDataBlockRef(bs);\n const emitterTime = emitter !== null ? bs.readF32() : undefined;\n const emitterNode = emitter !== null ? bs.readS32() : undefined;\n // sound — readDataBlockRef\n const sound = readDataBlockRef(bs);\n\n const state: ImageState = {\n name,\n transitionOnNotLoaded,\n transitionOnLoaded,\n transitionOnAmmo,\n transitionOnNoAmmo,\n transitionOnTarget,\n transitionOnNoTarget,\n transitionOnWet,\n transitionOnNotWet,\n transitionOnTriggerUp,\n transitionOnTriggerDown,\n transitionOnTimeout,\n timeoutValue,\n waitForTimeout,\n fire,\n ejectShell,\n scaleAnimation,\n direction,\n reload,\n energyDrain,\n loaded,\n spin,\n recoil,\n sequence,\n sequenceVis,\n flashSequence,\n ignoreLoadedForReady,\n emitter,\n emitterTime,\n emitterNode,\n sound,\n };\n states.push(state);\n }\n result.states = states;\n\n return result;\n}\n\n// ============================================================\n// PlayerData (extends ShapeBaseData)\n// ============================================================\n\nfunction playerDataUnpack(bs: BitStream): PlayerDataBlock {\n const result: PlayerDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_005cfa40 (Tribes2.exe).\n // Binary layout: flag + 13 F32s + 2 optional DB refs + 9 F32s + 1 F32 +\n // 8 F32s + readInt(7) + 6 F32s + 9 F32s + 1 F32 + 32 sounds +\n // boxSize(3) + DB refs + F32s + 11 ground impact F32s\n\n // 1. readFlag → 0x340 (renderFirstPerson — NOT F32!)\n result.renderFirstPerson = bs.readFlag();\n\n // Field names for sections 2-10 are binary-verified against the retail\n // initPersistFields (FUN_005ce7e0 region): each read's struct offset\n // (from the FUN_005cfa40 unpack decompile) is mapped to the name the\n // engine registers at that offset. Earlier names were guessed from the\n // SVN source, whose layout differs from retail.\n\n // 2. 13× F32 (offsets 0x334-0x360)\n result.minLookAngle = bs.readF32(); // 0x334\n result.maxLookAngle = bs.readF32(); // 0x338\n result.maxFreelookAngle = bs.readF32(); // 0x33c\n result.maxTimeScale = bs.readF32(); // 0x330\n result.maxStepHeight = bs.readF32(); // 0x398\n result.jetForce = bs.readF32(); // 0x344\n result.underwaterJetForce = bs.readF32(); // 0x348\n result.underwaterVertJetFactor = bs.readF32(); // 0x34c\n result.jetEnergyDrain = bs.readF32(); // 0x350\n result.underwaterJetEnergyDrain = bs.readF32(); // 0x354\n result.minJetEnergy = bs.readF32(); // 0x358\n result.maxJetForwardSpeed = bs.readF32(); // 0x35c\n result.maxJetHorizontalPercentage = bs.readF32(); // 0x360\n // [0x364 hardcoded to 0, not from stream]\n\n // 3. 2 optional DataBlock refs (readClassId pattern)\n result.jetEmitter = readDataBlockRef(bs); // 0x368 (jetEmitter @0x364)\n result.jetEffect = readDataBlockRef(bs); // 0x370 (jetEffect @0x36c)\n\n // 4. 9× F32 (offsets 0x374-0x394)\n result.runForce = bs.readF32(); // 0x374\n result.runEnergyDrain = bs.readF32(); // 0x378\n result.minRunEnergy = bs.readF32(); // 0x37c\n result.maxForwardSpeed = bs.readF32(); // 0x380\n result.maxBackwardSpeed = bs.readF32(); // 0x384\n result.maxSideSpeed = bs.readF32(); // 0x388\n result.maxUnderwaterForwardSpeed = bs.readF32(); // 0x38c\n result.maxUnderwaterBackwardSpeed = bs.readF32(); // 0x390\n result.maxUnderwaterSideSpeed = bs.readF32(); // 0x394\n\n // 5. 1× F32 (offset 0x39c)\n result.runSurfaceAngle = bs.readF32(); // 0x39c\n\n // 6. 8× F32 (offsets 0x3b8-0x3d4)\n result.recoverDelay = bs.readF32(); // 0x3b8\n result.recoverRunForceScale = bs.readF32(); // 0x3bc\n result.jumpForce = bs.readF32(); // 0x3c0\n result.jumpEnergyDrain = bs.readF32(); // 0x3c4\n result.minJumpEnergy = bs.readF32(); // 0x3c8\n result.minJumpSpeed = bs.readF32(); // 0x3cc\n result.maxJumpSpeed = bs.readF32(); // 0x3d0\n result.jumpSurfaceAngle = bs.readF32(); // 0x3d4\n\n // 7. readInt(7) → jumpDelay (offset 0x3d8)\n result.jumpDelay = bs.readInt(7);\n\n // 8. 6× F32 (offsets 0x3a0-0x3b4)\n result.horizMaxSpeed = bs.readF32(); // 0x3a0\n result.horizResistSpeed = bs.readF32(); // 0x3a4\n result.horizResistFactor = bs.readF32(); // 0x3a8\n result.upMaxSpeed = bs.readF32(); // 0x3ac\n result.upResistSpeed = bs.readF32(); // 0x3b0\n result.upResistFactor = bs.readF32(); // 0x3b4\n\n // 9. 9× F32 (offsets 0xd14-0xd34, far offsets = Tribes 2-specific fields)\n result.splashVelocity = bs.readF32(); // 0xd14\n result.splashAngle = bs.readF32(); // 0xd18\n result.splashFreqMod = bs.readF32(); // 0xd1c\n result.splashVelEpsilon = bs.readF32(); // 0xd20\n result.bubbleEmitTime = bs.readF32(); // 0xd24\n result.mediumSplashSoundVelocity = bs.readF32(); // 0xd28\n result.hardSplashSoundVelocity = bs.readF32(); // 0xd2c\n result.exitSplashSoundVelocity = bs.readF32(); // 0xd30\n result.footstepSplashHeight = bs.readF32(); // 0xd34\n\n // 10. 1× F32 (offset 0x3f4)\n result.minImpactSpeed = bs.readF32(); // 0x3f4\n\n // 11. Sound loop: 32 iterations (MaxSounds=0x20 in binary)\n // Binary: zeros 0x428+i*4, then flag + readClassId → 0x4a8+i*4\n const sounds: (number | null)[] = [];\n for (let i = 0; i < 32; i++) {\n sounds.push(readDataBlockRef(bs));\n }\n result.sounds = sounds;\n\n // 12. boxSize 3×F32 (offsets 0x528, 0x52c, 0x530)\n result.boxSize = bs.readPoint3F();\n\n // 13. footPuffEmitter + 2 F32s (offset 0xcf0, 0xcf4, 0xcf8)\n result.footPuffEmitter = readDataBlockRef(bs);\n result.footPuffNumParts = bs.readF32();\n result.footPuffRadius = bs.readF32();\n\n // 14. decalData + 1 F32 (offset 0xd00, 0x3f8)\n result.decalData = readDataBlockRef(bs);\n result.decalOffset = bs.readF32();\n\n // 15. dustEmitter + splash (offsets 0xd08, 0xd10)\n result.dustEmitter = readDataBlockRef(bs);\n result.splash = readDataBlockRef(bs);\n\n // 16. 3 splashEmitters (offsets 0xd44 + i*4)\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 17. 11× F32 (offsets 0x3fc-0x424). Names binary-verified against\n // initPersistFields: the two leading fields are the Tribes 2 heat\n // signature rates (retail player.cs: 1/4 and 1/3), then the ground\n // impact shake block. Demo values confirm: 0.25, 0.333…\n result.heatDecayPerSec = bs.readF32(); // 0x3fc\n result.heatIncreasePerSec = bs.readF32(); // 0x400\n result.groundImpactMinSpeed = bs.readF32(); // 0x404\n result.groundImpactShakeFreq = {\n x: bs.readF32(), // 0x408\n y: bs.readF32(), // 0x40c\n z: bs.readF32(), // 0x410\n };\n result.groundImpactShakeAmp = {\n x: bs.readF32(), // 0x414\n y: bs.readF32(), // 0x418\n z: bs.readF32(), // 0x41c\n };\n result.groundImpactShakeDuration = bs.readF32(); // 0x420\n result.groundImpactShakeFalloff = bs.readF32(); // 0x424\n\n return result;\n}\n\n// ============================================================\n// VehicleData (extends ShapeBaseData)\n// ============================================================\n\nfunction vehicleDataUnpack(bs: BitStream): VehicleDataBlock {\n const result: VehicleDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00609450 (Tribes2.exe).\n\n // 1. 2×F32 (body restitution/friction) → offsets 0x33c, 0x340\n result.bodyRestitution = bs.readF32();\n result.bodyFriction = bs.readF32();\n\n // 2. Loop of 2: impact sound DataBlock refs → offsets 0x334+i*4\n const impactSounds: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n impactSounds.push(readDataBlockRef(bs));\n }\n result.impactSounds = impactSounds;\n\n // 3. ~20 F32s for vehicle physics\n result.minImpactSpeed = bs.readF32(); // 0x37c\n result.softImpactSpeed = bs.readF32(); // 0x380\n result.hardImpactSpeed = bs.readF32(); // 0x384 (900 dec)\n result.minRollSpeed = bs.readF32(); // 0x388\n // Registered in the retail binary as \"maxSteerinAngle\" (engine typo);\n // we keep the corrected spelling.\n result.maxSteeringAngle = bs.readF32(); // 0x38c\n result.maxDrag = bs.readF32(); // 0x3a4\n result.minDrag = bs.readF32(); // 0x3a0\n result.jetForce = bs.readF32(); // 0x3a8\n result.jetEnergyDrain = bs.readF32(); // 0x3ac\n result.minJetEnergy = bs.readF32(); // 0x3b0\n result.cameraOffset = bs.readF32(); // 0x39c\n result.cameraLag = bs.readF32(); // 0x398\n result.triggerDustHeight = bs.readF32(); // 0x3c8\n result.dustHeight = bs.readF32(); // 0x3cc\n result.numDmgEmitterAreas = bs.readF32(); // 0x408\n result.exitSplashSoundVelocity = bs.readF32(); // 0x36c\n result.softSplashSoundVelocity = bs.readF32(); // 0x370\n result.mediumSplashSoundVelocity = bs.readF32(); // 0x374\n result.hardSplashSoundVelocity = bs.readF32(); // 0x378\n\n // 4. Loop of 5: water impact sound DataBlock refs → offsets 0x358+i*4\n const waterSounds: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n waterSounds.push(readDataBlockRef(bs));\n }\n result.waterSounds = waterSounds;\n\n // 5. dustEmitter DataBlock ref → offset 0x3c4\n result.dustEmitter = readDataBlockRef(bs);\n\n // 6. Loop of 3: damage emitter DataBlock refs → offsets 0x3dc+i*4\n const damageEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n damageEmitters.push(readDataBlockRef(bs));\n }\n result.damageEmitters = damageEmitters;\n\n // 7. Loop of 2: splash emitter DataBlock refs → offsets 0x414+i*4\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 8. 2×3 F32 damage emitter offsets (2 sets of x,y,z) → offsets 0x3e8-0x3f4\n result.damageEmitterOffset0 = bs.readPoint3F();\n result.damageEmitterOffset1 = bs.readPoint3F();\n\n // 9. 2 F32 damage level tolerance → offsets 0x400, 0x404\n result.damageLevelTolerance0 = bs.readF32();\n result.damageLevelTolerance1 = bs.readF32();\n\n // 10. 2 F32 splash params → offsets 0x41c, 0x420\n result.splashFreqMod = bs.readF32();\n result.splashVelEpsilon = bs.readF32();\n\n // 11. 2 F32 collision damage → offsets 0x390, 0x394\n result.collDamageThresholdVel = bs.readF32();\n result.collDamageMultiplier = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FlyingVehicleData (extends VehicleData)\n// ============================================================\n\nfunction flyingVehicleDataUnpack(bs: BitStream): FlyingVehicleDataBlock {\n const result: FlyingVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 2 sound refs\n result.jetActivateSound = readDataBlockRef(bs);\n result.jetDeactivateSound = readDataBlockRef(bs);\n\n // 4 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // Verified against decompiled binary FUN_0060fc40 — 16 F32s\n result.maneuveringForce = bs.readF32();\n result.horizontalSurfaceForce = bs.readF32();\n result.verticalSurfaceForce = bs.readF32();\n result.autoInputDamping = bs.readF32();\n result.steeringForce = bs.readF32();\n result.steeringRollForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.autoAngularForce = bs.readF32();\n result.rotationalDrag = bs.readF32();\n result.maxAutoSpeed = bs.readF32();\n result.autoLinearForce = bs.readF32();\n result.hoverHeight = bs.readF32();\n result.createHoverHeight = bs.readF32();\n result.minTrailSpeed = bs.readF32();\n result.vertThrustMultiple = bs.readF32();\n result.maxForwardSpeed = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// HoverVehicleData (extends VehicleData)\n// ============================================================\n\nfunction hoverVehicleDataUnpack(bs: BitStream): HoverVehicleDataBlock {\n const result: HoverVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 17 F32s\n result.dragForce = bs.readF32();\n result.mainThrustForce = bs.readF32();\n result.reverseThrustForce = bs.readF32();\n result.strafeThrustForce = bs.readF32();\n result.turboFactor = bs.readF32();\n result.stabLenMin = bs.readF32();\n result.stabLenMax = bs.readF32();\n result.stabSpringConstant = bs.readF32();\n result.stabDampingConstant = bs.readF32();\n result.gyroDrag = bs.readF32();\n result.normalForce = bs.readF32();\n result.restorativeForce = bs.readF32();\n result.steeringForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.pitchForce = bs.readF32();\n result.floatingThrustFactor = bs.readF32();\n result.brakingForce = bs.readF32();\n\n // 3×F32 (dustTrailOffset)\n result.dustTrailOffset = bs.readPoint3F();\n\n // 2 F32s\n result.dustTrailFreqMod = bs.readF32();\n result.triggerTrailHeight = bs.readF32();\n\n // 3 sound refs\n result.floatSound = readDataBlockRef(bs);\n result.thrustSound = readDataBlockRef(bs);\n result.turboSound = readDataBlockRef(bs);\n\n // 3 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // dustTrailEmitter ref\n result.dustTrailEmitter = readDataBlockRef(bs);\n\n // 3 F32s\n result.mainThrustEmitterFactor = bs.readF32();\n result.strafeThrustEmitterFactor = bs.readF32();\n result.reverseThrustEmitterFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// WheeledVehicleData (extends VehicleData)\n// ============================================================\n\nfunction wheeledVehicleDataUnpack(bs: BitStream): WheeledVehicleDataBlock {\n const result: WheeledVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 9 tire F32s\n result.tireRadius = bs.readF32();\n result.tireStaticFriction = bs.readF32();\n result.tireKineticFriction = bs.readF32();\n result.tireRestitution = bs.readF32();\n result.tireLateralForce = bs.readF32();\n result.tireLateralDamping = bs.readF32();\n result.tireLateralRelaxation = bs.readF32();\n result.tireLongitudinalForce = bs.readF32();\n result.tireLongitudinalDamping = bs.readF32();\n\n // tire emitter ref\n result.tireEmitter = readDataBlockRef(bs);\n\n // 4 sound refs\n result.jetSound = readDataBlockRef(bs);\n result.engineSound = readDataBlockRef(bs);\n result.squealSound = readDataBlockRef(bs);\n result.wadeSound = readDataBlockRef(bs);\n\n // 11 F32s\n result.spring = bs.readF32();\n result.springDamping = bs.readF32();\n result.springLength = bs.readF32();\n result.brakeTorque = bs.readF32();\n result.engineTorque = bs.readF32();\n result.engineBrake = bs.readF32();\n result.maxWheelSpeed = bs.readF32();\n result.steeringAngle = bs.readF32();\n result.steeringReturn = bs.readF32();\n result.steeringDamping = bs.readF32();\n result.powerSteeringFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// StaticShapeData (extends ShapeBaseData)\n// ============================================================\n\nfunction staticShapeDataUnpack(bs: BitStream): StaticShapeDataBlock {\n const result: StaticShapeDataBlock = shapeBaseDataUnpack(bs);\n result.noIndividualDamage = bs.readFlag();\n result.dynamicTypeField = bs.readS32();\n return result;\n}\n\n// ============================================================\n// TurretData (extends StaticShapeData)\n// ============================================================\n\nfunction turretDataUnpack(bs: BitStream): TurretDataBlock {\n const result: TurretDataBlock = staticShapeDataUnpack(bs);\n // Verified against decompiled binary FUN_00654190\n result.thetaMin = bs.readF32(); // 0x33c\n result.thetaMax = bs.readF32(); // 0x340\n result.thetaNull = bs.readF32(); // 0x344\n result.neverUpdateControl = bs.readFlag(); // 0x34c\n result.primaryAxis = bs.readRangedU32(0, 3); // 0x348 (FUN_0043f120(4) = 2 bits)\n result.maxCapacitorEnergy = bs.readF32(); // 0x35c\n result.capacitorRechargeRate = bs.readF32(); // 0x360\n return result;\n}\n\n// ============================================================\n// TurretImageData (extends ShapeBaseImageData)\n// ============================================================\n\nfunction turretImageDataUnpack(bs: BitStream): TurretImageDataBlock {\n const result: TurretImageDataBlock = shapeBaseImageDataUnpack(bs);\n // Verified against decompiled binary FUN_00654850\n result.activationMS = bs.readInt(8); // << 5 on store (0x1c04)\n result.deactivateDelayMS = bs.readInt(8); // << 5 on store (0x1c08)\n result.degPerSecTheta = bs.readRangedU32(0, 1080); // 0x1c10 (FUN_0043f120(0x439))\n result.degPerSecPhi = bs.readRangedU32(0, 1080); // 0x1c14\n result.dontFireInsideDamageRadius = bs.readFlag(); // 0x1c1c\n result.damageRadius = bs.readF32(); // 0x1c20\n result.useCapacitor = bs.readFlag(); // 0x1c24 (NOT a DataBlockRef)\n return result;\n}\n\n// ============================================================\n// ItemData (extends ShapeBaseData)\n// ============================================================\n\nfunction itemDataUnpack(bs: BitStream): ItemDataBlock {\n const result: ItemDataBlock = shapeBaseDataUnpack(bs);\n\n // 2×readFloat(10)\n result.friction = bs.readFloat(10);\n result.elasticity = bs.readFloat(10);\n\n // flag(sticky)\n result.sticky = bs.readFlag();\n\n // flag(gravityMod!=1) then readFloat(10)\n if (bs.readFlag()) result.gravityMod = bs.readFloat(10);\n\n // flag(maxVelocity!=-1) then F32\n if (bs.readFlag()) result.maxVelocity = bs.readF32();\n\n // flag(hasLight); if true: readInt(2) + 4×readFloat(7) + S32 + F32 + flag\n if (bs.readFlag()) {\n result.lightType = bs.readInt(2);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n result.lightTime = bs.readS32();\n result.lightRadius = bs.readF32();\n result.lightOnlyStatic = bs.readFlag();\n }\n\n return result;\n}\n\n// ============================================================\n// ProjectileData (extends GameBaseData — 0 parent bits)\n// ============================================================\n\nfunction projectileDataUnpack(bs: BitStream): ProjectileDataBlock {\n const result: ProjectileDataBlock = {};\n\n // readString (projectileName)\n result.projectileShapeName = bs.readString();\n\n // 2×S32\n result.faceViewerLinkTime = bs.readS32();\n result.lifetime = bs.readS32();\n\n // flag(faceViewer)\n result.faceViewer = bs.readFlag();\n\n // flag(nonDefaultScale); if true: 3×F32\n if (bs.readFlag()) {\n result.scale = bs.readPoint3F();\n }\n\n // 9 readDataBlockRef fields in pack order (verified against decompiled\n // Tribes2.exe FUN_00631010 / FUN_006303f0 struct offsets).\n result.baseEmitter = readDataBlockRef(bs); // 0xe8 ParticleEmitterData\n result.delayEmitter = readDataBlockRef(bs); // 0xec ParticleEmitterData\n result.bubbleEmitter = readDataBlockRef(bs); // 0xf0 ParticleEmitterData\n result.explosion = readDataBlockRef(bs); // 0xf4 ExplosionData\n result.underwaterExplosion = readDataBlockRef(bs); // 0xf8 ExplosionData\n result.splash = readDataBlockRef(bs); // 0xfc SplashData\n result.sound = readDataBlockRef(bs); // 0x100 AudioProfile (in-flight)\n result.wetFireSound = readDataBlockRef(bs); // 0x104 AudioProfile\n result.fireSound = readDataBlockRef(bs); // 0x108 AudioProfile\n\n // 6 decal refs (loop)\n const decals: (number | null)[] = [];\n for (let i = 0; i < 6; i++) {\n decals.push(readDataBlockRef(bs));\n }\n result.decals = decals;\n\n // flag(hasLight); if true: readFloat(8) + 3×readFloat(7)\n if (bs.readFlag()) {\n result.lightRadius = bs.readFloat(8);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // flag(hasUnderwaterColor); if true: 3×readFloat(7)\n if (bs.readFlag()) {\n result.underwaterLightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // explodeOnWaterImpact: 8-bit bool via stream->write(sizeof(bool))\n // (confirmed in decompiled binary FUN_00631360: read(1,&var) at offset 0xcc)\n result.explodeOnWaterImpact = readBool(bs);\n // depthTolerance: F32\n result.depthTolerance = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// LinearProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction linearProjectileDataUnpack(bs: BitStream): LinearProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_0062bea0 (reads in struct-offset order), and initPersistFields\n // FUN_0062b3c0 maps names to those offsets:\n // 0x138 dryVelocity, 0x13c wetVelocity, 0x140 fizzleTimeMS,\n // 0x144 lifetimeMS, 0x148 explodeOnDeath,\n // 0x14c reflectOnWaterImpactAngle, 0x150 deflectionOnWaterImpact,\n // 0x154 fizzleUnderwaterMS, 0x158 activateDelayMS,\n // 0x15c doDynamicClientHits\n const result: LinearProjectileDataBlock = projectileDataUnpack(bs);\n\n // 2×F32 (0x138, 0x13c)\n result.dryVelocity = bs.readF32();\n result.wetVelocity = bs.readF32();\n\n // 2×U32 in milliseconds, tick-rounded by onAdd (0x140, 0x144)\n result.fizzleTimeMS = bs.readU32();\n result.lifetimeMS = bs.readU32();\n\n // flag (0x148)\n result.explodeOnDeath = bs.readFlag();\n\n // 2×readRangedU32(0,90) in degrees (0x14c, 0x150)\n result.reflectOnWaterImpactAngle = bs.readRangedU32(0, 90);\n result.deflectionOnWaterImpact = bs.readRangedU32(0, 90);\n\n // 2×U32 (0x154, 0x158)\n result.fizzleUnderwaterMS = bs.readU32();\n result.activateDelayMS = bs.readU32();\n\n // flag (0x15c)\n result.doDynamicClientHits = bs.readFlag();\n\n return result;\n}\n\n// ============================================================\n// GrenadeProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction grenadeProjectileDataUnpack(\n bs: BitStream,\n): GrenadeProjectileDataBlock {\n const result: GrenadeProjectileDataBlock = projectileDataUnpack(bs);\n\n result.armingDelayMS = bs.readS32();\n result.muzzleVelocity = bs.readF32();\n result.grenadeElasticity = bs.readF32();\n result.grenadeFriction = bs.readF32();\n result.drag = bs.readF32();\n result.density = bs.readF32();\n result.gravityMod = bs.readF32();\n result.lifetimeMS = bs.readS32();\n\n return result;\n}\n\n// ============================================================\n// SeekerProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction seekerProjectileDataUnpack(bs: BitStream): SeekerProjectileDataBlock {\n const result: SeekerProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary (lines 430494-430580)\n // 10 F32/S32 (offsets 0x138-0x164)\n result.lifetimeMS = bs.readS32(); // 0x138\n result.muzzleVelocity = bs.readF32(); // 0x13c\n result.turningSpeed = bs.readF32(); // 0x140\n result.proximityRadius = bs.readF32(); // 0x14c\n result.terrainAvoidanceSpeed = bs.readF32(); // 0x150\n result.terrainScanAhead = bs.readF32(); // 0x154\n result.terrainHeightFail = bs.readF32(); // 0x158\n result.terrainAvoidanceRadius = bs.readF32(); // 0x15c\n result.flareDistance = bs.readF32(); // 0x160\n result.flareAngle = bs.readF32(); // 0x164\n\n // useFlechette — 8-bit bool via stream->read(1, &var) at offset 0x168\n // (confirmed: read(1, &cStack_21) = 1 BYTE = 8 bits, NOT readF32)\n result.useFlechette = readBool(bs);\n\n // 2 F32 (offsets 0x144, 0x148)\n result.maxVelocity = bs.readF32();\n result.acceleration = bs.readF32();\n\n // 2 S32 (offsets 0x16c, 0x180)\n result.flechetteDelayMs = bs.readS32();\n result.exhaustTimeMs = bs.readS32();\n\n // 2 readString (offsets 0x184, 0x190)\n result.exhaustNodeName = bs.readString();\n result.casingShapeName = bs.readString();\n\n // 3 conditional DataBlock refs (offsets 0x18c, 0x174, 0x17c)\n result.casingDebris = readDataBlockRef(bs);\n result.puffEmitter = readDataBlockRef(bs);\n result.exhaustEmitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SniperProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction sniperProjectileDataUnpack(bs: BitStream): SniperProjectileDataBlock {\n const result: SniperProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00641d40\n // 2×F32 (offsets 0x138, 0x13c)\n result.maxRifleRange = bs.readF32();\n result.rifleHeadMultiplier = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x140)\n result.beamColor = readColorF(bs);\n\n // 9×F32 (offsets 0x150, 0x154, 0x158, 0x168, 0x15c, 0x160, 0x164, 0x16c, 0x170)\n result.fadeTime = bs.readF32();\n result.startBeamWidth = bs.readF32();\n result.endBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x178)\n result.lightColor = readColorF(bs);\n\n // F32 (offset 0x174)\n result.lightRadius = bs.readF32();\n\n // 12 readString (ST_NUM_TEX=0xc)\n const textures: string[] = [];\n for (let i = 0; i < 12; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// ShockLanceProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction shockLanceProjectileDataUnpack(\n bs: BitStream,\n): ShockLanceProjectileDataBlock {\n // Verified against decompiled binary FUN_0064e840\n const result: ShockLanceProjectileDataBlock = projectileDataUnpack(bs);\n\n // 7 F32 (offsets 0x138, 0x13c, 0x160, 0x164, 0x168, 0x16c, 0x170)\n result.zapDuration = bs.readF32();\n result.boltLength = bs.readF32();\n result.numParts = bs.readF32();\n result.lightningFreq = bs.readF32();\n result.lightningDensity = bs.readF32();\n result.lightningAmp = bs.readF32();\n result.lightningWidth = bs.readF32();\n\n // DataBlockRef (shockwave at offset 0x190)\n result.shockwave = readDataBlockRef(bs);\n\n // 2×4 loop: startWidth[2], endWidth[2], boltSpeed[2], texWrap[2]\n // (offsets 0x140+i*4, 0x148+i*4, 0x150+i*4, 0x158+i*4)\n const startWidth: number[] = [];\n const endWidth: number[] = [];\n const boltSpeed: number[] = [];\n const texWrap: number[] = [];\n for (let i = 0; i < 2; i++) {\n startWidth.push(bs.readF32());\n endWidth.push(bs.readF32());\n boltSpeed.push(bs.readF32());\n texWrap.push(bs.readF32());\n }\n result.startWidth = startWidth;\n result.endWidth = endWidth;\n result.boltSpeed = boltSpeed;\n result.texWrap = texWrap;\n\n // 4 readString (texture[4] at offset 0x174)\n const slTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n slTextures.push(bs.readString());\n }\n result.textures = slTextures;\n\n // DataBlockRef (emitter at offset 0x188)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// ELFProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction elfProjectileDataUnpack(bs: BitStream): ELFProjectileDataBlock {\n // Verified against decompiled binary: initPersistFields FUN_0064a860,\n // unpackData FUN_0064ae00. 6×F32 into offsets 0x138 (beamRange) then\n // 0x154..0x164 (the beam/lightning fields), 3 readString (textures),\n // then flag + ranged id (emitter). Field names were previously\n // fabricated; the bit layout was already correct.\n const result: ELFProjectileDataBlock = projectileDataUnpack(bs);\n\n // 6×F32 (offsets 0x138, 0x154, 0x158, 0x15c, 0x160, 0x164)\n result.beamRange = bs.readF32();\n result.mainBeamWidth = bs.readF32();\n result.mainBeamSpeed = bs.readF32();\n result.mainBeamRepeat = bs.readF32();\n result.lightningWidth = bs.readF32();\n result.lightningDist = bs.readF32();\n\n // 3 readString (textures[0..2] at 0x140)\n const textures: string[] = [];\n for (let i = 0; i < 3; i++) textures.push(bs.readString());\n result.textures = textures;\n\n // 1 readDataBlockRef (emitter at 0x150)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// RepairProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction repairProjectileDataUnpack(bs: BitStream): RepairProjectileDataBlock {\n // Verified against decompiled binary: initPersistFields FUN_00644910,\n // unpackData FUN_00644c40 — 8×32-bit reads in struct-offset order\n // 0x138, 0x13c, 0x140, 0x148, 0x144, 0x14c, 0x150, 0x154, then 2\n // readString (textures at 0x158). numSegments (0x140) is registered\n // as an S32 (persist type 1) — the old decode read its raw bits as a\n // float. Field names were previously fabricated.\n const result: RepairProjectileDataBlock = projectileDataUnpack(bs);\n\n result.beamRange = bs.readF32();\n result.beamWidth = bs.readF32();\n result.numSegments = bs.readS32();\n result.beamSpeed = bs.readF32();\n result.texRepeat = bs.readF32();\n result.blurFreq = bs.readF32();\n result.blurLifetime = bs.readF32();\n result.cutoffAngle = bs.readF32();\n\n // 2 readString (textures[0..1]; retail: redbump2 / redflare)\n const textures: string[] = [];\n for (let i = 0; i < 2; i++) textures.push(bs.readString());\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// TargetProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction targetProjectileDataUnpack(bs: BitStream): TargetProjectileDataBlock {\n const result: TargetProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_006477f0\n // F32 (offset 0x138)\n result.maxRifleRange = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x13c)\n result.beamColor = readColorF(bs);\n\n // 7×F32 (offsets 0x14c, 0x15c, 0x150, 0x154, 0x158, 0x160, 0x164)\n result.startBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // 4 readString (textureName[4] at offset 0x16c)\n const targetTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n targetTextures.push(bs.readString());\n }\n result.textures = targetTextures;\n\n return result;\n}\n\n// ============================================================\n// TracerProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction tracerProjectileDataUnpack(bs: BitStream): TracerProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_00640160 (reads in struct-offset order), and initPersistFields\n // FUN_0063fcb0 maps names to those offsets:\n // 0x168 tracerLength, 0x16c tracerAlpha (bool), 0x170 tracerMinPixels,\n // 0x174 tracerColor, 0x184 tracerWidth, 0x188 crossViewAng,\n // 0x18c crossSize, 0x190 renderCross, 0x194[2] tracerTex\n const result: TracerProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // 3 F32 (offsets 0x168, 0x184, 0x170)\n result.tracerLength = bs.readF32();\n result.tracerWidth = bs.readF32();\n result.tracerMinPixels = bs.readF32();\n\n // readBool 8-bit (offset 0x16c)\n result.tracerAlpha = readBool(bs);\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x174)\n result.tracerColor = readColorF(bs);\n\n // 2 F32 (offsets 0x188, 0x18c)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n\n // readBool 8-bit (offset 0x190)\n result.renderCross = readBool(bs);\n\n // 2 readString (loop count=2 at offset 0x194)\n result.tracerTex0 = bs.readString();\n result.tracerTex1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// EnergyProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction energyProjectileDataUnpack(bs: BitStream): EnergyProjectileDataBlock {\n // Verified against decompiled binary FUN_00694d80 — parent is FUN_00633cf0\n // (GrenadeProjectileData). 7×F32 into offsets 0x168..0x180, then 2\n // readString into 0x158/0x15c; names from initPersistFields FUN_00694b40.\n const result: EnergyProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 7×F32 (offsets 0x168, 0x16c, 0x170, 0x174, then blurColor rgb at\n // 0x178/0x17c/0x180 — alpha is not transmitted)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n result.blurLifetime = bs.readF32();\n result.blurWidth = bs.readF32();\n result.blurColor = {\n r: bs.readF32(),\n g: bs.readF32(),\n b: bs.readF32(),\n a: 1,\n };\n\n // 2 readString (offsets 0x158, 0x15c)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// LinearFlareProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction linearFlareProjectileDataUnpack(\n bs: BitStream,\n): LinearFlareProjectileDataBlock {\n // Verified against decompiled binary FUN_0063dc80\n const result: LinearFlareProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // F32 (offset 0x168)\n result.numFlares = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x178)\n result.flareColor = readColorF(bs);\n\n // 2 readString (offsets 0x188, 0x18c)\n result.flareTexture = bs.readString();\n result.smokeTexture = bs.readString();\n\n // 3×F32 loop (offset 0x16c, count=3)\n result.size = bs.readF32();\n result.flareModTexture = bs.readF32();\n result.smokeSize = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// BombProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction bombProjectileDataUnpack(bs: BitStream): BombProjectileDataBlock {\n const result: BombProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 6×F32\n result.smokeDist = bs.readF32();\n result.noSmoke = bs.readF32();\n result.boomTime = bs.readF32();\n result.casingDist = bs.readF32();\n result.smokeCushion = bs.readF32();\n result.noSmokeCounter = bs.readF32();\n\n // 2 readString\n result.smokeTexture = bs.readString();\n result.bombTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// FlareProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction flareProjectileDataUnpack(bs: BitStream): FlareProjectileDataBlock {\n // Verified against decompiled binary FUN_006872f0\n const result: FlareProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // F32 (offset 0x158)\n result.size = bs.readF32();\n\n // readBool 8-bit (offset 0x160, read(1,...))\n result.useLensFlare = readBool(bs);\n\n // 2 readString loop (offset 0x164, count=2)\n result.flareTexture = bs.readString();\n result.lensFlareTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ExplosionData (extends GameBaseData)\n// ============================================================\n\nfunction explosionDataUnpack(bs: BitStream): ExplosionDataBlock {\n const result: ExplosionDataBlock = {};\n\n // readString\n result.dtsFileName = bs.readString();\n\n // 2 readDataBlockRef\n result.soundProfile = readDataBlockRef(bs);\n result.particleEmitter = readDataBlockRef(bs);\n\n // readInt(14) + F32 + flag\n result.particleDensity = bs.readInt(14);\n result.particleRadius = bs.readF32();\n result.faceViewer = bs.readFlag();\n\n // flag(scale); if true: 3×readInt(16)\n if (bs.readFlag()) {\n result.explosionScale = {\n x: bs.readInt(16),\n y: bs.readInt(16),\n z: bs.readInt(16),\n };\n }\n\n // readInt(14) + 4×readRangedU32 + 2×readRangedU32(0,1000) + readInt(14) + readRangedU32(0,10000)\n result.playSpeed = bs.readInt(14);\n result.debrisThetaMin = bs.readRangedU32(0, 180);\n result.debrisThetaMax = bs.readRangedU32(0, 180);\n result.debrisPhiMin = bs.readRangedU32(0, 360);\n result.debrisPhiMax = bs.readRangedU32(0, 360);\n result.debrisMinVelocity = bs.readRangedU32(0, 1000);\n result.debrisMaxVelocity = bs.readRangedU32(0, 1000);\n result.debrisNum = bs.readInt(14);\n result.debrisVariance = bs.readRangedU32(0, 10000);\n\n // 4×readInt(16) + F32 + 2 flags\n result.delayMS = bs.readInt(16);\n result.delayVariance = bs.readInt(16);\n result.lifetimeMS = bs.readInt(16);\n result.lifetimeVariance = bs.readInt(16);\n result.offset = bs.readF32();\n result.shakeCamera = bs.readFlag();\n result.hasLight = bs.readFlag();\n\n // 9×F32\n result.camShakeFreq = bs.readPoint3F();\n result.camShakeAmp = bs.readPoint3F();\n result.camShakeDuration = bs.readF32();\n result.camShakeRadius = bs.readF32();\n result.camShakeFalloff = bs.readF32();\n\n // readDataBlockRef(shockwave) + 1 debris ref + 4 emitter refs + 5 sub-explosion refs\n result.shockwave = readDataBlockRef(bs);\n result.debris = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n const subExplosions: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n subExplosions.push(readDataBlockRef(bs));\n }\n result.subExplosions = subExplosions;\n\n // readRangedU32(0,4) count; loop: readFloat(8) times + 3×readRangedU32(0,16000) sizes\n const timeCount = bs.readRangedU32(0, 4);\n const times: number[] = [];\n for (let i = 0; i < timeCount; i++) {\n times.push(bs.readFloat(8));\n }\n result.times = times;\n const sizes: { x: number; y: number; z: number }[] = [];\n for (let i = 0; i < timeCount; i++) {\n sizes.push({\n x: bs.readRangedU32(0, 16000),\n y: bs.readRangedU32(0, 16000),\n z: bs.readRangedU32(0, 16000),\n });\n }\n result.sizes = sizes;\n\n return result;\n}\n\n// ============================================================\n// DebrisData (extends GameBaseData)\n// ============================================================\n\nfunction debrisDataUnpack(bs: BitStream): DebrisDataBlock {\n // Field order confirmed from decompiled binary FUN_006844d0\n const result: DebrisDataBlock = {};\n\n result.elasticity = bs.readF32(); // 0x50\n result.friction = bs.readF32(); // 0x4c\n result.numBounces = bs.readS32(); // 0x5c\n result.bounceVariance = bs.readS32(); // 0x60\n result.minSpinSpeed = bs.readF32(); // 0x64\n result.maxSpinSpeed = bs.readF32(); // 0x68\n\n // 4 bools via stream->write(sizeof(bool)) = 8 bits each (0x6c-0x6f)\n result.render2D = readBool(bs);\n result.explodeOnMaxBounce = readBool(bs);\n result.staticOnMaxBounce = readBool(bs);\n result.snapOnMaxBounce = readBool(bs);\n\n result.lifetime = bs.readF32(); // 0x54\n result.lifetimeVariance = bs.readF32(); // 0x58\n\n // The binary writes minSpinSpeed/maxSpinSpeed (0x64/0x68) a second\n // time here; the client's second read overwrites the first, so do the\n // same.\n result.minSpinSpeed = bs.readF32();\n result.maxSpinSpeed = bs.readF32();\n\n result.velocity = bs.readF32(); // 0x44\n result.velocityVariance = bs.readF32(); // 0x48\n\n // 2 bools via stream->write(sizeof(bool)) = 8 bits each (0x70, 0x71)\n result.useRadiusMass = readBool(bs);\n result.fade = readBool(bs);\n\n result.baseRadius = bs.readF32(); // 0x74\n result.gravModifier = bs.readF32(); // 0x78\n result.terminalVelocity = bs.readF32(); // 0x7c\n\n result.ignoreWater = readBool(bs); // 0x80 (8-bit bool)\n\n // 2 readString — names binary-verified: 0x8c is registered as\n // `texture`, 0x84 as `shapeName` (read in that wire order)\n result.texture = bs.readString(); // 0x8c\n result.shapeName = bs.readString(); // 0x84\n\n // 2 emitter refs (loop at 0xa4, 0xa8) + 1 explosion ref (0x94)\n result.emitter0 = readDataBlockRef(bs);\n result.emitter1 = readDataBlockRef(bs);\n result.explosion = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SplashData (extends GameBaseData)\n// ============================================================\n\nfunction splashDataUnpack(bs: BitStream): SplashDataBlock {\n const result: SplashDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = bs.readPoint3F();\n\n // ~15 F32/S32 values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n result.texFactor = bs.readF32();\n result.ejectionFreq = bs.readF32();\n result.ejectionAngle = bs.readF32();\n result.ringLifetime = bs.readF32();\n result.startRadius = bs.readF32();\n\n // explosion ref + 3 emitter refs\n result.explosion = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.foamTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ShockwaveData (extends GameBaseData)\n// ============================================================\n\nfunction shockwaveDataUnpack(bs: BitStream): ShockwaveDataBlock {\n const result: ShockwaveDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = bs.readPoint3F();\n\n // ~17 F32/S32/bool values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.numVertSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.verticalCurve = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n // 5 bools via stream->write(sizeof(bool)) = 8 bits each\n // (confirmed at offsets 0x98-0x9c in binary, using read(1,&var) pattern)\n result.is2D = readBool(bs);\n result.orientToNormal = readBool(bs);\n result.mapToTerrain = readBool(bs);\n result.renderBottom = readBool(bs);\n result.renderSquare = readBool(bs);\n\n // 3 emitter refs\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.mapToTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmitterData (extends GameBaseData)\n// ============================================================\n\nfunction particleEmitterDataUnpack(bs: BitStream): ParticleEmitterDataBlock {\n const result: ParticleEmitterDataBlock = {};\n\n // 4 readInt(various)\n result.ejectionPeriodMS = bs.readInt(10);\n result.periodVarianceMS = bs.readInt(10);\n result.ejectionVelocity = bs.readInt(16);\n result.velocityVariance = bs.readInt(14);\n\n // flag then readInt(16)\n if (bs.readFlag()) {\n result.ejectionOffset = bs.readInt(16);\n }\n\n // 2×readRangedU32(0,180)\n result.thetaMin = bs.readRangedU32(0, 180);\n result.thetaMax = bs.readRangedU32(0, 180);\n\n // 2 conditional readRangedU32(0,360)\n if (bs.readFlag()) result.phiReferenceVel = bs.readRangedU32(0, 360);\n if (bs.readFlag()) result.phiVariance = bs.readRangedU32(0, 360);\n\n // 3 flags\n result.overrideAdvances = bs.readFlag();\n result.orientParticles = bs.readFlag();\n result.orientOnVelocity = bs.readFlag();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // 2 flags\n result.useEmitterSizes = bs.readFlag();\n result.useEmitterColors = bs.readFlag();\n\n // U32 count (4 bytes) + per-particle: flag(1b) + conditional readClassId(11b)\n // Verified against decompiled binary FUN_006222a0:\n // read(4, &count) → U32 count\n // for each: readFlag → if true: FUN_00436d10 (readClassId, 11 bits); else: 0xFFFFFFFF\n // particleEngine.cc sizes the vector straight from the count (no cap);\n // each entry is at least the 1-bit presence flag.\n const particleCount = readCheckedCount(\n bs,\n 1,\n \"ParticleEmitterData particle count\",\n );\n const particles: (number | null)[] = [];\n for (let i = 0; i < particleCount; i++) {\n particles.push(readDataBlockRef(bs));\n }\n result.particles = particles;\n\n return result;\n}\n\n// ============================================================\n// ParticleData (extends GameBaseData)\n// ============================================================\n\nfunction particleDataUnpack(bs: BitStream): ParticleDataBlock {\n const result: ParticleDataBlock = {};\n\n // readFloat(10) + flag then F32\n result.dragCoefficient = bs.readFloat(10);\n if (bs.readFlag()) result.windCoefficient = bs.readF32();\n\n // readSignedFloat(12)\n result.gravityCoefficient = bs.readSignedFloat(12);\n\n // readFloat(9) + flag then F32\n result.inheritedVelFactor = bs.readFloat(9);\n if (bs.readFlag()) result.constantAcceleration = bs.readF32();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // flag then F32 (spinSpeed at offset 0x58, conditional)\n if (bs.readFlag()) result.spinSpeed = bs.readF32();\n\n // flag then 2×readInt(11) (spinRandomMin/Max at 0x5c/0x60)\n // Verified against decompiled binary FUN_006232d0:\n // spinRandom conditional checks BOTH defaults, reads 11-bit values (subtract 1000)\n if (bs.readFlag()) {\n result.spinRandomMin = bs.readInt(11);\n result.spinRandomMax = bs.readInt(11);\n }\n\n // useInvAlpha — always read (1-bit flag at offset 0x64)\n // NOT inside the spinRandom conditional (confirmed in binary: separate readFlag at line 416229)\n result.useInvAlpha = bs.readFlag();\n\n // readInt(2) count(+1); per key: 4×readFloat(7) + readFloat(14) + readFloat(8)\n const numKeys = bs.readInt(2) + 1;\n const keys: ParticleKey[] = [];\n for (let i = 0; i < numKeys; i++) {\n keys.push({\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n size: bs.readFloat(14),\n time: bs.readFloat(8),\n });\n }\n result.keys = keys;\n\n // readInt(6) texCount; per tex: readString. The writer only emits up\n // to PDC_MAX_TEX names, so a larger count means the stream is corrupt.\n const texCount = bs.readInt(6);\n if (texCount > ParticleDataMaxTextures) {\n throw new Error(`Invalid ParticleData texture count: ${texCount}`);\n }\n const textures: string[] = [];\n for (let i = 0; i < texCount; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// AudioDescription (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioDescriptionUnpack(bs: BitStream): AudioDescriptionDataBlock {\n const result: AudioDescriptionDataBlock = {};\n\n // readFloat(6)\n result.volume = bs.readFloat(6);\n\n // flag(looping); if true: 3×S32\n result.isLooping = bs.readFlag();\n if (result.isLooping) {\n result.loopCount = bs.readS32();\n result.minLoopGap = bs.readS32();\n result.maxLoopGap = bs.readS32();\n }\n\n // flag(is3D); if true: 2×F32 + 2×readInt(9) + readFloat(6) + readNormalVector(8) + F32\n // Verified: decompiled FUN_0040c1a0 has NO isStreaming flag between isLooping and is3D.\n // Offsets: isLooping=0x40, is3D=0x41 — consecutive with no gap.\n result.is3D = bs.readFlag();\n if (result.is3D) {\n result.referenceDistance = bs.readF32();\n result.maxDistance = bs.readF32();\n result.coneInsideAngle = bs.readInt(9);\n result.coneOutsideAngle = bs.readInt(9);\n result.coneOutsideVolume = bs.readFloat(6);\n result.coneVector = bs.readNormalVector(8);\n result.environmentLevel = bs.readF32();\n }\n\n // readInt(3) — type\n result.type = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// AudioProfile (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioProfileUnpack(bs: BitStream): AudioProfileDataBlock {\n const result: AudioProfileDataBlock = {};\n\n // Verified: decompiled FUN_0040c7f0 reads 3 DataBlock refs + 1 string.\n // Offsets: 0x48 (description), 0x4c (effect/environment), 0x50 (sampleEnvironment)\n result.description = readDataBlockRef(bs);\n result.environment = readDataBlockRef(bs);\n result.sampleEnvironment = readDataBlockRef(bs);\n\n // readString (filename, .wav appended on read)\n result.filename = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// AudioEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioEnvironmentUnpack(bs: BitStream): AudioEnvironmentDataBlock {\n // Verified against decompiled binary FUN_0040b530\n const result: AudioEnvironmentDataBlock = {};\n\n // flag(useRoom) → offset 0x3c\n result.useRoom = bs.readFlag();\n if (result.useRoom) {\n // readRangedU32(0, 26) → offset 0x40 (FUN_0043f120(0x1b=27), rangeSize=27, max=26)\n result.room = bs.readRangedU32(0, 26);\n } else {\n // 13 fields inside !useRoom branch (binary offsets 0x44-0x7c)\n result.roomHF = readRangedS32(bs, -10000, 0); // 0x44\n result.reflections = readRangedS32(bs, -10000, 10000); // 0x48\n result.reverb = readRangedS32(bs, -10000, 2000); // 0x4c\n result.roomRolloffFactor = readRangedF32(bs, 0.1, 10, 8); // 0x50\n result.decayTime = readRangedF32(bs, 0.1, 20, 8); // 0x54\n result.decayHFRatio = readRangedF32(bs, 0.1, 20, 8); // 0x58\n result.reflectionsDelay = readRangedF32(bs, 0, 0.3, 9); // 0x5c\n result.reverbDelay = readRangedF32(bs, 0, 0.1, 7); // 0x60\n result.roomVolume = readRangedS32(bs, -10000, 0); // 0x64\n // Names binary-verified: initPersistFields maps 0x6c damping,\n // 0x70 environmentSize, 0x74 environmentDiffusion, 0x78 airAbsorption.\n result.damping = readRangedF32(bs, 0, 1, 9); // 0x6c (9 bits, confirmed in binary)\n result.environmentSize = readRangedF32(bs, 0, 2, 10); // 0x70 (10 bits, confirmed in binary)\n result.environmentDiffusion = readRangedF32(bs, 1, 100, 8); // 0x74 (8 bits, confirmed in binary)\n result.airAbsorption = readRangedF32(bs, 0, 1, 10); // 0x78 (10 bits, confirmed in binary)\n result.flags = bs.readInt(6); // 0x7c\n }\n\n // Trailing field: always present after both branches (offset 0x68 =\n // effectVolume per initPersistFields)\n result.effectVolume = readRangedF32(bs, 0, 1, 8);\n\n return result;\n}\n\n// ============================================================\n// AudioSampleEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioSampleEnvironmentUnpack(\n bs: BitStream,\n): AudioSampleEnvironmentDataBlock {\n const result: AudioSampleEnvironmentDataBlock = {};\n\n // Series of rangedS32 and rangedF32 values + readInt(3)\n result.direct = readRangedS32(bs, -10000, 1000);\n result.directHF = readRangedS32(bs, -10000, 0);\n result.room = readRangedS32(bs, -10000, 1000);\n result.roomHF = readRangedS32(bs, -10000, 0);\n result.obstruction = readRangedF32(bs, 0, 1, 9);\n result.obstructionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusion = readRangedF32(bs, 0, 1, 9);\n result.occlusionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusionRoomRatio = readRangedF32(bs, 0, 10, 9);\n result.roomRolloff = readRangedF32(bs, 0, 10, 9);\n result.airAbsorption = readRangedF32(bs, 0, 10, 9);\n result.outsideVolumeHF = readRangedS32(bs, -10000, 0);\n result.flags = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// DecalData (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction decalDataUnpack(bs: BitStream): DecalDataBlock {\n return {\n sizeX: bs.readF32(),\n sizeY: bs.readF32(),\n textureName: bs.readString(),\n };\n}\n\n// ============================================================\n// CameraData (extends ShapeBaseData) — no additional fields\n// ============================================================\n\nfunction cameraDataUnpack(bs: BitStream): CameraDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// SensorData — empty body\n// ============================================================\n\nfunction sensorDataUnpack(_bs: BitStream): SensorDataBlock {\n return {};\n}\n\n// ============================================================\n// TriggerData — S32(tickPeriodMS)\n// ============================================================\n\nfunction triggerDataUnpack(bs: BitStream): TriggerDataBlock {\n return { tickPeriodMS: bs.readS32() };\n}\n\n// ============================================================\n// ForceFieldBareData\n// ============================================================\n\nfunction forceFieldBareDataUnpack(bs: BitStream): ForceFieldBareDataBlock {\n // Verified against decompiled binary FUN_00675580\n const result: ForceFieldBareDataBlock = {};\n\n // 3 S32/F32 (offsets 0x44, 0x48, 0x4c)\n result.fadeMS = bs.readS32();\n result.baseTranslucency = bs.readF32();\n result.powerOffTranslucency = bs.readF32();\n\n // 2 readFlag (offsets 0x8c, 0x8d — 1-bit flags, inline bit extraction)\n result.fadeInOnly = bs.readFlag();\n result.triggerEnable = bs.readFlag();\n\n // 2 ColorF via FUN_0043f040 (packed 4×U8 = 32 bits each, offsets 0x90, 0xa0)\n result.color1 = readColorF(bs);\n result.color2 = readColorF(bs);\n\n // Offsets 0x84, 0x88, 0x80, 0x78, 0x7c — named to match TorqueScript fields.\n // framesPerSec and numFrames are S32 (integers); the rest are F32.\n result.framesPerSec = bs.readS32(); // 0x84\n result.numFrames = bs.readS32(); // 0x88\n result.scrollSpeed = bs.readF32(); // 0x80\n result.umapping = bs.readF32(); // 0x78\n result.vmapping = bs.readF32(); // 0x7c\n\n // 5 readString (loop at 0x50+i*4)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n result.texture2 = bs.readString();\n result.texture3 = bs.readString();\n result.texture4 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmissionDummyData — F32(timeMultiple)\n// ============================================================\n\nfunction particleEmissionDummyDataUnpack(\n bs: BitStream,\n): ParticleEmissionDummyDataBlock {\n return { timeMultiple: bs.readF32() };\n}\n\n// ============================================================\n// CommanderIconData — 5 readString (NumImages=5)\n// ============================================================\n\nfunction commanderIconDataUnpack(bs: BitStream): CommanderIconDataBlock {\n return {\n baseImage: bs.readString(),\n activeImage: bs.readString(),\n inactiveImage: bs.readString(),\n selectImage: bs.readString(),\n hilightImage: bs.readString(),\n };\n}\n\n// ============================================================\n// PrecipitationData\n// ============================================================\n\nfunction precipitationDataUnpack(bs: BitStream): PrecipitationDataBlock {\n // Verified against decompiled binary FUN_006805d0\n const result: PrecipitationDataBlock = {};\n\n // DataBlockRef (soundProfile at offset 0x48)\n result.soundProfile = readDataBlockRef(bs);\n\n // S32 (offset 0x4c)\n result.numDrops = bs.readS32();\n\n // F32 (maxSize at offset 0x50 — before string)\n result.maxSize = bs.readF32();\n\n // readString (materialList at offset 0x5c)\n result.materialList = bs.readString();\n\n // 13×F32 (offsets 0x54, 0x58, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88)\n result.sizeX = bs.readF32();\n result.sizeY = bs.readF32();\n result.movingBoxPer = bs.readF32();\n result.divHeightVal = bs.readF32();\n result.sizeBigBox = bs.readF32();\n result.topBoxSpeed = bs.readF32();\n result.frontBoxSpeed = bs.readF32();\n result.topBoxDrawPer = bs.readF32();\n result.bottomDrawHeight = bs.readF32();\n result.skipIfPer = bs.readF32();\n result.bottomSpeedPer = bs.readF32();\n result.frontSpeedPer = bs.readF32();\n result.frontRadiusPer = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FireballAtmosphereData\n// ============================================================\n\nfunction fireballAtmosphereDataUnpack(\n bs: BitStream,\n): FireballAtmosphereDataBlock {\n return { emitter: readDataBlockRef(bs) };\n}\n\n// ============================================================\n// LightningData\n// ============================================================\n\nfunction lightningDataUnpack(bs: BitStream): LightningDataBlock {\n const result: LightningDataBlock = {};\n\n // 8 readDataBlockRef (strikeSound profiles)\n const strikeSounds: (number | null)[] = [];\n for (let i = 0; i < 8; i++) {\n strikeSounds.push(readDataBlockRef(bs));\n }\n result.strikeSounds = strikeSounds;\n\n // 8 readString (strikeTextures)\n const strikeTextures: string[] = [];\n for (let i = 0; i < 8; i++) {\n strikeTextures.push(bs.readString());\n }\n result.strikeTextures = strikeTextures;\n\n // readDataBlockRef (thunder sound)\n result.thunderSound = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// StationFXVehicleData\n// ============================================================\n\nfunction stationFXVehicleDataUnpack(bs: BitStream): StationFXVehicleDataBlock {\n // Field order confirmed from decompiled binary FUN_0069d570\n const result: StationFXVehicleDataBlock = {};\n\n // 11 F32 fields (offsets 0x44-0x6c)\n result.glowTopHeight = bs.readF32(); // 0x44\n result.glowBottomHeight = bs.readF32(); // 0x48\n result.glowTopRadius = bs.readF32(); // 0x4c\n result.glowBottomRadius = bs.readF32(); // 0x50\n result.numGlowSegments = bs.readF32(); // 0x54\n result.glowFadeTime = bs.readF32(); // 0x58\n result.armLightDelay = bs.readF32(); // 0x5c\n result.armLightLifetime = bs.readF32(); // 0x60\n result.armLightFadeTime = bs.readF32(); // 0x64\n result.lifetime = bs.readF32(); // 0x68\n result.numArcSegments = bs.readF32(); // 0x6c\n\n // ColorF via FUN_0043f040 (4×U8 = 32 bits at offset 0x70)\n result.sphereColor = readColorF(bs);\n\n // 6 F32 fields (offsets 0x80-0x94)\n result.spherePhiSegments = bs.readF32(); // 0x80\n result.sphereThetaSegments = bs.readF32(); // 0x84\n result.sphereRadius = bs.readF32(); // 0x88\n result.scale = {\n x: bs.readF32(), // 0x8c\n y: bs.readF32(), // 0x90\n z: bs.readF32(), // 0x94\n };\n\n // 11 strings — names binary-verified (initPersistFields: 0x98\n // glowNodeName, 0x9c leftNodeName[4], 0xac rightNodeName[4], 0xbc\n // texture[2]) and demo-verified (\"GLOWFX\", LFX1/RFX1…, stationGlow).\n result.glowNodeName = bs.readString(); // 0x98\n\n // 4×(left, right) node name pairs, interleaved on the wire\n result.leftNodeName0 = bs.readString();\n result.rightNodeName0 = bs.readString();\n result.leftNodeName1 = bs.readString();\n result.rightNodeName1 = bs.readString();\n result.leftNodeName2 = bs.readString();\n result.rightNodeName2 = bs.readString();\n result.leftNodeName3 = bs.readString();\n result.rightNodeName3 = bs.readString();\n\n // 2 readString\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// StationFXPersonalData\n// ============================================================\n\nfunction stationFXPersonalDataUnpack(\n bs: BitStream,\n): StationFXPersonalDataBlock {\n const result: StationFXPersonalDataBlock = {};\n\n // ~10 F32\n result.glowTopRadius = bs.readF32();\n result.glowBottomRadius = bs.readF32();\n result.glowTopHeight = bs.readF32();\n result.glowBottomHeight = bs.readF32();\n result.numGlowSegments = bs.readF32();\n result.numGlowPanels = bs.readF32();\n result.topAlpha = bs.readF32();\n result.bottomAlpha = bs.readF32();\n result.glowSpeed = bs.readF32();\n result.scrollSpeed = bs.readF32();\n\n // 4 strings — demo-verified (\"FX1\", \"FX2\", \"special/stationLight\"):\n // the two attach node names, then texture[2]\n result.leftNodeName = bs.readString();\n result.rightNodeName = bs.readString();\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// CannedChatItem (game-specific, Tribes 2 only)\n// From Tribes 2 script reference: single readString (chatText)\n// ============================================================\n\nfunction cannedChatItemUnpack(bs: BitStream): CannedChatItemDataBlock {\n return { chatText: bs.readString() };\n}\n\n// ============================================================\n// MissionMarkerData (extends ShapeBaseData — no additional fields)\n// ============================================================\n\nfunction missionMarkerDataUnpack(bs: BitStream): MissionMarkerDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// GameBaseData (extends SimDataBlock — 0 bits on wire)\n// ============================================================\n\nfunction gameBaseDataUnpack(_bs: BitStream): GameBaseDataBlock {\n return {};\n}\n\n// ============================================================\n// SimDataBlock — 0 bits on wire (base class)\n// ============================================================\n\nfunction simDataBlockUnpack(_bs: BitStream): SimDataBlock {\n return {};\n}\n\n// ============================================================\n// TSShapeConstructor (extends SimDataBlock)\n// readString(shape) + readInt(7) count + count × readString\n// NumSequenceBits = 7\n// ============================================================\n\nfunction tsShapeConstructorUnpack(bs: BitStream): TSShapeConstructorDataBlock {\n const result: TSShapeConstructorDataBlock = {};\n result.shape = bs.readString();\n const count = bs.readInt(7);\n const sequences: string[] = [];\n for (let i = 0; i < count; i++) {\n sequences.push(bs.readString());\n }\n result.sequences = sequences;\n return result;\n}\n\n// ============================================================\n// EffectProfile (classId 139)\n// From decompiled binary FUN_0050dde0.\n// Parent: SimDataBlock (no-op)\n// ============================================================\n\nfunction effectProfileUnpack(bs: BitStream): EffectProfileDataBlock {\n const result: EffectProfileDataBlock = {};\n result.minDistance = bs.readF32(); // 0x40\n result.maxDistance = bs.readF32(); // 0x44\n result.audioScale = bs.readF32(); // 0x48\n result.directional = readBool(bs); // 0x4c, _read(1) = 8-bit bool\n result.effectName = bs.readString(); // 0x3c\n return result;\n}\n\n// ============================================================\n// JetEffectData (classId 150)\n// From decompiled binary FUN_0069fe60.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction jetEffectDataUnpack(bs: BitStream): JetEffectDataBlock {\n const result: JetEffectDataBlock = {};\n result.coolColor = readColorF(bs); // 0x44, FUN_0043f040 = packed 4×U8\n result.hotColor = readColorF(bs); // 0x54, FUN_0043f040 = packed 4×U8\n result.activateTime = bs.readF32(); // 0x64\n result.deactivateTime = bs.readF32(); // 0x68\n result.length = bs.readF32(); // 0x6c\n result.width = bs.readF32(); // 0x70\n result.speed = bs.readF32(); // 0x74\n result.stretch = bs.readF32(); // 0x78\n result.yOffset = bs.readF32(); // 0x7c\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x80\n }\n return result;\n}\n\n// ============================================================\n// RunningLightData (classId 162)\n// From decompiled binary FUN_006a0af0.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction runningLightDataUnpack(bs: BitStream): RunningLightDataBlock {\n const result: RunningLightDataBlock = {};\n result.radius = bs.readF32(); // 0x48\n result.color = readColorF(bs); // 0x4c, FUN_0043f040 = packed 4×U8\n result.type = bs.readF32(); // 0x44, stored as F32 (bool/int on wire)\n result.length = bs.readF32(); // 0x78\n result.nodeName = bs.readString(); // 0x5c\n result.direction = {\n // 0x60-0x68\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.offset = {\n // 0x6c-0x74\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x7c\n }\n return result;\n}\n\n// ============================================================\n// Registration\n// ============================================================\n\nexport function registerDataBlockParsers(registry: ClassRegistry): void {\n // Base types\n registry.catalogDataBlock({\n name: \"ShapeBaseData\",\n unpackData: shapeBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShapeBaseImageData\",\n unpackData: shapeBaseImageDataUnpack,\n });\n\n // Player/Vehicle types\n registry.catalogDataBlock({\n name: \"PlayerData\",\n unpackData: playerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"VehicleData\",\n unpackData: vehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlyingVehicleData\",\n unpackData: flyingVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"HoverVehicleData\",\n unpackData: hoverVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"WheeledVehicleData\",\n unpackData: wheeledVehicleDataUnpack,\n });\n\n // Static/Turret types\n registry.catalogDataBlock({\n name: \"StaticShapeData\",\n unpackData: staticShapeDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TurretData\",\n unpackData: turretDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TurretImageData\",\n unpackData: turretImageDataUnpack,\n });\n\n // Item\n registry.catalogDataBlock({ name: \"ItemData\", unpackData: itemDataUnpack });\n\n // Projectile types\n registry.catalogDataBlock({\n name: \"ProjectileData\",\n unpackData: projectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearProjectileData\",\n unpackData: linearProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GrenadeProjectileData\",\n unpackData: grenadeProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SeekerProjectileData\",\n unpackData: seekerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SniperProjectileData\",\n unpackData: sniperProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockLanceProjectileData\",\n unpackData: shockLanceProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ELFProjectileData\",\n unpackData: elfProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RepairProjectileData\",\n unpackData: repairProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TargetProjectileData\",\n unpackData: targetProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TracerProjectileData\",\n unpackData: tracerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"EnergyProjectileData\",\n unpackData: energyProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearFlareProjectileData\",\n unpackData: linearFlareProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"BombProjectileData\",\n unpackData: bombProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlareProjectileData\",\n unpackData: flareProjectileDataUnpack,\n });\n\n // Effects\n registry.catalogDataBlock({\n name: \"ExplosionData\",\n unpackData: explosionDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"DebrisData\",\n unpackData: debrisDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SplashData\",\n unpackData: splashDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockwaveData\",\n unpackData: shockwaveDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmitterData\",\n unpackData: particleEmitterDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleData\",\n unpackData: particleDataUnpack,\n });\n\n // Audio\n registry.catalogDataBlock({\n name: \"AudioDescription\",\n unpackData: audioDescriptionUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioProfile\",\n unpackData: audioProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioEnvironment\",\n unpackData: audioEnvironmentUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioSampleEnvironment\",\n unpackData: audioSampleEnvironmentUnpack,\n });\n\n // Misc\n registry.catalogDataBlock({ name: \"DecalData\", unpackData: decalDataUnpack });\n registry.catalogDataBlock({\n name: \"CameraData\",\n unpackData: cameraDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SensorData\",\n unpackData: sensorDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TriggerData\",\n unpackData: triggerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ForceFieldBareData\",\n unpackData: forceFieldBareDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmissionDummyData\",\n unpackData: particleEmissionDummyDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"CommanderIconData\",\n unpackData: commanderIconDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"PrecipitationData\",\n unpackData: precipitationDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FireballAtmosphereData\",\n unpackData: fireballAtmosphereDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LightningData\",\n unpackData: lightningDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXVehicleData\",\n unpackData: stationFXVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXPersonalData\",\n unpackData: stationFXPersonalDataUnpack,\n });\n\n // Classes added from game-specific analysis\n registry.catalogDataBlock({\n name: \"CannedChatItem\",\n unpackData: cannedChatItemUnpack,\n });\n registry.catalogDataBlock({\n name: \"MissionMarkerData\",\n unpackData: missionMarkerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GameBaseData\",\n unpackData: gameBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SimDataBlock\",\n unpackData: simDataBlockUnpack,\n });\n registry.catalogDataBlock({\n name: \"TSShapeConstructor\",\n unpackData: tsShapeConstructorUnpack,\n });\n\n // Previously missing parsers (verified against decompiled binary)\n registry.catalogDataBlock({\n name: \"EffectProfile\",\n unpackData: effectProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"JetEffectData\",\n unpackData: jetEffectDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RunningLightData\",\n unpackData: runningLightDataUnpack,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DataBlockParsers.js","sourceRoot":"","sources":["../src/DataBlockParsers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BitStream } from \"./BitStream.js\";\nimport type { ClassRegistry } from \"./ClassRegistry.js\";\nimport type {\n SimDataBlock,\n GameBaseDataBlock,\n ShapeBaseDataBlock,\n ShapeBaseImageDataBlock,\n PlayerDataBlock,\n VehicleDataBlock,\n FlyingVehicleDataBlock,\n HoverVehicleDataBlock,\n WheeledVehicleDataBlock,\n StaticShapeDataBlock,\n TurretDataBlock,\n TurretImageDataBlock,\n ItemDataBlock,\n ProjectileDataBlock,\n LinearProjectileDataBlock,\n GrenadeProjectileDataBlock,\n SeekerProjectileDataBlock,\n SniperProjectileDataBlock,\n ShockLanceProjectileDataBlock,\n ELFProjectileDataBlock,\n RepairProjectileDataBlock,\n TargetProjectileDataBlock,\n TracerProjectileDataBlock,\n EnergyProjectileDataBlock,\n LinearFlareProjectileDataBlock,\n BombProjectileDataBlock,\n FlareProjectileDataBlock,\n ExplosionDataBlock,\n DebrisDataBlock,\n SplashDataBlock,\n ShockwaveDataBlock,\n ParticleEmitterDataBlock,\n ParticleDataBlock,\n AudioDescriptionDataBlock,\n AudioProfileDataBlock,\n AudioEnvironmentDataBlock,\n AudioSampleEnvironmentDataBlock,\n DecalDataBlock,\n CameraDataBlock,\n SensorDataBlock,\n TriggerDataBlock,\n ForceFieldBareDataBlock,\n ParticleEmissionDummyDataBlock,\n CommanderIconDataBlock,\n PrecipitationDataBlock,\n FireballAtmosphereDataBlock,\n LightningDataBlock,\n StationFXVehicleDataBlock,\n StationFXPersonalDataBlock,\n CannedChatItemDataBlock,\n MissionMarkerDataBlock,\n TSShapeConstructorDataBlock,\n EffectProfileDataBlock,\n JetEffectDataBlock,\n RunningLightDataBlock,\n HudImageEntry,\n ImageState,\n ParticleKey,\n} from \"./dataBlockDataTypes.js\";\n\n// ============================================================\n// Helper functions\n// ============================================================\n\n/**\n * Read a DataBlock reference: flag(1b) + readClassId (11 bits).\n * From decompiled binary: uses FUN_00436d10 (readClassId) which reads\n * getBitCount(getNextPow2(0x800)) = 11 bits.\n * If flag is false, sets objectId to -1 (0xFFFFFFFF).\n */\n/** particleEngine.cc: PDC_MAX_TEX. */\nconst ParticleDataMaxTextures = 50;\n\nfunction readDataBlockRef(bs: BitStream): number | null {\n return bs.readFlag() ? bs.readInt(11) : null;\n}\n\n/**\n * Read a ranged signed 32-bit integer.\n * Encodes value as unsigned offset from min.\n */\nfunction readRangedS32(bs: BitStream, min: number, max: number): number {\n return bs.readRangedU32(0, max - min) + min;\n}\n\n/**\n * Read a packed ColorF: 4 bytes (32 bits total), each converted to [0..1] float.\n * From decompiled binary: FUN_0043f040 calls FUN_0043efe0 which reads 4 × stream->read(1, &byte).\n * Each byte is multiplied by 1/255.0 to produce the float value.\n * NOTE: This is NOT 4×F32 (128 bits) — it's 4×U8 (32 bits).\n *\n * Colour representation follows the engine's own field type: fields the\n * engine stores as ColorF (this reader) are normalised to [0, 1]; fields\n * it stores as ColorI (sensorColor, sensor group colours) keep the raw\n * 0–255 bytes.\n */\nfunction readColorF(bs: BitStream): {\n r: number;\n g: number;\n b: number;\n a: number;\n} {\n return {\n r: bs.readInt(8) / 255,\n g: bs.readInt(8) / 255,\n b: bs.readInt(8) / 255,\n a: bs.readInt(8) / 255,\n };\n}\n\n/**\n * Read a DataBlock boolean field: 8 bits (1 byte), as written by stream->write(sizeof(bool), &val).\n * NOTE: This is different from readFlag() which reads 1 bit via BitStream::readFlag().\n * Many DataBlock fields use write(sizeof(bool)) instead of writeFlag().\n */\nfunction readBool(bs: BitStream): boolean {\n return bs.readBool();\n}\n\n/** Read a ranged float: min + readFloat(bits) * (max - min). */\nfunction readRangedF32(\n bs: BitStream,\n min: number,\n max: number,\n bits: number,\n): number {\n return min + bs.readFloat(bits) * (max - min);\n}\n\n/**\n * Read a U32 count and reject it unless `minBitsPerEntry × count` bits\n * remain: exhausted reads return 0 without throwing, so a corrupt count\n * would otherwise spin allocating until memory ran out.\n */\nfunction readCheckedCount(\n bs: BitStream,\n minBitsPerEntry: number,\n what: string,\n): number {\n const count = bs.readU32();\n if (count > bs.getRemainingBits() / minBitsPerEntry) {\n throw new Error(`Invalid ${what}: ${count}`);\n }\n return count;\n}\n\n// ============================================================\n// Base class parsers (inheritance chain)\n// ============================================================\n\n// SimDataBlock → GameBaseData: 0 bits on wire (no-op)\n\n/**\n * ShapeBaseData::unpackData — critical base class for most game objects.\n *\n * Verified against decompiled binary FUN_005e63e0 (Tribes2.exe).\n * NOTE: The field order differs from V12 engine reference source.\n * The Tribes 2 binary groups booleans and DataBlock refs differently,\n * and the sensor color uses 4×U8 (not 4×F32), among other differences.\n */\nfunction shapeBaseDataUnpack(bs: BitStream): ShapeBaseDataBlock {\n const result: ShapeBaseDataBlock = {};\n\n // computeCRC — flag; if true: U32 mCRC\n // Binary: readFlag → this+0xc0; if true: read(4) → this+0xbc\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName — readString → this+0x44\n result.shapeName = bs.readString();\n\n // 9 conditional F32 fields (flag + F32 if non-default)\n // Binary: each is readFlag, if true: read(4) → field offset\n if (bs.readFlag()) result.mass = bs.readF32(); // → 0x74\n if (bs.readFlag()) result.drag = bs.readF32(); // → 0x78\n if (bs.readFlag()) result.density = bs.readF32(); // → 0x7c\n if (bs.readFlag()) result.maxEnergy = bs.readF32(); // → 0x80\n if (bs.readFlag()) result.cameraMaxDist = bs.readF32(); // → 0xa4\n if (bs.readFlag()) result.cameraMinDist = bs.readF32(); // → 0xa8\n if (bs.readFlag()) result.cameraDefaultFov = bs.readF32(); // → 0xac\n if (bs.readFlag()) result.cameraMinFov = bs.readF32(); // → 0xb0\n if (bs.readFlag()) result.cameraMaxFov = bs.readF32(); // → 0xb4\n\n // debrisShapeName — readString → this+0x48\n result.debrisShapeName = bs.readString();\n\n // sensorRadius — flag; if true: readInt(10) + 4×U8 (RGBA bytes)\n // Binary: readInt(10) → this+0x15c (cast to float), then 4 × read(1) → 0x160-0x163\n // sensorColor is a ColorI in the engine, so the bytes are kept as-is.\n if (bs.readFlag()) {\n result.sensorRadius = bs.readInt(10);\n result.sensorColor = {\n r: bs.readInt(8),\n g: bs.readInt(8),\n b: bs.readInt(8),\n a: bs.readInt(8),\n };\n }\n\n // heat — flag; if true: F32 → this+0x50\n if (bs.readFlag()) result.heat = bs.readF32();\n\n // cmdCategory — readString → this+0x164\n result.cmdCategory = bs.readString();\n\n // cmdMiniIconName — readString → this+0x168\n // NOTE: V12 has cmdIcon (DataBlockRef) here, but binary has readString.\n result.cmdMiniIconName = bs.readString();\n\n // 3 boolean flags: canControl, canObserve, observeThroughObject\n // Binary: 3 readFlags → this+0x16c, 0x16d, 0x16e\n result.canControl = bs.readFlag();\n result.canObserve = bs.readFlag();\n result.observeThroughObject = bs.readFlag();\n\n // 3 more boolean flags (grouped together in binary, different from V12)\n // Binary: this+0x325, 0x329, 0x32a\n result.emap = bs.readFlag(); // 0x325\n result.isInvincible = bs.readFlag(); // 0x329\n result.renderWhenDestroyed = bs.readFlag(); // 0x32a\n\n // 4 DataBlock refs using readClassId (FUN_00436d10 = readInt(11))\n // Binary: each is readFlag + readClassId → this+0x70, 0x60, 0x68, 0x58\n result.cmdIcon = readDataBlockRef(bs); // 0x6c/0x70\n result.explosion = readDataBlockRef(bs); // 0x5c/0x60\n result.underwaterExplosion = readDataBlockRef(bs); // 0x64/0x68\n result.debris = readDataBlockRef(bs); // 0x54/0x58\n\n // 3 more boolean flags\n // Binary: this+0x32b, 0x326, 0x327\n result.inheritEnergyFromMount = bs.readFlag(); // 0x32b\n result.firstPersonOnly = bs.readFlag(); // 0x326\n result.useEyePoint = bs.readFlag(); // 0x327\n\n // shieldEffectLifetimeMS — U32 → this+0x94\n result.shieldEffectLifetimeMS = bs.readU32();\n\n // shieldEffectScale — flag; if true: 3×F32\n // Binary: readFlag, if true: read(4) × 3 → this+0x98, 0x9c, 0xa0\n // NOTE: This field is NOT in the V12 reference source — Tribes 2 addition.\n if (bs.readFlag()) {\n result.shieldEffectScale = bs.readPoint3F();\n }\n\n // HUD images loop (8 iterations, NumHudRenderImages=8)\n // Binary: do-while uVar4 < 8 at offset this + uVar4*4 + 0x174\n const hudImages: HudImageEntry[] = [];\n for (let i = 0; i < 8; i++) {\n const hasFriendly = bs.readFlag();\n if (!hasFriendly) continue;\n const friendlyName = bs.readString(); // → this + i*4 + 0x174\n const hasEnemy = bs.readFlag();\n const enemyName = hasEnemy ? bs.readString() : undefined; // → this + i*4 + 0x194\n const img: HudImageEntry = {\n friendlyName,\n enemyName,\n renderCenter: bs.readFlag(), // → this + i + 0x1f4\n renderModulated: bs.readFlag(), // → this + i + 0x1fc\n renderAlways: bs.readFlag(), // → this + i + 0x204\n renderDistance: bs.readFlag(), // → this + i + 0x20c\n renderName: bs.readFlag(), // → this + i + 0x214\n };\n hudImages.push(img);\n }\n if (hudImages.length > 0) result.hudImages = hudImages;\n\n return result;\n}\n\n// ============================================================\n// ShapeBaseImageData (weapon mount data — 31 states)\n// ============================================================\n\nfunction shapeBaseImageDataUnpack(bs: BitStream): ShapeBaseImageDataBlock {\n // Extends GameBaseData directly (0 parent bits)\n const result: ShapeBaseImageDataBlock = {};\n\n // computeCRC — flag; if true: U32\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName\n result.shapeName = bs.readString();\n\n // mountPoint — U32\n result.mountPoint = bs.readU32();\n\n // offsetTransform — flag(isIdentity); if NOT identity: readAffineTransform\n if (!bs.readFlag()) {\n result.offset = bs.readAffineTransform();\n }\n\n // firstPerson — flag\n result.firstPerson = bs.readFlag();\n\n // mass — F32\n result.mass = bs.readF32();\n\n // usesEnergy — flag\n result.usesEnergy = bs.readFlag();\n\n // minEnergy — F32\n result.minEnergy = bs.readF32();\n\n // hasFlash — flag\n result.hasFlash = bs.readFlag();\n\n // projectile — readDataBlockRef\n result.projectile = readDataBlockRef(bs);\n\n // muzzleFlash — readDataBlockRef (confirmed at offset 0xce4 in binary)\n result.muzzleFlash = readDataBlockRef(bs);\n\n // isSeeker — flag; if true: 4×F32 + flag + F32\n result.isSeeker = bs.readFlag();\n if (result.isSeeker) {\n result.seekerRadius = bs.readF32();\n result.maxSeekAngle = bs.readF32();\n result.seekerLockTime = bs.readF32();\n result.seekerFreeTime = bs.readF32();\n result.isTargetLockRequired = bs.readFlag();\n result.maxLockRange = bs.readF32();\n }\n\n // cloakable — flag\n result.cloakable = bs.readFlag();\n\n // lightType — readRangedU32(0, 3); if != 0: F32 + S32 + 4×writeFloat(7)\n result.lightType = bs.readRangedU32(0, 3);\n if (result.lightType !== 0) {\n result.lightRadius = bs.readF32();\n result.lightTime = bs.readS32();\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n }\n\n // shellExitDir — 3×F32 (mathWrite Point3F)\n result.shellExitDir = bs.readPoint3F();\n\n // shellExitVariance — F32\n result.shellExitVariance = bs.readF32();\n\n // shellVelocity — F32\n result.shellVelocity = bs.readF32();\n\n // casing — readDataBlockRef\n result.casing = readDataBlockRef(bs);\n\n // accuFire flag (confirmed at offset 0xc88 in binary, before state loop)\n result.accuFire = bs.readFlag();\n\n // State loop (31 iterations, MaxStates=31)\n const states: ImageState[] = [];\n for (let i = 0; i < 31; i++) {\n const hasName = bs.readFlag();\n if (!hasName) continue;\n\n const name = bs.readString();\n\n // 11 transition values, each readInt(5), in the ENGINE's packing\n // order (binary-verified; the old names here were rotated by two\n // slots and consumers had to carry a remap table): NotLoaded,\n // Loaded, NoAmmo, Ammo, NoTarget, Target, NotWet, Wet, TriggerUp,\n // TriggerDown, Timeout. Values are 1-based state indices (0 = no\n // transition).\n const transitionOnNotLoaded = bs.readInt(5);\n const transitionOnLoaded = bs.readInt(5);\n const transitionOnNoAmmo = bs.readInt(5);\n const transitionOnAmmo = bs.readInt(5);\n const transitionOnNoTarget = bs.readInt(5);\n const transitionOnTarget = bs.readInt(5);\n const transitionOnNotWet = bs.readInt(5);\n const transitionOnWet = bs.readInt(5);\n const transitionOnTriggerUp = bs.readInt(5);\n const transitionOnTriggerDown = bs.readInt(5);\n const transitionOnTimeout = bs.readInt(5);\n\n // timeoutValue — flag(!=default) then F32\n const timeoutValue = bs.readFlag() ? bs.readF32() : undefined;\n // waitForTimeout — flag\n const waitForTimeout = bs.readFlag();\n // fire — flag\n const fire = bs.readFlag();\n // ejectShell — flag\n const ejectShell = bs.readFlag();\n // scaleAnimation — flag\n const scaleAnimation = bs.readFlag();\n // direction — flag\n const direction = bs.readFlag();\n // reload — flag (confirmed at offset 0xe2a in binary, between direction and energyDrain)\n const reload = bs.readFlag();\n // energyDrain — flag(!=default) then F32\n const energyDrain = bs.readFlag() ? bs.readF32() : undefined;\n // loaded — readInt(3)\n const loaded = bs.readInt(3);\n // spin — readInt(3)\n const spin = bs.readInt(3);\n // recoil — readInt(3)\n const recoil = bs.readInt(3);\n // sequence — flag(!=default) then readSignedInt(16)\n const sequence = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // sequenceVis — flag(!=default) then readSignedInt(16)\n const sequenceVis = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // flashSequence — flag\n const flashSequence = bs.readFlag();\n // ignoreLoadedForReady — flag\n const ignoreLoadedForReady = bs.readFlag();\n // emitter — readDataBlockRef; if present: F32 + S32\n const emitter = readDataBlockRef(bs);\n const emitterTime = emitter !== null ? bs.readF32() : undefined;\n const emitterNode = emitter !== null ? bs.readS32() : undefined;\n // sound — readDataBlockRef\n const sound = readDataBlockRef(bs);\n\n const state: ImageState = {\n name,\n transitionOnNotLoaded,\n transitionOnLoaded,\n transitionOnAmmo,\n transitionOnNoAmmo,\n transitionOnTarget,\n transitionOnNoTarget,\n transitionOnWet,\n transitionOnNotWet,\n transitionOnTriggerUp,\n transitionOnTriggerDown,\n transitionOnTimeout,\n timeoutValue,\n waitForTimeout,\n fire,\n ejectShell,\n scaleAnimation,\n direction,\n reload,\n energyDrain,\n loaded,\n spin,\n recoil,\n sequence,\n sequenceVis,\n flashSequence,\n ignoreLoadedForReady,\n emitter,\n emitterTime,\n emitterNode,\n sound,\n };\n states.push(state);\n }\n result.states = states;\n\n return result;\n}\n\n// ============================================================\n// PlayerData (extends ShapeBaseData)\n// ============================================================\n\nfunction playerDataUnpack(bs: BitStream): PlayerDataBlock {\n const result: PlayerDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_005cfa40 (Tribes2.exe).\n // Binary layout: flag + 13 F32s + 2 optional DB refs + 9 F32s + 1 F32 +\n // 8 F32s + readInt(7) + 6 F32s + 9 F32s + 1 F32 + 32 sounds +\n // boxSize(3) + DB refs + F32s + 11 ground impact F32s\n\n // 1. readFlag → 0x340 (renderFirstPerson — NOT F32!)\n result.renderFirstPerson = bs.readFlag();\n\n // Field names for sections 2-10 are binary-verified against the retail\n // initPersistFields (FUN_005ce7e0 region): each read's struct offset\n // (from the FUN_005cfa40 unpack decompile) is mapped to the name the\n // engine registers at that offset. Earlier names were guessed from the\n // SVN source, whose layout differs from retail.\n\n // 2. 13× F32 (offsets 0x334-0x360)\n result.minLookAngle = bs.readF32(); // 0x334\n result.maxLookAngle = bs.readF32(); // 0x338\n result.maxFreelookAngle = bs.readF32(); // 0x33c\n result.maxTimeScale = bs.readF32(); // 0x330\n result.maxStepHeight = bs.readF32(); // 0x398\n result.jetForce = bs.readF32(); // 0x344\n result.underwaterJetForce = bs.readF32(); // 0x348\n result.underwaterVertJetFactor = bs.readF32(); // 0x34c\n result.jetEnergyDrain = bs.readF32(); // 0x350\n result.underwaterJetEnergyDrain = bs.readF32(); // 0x354\n result.minJetEnergy = bs.readF32(); // 0x358\n result.maxJetForwardSpeed = bs.readF32(); // 0x35c\n result.maxJetHorizontalPercentage = bs.readF32(); // 0x360\n // [0x364 hardcoded to 0, not from stream]\n\n // 3. 2 optional DataBlock refs (readClassId pattern)\n result.jetEmitter = readDataBlockRef(bs); // 0x368 (jetEmitter @0x364)\n result.jetEffect = readDataBlockRef(bs); // 0x370 (jetEffect @0x36c)\n\n // 4. 9× F32 (offsets 0x374-0x394)\n result.runForce = bs.readF32(); // 0x374\n result.runEnergyDrain = bs.readF32(); // 0x378\n result.minRunEnergy = bs.readF32(); // 0x37c\n result.maxForwardSpeed = bs.readF32(); // 0x380\n result.maxBackwardSpeed = bs.readF32(); // 0x384\n result.maxSideSpeed = bs.readF32(); // 0x388\n result.maxUnderwaterForwardSpeed = bs.readF32(); // 0x38c\n result.maxUnderwaterBackwardSpeed = bs.readF32(); // 0x390\n result.maxUnderwaterSideSpeed = bs.readF32(); // 0x394\n\n // 5. 1× F32 (offset 0x39c)\n result.runSurfaceAngle = bs.readF32(); // 0x39c\n\n // 6. 8× F32 (offsets 0x3b8-0x3d4)\n result.recoverDelay = bs.readF32(); // 0x3b8\n result.recoverRunForceScale = bs.readF32(); // 0x3bc\n result.jumpForce = bs.readF32(); // 0x3c0\n result.jumpEnergyDrain = bs.readF32(); // 0x3c4\n result.minJumpEnergy = bs.readF32(); // 0x3c8\n result.minJumpSpeed = bs.readF32(); // 0x3cc\n result.maxJumpSpeed = bs.readF32(); // 0x3d0\n result.jumpSurfaceAngle = bs.readF32(); // 0x3d4\n\n // 7. readInt(7) → jumpDelay (offset 0x3d8)\n result.jumpDelay = bs.readInt(7);\n\n // 8. 6× F32 (offsets 0x3a0-0x3b4)\n result.horizMaxSpeed = bs.readF32(); // 0x3a0\n result.horizResistSpeed = bs.readF32(); // 0x3a4\n result.horizResistFactor = bs.readF32(); // 0x3a8\n result.upMaxSpeed = bs.readF32(); // 0x3ac\n result.upResistSpeed = bs.readF32(); // 0x3b0\n result.upResistFactor = bs.readF32(); // 0x3b4\n\n // 9. 9× F32 (offsets 0xd14-0xd34, far offsets = Tribes 2-specific fields)\n result.splashVelocity = bs.readF32(); // 0xd14\n result.splashAngle = bs.readF32(); // 0xd18\n result.splashFreqMod = bs.readF32(); // 0xd1c\n result.splashVelEpsilon = bs.readF32(); // 0xd20\n result.bubbleEmitTime = bs.readF32(); // 0xd24\n result.mediumSplashSoundVelocity = bs.readF32(); // 0xd28\n result.hardSplashSoundVelocity = bs.readF32(); // 0xd2c\n result.exitSplashSoundVelocity = bs.readF32(); // 0xd30\n result.footstepSplashHeight = bs.readF32(); // 0xd34\n\n // 10. 1× F32 (offset 0x3f4)\n result.minImpactSpeed = bs.readF32(); // 0x3f4\n\n // 11. Sound loop: 32 iterations (MaxSounds=0x20 in binary)\n // Binary: zeros 0x428+i*4, then flag + readClassId → 0x4a8+i*4\n const sounds: (number | null)[] = [];\n for (let i = 0; i < 32; i++) {\n sounds.push(readDataBlockRef(bs));\n }\n result.sounds = sounds;\n\n // 12. boxSize 3×F32 (offsets 0x528, 0x52c, 0x530)\n result.boxSize = bs.readPoint3F();\n\n // 13. footPuffEmitter + 2 F32s (offset 0xcf0, 0xcf4, 0xcf8)\n result.footPuffEmitter = readDataBlockRef(bs);\n result.footPuffNumParts = bs.readF32();\n result.footPuffRadius = bs.readF32();\n\n // 14. decalData + 1 F32 (offset 0xd00, 0x3f8)\n result.decalData = readDataBlockRef(bs);\n result.decalOffset = bs.readF32();\n\n // 15. dustEmitter + splash (offsets 0xd08, 0xd10)\n result.dustEmitter = readDataBlockRef(bs);\n result.splash = readDataBlockRef(bs);\n\n // 16. 3 splashEmitters (offsets 0xd44 + i*4)\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 17. 11× F32 (offsets 0x3fc-0x424). Names binary-verified against\n // initPersistFields: the two leading fields are the Tribes 2 heat\n // signature rates (retail player.cs: 1/4 and 1/3), then the ground\n // impact shake block. Demo values confirm: 0.25, 0.333…\n result.heatDecayPerSec = bs.readF32(); // 0x3fc\n result.heatIncreasePerSec = bs.readF32(); // 0x400\n result.groundImpactMinSpeed = bs.readF32(); // 0x404\n result.groundImpactShakeFreq = {\n x: bs.readF32(), // 0x408\n y: bs.readF32(), // 0x40c\n z: bs.readF32(), // 0x410\n };\n result.groundImpactShakeAmp = {\n x: bs.readF32(), // 0x414\n y: bs.readF32(), // 0x418\n z: bs.readF32(), // 0x41c\n };\n result.groundImpactShakeDuration = bs.readF32(); // 0x420\n result.groundImpactShakeFalloff = bs.readF32(); // 0x424\n\n return result;\n}\n\n// ============================================================\n// VehicleData (extends ShapeBaseData)\n// ============================================================\n\nfunction vehicleDataUnpack(bs: BitStream): VehicleDataBlock {\n const result: VehicleDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00609450 (Tribes2.exe).\n\n // 1. 2×F32 (body restitution/friction) → offsets 0x33c, 0x340\n result.bodyRestitution = bs.readF32();\n result.bodyFriction = bs.readF32();\n\n // 2. Loop of 2: impact sound DataBlock refs → offsets 0x334+i*4\n const impactSounds: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n impactSounds.push(readDataBlockRef(bs));\n }\n result.impactSounds = impactSounds;\n\n // 3. ~20 F32s for vehicle physics\n result.minImpactSpeed = bs.readF32(); // 0x37c\n result.softImpactSpeed = bs.readF32(); // 0x380\n result.hardImpactSpeed = bs.readF32(); // 0x384 (900 dec)\n result.minRollSpeed = bs.readF32(); // 0x388\n // Registered in the retail binary as \"maxSteerinAngle\" (engine typo);\n // we keep the corrected spelling.\n result.maxSteeringAngle = bs.readF32(); // 0x38c\n result.maxDrag = bs.readF32(); // 0x3a4\n result.minDrag = bs.readF32(); // 0x3a0\n result.jetForce = bs.readF32(); // 0x3a8\n result.jetEnergyDrain = bs.readF32(); // 0x3ac\n result.minJetEnergy = bs.readF32(); // 0x3b0\n result.cameraOffset = bs.readF32(); // 0x39c\n result.cameraLag = bs.readF32(); // 0x398\n result.triggerDustHeight = bs.readF32(); // 0x3c8\n result.dustHeight = bs.readF32(); // 0x3cc\n result.numDmgEmitterAreas = bs.readF32(); // 0x408\n result.exitSplashSoundVelocity = bs.readF32(); // 0x36c\n result.softSplashSoundVelocity = bs.readF32(); // 0x370\n result.mediumSplashSoundVelocity = bs.readF32(); // 0x374\n result.hardSplashSoundVelocity = bs.readF32(); // 0x378\n\n // 4. Loop of 5: water impact sound DataBlock refs → offsets 0x358+i*4\n const waterSounds: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n waterSounds.push(readDataBlockRef(bs));\n }\n result.waterSounds = waterSounds;\n\n // 5. dustEmitter DataBlock ref → offset 0x3c4\n result.dustEmitter = readDataBlockRef(bs);\n\n // 6. Loop of 3: damage emitter DataBlock refs → offsets 0x3dc+i*4\n const damageEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n damageEmitters.push(readDataBlockRef(bs));\n }\n result.damageEmitters = damageEmitters;\n\n // 7. Loop of 2: splash emitter DataBlock refs → offsets 0x414+i*4\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 8. 2×3 F32 damage emitter offsets (2 sets of x,y,z) → offsets 0x3e8-0x3f4\n result.damageEmitterOffset0 = bs.readPoint3F();\n result.damageEmitterOffset1 = bs.readPoint3F();\n\n // 9. 2 F32 damage level tolerance → offsets 0x400, 0x404\n result.damageLevelTolerance0 = bs.readF32();\n result.damageLevelTolerance1 = bs.readF32();\n\n // 10. 2 F32 splash params → offsets 0x41c, 0x420\n result.splashFreqMod = bs.readF32();\n result.splashVelEpsilon = bs.readF32();\n\n // 11. 2 F32 collision damage → offsets 0x390, 0x394\n result.collDamageThresholdVel = bs.readF32();\n result.collDamageMultiplier = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FlyingVehicleData (extends VehicleData)\n// ============================================================\n\nfunction flyingVehicleDataUnpack(bs: BitStream): FlyingVehicleDataBlock {\n const result: FlyingVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 2 sound refs\n result.jetActivateSound = readDataBlockRef(bs);\n result.jetDeactivateSound = readDataBlockRef(bs);\n\n // 4 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // Verified against decompiled binary FUN_0060fc40 — 16 F32s\n result.maneuveringForce = bs.readF32();\n result.horizontalSurfaceForce = bs.readF32();\n result.verticalSurfaceForce = bs.readF32();\n result.autoInputDamping = bs.readF32();\n result.steeringForce = bs.readF32();\n result.steeringRollForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.autoAngularForce = bs.readF32();\n result.rotationalDrag = bs.readF32();\n result.maxAutoSpeed = bs.readF32();\n result.autoLinearForce = bs.readF32();\n result.hoverHeight = bs.readF32();\n result.createHoverHeight = bs.readF32();\n result.minTrailSpeed = bs.readF32();\n result.vertThrustMultiple = bs.readF32();\n result.maxForwardSpeed = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// HoverVehicleData (extends VehicleData)\n// ============================================================\n\nfunction hoverVehicleDataUnpack(bs: BitStream): HoverVehicleDataBlock {\n const result: HoverVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 17 F32s\n result.dragForce = bs.readF32();\n result.mainThrustForce = bs.readF32();\n result.reverseThrustForce = bs.readF32();\n result.strafeThrustForce = bs.readF32();\n result.turboFactor = bs.readF32();\n result.stabLenMin = bs.readF32();\n result.stabLenMax = bs.readF32();\n result.stabSpringConstant = bs.readF32();\n result.stabDampingConstant = bs.readF32();\n result.gyroDrag = bs.readF32();\n result.normalForce = bs.readF32();\n result.restorativeForce = bs.readF32();\n result.steeringForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.pitchForce = bs.readF32();\n result.floatingThrustFactor = bs.readF32();\n result.brakingForce = bs.readF32();\n\n // 3×F32 (dustTrailOffset)\n result.dustTrailOffset = bs.readPoint3F();\n\n // 2 F32s\n result.dustTrailFreqMod = bs.readF32();\n result.triggerTrailHeight = bs.readF32();\n\n // 3 sound refs\n result.floatSound = readDataBlockRef(bs);\n result.thrustSound = readDataBlockRef(bs);\n result.turboSound = readDataBlockRef(bs);\n\n // 3 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // dustTrailEmitter ref\n result.dustTrailEmitter = readDataBlockRef(bs);\n\n // 3 F32s\n result.mainThrustEmitterFactor = bs.readF32();\n result.strafeThrustEmitterFactor = bs.readF32();\n result.reverseThrustEmitterFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// WheeledVehicleData (extends VehicleData)\n// ============================================================\n\nfunction wheeledVehicleDataUnpack(bs: BitStream): WheeledVehicleDataBlock {\n const result: WheeledVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 9 tire F32s\n result.tireRadius = bs.readF32();\n result.tireStaticFriction = bs.readF32();\n result.tireKineticFriction = bs.readF32();\n result.tireRestitution = bs.readF32();\n result.tireLateralForce = bs.readF32();\n result.tireLateralDamping = bs.readF32();\n result.tireLateralRelaxation = bs.readF32();\n result.tireLongitudinalForce = bs.readF32();\n result.tireLongitudinalDamping = bs.readF32();\n\n // tire emitter ref\n result.tireEmitter = readDataBlockRef(bs);\n\n // 4 sound refs\n result.jetSound = readDataBlockRef(bs);\n result.engineSound = readDataBlockRef(bs);\n result.squealSound = readDataBlockRef(bs);\n result.wadeSound = readDataBlockRef(bs);\n\n // 11 F32s\n result.spring = bs.readF32();\n result.springDamping = bs.readF32();\n result.springLength = bs.readF32();\n result.brakeTorque = bs.readF32();\n result.engineTorque = bs.readF32();\n result.engineBrake = bs.readF32();\n result.maxWheelSpeed = bs.readF32();\n result.steeringAngle = bs.readF32();\n result.steeringReturn = bs.readF32();\n result.steeringDamping = bs.readF32();\n result.powerSteeringFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// StaticShapeData (extends ShapeBaseData)\n// ============================================================\n\nfunction staticShapeDataUnpack(bs: BitStream): StaticShapeDataBlock {\n const result: StaticShapeDataBlock = shapeBaseDataUnpack(bs);\n result.noIndividualDamage = bs.readFlag();\n result.dynamicTypeField = bs.readS32();\n return result;\n}\n\n// ============================================================\n// TurretData (extends StaticShapeData)\n// ============================================================\n\nfunction turretDataUnpack(bs: BitStream): TurretDataBlock {\n const result: TurretDataBlock = staticShapeDataUnpack(bs);\n // Verified against decompiled binary FUN_00654190\n result.thetaMin = bs.readF32(); // 0x33c\n result.thetaMax = bs.readF32(); // 0x340\n result.thetaNull = bs.readF32(); // 0x344\n result.neverUpdateControl = bs.readFlag(); // 0x34c\n result.primaryAxis = bs.readRangedU32(0, 3); // 0x348 (FUN_0043f120(4) = 2 bits)\n result.maxCapacitorEnergy = bs.readF32(); // 0x35c\n result.capacitorRechargeRate = bs.readF32(); // 0x360\n return result;\n}\n\n// ============================================================\n// TurretImageData (extends ShapeBaseImageData)\n// ============================================================\n\nfunction turretImageDataUnpack(bs: BitStream): TurretImageDataBlock {\n const result: TurretImageDataBlock = shapeBaseImageDataUnpack(bs);\n // Verified against decompiled binary FUN_00654850\n result.activationMS = bs.readInt(8); // << 5 on store (0x1c04)\n result.deactivateDelayMS = bs.readInt(8); // << 5 on store (0x1c08)\n result.degPerSecTheta = bs.readRangedU32(0, 1080); // 0x1c10 (FUN_0043f120(0x439))\n result.degPerSecPhi = bs.readRangedU32(0, 1080); // 0x1c14\n result.dontFireInsideDamageRadius = bs.readFlag(); // 0x1c1c\n result.damageRadius = bs.readF32(); // 0x1c20\n result.useCapacitor = bs.readFlag(); // 0x1c24 (NOT a DataBlockRef)\n return result;\n}\n\n// ============================================================\n// ItemData (extends ShapeBaseData)\n// ============================================================\n\nfunction itemDataUnpack(bs: BitStream): ItemDataBlock {\n const result: ItemDataBlock = shapeBaseDataUnpack(bs);\n\n // 2×readFloat(10)\n result.friction = bs.readFloat(10);\n result.elasticity = bs.readFloat(10);\n\n // flag(sticky)\n result.sticky = bs.readFlag();\n\n // flag(gravityMod!=1) then readFloat(10)\n if (bs.readFlag()) result.gravityMod = bs.readFloat(10);\n\n // flag(maxVelocity!=-1) then F32\n if (bs.readFlag()) result.maxVelocity = bs.readF32();\n\n // flag(hasLight); if true: readInt(2) + 4×readFloat(7) + S32 + F32 + flag\n if (bs.readFlag()) {\n result.lightType = bs.readInt(2);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n result.lightTime = bs.readS32();\n result.lightRadius = bs.readF32();\n result.lightOnlyStatic = bs.readFlag();\n }\n\n return result;\n}\n\n// ============================================================\n// ProjectileData (extends GameBaseData — 0 parent bits)\n// ============================================================\n\nfunction projectileDataUnpack(bs: BitStream): ProjectileDataBlock {\n const result: ProjectileDataBlock = {};\n\n // readString (projectileName)\n result.projectileShapeName = bs.readString();\n\n // 2×S32\n result.faceViewerLinkTime = bs.readS32();\n result.lifetime = bs.readS32();\n\n // flag(faceViewer)\n result.faceViewer = bs.readFlag();\n\n // flag(nonDefaultScale); if true: 3×F32\n if (bs.readFlag()) {\n result.scale = bs.readPoint3F();\n }\n\n // 9 readDataBlockRef fields in pack order (verified against decompiled\n // Tribes2.exe FUN_00631010 / FUN_006303f0 struct offsets).\n result.baseEmitter = readDataBlockRef(bs); // 0xe8 ParticleEmitterData\n result.delayEmitter = readDataBlockRef(bs); // 0xec ParticleEmitterData\n result.bubbleEmitter = readDataBlockRef(bs); // 0xf0 ParticleEmitterData\n result.explosion = readDataBlockRef(bs); // 0xf4 ExplosionData\n result.underwaterExplosion = readDataBlockRef(bs); // 0xf8 ExplosionData\n result.splash = readDataBlockRef(bs); // 0xfc SplashData\n result.sound = readDataBlockRef(bs); // 0x100 AudioProfile (in-flight)\n result.wetFireSound = readDataBlockRef(bs); // 0x104 AudioProfile\n result.fireSound = readDataBlockRef(bs); // 0x108 AudioProfile\n\n // 6 decal refs (loop)\n const decals: (number | null)[] = [];\n for (let i = 0; i < 6; i++) {\n decals.push(readDataBlockRef(bs));\n }\n result.decals = decals;\n\n // flag(hasLight); if true: readFloat(8) + 3×readFloat(7)\n if (bs.readFlag()) {\n result.lightRadius = bs.readFloat(8);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // flag(hasUnderwaterColor); if true: 3×readFloat(7)\n if (bs.readFlag()) {\n result.underwaterLightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // explodeOnWaterImpact: 8-bit bool via stream->write(sizeof(bool))\n // (confirmed in decompiled binary FUN_00631360: read(1,&var) at offset 0xcc)\n result.explodeOnWaterImpact = readBool(bs);\n // depthTolerance: F32\n result.depthTolerance = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// LinearProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction linearProjectileDataUnpack(bs: BitStream): LinearProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_0062bea0 (reads in struct-offset order), and initPersistFields\n // FUN_0062b3c0 maps names to those offsets:\n // 0x138 dryVelocity, 0x13c wetVelocity, 0x140 fizzleTimeMS,\n // 0x144 lifetimeMS, 0x148 explodeOnDeath,\n // 0x14c reflectOnWaterImpactAngle, 0x150 deflectionOnWaterImpact,\n // 0x154 fizzleUnderwaterMS, 0x158 activateDelayMS,\n // 0x15c doDynamicClientHits\n const result: LinearProjectileDataBlock = projectileDataUnpack(bs);\n\n // 2×F32 (0x138, 0x13c)\n result.dryVelocity = bs.readF32();\n result.wetVelocity = bs.readF32();\n\n // 2×U32 in milliseconds, tick-rounded by onAdd (0x140, 0x144)\n result.fizzleTimeMS = bs.readU32();\n result.lifetimeMS = bs.readU32();\n\n // flag (0x148)\n result.explodeOnDeath = bs.readFlag();\n\n // 2×readRangedU32(0,90) in degrees (0x14c, 0x150)\n result.reflectOnWaterImpactAngle = bs.readRangedU32(0, 90);\n result.deflectionOnWaterImpact = bs.readRangedU32(0, 90);\n\n // 2×U32 (0x154, 0x158)\n result.fizzleUnderwaterMS = bs.readU32();\n result.activateDelayMS = bs.readU32();\n\n // flag (0x15c)\n result.doDynamicClientHits = bs.readFlag();\n\n return result;\n}\n\n// ============================================================\n// GrenadeProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction grenadeProjectileDataUnpack(\n bs: BitStream,\n): GrenadeProjectileDataBlock {\n const result: GrenadeProjectileDataBlock = projectileDataUnpack(bs);\n\n result.armingDelayMS = bs.readS32();\n result.muzzleVelocity = bs.readF32();\n result.grenadeElasticity = bs.readF32();\n result.grenadeFriction = bs.readF32();\n result.drag = bs.readF32();\n result.density = bs.readF32();\n result.gravityMod = bs.readF32();\n result.lifetimeMS = bs.readS32();\n\n return result;\n}\n\n// ============================================================\n// SeekerProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction seekerProjectileDataUnpack(bs: BitStream): SeekerProjectileDataBlock {\n const result: SeekerProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary (lines 430494-430580)\n // 10 F32/S32 (offsets 0x138-0x164)\n result.lifetimeMS = bs.readS32(); // 0x138\n result.muzzleVelocity = bs.readF32(); // 0x13c\n result.turningSpeed = bs.readF32(); // 0x140\n result.proximityRadius = bs.readF32(); // 0x14c\n result.terrainAvoidanceSpeed = bs.readF32(); // 0x150\n result.terrainScanAhead = bs.readF32(); // 0x154\n result.terrainHeightFail = bs.readF32(); // 0x158\n result.terrainAvoidanceRadius = bs.readF32(); // 0x15c\n result.flareDistance = bs.readF32(); // 0x160\n result.flareAngle = bs.readF32(); // 0x164\n\n // useFlechette — 8-bit bool via stream->read(1, &var) at offset 0x168\n // (confirmed: read(1, &cStack_21) = 1 BYTE = 8 bits, NOT readF32)\n result.useFlechette = readBool(bs);\n\n // 2 F32 (offsets 0x144, 0x148)\n result.maxVelocity = bs.readF32();\n result.acceleration = bs.readF32();\n\n // 2 S32 (offsets 0x16c, 0x180)\n result.flechetteDelayMs = bs.readS32();\n result.exhaustTimeMs = bs.readS32();\n\n // 2 readString (offsets 0x184, 0x190)\n result.exhaustNodeName = bs.readString();\n result.casingShapeName = bs.readString();\n\n // 3 conditional DataBlock refs (offsets 0x18c, 0x174, 0x17c)\n result.casingDebris = readDataBlockRef(bs);\n result.puffEmitter = readDataBlockRef(bs);\n result.exhaustEmitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SniperProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction sniperProjectileDataUnpack(bs: BitStream): SniperProjectileDataBlock {\n const result: SniperProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00641d40\n // 2×F32 (offsets 0x138, 0x13c)\n result.maxRifleRange = bs.readF32();\n result.rifleHeadMultiplier = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x140)\n result.beamColor = readColorF(bs);\n\n // 9×F32 (offsets 0x150, 0x154, 0x158, 0x168, 0x15c, 0x160, 0x164, 0x16c, 0x170)\n result.fadeTime = bs.readF32();\n result.startBeamWidth = bs.readF32();\n result.endBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x178)\n result.lightColor = readColorF(bs);\n\n // F32 (offset 0x174)\n result.lightRadius = bs.readF32();\n\n // 12 readString (ST_NUM_TEX=0xc)\n const textures: string[] = [];\n for (let i = 0; i < 12; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// ShockLanceProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction shockLanceProjectileDataUnpack(\n bs: BitStream,\n): ShockLanceProjectileDataBlock {\n // Verified against decompiled binary FUN_0064e840\n const result: ShockLanceProjectileDataBlock = projectileDataUnpack(bs);\n\n // 7 F32 (offsets 0x138, 0x13c, 0x160, 0x164, 0x168, 0x16c, 0x170)\n result.zapDuration = bs.readF32();\n result.boltLength = bs.readF32();\n result.numParts = bs.readF32();\n result.lightningFreq = bs.readF32();\n result.lightningDensity = bs.readF32();\n result.lightningAmp = bs.readF32();\n result.lightningWidth = bs.readF32();\n\n // DataBlockRef (shockwave at offset 0x190)\n result.shockwave = readDataBlockRef(bs);\n\n // 2×4 loop: startWidth[2], endWidth[2], boltSpeed[2], texWrap[2]\n // (offsets 0x140+i*4, 0x148+i*4, 0x150+i*4, 0x158+i*4)\n const startWidth: number[] = [];\n const endWidth: number[] = [];\n const boltSpeed: number[] = [];\n const texWrap: number[] = [];\n for (let i = 0; i < 2; i++) {\n startWidth.push(bs.readF32());\n endWidth.push(bs.readF32());\n boltSpeed.push(bs.readF32());\n texWrap.push(bs.readF32());\n }\n result.startWidth = startWidth;\n result.endWidth = endWidth;\n result.boltSpeed = boltSpeed;\n result.texWrap = texWrap;\n\n // 4 readString (texture[4] at offset 0x174)\n const slTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n slTextures.push(bs.readString());\n }\n result.textures = slTextures;\n\n // DataBlockRef (emitter at offset 0x188)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// ELFProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction elfProjectileDataUnpack(bs: BitStream): ELFProjectileDataBlock {\n // Verified against decompiled binary: initPersistFields FUN_0064a860,\n // unpackData FUN_0064ae00. 6×F32 into offsets 0x138 (beamRange) then\n // 0x154..0x164 (the beam/lightning fields), 3 readString (textures),\n // then flag + ranged id (emitter). Field names were previously\n // fabricated; the bit layout was already correct.\n const result: ELFProjectileDataBlock = projectileDataUnpack(bs);\n\n // 6×F32 (offsets 0x138, 0x154, 0x158, 0x15c, 0x160, 0x164)\n result.beamRange = bs.readF32();\n result.mainBeamWidth = bs.readF32();\n result.mainBeamSpeed = bs.readF32();\n result.mainBeamRepeat = bs.readF32();\n result.lightningWidth = bs.readF32();\n result.lightningDist = bs.readF32();\n\n // 3 readString (textures[0..2] at 0x140)\n const textures: string[] = [];\n for (let i = 0; i < 3; i++) textures.push(bs.readString());\n result.textures = textures;\n\n // 1 readDataBlockRef (emitter at 0x150)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// RepairProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction repairProjectileDataUnpack(bs: BitStream): RepairProjectileDataBlock {\n // Verified against decompiled binary: initPersistFields FUN_00644910,\n // unpackData FUN_00644c40 — 8×32-bit reads in struct-offset order\n // 0x138, 0x13c, 0x140, 0x148, 0x144, 0x14c, 0x150, 0x154, then 2\n // readString (textures at 0x158). numSegments (0x140) is registered\n // as an S32 (persist type 1) — the old decode read its raw bits as a\n // float. Field names were previously fabricated.\n const result: RepairProjectileDataBlock = projectileDataUnpack(bs);\n\n result.beamRange = bs.readF32();\n result.beamWidth = bs.readF32();\n result.numSegments = bs.readS32();\n result.beamSpeed = bs.readF32();\n result.texRepeat = bs.readF32();\n result.blurFreq = bs.readF32();\n result.blurLifetime = bs.readF32();\n result.cutoffAngle = bs.readF32();\n\n // 2 readString (textures[0..1]; retail: redbump2 / redflare)\n const textures: string[] = [];\n for (let i = 0; i < 2; i++) textures.push(bs.readString());\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// TargetProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction targetProjectileDataUnpack(bs: BitStream): TargetProjectileDataBlock {\n const result: TargetProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_006477f0\n // F32 (offset 0x138)\n result.maxRifleRange = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x13c)\n result.beamColor = readColorF(bs);\n\n // 7×F32 (offsets 0x14c, 0x15c, 0x150, 0x154, 0x158, 0x160, 0x164)\n result.startBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // 4 readString (textureName[4] at offset 0x16c)\n const targetTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n targetTextures.push(bs.readString());\n }\n result.textures = targetTextures;\n\n return result;\n}\n\n// ============================================================\n// TracerProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction tracerProjectileDataUnpack(bs: BitStream): TracerProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_00640160 (reads in struct-offset order), and initPersistFields\n // FUN_0063fcb0 maps names to those offsets:\n // 0x168 tracerLength, 0x16c tracerAlpha (bool), 0x170 tracerMinPixels,\n // 0x174 tracerColor, 0x184 tracerWidth, 0x188 crossViewAng,\n // 0x18c crossSize, 0x190 renderCross, 0x194[2] tracerTex\n const result: TracerProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // 3 F32 (offsets 0x168, 0x184, 0x170)\n result.tracerLength = bs.readF32();\n result.tracerWidth = bs.readF32();\n result.tracerMinPixels = bs.readF32();\n\n // readBool 8-bit (offset 0x16c)\n result.tracerAlpha = readBool(bs);\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x174)\n result.tracerColor = readColorF(bs);\n\n // 2 F32 (offsets 0x188, 0x18c)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n\n // readBool 8-bit (offset 0x190)\n result.renderCross = readBool(bs);\n\n // 2 readString (loop count=2 at offset 0x194)\n result.tracerTex0 = bs.readString();\n result.tracerTex1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// EnergyProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction energyProjectileDataUnpack(bs: BitStream): EnergyProjectileDataBlock {\n // Verified against decompiled binary FUN_00694d80 — parent is FUN_00633cf0\n // (GrenadeProjectileData). 7×F32 into offsets 0x168..0x180, then 2\n // readString into 0x158/0x15c; names from initPersistFields FUN_00694b40.\n const result: EnergyProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 7×F32 (offsets 0x168, 0x16c, 0x170, 0x174, then blurColor rgb at\n // 0x178/0x17c/0x180 — alpha is not transmitted)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n result.blurLifetime = bs.readF32();\n result.blurWidth = bs.readF32();\n result.blurColor = {\n r: bs.readF32(),\n g: bs.readF32(),\n b: bs.readF32(),\n a: 1,\n };\n\n // 2 readString (offsets 0x158, 0x15c)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// LinearFlareProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction linearFlareProjectileDataUnpack(\n bs: BitStream,\n): LinearFlareProjectileDataBlock {\n // Bit layout from unpackData FUN_0063dc80; names from initPersistFields\n // FUN_0063d870 (numFlares 0x168 S32, size[3] 0x16c F32, flareColor\n // 0x178, flareModTexture 0x188, flareBaseTexture 0x18c).\n const result: LinearFlareProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // S32 (offset 0x168): raw 4-byte read of an integer field.\n result.numFlares = bs.readS32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x178)\n result.flareColor = readColorF(bs);\n\n // 2 readString (offsets 0x188, 0x18c)\n result.flareModTexture = bs.readString();\n result.flareBaseTexture = bs.readString();\n\n // 3×F32 loop (offset 0x16c, count=3): size[0..2].\n result.sizes = [bs.readF32(), bs.readF32(), bs.readF32()];\n\n return result;\n}\n\n// ============================================================\n// BombProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction bombProjectileDataUnpack(bs: BitStream): BombProjectileDataBlock {\n const result: BombProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 6×F32\n result.smokeDist = bs.readF32();\n result.noSmoke = bs.readF32();\n result.boomTime = bs.readF32();\n result.casingDist = bs.readF32();\n result.smokeCushion = bs.readF32();\n result.noSmokeCounter = bs.readF32();\n\n // 2 readString\n result.smokeTexture = bs.readString();\n result.bombTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// FlareProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction flareProjectileDataUnpack(bs: BitStream): FlareProjectileDataBlock {\n // Verified against decompiled binary FUN_006872f0\n const result: FlareProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // F32 (offset 0x158)\n result.size = bs.readF32();\n\n // readBool 8-bit (offset 0x160, read(1,...))\n result.useLensFlare = readBool(bs);\n\n // 2 readString loop (offset 0x164, count=2)\n result.flareTexture = bs.readString();\n result.lensFlareTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ExplosionData (extends GameBaseData)\n// ============================================================\n\nfunction explosionDataUnpack(bs: BitStream): ExplosionDataBlock {\n const result: ExplosionDataBlock = {};\n\n // readString\n result.dtsFileName = bs.readString();\n\n // 2 readDataBlockRef\n result.soundProfile = readDataBlockRef(bs);\n result.particleEmitter = readDataBlockRef(bs);\n\n // readInt(14) + F32 + flag\n result.particleDensity = bs.readInt(14);\n result.particleRadius = bs.readF32();\n result.faceViewer = bs.readFlag();\n\n // flag(scale); if true: 3×readInt(16)\n if (bs.readFlag()) {\n result.explosionScale = {\n x: bs.readInt(16),\n y: bs.readInt(16),\n z: bs.readInt(16),\n };\n }\n\n // readInt(14) + 4×readRangedU32 + 2×readRangedU32(0,1000) + readInt(14) + readRangedU32(0,10000)\n result.playSpeed = bs.readInt(14);\n result.debrisThetaMin = bs.readRangedU32(0, 180);\n result.debrisThetaMax = bs.readRangedU32(0, 180);\n result.debrisPhiMin = bs.readRangedU32(0, 360);\n result.debrisPhiMax = bs.readRangedU32(0, 360);\n result.debrisMinVelocity = bs.readRangedU32(0, 1000);\n result.debrisMaxVelocity = bs.readRangedU32(0, 1000);\n result.debrisNum = bs.readInt(14);\n result.debrisVariance = bs.readRangedU32(0, 10000);\n\n // 4×readInt(16) + F32 + 2 flags\n result.delayMS = bs.readInt(16);\n result.delayVariance = bs.readInt(16);\n result.lifetimeMS = bs.readInt(16);\n result.lifetimeVariance = bs.readInt(16);\n result.offset = bs.readF32();\n result.shakeCamera = bs.readFlag();\n result.hasLight = bs.readFlag();\n\n // 9×F32\n result.camShakeFreq = bs.readPoint3F();\n result.camShakeAmp = bs.readPoint3F();\n result.camShakeDuration = bs.readF32();\n result.camShakeRadius = bs.readF32();\n result.camShakeFalloff = bs.readF32();\n\n // readDataBlockRef(shockwave) + 1 debris ref + 4 emitter refs + 5 sub-explosion refs\n result.shockwave = readDataBlockRef(bs);\n result.debris = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n const subExplosions: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n subExplosions.push(readDataBlockRef(bs));\n }\n result.subExplosions = subExplosions;\n\n // readRangedU32(0,4) count; loop: readFloat(8) times + 3×readRangedU32(0,16000) sizes\n const timeCount = bs.readRangedU32(0, 4);\n const times: number[] = [];\n for (let i = 0; i < timeCount; i++) {\n times.push(bs.readFloat(8));\n }\n result.times = times;\n const sizes: { x: number; y: number; z: number }[] = [];\n for (let i = 0; i < timeCount; i++) {\n sizes.push({\n x: bs.readRangedU32(0, 16000),\n y: bs.readRangedU32(0, 16000),\n z: bs.readRangedU32(0, 16000),\n });\n }\n result.sizes = sizes;\n\n return result;\n}\n\n// ============================================================\n// DebrisData (extends GameBaseData)\n// ============================================================\n\nfunction debrisDataUnpack(bs: BitStream): DebrisDataBlock {\n // Field order confirmed from decompiled binary FUN_006844d0\n const result: DebrisDataBlock = {};\n\n result.elasticity = bs.readF32(); // 0x50\n result.friction = bs.readF32(); // 0x4c\n result.numBounces = bs.readS32(); // 0x5c\n result.bounceVariance = bs.readS32(); // 0x60\n result.minSpinSpeed = bs.readF32(); // 0x64\n result.maxSpinSpeed = bs.readF32(); // 0x68\n\n // 4 bools via stream->write(sizeof(bool)) = 8 bits each (0x6c-0x6f)\n result.render2D = readBool(bs);\n result.explodeOnMaxBounce = readBool(bs);\n result.staticOnMaxBounce = readBool(bs);\n result.snapOnMaxBounce = readBool(bs);\n\n result.lifetime = bs.readF32(); // 0x54\n result.lifetimeVariance = bs.readF32(); // 0x58\n\n // The binary writes minSpinSpeed/maxSpinSpeed (0x64/0x68) a second\n // time here; the client's second read overwrites the first, so do the\n // same.\n result.minSpinSpeed = bs.readF32();\n result.maxSpinSpeed = bs.readF32();\n\n result.velocity = bs.readF32(); // 0x44\n result.velocityVariance = bs.readF32(); // 0x48\n\n // 2 bools via stream->write(sizeof(bool)) = 8 bits each (0x70, 0x71)\n result.useRadiusMass = readBool(bs);\n result.fade = readBool(bs);\n\n result.baseRadius = bs.readF32(); // 0x74\n result.gravModifier = bs.readF32(); // 0x78\n result.terminalVelocity = bs.readF32(); // 0x7c\n\n result.ignoreWater = readBool(bs); // 0x80 (8-bit bool)\n\n // 2 readString — names binary-verified: 0x8c is registered as\n // `texture`, 0x84 as `shapeName` (read in that wire order)\n result.texture = bs.readString(); // 0x8c\n result.shapeName = bs.readString(); // 0x84\n\n // 2 emitter refs (loop at 0xa4, 0xa8) + 1 explosion ref (0x94)\n result.emitter0 = readDataBlockRef(bs);\n result.emitter1 = readDataBlockRef(bs);\n result.explosion = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SplashData (extends GameBaseData)\n// ============================================================\n\nfunction splashDataUnpack(bs: BitStream): SplashDataBlock {\n const result: SplashDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = bs.readPoint3F();\n\n // ~15 F32/S32 values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n result.texFactor = bs.readF32();\n result.ejectionFreq = bs.readF32();\n result.ejectionAngle = bs.readF32();\n result.ringLifetime = bs.readF32();\n result.startRadius = bs.readF32();\n\n // explosion ref + 3 emitter refs\n result.explosion = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.foamTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ShockwaveData (extends GameBaseData)\n// ============================================================\n\nfunction shockwaveDataUnpack(bs: BitStream): ShockwaveDataBlock {\n const result: ShockwaveDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = bs.readPoint3F();\n\n // ~17 F32/S32/bool values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.numVertSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.verticalCurve = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n // 5 bools via stream->write(sizeof(bool)) = 8 bits each\n // (confirmed at offsets 0x98-0x9c in binary, using read(1,&var) pattern)\n result.is2D = readBool(bs);\n result.orientToNormal = readBool(bs);\n result.mapToTerrain = readBool(bs);\n result.renderBottom = readBool(bs);\n result.renderSquare = readBool(bs);\n\n // 3 emitter refs\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.mapToTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmitterData (extends GameBaseData)\n// ============================================================\n\nfunction particleEmitterDataUnpack(bs: BitStream): ParticleEmitterDataBlock {\n const result: ParticleEmitterDataBlock = {};\n\n // 4 readInt(various)\n result.ejectionPeriodMS = bs.readInt(10);\n result.periodVarianceMS = bs.readInt(10);\n result.ejectionVelocity = bs.readInt(16);\n result.velocityVariance = bs.readInt(14);\n\n // flag then readInt(16)\n if (bs.readFlag()) {\n result.ejectionOffset = bs.readInt(16);\n }\n\n // 2×readRangedU32(0,180)\n result.thetaMin = bs.readRangedU32(0, 180);\n result.thetaMax = bs.readRangedU32(0, 180);\n\n // 2 conditional readRangedU32(0,360)\n if (bs.readFlag()) result.phiReferenceVel = bs.readRangedU32(0, 360);\n if (bs.readFlag()) result.phiVariance = bs.readRangedU32(0, 360);\n\n // 3 flags\n result.overrideAdvances = bs.readFlag();\n result.orientParticles = bs.readFlag();\n result.orientOnVelocity = bs.readFlag();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // 2 flags\n result.useEmitterSizes = bs.readFlag();\n result.useEmitterColors = bs.readFlag();\n\n // U32 count (4 bytes) + per-particle: flag(1b) + conditional readClassId(11b)\n // Verified against decompiled binary FUN_006222a0:\n // read(4, &count) → U32 count\n // for each: readFlag → if true: FUN_00436d10 (readClassId, 11 bits); else: 0xFFFFFFFF\n // particleEngine.cc sizes the vector straight from the count (no cap);\n // each entry is at least the 1-bit presence flag.\n const particleCount = readCheckedCount(\n bs,\n 1,\n \"ParticleEmitterData particle count\",\n );\n const particles: (number | null)[] = [];\n for (let i = 0; i < particleCount; i++) {\n particles.push(readDataBlockRef(bs));\n }\n result.particles = particles;\n\n return result;\n}\n\n// ============================================================\n// ParticleData (extends GameBaseData)\n// ============================================================\n\nfunction particleDataUnpack(bs: BitStream): ParticleDataBlock {\n const result: ParticleDataBlock = {};\n\n // readFloat(10) + flag then F32\n result.dragCoefficient = bs.readFloat(10);\n if (bs.readFlag()) result.windCoefficient = bs.readF32();\n\n // readSignedFloat(12)\n result.gravityCoefficient = bs.readSignedFloat(12);\n\n // readFloat(9) + flag then F32\n result.inheritedVelFactor = bs.readFloat(9);\n if (bs.readFlag()) result.constantAcceleration = bs.readF32();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // flag then F32 (spinSpeed at offset 0x58, conditional)\n if (bs.readFlag()) result.spinSpeed = bs.readF32();\n\n // flag then 2×readInt(11) (spinRandomMin/Max at 0x5c/0x60)\n // Verified against decompiled binary FUN_006232d0:\n // spinRandom conditional checks BOTH defaults, reads 11-bit values (subtract 1000)\n if (bs.readFlag()) {\n result.spinRandomMin = bs.readInt(11);\n result.spinRandomMax = bs.readInt(11);\n }\n\n // useInvAlpha — always read (1-bit flag at offset 0x64)\n // NOT inside the spinRandom conditional (confirmed in binary: separate readFlag at line 416229)\n result.useInvAlpha = bs.readFlag();\n\n // readInt(2) count(+1); per key: 4×readFloat(7) + readFloat(14) + readFloat(8)\n const numKeys = bs.readInt(2) + 1;\n const keys: ParticleKey[] = [];\n for (let i = 0; i < numKeys; i++) {\n keys.push({\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n size: bs.readFloat(14),\n time: bs.readFloat(8),\n });\n }\n result.keys = keys;\n\n // readInt(6) texCount; per tex: readString. The writer only emits up\n // to PDC_MAX_TEX names, so a larger count means the stream is corrupt.\n const texCount = bs.readInt(6);\n if (texCount > ParticleDataMaxTextures) {\n throw new Error(`Invalid ParticleData texture count: ${texCount}`);\n }\n const textures: string[] = [];\n for (let i = 0; i < texCount; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// AudioDescription (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioDescriptionUnpack(bs: BitStream): AudioDescriptionDataBlock {\n const result: AudioDescriptionDataBlock = {};\n\n // readFloat(6)\n result.volume = bs.readFloat(6);\n\n // flag(looping); if true: 3×S32\n result.isLooping = bs.readFlag();\n if (result.isLooping) {\n result.loopCount = bs.readS32();\n result.minLoopGap = bs.readS32();\n result.maxLoopGap = bs.readS32();\n }\n\n // flag(is3D); if true: 2×F32 + 2×readInt(9) + readFloat(6) + readNormalVector(8) + F32\n // Verified: decompiled FUN_0040c1a0 has NO isStreaming flag between isLooping and is3D.\n // Offsets: isLooping=0x40, is3D=0x41 — consecutive with no gap.\n result.is3D = bs.readFlag();\n if (result.is3D) {\n result.referenceDistance = bs.readF32();\n result.maxDistance = bs.readF32();\n result.coneInsideAngle = bs.readInt(9);\n result.coneOutsideAngle = bs.readInt(9);\n result.coneOutsideVolume = bs.readFloat(6);\n result.coneVector = bs.readNormalVector(8);\n result.environmentLevel = bs.readF32();\n }\n\n // readInt(3) — type\n result.type = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// AudioProfile (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioProfileUnpack(bs: BitStream): AudioProfileDataBlock {\n const result: AudioProfileDataBlock = {};\n\n // Verified: decompiled FUN_0040c7f0 reads 3 DataBlock refs + 1 string.\n // Offsets: 0x48 (description), 0x4c (effect/environment), 0x50 (sampleEnvironment)\n result.description = readDataBlockRef(bs);\n result.environment = readDataBlockRef(bs);\n result.sampleEnvironment = readDataBlockRef(bs);\n\n // readString (filename, .wav appended on read)\n result.filename = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// AudioEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioEnvironmentUnpack(bs: BitStream): AudioEnvironmentDataBlock {\n // Verified against decompiled binary FUN_0040b530\n const result: AudioEnvironmentDataBlock = {};\n\n // flag(useRoom) → offset 0x3c\n result.useRoom = bs.readFlag();\n if (result.useRoom) {\n // readRangedU32(0, 26) → offset 0x40 (FUN_0043f120(0x1b=27), rangeSize=27, max=26)\n result.room = bs.readRangedU32(0, 26);\n } else {\n // 13 fields inside !useRoom branch (binary offsets 0x44-0x7c)\n result.roomHF = readRangedS32(bs, -10000, 0); // 0x44\n result.reflections = readRangedS32(bs, -10000, 10000); // 0x48\n result.reverb = readRangedS32(bs, -10000, 2000); // 0x4c\n result.roomRolloffFactor = readRangedF32(bs, 0.1, 10, 8); // 0x50\n result.decayTime = readRangedF32(bs, 0.1, 20, 8); // 0x54\n result.decayHFRatio = readRangedF32(bs, 0.1, 20, 8); // 0x58\n result.reflectionsDelay = readRangedF32(bs, 0, 0.3, 9); // 0x5c\n result.reverbDelay = readRangedF32(bs, 0, 0.1, 7); // 0x60\n result.roomVolume = readRangedS32(bs, -10000, 0); // 0x64\n // Names binary-verified: initPersistFields maps 0x6c damping,\n // 0x70 environmentSize, 0x74 environmentDiffusion, 0x78 airAbsorption.\n result.damping = readRangedF32(bs, 0, 1, 9); // 0x6c (9 bits, confirmed in binary)\n result.environmentSize = readRangedF32(bs, 0, 2, 10); // 0x70 (10 bits, confirmed in binary)\n result.environmentDiffusion = readRangedF32(bs, 1, 100, 8); // 0x74 (8 bits, confirmed in binary)\n result.airAbsorption = readRangedF32(bs, 0, 1, 10); // 0x78 (10 bits, confirmed in binary)\n result.flags = bs.readInt(6); // 0x7c\n }\n\n // Trailing field: always present after both branches (offset 0x68 =\n // effectVolume per initPersistFields)\n result.effectVolume = readRangedF32(bs, 0, 1, 8);\n\n return result;\n}\n\n// ============================================================\n// AudioSampleEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioSampleEnvironmentUnpack(\n bs: BitStream,\n): AudioSampleEnvironmentDataBlock {\n const result: AudioSampleEnvironmentDataBlock = {};\n\n // Series of rangedS32 and rangedF32 values + readInt(3)\n result.direct = readRangedS32(bs, -10000, 1000);\n result.directHF = readRangedS32(bs, -10000, 0);\n result.room = readRangedS32(bs, -10000, 1000);\n result.roomHF = readRangedS32(bs, -10000, 0);\n result.obstruction = readRangedF32(bs, 0, 1, 9);\n result.obstructionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusion = readRangedF32(bs, 0, 1, 9);\n result.occlusionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusionRoomRatio = readRangedF32(bs, 0, 10, 9);\n result.roomRolloff = readRangedF32(bs, 0, 10, 9);\n result.airAbsorption = readRangedF32(bs, 0, 10, 9);\n result.outsideVolumeHF = readRangedS32(bs, -10000, 0);\n result.flags = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// DecalData (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction decalDataUnpack(bs: BitStream): DecalDataBlock {\n return {\n sizeX: bs.readF32(),\n sizeY: bs.readF32(),\n textureName: bs.readString(),\n };\n}\n\n// ============================================================\n// CameraData (extends ShapeBaseData) — no additional fields\n// ============================================================\n\nfunction cameraDataUnpack(bs: BitStream): CameraDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// SensorData — empty body\n// ============================================================\n\nfunction sensorDataUnpack(_bs: BitStream): SensorDataBlock {\n return {};\n}\n\n// ============================================================\n// TriggerData — S32(tickPeriodMS)\n// ============================================================\n\nfunction triggerDataUnpack(bs: BitStream): TriggerDataBlock {\n return { tickPeriodMS: bs.readS32() };\n}\n\n// ============================================================\n// ForceFieldBareData\n// ============================================================\n\nfunction forceFieldBareDataUnpack(bs: BitStream): ForceFieldBareDataBlock {\n // Verified against decompiled binary FUN_00675580\n const result: ForceFieldBareDataBlock = {};\n\n // 3 S32/F32 (offsets 0x44, 0x48, 0x4c)\n result.fadeMS = bs.readS32();\n result.baseTranslucency = bs.readF32();\n result.powerOffTranslucency = bs.readF32();\n\n // 2 readFlag (offsets 0x8c, 0x8d — 1-bit flags, inline bit extraction)\n result.fadeInOnly = bs.readFlag();\n result.triggerEnable = bs.readFlag();\n\n // 2 ColorF via FUN_0043f040 (packed 4×U8 = 32 bits each, offsets 0x90, 0xa0)\n result.color1 = readColorF(bs);\n result.color2 = readColorF(bs);\n\n // Offsets 0x84, 0x88, 0x80, 0x78, 0x7c — named to match TorqueScript fields.\n // framesPerSec and numFrames are S32 (integers); the rest are F32.\n result.framesPerSec = bs.readS32(); // 0x84\n result.numFrames = bs.readS32(); // 0x88\n result.scrollSpeed = bs.readF32(); // 0x80\n result.umapping = bs.readF32(); // 0x78\n result.vmapping = bs.readF32(); // 0x7c\n\n // 5 readString (loop at 0x50+i*4)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n result.texture2 = bs.readString();\n result.texture3 = bs.readString();\n result.texture4 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmissionDummyData — F32(timeMultiple)\n// ============================================================\n\nfunction particleEmissionDummyDataUnpack(\n bs: BitStream,\n): ParticleEmissionDummyDataBlock {\n return { timeMultiple: bs.readF32() };\n}\n\n// ============================================================\n// CommanderIconData — 5 readString (NumImages=5)\n// ============================================================\n\nfunction commanderIconDataUnpack(bs: BitStream): CommanderIconDataBlock {\n return {\n baseImage: bs.readString(),\n activeImage: bs.readString(),\n inactiveImage: bs.readString(),\n selectImage: bs.readString(),\n hilightImage: bs.readString(),\n };\n}\n\n// ============================================================\n// PrecipitationData\n// ============================================================\n\nfunction precipitationDataUnpack(bs: BitStream): PrecipitationDataBlock {\n // Verified against decompiled binary FUN_006805d0\n const result: PrecipitationDataBlock = {};\n\n // DataBlockRef (soundProfile at offset 0x48)\n result.soundProfile = readDataBlockRef(bs);\n\n // S32 (offset 0x4c)\n result.numDrops = bs.readS32();\n\n // F32 (maxSize at offset 0x50 — before string)\n result.maxSize = bs.readF32();\n\n // readString (materialList at offset 0x5c)\n result.materialList = bs.readString();\n\n // 13×F32 (offsets 0x54, 0x58, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88)\n result.sizeX = bs.readF32();\n result.sizeY = bs.readF32();\n result.movingBoxPer = bs.readF32();\n result.divHeightVal = bs.readF32();\n result.sizeBigBox = bs.readF32();\n result.topBoxSpeed = bs.readF32();\n result.frontBoxSpeed = bs.readF32();\n result.topBoxDrawPer = bs.readF32();\n result.bottomDrawHeight = bs.readF32();\n result.skipIfPer = bs.readF32();\n result.bottomSpeedPer = bs.readF32();\n result.frontSpeedPer = bs.readF32();\n result.frontRadiusPer = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FireballAtmosphereData\n// ============================================================\n\nfunction fireballAtmosphereDataUnpack(\n bs: BitStream,\n): FireballAtmosphereDataBlock {\n return { emitter: readDataBlockRef(bs) };\n}\n\n// ============================================================\n// LightningData\n// ============================================================\n\nfunction lightningDataUnpack(bs: BitStream): LightningDataBlock {\n const result: LightningDataBlock = {};\n\n // 8 readDataBlockRef (strikeSound profiles)\n const strikeSounds: (number | null)[] = [];\n for (let i = 0; i < 8; i++) {\n strikeSounds.push(readDataBlockRef(bs));\n }\n result.strikeSounds = strikeSounds;\n\n // 8 readString (strikeTextures)\n const strikeTextures: string[] = [];\n for (let i = 0; i < 8; i++) {\n strikeTextures.push(bs.readString());\n }\n result.strikeTextures = strikeTextures;\n\n // readDataBlockRef (thunder sound)\n result.thunderSound = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// StationFXVehicleData\n// ============================================================\n\nfunction stationFXVehicleDataUnpack(bs: BitStream): StationFXVehicleDataBlock {\n // Field order confirmed from decompiled binary FUN_0069d570\n const result: StationFXVehicleDataBlock = {};\n\n // 11 F32 fields (offsets 0x44-0x6c)\n result.glowTopHeight = bs.readF32(); // 0x44\n result.glowBottomHeight = bs.readF32(); // 0x48\n result.glowTopRadius = bs.readF32(); // 0x4c\n result.glowBottomRadius = bs.readF32(); // 0x50\n result.numGlowSegments = bs.readF32(); // 0x54\n result.glowFadeTime = bs.readF32(); // 0x58\n result.armLightDelay = bs.readF32(); // 0x5c\n result.armLightLifetime = bs.readF32(); // 0x60\n result.armLightFadeTime = bs.readF32(); // 0x64\n result.lifetime = bs.readF32(); // 0x68\n result.numArcSegments = bs.readF32(); // 0x6c\n\n // ColorF via FUN_0043f040 (4×U8 = 32 bits at offset 0x70)\n result.sphereColor = readColorF(bs);\n\n // 6 F32 fields (offsets 0x80-0x94)\n result.spherePhiSegments = bs.readF32(); // 0x80\n result.sphereThetaSegments = bs.readF32(); // 0x84\n result.sphereRadius = bs.readF32(); // 0x88\n result.scale = {\n x: bs.readF32(), // 0x8c\n y: bs.readF32(), // 0x90\n z: bs.readF32(), // 0x94\n };\n\n // 11 strings — names binary-verified (initPersistFields: 0x98\n // glowNodeName, 0x9c leftNodeName[4], 0xac rightNodeName[4], 0xbc\n // texture[2]) and demo-verified (\"GLOWFX\", LFX1/RFX1…, stationGlow).\n result.glowNodeName = bs.readString(); // 0x98\n\n // 4×(left, right) node name pairs, interleaved on the wire\n result.leftNodeName0 = bs.readString();\n result.rightNodeName0 = bs.readString();\n result.leftNodeName1 = bs.readString();\n result.rightNodeName1 = bs.readString();\n result.leftNodeName2 = bs.readString();\n result.rightNodeName2 = bs.readString();\n result.leftNodeName3 = bs.readString();\n result.rightNodeName3 = bs.readString();\n\n // 2 readString\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// StationFXPersonalData\n// ============================================================\n\nfunction stationFXPersonalDataUnpack(\n bs: BitStream,\n): StationFXPersonalDataBlock {\n const result: StationFXPersonalDataBlock = {};\n\n // ~10 F32\n result.glowTopRadius = bs.readF32();\n result.glowBottomRadius = bs.readF32();\n result.glowTopHeight = bs.readF32();\n result.glowBottomHeight = bs.readF32();\n result.numGlowSegments = bs.readF32();\n result.numGlowPanels = bs.readF32();\n result.topAlpha = bs.readF32();\n result.bottomAlpha = bs.readF32();\n result.glowSpeed = bs.readF32();\n result.scrollSpeed = bs.readF32();\n\n // 4 strings — demo-verified (\"FX1\", \"FX2\", \"special/stationLight\"):\n // the two attach node names, then texture[2]\n result.leftNodeName = bs.readString();\n result.rightNodeName = bs.readString();\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// CannedChatItem (game-specific, Tribes 2 only)\n// From Tribes 2 script reference: single readString (chatText)\n// ============================================================\n\nfunction cannedChatItemUnpack(bs: BitStream): CannedChatItemDataBlock {\n return { chatText: bs.readString() };\n}\n\n// ============================================================\n// MissionMarkerData (extends ShapeBaseData — no additional fields)\n// ============================================================\n\nfunction missionMarkerDataUnpack(bs: BitStream): MissionMarkerDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// GameBaseData (extends SimDataBlock — 0 bits on wire)\n// ============================================================\n\nfunction gameBaseDataUnpack(_bs: BitStream): GameBaseDataBlock {\n return {};\n}\n\n// ============================================================\n// SimDataBlock — 0 bits on wire (base class)\n// ============================================================\n\nfunction simDataBlockUnpack(_bs: BitStream): SimDataBlock {\n return {};\n}\n\n// ============================================================\n// TSShapeConstructor (extends SimDataBlock)\n// readString(shape) + readInt(7) count + count × readString\n// NumSequenceBits = 7\n// ============================================================\n\nfunction tsShapeConstructorUnpack(bs: BitStream): TSShapeConstructorDataBlock {\n const result: TSShapeConstructorDataBlock = {};\n result.shape = bs.readString();\n const count = bs.readInt(7);\n const sequences: string[] = [];\n for (let i = 0; i < count; i++) {\n sequences.push(bs.readString());\n }\n result.sequences = sequences;\n return result;\n}\n\n// ============================================================\n// EffectProfile (classId 139)\n// From decompiled binary FUN_0050dde0.\n// Parent: SimDataBlock (no-op)\n// ============================================================\n\nfunction effectProfileUnpack(bs: BitStream): EffectProfileDataBlock {\n const result: EffectProfileDataBlock = {};\n result.minDistance = bs.readF32(); // 0x40\n result.maxDistance = bs.readF32(); // 0x44\n result.audioScale = bs.readF32(); // 0x48\n result.directional = readBool(bs); // 0x4c, _read(1) = 8-bit bool\n result.effectName = bs.readString(); // 0x3c\n return result;\n}\n\n// ============================================================\n// JetEffectData (classId 150)\n// From decompiled binary FUN_0069fe60.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction jetEffectDataUnpack(bs: BitStream): JetEffectDataBlock {\n const result: JetEffectDataBlock = {};\n result.coolColor = readColorF(bs); // 0x44, FUN_0043f040 = packed 4×U8\n result.hotColor = readColorF(bs); // 0x54, FUN_0043f040 = packed 4×U8\n result.activateTime = bs.readF32(); // 0x64\n result.deactivateTime = bs.readF32(); // 0x68\n result.length = bs.readF32(); // 0x6c\n result.width = bs.readF32(); // 0x70\n result.speed = bs.readF32(); // 0x74\n result.stretch = bs.readF32(); // 0x78\n result.yOffset = bs.readF32(); // 0x7c\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x80\n }\n return result;\n}\n\n// ============================================================\n// RunningLightData (classId 162)\n// From decompiled binary FUN_006a0af0.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction runningLightDataUnpack(bs: BitStream): RunningLightDataBlock {\n const result: RunningLightDataBlock = {};\n result.radius = bs.readF32(); // 0x48\n result.color = readColorF(bs); // 0x4c, FUN_0043f040 = packed 4×U8\n result.type = bs.readF32(); // 0x44, stored as F32 (bool/int on wire)\n result.length = bs.readF32(); // 0x78\n result.nodeName = bs.readString(); // 0x5c\n result.direction = {\n // 0x60-0x68\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.offset = {\n // 0x6c-0x74\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x7c\n }\n return result;\n}\n\n// ============================================================\n// Registration\n// ============================================================\n\nexport function registerDataBlockParsers(registry: ClassRegistry): void {\n // Base types\n registry.catalogDataBlock({\n name: \"ShapeBaseData\",\n unpackData: shapeBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShapeBaseImageData\",\n unpackData: shapeBaseImageDataUnpack,\n });\n\n // Player/Vehicle types\n registry.catalogDataBlock({\n name: \"PlayerData\",\n unpackData: playerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"VehicleData\",\n unpackData: vehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlyingVehicleData\",\n unpackData: flyingVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"HoverVehicleData\",\n unpackData: hoverVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"WheeledVehicleData\",\n unpackData: wheeledVehicleDataUnpack,\n });\n\n // Static/Turret types\n registry.catalogDataBlock({\n name: \"StaticShapeData\",\n unpackData: staticShapeDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TurretData\",\n unpackData: turretDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TurretImageData\",\n unpackData: turretImageDataUnpack,\n });\n\n // Item\n registry.catalogDataBlock({ name: \"ItemData\", unpackData: itemDataUnpack });\n\n // Projectile types\n registry.catalogDataBlock({\n name: \"ProjectileData\",\n unpackData: projectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearProjectileData\",\n unpackData: linearProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GrenadeProjectileData\",\n unpackData: grenadeProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SeekerProjectileData\",\n unpackData: seekerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SniperProjectileData\",\n unpackData: sniperProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockLanceProjectileData\",\n unpackData: shockLanceProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ELFProjectileData\",\n unpackData: elfProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RepairProjectileData\",\n unpackData: repairProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TargetProjectileData\",\n unpackData: targetProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TracerProjectileData\",\n unpackData: tracerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"EnergyProjectileData\",\n unpackData: energyProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearFlareProjectileData\",\n unpackData: linearFlareProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"BombProjectileData\",\n unpackData: bombProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlareProjectileData\",\n unpackData: flareProjectileDataUnpack,\n });\n\n // Effects\n registry.catalogDataBlock({\n name: \"ExplosionData\",\n unpackData: explosionDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"DebrisData\",\n unpackData: debrisDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SplashData\",\n unpackData: splashDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockwaveData\",\n unpackData: shockwaveDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmitterData\",\n unpackData: particleEmitterDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleData\",\n unpackData: particleDataUnpack,\n });\n\n // Audio\n registry.catalogDataBlock({\n name: \"AudioDescription\",\n unpackData: audioDescriptionUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioProfile\",\n unpackData: audioProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioEnvironment\",\n unpackData: audioEnvironmentUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioSampleEnvironment\",\n unpackData: audioSampleEnvironmentUnpack,\n });\n\n // Misc\n registry.catalogDataBlock({ name: \"DecalData\", unpackData: decalDataUnpack });\n registry.catalogDataBlock({\n name: \"CameraData\",\n unpackData: cameraDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SensorData\",\n unpackData: sensorDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TriggerData\",\n unpackData: triggerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ForceFieldBareData\",\n unpackData: forceFieldBareDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmissionDummyData\",\n unpackData: particleEmissionDummyDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"CommanderIconData\",\n unpackData: commanderIconDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"PrecipitationData\",\n unpackData: precipitationDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FireballAtmosphereData\",\n unpackData: fireballAtmosphereDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LightningData\",\n unpackData: lightningDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXVehicleData\",\n unpackData: stationFXVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXPersonalData\",\n unpackData: stationFXPersonalDataUnpack,\n });\n\n // Classes added from game-specific analysis\n registry.catalogDataBlock({\n name: \"CannedChatItem\",\n unpackData: cannedChatItemUnpack,\n });\n registry.catalogDataBlock({\n name: \"MissionMarkerData\",\n unpackData: missionMarkerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GameBaseData\",\n unpackData: gameBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SimDataBlock\",\n unpackData: simDataBlockUnpack,\n });\n registry.catalogDataBlock({\n name: \"TSShapeConstructor\",\n unpackData: tsShapeConstructorUnpack,\n });\n\n // Previously missing parsers (verified against decompiled binary)\n registry.catalogDataBlock({\n name: \"EffectProfile\",\n unpackData: effectProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"JetEffectData\",\n unpackData: jetEffectDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RunningLightData\",\n unpackData: runningLightDataUnpack,\n });\n}\n"]}
|
|
@@ -543,13 +543,15 @@ export type EnergyProjectileDataBlock = GrenadeProjectileDataBlock & {
|
|
|
543
543
|
texture1?: string;
|
|
544
544
|
};
|
|
545
545
|
export type LinearFlareProjectileDataBlock = LinearProjectileDataBlock & {
|
|
546
|
+
/** Spikes kept alive around the bolt (plasma: 35). */
|
|
546
547
|
numFlares?: number;
|
|
547
548
|
flareColor?: Color4;
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
549
|
+
/** Billboard texture for a shapeless bolt (e.g. "flaremod"). */
|
|
550
|
+
flareModTexture?: string;
|
|
551
|
+
/** Spike texture (e.g. "flarebase"). */
|
|
552
|
+
flareBaseTexture?: string;
|
|
553
|
+
/** size[0..2]: spike base scale, and the tip scale it grows from and to. */
|
|
554
|
+
sizes?: [number, number, number];
|
|
553
555
|
};
|
|
554
556
|
export type BombProjectileDataBlock = GrenadeProjectileDataBlock & {
|
|
555
557
|
smokeDist?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBlockDataTypes.d.ts","sourceRoot":"","sources":["../src/dataBlockDataTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataBlockDataTypes.d.ts","sourceRoot":"","sources":["../src/dataBlockDataTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBlockDataTypes.js","sourceRoot":"","sources":["../src/dataBlockDataTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type { Vec3, Color3, Color4, AffineTransform } from \"./dataTypes.js\";\n\n// ---------------------------------------------------------------------------\n// Sub-structures\n// ---------------------------------------------------------------------------\n\nexport type HudImageEntry = {\n friendlyName: string;\n enemyName?: string;\n renderCenter: boolean;\n renderModulated: boolean;\n renderAlways: boolean;\n renderDistance: boolean;\n renderName: boolean;\n};\n\n/**\n * One ShapeBaseImageData state. Transition values are 1-based state\n * indices (0 = no transition), in the engine's own packing order —\n * binary-verified; earlier versions had the names rotated by two slots\n * (no NotLoaded/Loaded, phantom generic0 pair) and consumers carried a\n * remap table to compensate.\n */\nexport type ImageState = {\n name: string;\n transitionOnNotLoaded: number;\n transitionOnLoaded: number;\n transitionOnAmmo: number;\n transitionOnNoAmmo: number;\n transitionOnTarget: number;\n transitionOnNoTarget: number;\n transitionOnWet: number;\n transitionOnNotWet: number;\n transitionOnTriggerUp: number;\n transitionOnTriggerDown: number;\n transitionOnTimeout: number;\n timeoutValue?: number;\n waitForTimeout: boolean;\n fire: boolean;\n ejectShell: boolean;\n scaleAnimation: boolean;\n direction: boolean;\n reload: boolean;\n energyDrain?: number;\n loaded: number;\n spin: number;\n recoil: number;\n sequence?: number;\n sequenceVis?: number;\n flashSequence: boolean;\n ignoreLoadedForReady: boolean;\n emitter: number | null;\n emitterTime?: number;\n emitterNode?: number;\n sound: number | null;\n};\n\nexport type ParticleKey = {\n r: number;\n g: number;\n b: number;\n a: number;\n size: number;\n time: number;\n};\n\n// ---------------------------------------------------------------------------\n// Base DataBlock types\n// ---------------------------------------------------------------------------\n\nexport type SimDataBlock = {\n};\n\nexport interface GameBaseDataBlock extends SimDataBlock {}\n\n// ---------------------------------------------------------------------------\n// ShapeBase hierarchy\n// ---------------------------------------------------------------------------\n\nexport type ShapeBaseDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mass?: number;\n drag?: number;\n density?: number;\n maxEnergy?: number;\n cameraMaxDist?: number;\n cameraMinDist?: number;\n cameraDefaultFov?: number;\n cameraMinFov?: number;\n cameraMaxFov?: number;\n debrisShapeName?: string;\n sensorRadius?: number;\n sensorColor?: Color4;\n heat?: number;\n cmdCategory?: string;\n cmdMiniIconName?: string;\n canControl?: boolean;\n canObserve?: boolean;\n observeThroughObject?: boolean;\n emap?: boolean;\n isInvincible?: boolean;\n renderWhenDestroyed?: boolean;\n cmdIcon?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n debris?: number | null;\n inheritEnergyFromMount?: boolean;\n firstPersonOnly?: boolean;\n useEyePoint?: boolean;\n shieldEffectLifetimeMS?: number;\n shieldEffectScale?: Vec3;\n hudImages?: HudImageEntry[];\n};\n\nexport type ShapeBaseImageDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mountPoint?: number;\n offset?: AffineTransform;\n firstPerson?: boolean;\n mass?: number;\n usesEnergy?: boolean;\n minEnergy?: number;\n hasFlash?: boolean;\n projectile?: number | null;\n muzzleFlash?: number | null;\n isSeeker?: boolean;\n seekerRadius?: number;\n maxSeekAngle?: number;\n seekerLockTime?: number;\n seekerFreeTime?: number;\n isTargetLockRequired?: boolean;\n maxLockRange?: number;\n cloakable?: boolean;\n lightType?: number;\n lightRadius?: number;\n lightTime?: number;\n lightColor?: Color4;\n shellExitDir?: Vec3;\n shellExitVariance?: number;\n shellVelocity?: number;\n casing?: number | null;\n accuFire?: boolean;\n states?: ImageState[];\n};\n\n// ---------------------------------------------------------------------------\n// Player\n// ---------------------------------------------------------------------------\n\n/**\n * Field names for the movement/jet/splash sections are binary-verified\n * against Tribes2.exe (build 25034) initPersistFields offsets — the\n * retail struct layout differs from the SVN engine source.\n */\nexport type PlayerDataBlock = ShapeBaseDataBlock & {\n renderFirstPerson?: boolean;\n minLookAngle?: number;\n maxLookAngle?: number;\n maxFreelookAngle?: number;\n maxTimeScale?: number;\n maxStepHeight?: number;\n jetForce?: number;\n underwaterJetForce?: number;\n underwaterVertJetFactor?: number;\n /** Energy drained per 32ms tick while jetting. */\n jetEnergyDrain?: number;\n underwaterJetEnergyDrain?: number;\n /** Jets refuse to fire below this energy level. */\n minJetEnergy?: number;\n maxJetForwardSpeed?: number;\n maxJetHorizontalPercentage?: number;\n jetEmitter?: number | null;\n jetEffect?: number | null;\n runForce?: number;\n runEnergyDrain?: number;\n minRunEnergy?: number;\n maxForwardSpeed?: number;\n maxBackwardSpeed?: number;\n maxSideSpeed?: number;\n maxUnderwaterForwardSpeed?: number;\n maxUnderwaterBackwardSpeed?: number;\n maxUnderwaterSideSpeed?: number;\n runSurfaceAngle?: number;\n recoverDelay?: number;\n recoverRunForceScale?: number;\n jumpForce?: number;\n jumpEnergyDrain?: number;\n minJumpEnergy?: number;\n minJumpSpeed?: number;\n maxJumpSpeed?: number;\n jumpSurfaceAngle?: number;\n jumpDelay?: number;\n horizMaxSpeed?: number;\n horizResistSpeed?: number;\n horizResistFactor?: number;\n upMaxSpeed?: number;\n upResistSpeed?: number;\n upResistFactor?: number;\n splashVelocity?: number;\n splashAngle?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n bubbleEmitTime?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n exitSplashSoundVelocity?: number;\n footstepSplashHeight?: number;\n minImpactSpeed?: number;\n sounds?: (number | null)[];\n boxSize?: Vec3;\n footPuffEmitter?: number | null;\n footPuffNumParts?: number;\n footPuffRadius?: number;\n decalData?: number | null;\n decalOffset?: number;\n dustEmitter?: number | null;\n splash?: number | null;\n splashEmitters?: (number | null)[];\n groundImpactMinSpeed?: number;\n groundImpactShakeFreq?: Vec3;\n groundImpactShakeAmp?: Vec3;\n groundImpactShakeDuration?: number;\n groundImpactShakeFalloff?: number;\n /** Heat signature rates (Tribes 2; retail player.cs: 1/4 and 1/3). */\n heatDecayPerSec?: number;\n heatIncreasePerSec?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Vehicles\n// ---------------------------------------------------------------------------\n\nexport type VehicleDataBlock = ShapeBaseDataBlock & {\n bodyRestitution?: number;\n bodyFriction?: number;\n impactSounds?: (number | null)[];\n minImpactSpeed?: number;\n softImpactSpeed?: number;\n hardImpactSpeed?: number;\n minRollSpeed?: number;\n maxSteeringAngle?: number;\n maxDrag?: number;\n minDrag?: number;\n cameraOffset?: number;\n cameraLag?: number;\n jetForce?: number;\n jetEnergyDrain?: number;\n minJetEnergy?: number;\n triggerDustHeight?: number;\n dustHeight?: number;\n numDmgEmitterAreas?: number;\n integration?: number;\n collisionTol?: number;\n massCenter?: number;\n exitSplashSoundVelocity?: number;\n softSplashSoundVelocity?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n waterSounds?: (number | null)[];\n dustEmitter?: number | null;\n damageEmitters?: (number | null)[];\n splashEmitters?: (number | null)[];\n damageEmitterOffset0?: Vec3;\n damageEmitterOffset1?: Vec3;\n damageLevelTolerance0?: number;\n damageLevelTolerance1?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n collDamageThresholdVel?: number;\n collDamageMultiplier?: number;\n};\n\nexport type FlyingVehicleDataBlock = VehicleDataBlock & {\n jetActivateSound?: number | null;\n jetDeactivateSound?: number | null;\n jetEmitters?: (number | null)[];\n maneuveringForce?: number;\n horizontalSurfaceForce?: number;\n verticalSurfaceForce?: number;\n autoInputDamping?: number;\n steeringForce?: number;\n steeringRollForce?: number;\n rollForce?: number;\n autoAngularForce?: number;\n rotationalDrag?: number;\n maxAutoSpeed?: number;\n autoLinearForce?: number;\n hoverHeight?: number;\n createHoverHeight?: number;\n minTrailSpeed?: number;\n vertThrustMultiple?: number;\n maxForwardSpeed?: number;\n};\n\nexport type HoverVehicleDataBlock = VehicleDataBlock & {\n dragForce?: number;\n mainThrustForce?: number;\n reverseThrustForce?: number;\n strafeThrustForce?: number;\n turboFactor?: number;\n stabLenMin?: number;\n stabLenMax?: number;\n stabSpringConstant?: number;\n stabDampingConstant?: number;\n gyroDrag?: number;\n normalForce?: number;\n restorativeForce?: number;\n steeringForce?: number;\n rollForce?: number;\n pitchForce?: number;\n floatingThrustFactor?: number;\n brakingForce?: number;\n dustTrailOffset?: Vec3;\n dustTrailFreqMod?: number;\n triggerTrailHeight?: number;\n floatSound?: number | null;\n thrustSound?: number | null;\n turboSound?: number | null;\n jetEmitters?: (number | null)[];\n dustTrailEmitter?: number | null;\n mainThrustEmitterFactor?: number;\n strafeThrustEmitterFactor?: number;\n reverseThrustEmitterFactor?: number;\n};\n\nexport type WheeledVehicleDataBlock = VehicleDataBlock & {\n tireRadius?: number;\n tireStaticFriction?: number;\n tireKineticFriction?: number;\n tireRestitution?: number;\n tireLateralForce?: number;\n tireLateralDamping?: number;\n tireLateralRelaxation?: number;\n tireLongitudinalForce?: number;\n tireLongitudinalDamping?: number;\n tireEmitter?: number | null;\n jetSound?: number | null;\n engineSound?: number | null;\n squealSound?: number | null;\n wadeSound?: number | null;\n spring?: number;\n springDamping?: number;\n springLength?: number;\n brakeTorque?: number;\n engineTorque?: number;\n engineBrake?: number;\n maxWheelSpeed?: number;\n steeringAngle?: number;\n steeringReturn?: number;\n steeringDamping?: number;\n powerSteeringFactor?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Static shapes and turrets\n// ---------------------------------------------------------------------------\n\nexport type StaticShapeDataBlock = ShapeBaseDataBlock & {\n noIndividualDamage?: boolean;\n dynamicTypeField?: number;\n};\n\nexport type TurretDataBlock = StaticShapeDataBlock & {\n thetaMin?: number;\n thetaMax?: number;\n thetaNull?: number;\n neverUpdateControl?: boolean;\n primaryAxis?: number;\n maxCapacitorEnergy?: number;\n capacitorRechargeRate?: number;\n};\n\nexport type TurretImageDataBlock = ShapeBaseImageDataBlock & {\n activationMS?: number;\n deactivateDelayMS?: number;\n degPerSecTheta?: number;\n degPerSecPhi?: number;\n dontFireInsideDamageRadius?: boolean;\n damageRadius?: number;\n useCapacitor?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Items\n// ---------------------------------------------------------------------------\n\nexport type ItemDataBlock = ShapeBaseDataBlock & {\n friction?: number;\n elasticity?: number;\n sticky?: boolean;\n gravityMod?: number;\n maxVelocity?: number;\n lightType?: number;\n lightColor?: Color4;\n lightTime?: number;\n lightRadius?: number;\n lightOnlyStatic?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Projectiles\n// ---------------------------------------------------------------------------\n\nexport type ProjectileDataBlock = GameBaseDataBlock & {\n projectileShapeName?: string;\n faceViewerLinkTime?: number;\n lifetime?: number;\n faceViewer?: boolean;\n scale?: Vec3;\n baseEmitter?: number | null;\n delayEmitter?: number | null;\n bubbleEmitter?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n splash?: number | null;\n sound?: number | null;\n wetFireSound?: number | null;\n fireSound?: number | null;\n decals?: (number | null)[];\n lightRadius?: number;\n lightColor?: Color3 | Color4;\n underwaterLightColor?: Color3;\n explodeOnWaterImpact?: boolean;\n depthTolerance?: number;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0062b3c0 / unpackData FUN_0062bea0.\n */\nexport type LinearProjectileDataBlock = ProjectileDataBlock & {\n dryVelocity?: number;\n wetVelocity?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n fizzleTimeMS?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n lifetimeMS?: number;\n explodeOnDeath?: boolean;\n /** Degrees, 0–90. */\n reflectOnWaterImpactAngle?: number;\n /** Degrees, 0–90. */\n deflectionOnWaterImpact?: number;\n fizzleUnderwaterMS?: number;\n activateDelayMS?: number;\n doDynamicClientHits?: boolean;\n};\n\nexport type GrenadeProjectileDataBlock = ProjectileDataBlock & {\n armingDelayMS?: number;\n muzzleVelocity?: number;\n grenadeElasticity?: number;\n grenadeFriction?: number;\n drag?: number;\n density?: number;\n gravityMod?: number;\n lifetimeMS?: number;\n};\n\nexport type SeekerProjectileDataBlock = ProjectileDataBlock & {\n lifetimeMS?: number;\n muzzleVelocity?: number;\n turningSpeed?: number;\n proximityRadius?: number;\n terrainAvoidanceSpeed?: number;\n terrainScanAhead?: number;\n terrainHeightFail?: number;\n terrainAvoidanceRadius?: number;\n flareDistance?: number;\n flareAngle?: number;\n useFlechette?: boolean;\n maxVelocity?: number;\n acceleration?: number;\n flechetteDelayMs?: number;\n exhaustTimeMs?: number;\n exhaustNodeName?: string;\n casingShapeName?: string;\n casingDebris?: number | null;\n puffEmitter?: number | null;\n exhaustEmitter?: number | null;\n};\n\nexport type SniperProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n rifleHeadMultiplier?: number;\n beamColor?: Color4;\n fadeTime?: number;\n startBeamWidth?: number;\n endBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\nexport type ShockLanceProjectileDataBlock = ProjectileDataBlock & {\n zapDuration?: number;\n boltLength?: number;\n numParts?: number;\n lightningFreq?: number;\n lightningDensity?: number;\n lightningAmp?: number;\n lightningWidth?: number;\n shockwave?: number | null;\n startWidth?: number[];\n endWidth?: number[];\n boltSpeed?: number[];\n texWrap?: number[];\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0064a860 / unpackData FUN_0064ae00. The ELF\n * gun: a wavy main beam with lightning arcs around it.\n */\nexport type ELFProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n mainBeamWidth?: number;\n mainBeamSpeed?: number;\n mainBeamRepeat?: number;\n lightningWidth?: number;\n lightningDist?: number;\n /** textures[0..2] — retail: ELFBeam, ELFLightning, BlueImpact. */\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00644910 / unpackData FUN_00644c40. The repair\n * beam: a segmented ribbon (numSegments) with a blur trail.\n */\nexport type RepairProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n beamWidth?: number;\n /** Engine S32 (the old decode read its raw bits as a float). */\n numSegments?: number;\n beamSpeed?: number;\n texRepeat?: number;\n blurFreq?: number;\n blurLifetime?: number;\n cutoffAngle?: number;\n /** textures[0..1] — retail: special/redbump2, special/redflare. */\n textures?: string[];\n};\n\nexport type TargetProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n beamColor?: Color4;\n startBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0063fcb0 / unpackData FUN_00640160.\n */\nexport type TracerProjectileDataBlock = LinearProjectileDataBlock & {\n tracerLength?: number;\n tracerWidth?: number;\n tracerMinPixels?: number;\n /** Registered as a bool in the engine despite the name. */\n tracerAlpha?: boolean;\n tracerColor?: Color4;\n /** Cross fades in when the view angle cosine exceeds this. */\n crossViewAng?: number;\n crossSize?: number;\n renderCross?: boolean;\n tracerTex0?: string;\n tracerTex1?: string;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00694b40 / unpackData FUN_00694d80. The blaster\n * bolt: an oriented additive quad (texture0) with an edge-on cross\n * (texture1) and an untextured motion-blur tail (blur* fields).\n */\nexport type EnergyProjectileDataBlock = GrenadeProjectileDataBlock & {\n /** Cross fades in when the view angle cosine exceeds this (0x168). */\n crossViewAng?: number;\n crossSize?: number;\n blurLifetime?: number;\n blurWidth?: number;\n /** Blur tail color; only RGB is transmitted (alpha defaults to 1). */\n blurColor?: Color4;\n /** texture[0] — the bolt quad (e.g. \"special/blasterBolt\"). */\n texture0?: string;\n /** texture[1] — the edge-on cross (e.g. \"special/blasterBoltCross\"). */\n texture1?: string;\n};\n\nexport type LinearFlareProjectileDataBlock = LinearProjectileDataBlock & {\n numFlares?: number;\n flareColor?: Color4;\n flareTexture?: string;\n smokeTexture?: string;\n size?: number;\n flareModTexture?: number;\n smokeSize?: number;\n};\n\nexport type BombProjectileDataBlock = GrenadeProjectileDataBlock & {\n smokeDist?: number;\n noSmoke?: number;\n boomTime?: number;\n casingDist?: number;\n smokeCushion?: number;\n noSmokeCounter?: number;\n smokeTexture?: string;\n bombTexture?: string;\n};\n\nexport type FlareProjectileDataBlock = GrenadeProjectileDataBlock & {\n size?: number;\n useLensFlare?: boolean;\n flareTexture?: string;\n lensFlareTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Effects: explosions, debris, splash, shockwave\n// ---------------------------------------------------------------------------\n\nexport type ExplosionDataBlock = GameBaseDataBlock & {\n dtsFileName?: string;\n soundProfile?: number | null;\n particleEmitter?: number | null;\n particleDensity?: number;\n particleRadius?: number;\n faceViewer?: boolean;\n explosionScale?: Vec3;\n playSpeed?: number;\n debrisThetaMin?: number;\n debrisThetaMax?: number;\n debrisPhiMin?: number;\n debrisPhiMax?: number;\n debrisMinVelocity?: number;\n debrisMaxVelocity?: number;\n debrisNum?: number;\n debrisVariance?: number;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n offset?: number;\n shakeCamera?: boolean;\n hasLight?: boolean;\n camShakeFreq?: Vec3;\n camShakeAmp?: Vec3;\n camShakeDuration?: number;\n camShakeRadius?: number;\n camShakeFalloff?: number;\n shockwave?: number | null;\n debris?: number | null;\n emitters?: (number | null)[];\n subExplosions?: (number | null)[];\n times?: number[];\n sizes?: Vec3[];\n};\n\nexport type DebrisDataBlock = GameBaseDataBlock & {\n elasticity?: number;\n friction?: number;\n numBounces?: number;\n bounceVariance?: number;\n minSpinSpeed?: number;\n maxSpinSpeed?: number;\n render2D?: boolean;\n explodeOnMaxBounce?: boolean;\n staticOnMaxBounce?: boolean;\n snapOnMaxBounce?: boolean;\n lifetime?: number;\n lifetimeVariance?: number;\n velocity?: number;\n velocityVariance?: number;\n useRadiusMass?: boolean;\n fade?: boolean;\n baseRadius?: number;\n gravModifier?: number;\n terminalVelocity?: number;\n ignoreWater?: boolean;\n texture?: string;\n shapeName?: string;\n emitter0?: number | null;\n emitter1?: number | null;\n explosion?: number | null;\n};\n\nexport type SplashDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n velocity?: number;\n height?: number;\n acceleration?: number;\n texWrap?: number;\n texFactor?: number;\n ejectionFreq?: number;\n ejectionAngle?: number;\n ringLifetime?: number;\n startRadius?: number;\n explosion?: number | null;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n foamTexture?: string;\n};\n\nexport type ShockwaveDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n numVertSegments?: number;\n velocity?: number;\n height?: number;\n verticalCurve?: number;\n acceleration?: number;\n texWrap?: number;\n is2D?: boolean;\n orientToNormal?: boolean;\n mapToTerrain?: boolean;\n renderBottom?: boolean;\n renderSquare?: boolean;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n mapToTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Particles\n// ---------------------------------------------------------------------------\n\nexport type ParticleEmitterDataBlock = GameBaseDataBlock & {\n ejectionPeriodMS?: number;\n periodVarianceMS?: number;\n ejectionVelocity?: number;\n velocityVariance?: number;\n ejectionOffset?: number;\n thetaMin?: number;\n thetaMax?: number;\n phiReferenceVel?: number;\n phiVariance?: number;\n overrideAdvances?: boolean;\n orientParticles?: boolean;\n orientOnVelocity?: boolean;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n useEmitterSizes?: boolean;\n useEmitterColors?: boolean;\n particles?: (number | null)[];\n};\n\nexport type ParticleDataBlock = GameBaseDataBlock & {\n dragCoefficient?: number;\n windCoefficient?: number;\n gravityCoefficient?: number;\n inheritedVelFactor?: number;\n constantAcceleration?: number;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n spinSpeed?: number;\n spinRandomMin?: number;\n spinRandomMax?: number;\n useInvAlpha?: boolean;\n keys?: ParticleKey[];\n textures?: string[];\n};\n\n// ---------------------------------------------------------------------------\n// Audio\n// ---------------------------------------------------------------------------\n\nexport type AudioDescriptionDataBlock = SimDataBlock & {\n volume?: number;\n isLooping?: boolean;\n loopCount?: number;\n minLoopGap?: number;\n maxLoopGap?: number;\n is3D?: boolean;\n referenceDistance?: number;\n maxDistance?: number;\n coneInsideAngle?: number;\n coneOutsideAngle?: number;\n coneOutsideVolume?: number;\n coneVector?: Vec3;\n environmentLevel?: number;\n type?: number;\n};\n\nexport type AudioProfileDataBlock = SimDataBlock & {\n description?: number | null;\n environment?: number | null;\n sampleEnvironment?: number | null;\n filename?: string;\n};\n\nexport type AudioEnvironmentDataBlock = SimDataBlock & {\n useRoom?: boolean;\n room?: number;\n roomHF?: number;\n reflections?: number;\n reverb?: number;\n roomRolloffFactor?: number;\n decayTime?: number;\n decayHFRatio?: number;\n reflectionsDelay?: number;\n reverbDelay?: number;\n roomVolume?: number;\n damping?: number;\n environmentSize?: number;\n environmentDiffusion?: number;\n airAbsorption?: number;\n effectVolume?: number;\n flags?: number;\n};\n\nexport type AudioSampleEnvironmentDataBlock = SimDataBlock & {\n direct?: number;\n directHF?: number;\n room?: number;\n roomHF?: number;\n obstruction?: number;\n obstructionLFRatio?: number;\n occlusion?: number;\n occlusionLFRatio?: number;\n occlusionRoomRatio?: number;\n roomRolloff?: number;\n airAbsorption?: number;\n outsideVolumeHF?: number;\n flags?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Misc / utility datablocks\n// ---------------------------------------------------------------------------\n\nexport type DecalDataBlock = SimDataBlock & {\n sizeX?: number;\n sizeY?: number;\n textureName?: string;\n};\n\nexport interface CameraDataBlock extends ShapeBaseDataBlock {}\n\nexport interface SensorDataBlock extends SimDataBlock {}\n\nexport type TriggerDataBlock = SimDataBlock & {\n tickPeriodMS?: number;\n};\n\nexport type ForceFieldBareDataBlock = SimDataBlock & {\n fadeMS?: number;\n baseTranslucency?: number;\n powerOffTranslucency?: number;\n fadeInOnly?: boolean;\n triggerEnable?: boolean;\n color1?: Color4;\n color2?: Color4;\n framesPerSec?: number;\n numFrames?: number;\n scrollSpeed?: number;\n umapping?: number;\n vmapping?: number;\n texture0?: string;\n texture1?: string;\n texture2?: string;\n texture3?: string;\n texture4?: string;\n};\n\nexport type ParticleEmissionDummyDataBlock = SimDataBlock & {\n timeMultiple?: number;\n};\n\nexport type CommanderIconDataBlock = SimDataBlock & {\n baseImage?: string;\n activeImage?: string;\n inactiveImage?: string;\n selectImage?: string;\n hilightImage?: string;\n};\n\nexport type PrecipitationDataBlock = SimDataBlock & {\n soundProfile?: number | null;\n numDrops?: number;\n maxSize?: number;\n materialList?: string;\n sizeX?: number;\n sizeY?: number;\n movingBoxPer?: number;\n divHeightVal?: number;\n sizeBigBox?: number;\n topBoxSpeed?: number;\n frontBoxSpeed?: number;\n topBoxDrawPer?: number;\n bottomDrawHeight?: number;\n skipIfPer?: number;\n bottomSpeedPer?: number;\n frontSpeedPer?: number;\n frontRadiusPer?: number;\n};\n\nexport type FireballAtmosphereDataBlock = SimDataBlock & {\n emitter?: number | null;\n};\n\nexport type LightningDataBlock = SimDataBlock & {\n strikeSounds?: (number | null)[];\n strikeTextures?: string[];\n thunderSound?: number | null;\n};\n\n// ---------------------------------------------------------------------------\n// Station effects\n// ---------------------------------------------------------------------------\n\nexport type StationFXVehicleDataBlock = SimDataBlock & {\n glowTopHeight?: number;\n glowBottomHeight?: number;\n glowTopRadius?: number;\n glowBottomRadius?: number;\n numGlowSegments?: number;\n glowFadeTime?: number;\n armLightDelay?: number;\n armLightLifetime?: number;\n armLightFadeTime?: number;\n lifetime?: number;\n numArcSegments?: number;\n sphereColor?: Color4;\n spherePhiSegments?: number;\n sphereThetaSegments?: number;\n sphereRadius?: number;\n scale?: Vec3;\n glowNodeName?: string;\n leftNodeName0?: string;\n rightNodeName0?: string;\n leftNodeName1?: string;\n rightNodeName1?: string;\n leftNodeName2?: string;\n rightNodeName2?: string;\n leftNodeName3?: string;\n rightNodeName3?: string;\n texture0?: string;\n texture1?: string;\n};\n\nexport type StationFXPersonalDataBlock = SimDataBlock & {\n glowTopRadius?: number;\n glowBottomRadius?: number;\n glowTopHeight?: number;\n glowBottomHeight?: number;\n numGlowSegments?: number;\n numGlowPanels?: number;\n topAlpha?: number;\n bottomAlpha?: number;\n glowSpeed?: number;\n scrollSpeed?: number;\n leftNodeName?: string;\n rightNodeName?: string;\n texture0?: string;\n texture1?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Miscellaneous game datablocks\n// ---------------------------------------------------------------------------\n\nexport type CannedChatItemDataBlock = SimDataBlock & {\n chatText?: string;\n};\n\nexport interface MissionMarkerDataBlock extends ShapeBaseDataBlock {}\n\nexport type TSShapeConstructorDataBlock = SimDataBlock & {\n shape?: string;\n sequences?: string[];\n};\n\nexport type EffectProfileDataBlock = SimDataBlock & {\n minDistance?: number;\n maxDistance?: number;\n audioScale?: number;\n directional?: boolean;\n effectName?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Jet / running light effects\n// ---------------------------------------------------------------------------\n\nexport type JetEffectDataBlock = GameBaseDataBlock & {\n coolColor?: Color4;\n hotColor?: Color4;\n activateTime?: number;\n deactivateTime?: number;\n length?: number;\n width?: number;\n speed?: number;\n stretch?: number;\n yOffset?: number;\n texture?: string;\n};\n\nexport type RunningLightDataBlock = GameBaseDataBlock & {\n radius?: number;\n color?: Color4;\n type?: number;\n length?: number;\n nodeName?: string;\n direction?: Vec3;\n offset?: Vec3;\n texture?: string;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"dataBlockDataTypes.js","sourceRoot":"","sources":["../src/dataBlockDataTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type { Vec3, Color3, Color4, AffineTransform } from \"./dataTypes.js\";\n\n// ---------------------------------------------------------------------------\n// Sub-structures\n// ---------------------------------------------------------------------------\n\nexport type HudImageEntry = {\n friendlyName: string;\n enemyName?: string;\n renderCenter: boolean;\n renderModulated: boolean;\n renderAlways: boolean;\n renderDistance: boolean;\n renderName: boolean;\n};\n\n/**\n * One ShapeBaseImageData state. Transition values are 1-based state\n * indices (0 = no transition), in the engine's own packing order —\n * binary-verified; earlier versions had the names rotated by two slots\n * (no NotLoaded/Loaded, phantom generic0 pair) and consumers carried a\n * remap table to compensate.\n */\nexport type ImageState = {\n name: string;\n transitionOnNotLoaded: number;\n transitionOnLoaded: number;\n transitionOnAmmo: number;\n transitionOnNoAmmo: number;\n transitionOnTarget: number;\n transitionOnNoTarget: number;\n transitionOnWet: number;\n transitionOnNotWet: number;\n transitionOnTriggerUp: number;\n transitionOnTriggerDown: number;\n transitionOnTimeout: number;\n timeoutValue?: number;\n waitForTimeout: boolean;\n fire: boolean;\n ejectShell: boolean;\n scaleAnimation: boolean;\n direction: boolean;\n reload: boolean;\n energyDrain?: number;\n loaded: number;\n spin: number;\n recoil: number;\n sequence?: number;\n sequenceVis?: number;\n flashSequence: boolean;\n ignoreLoadedForReady: boolean;\n emitter: number | null;\n emitterTime?: number;\n emitterNode?: number;\n sound: number | null;\n};\n\nexport type ParticleKey = {\n r: number;\n g: number;\n b: number;\n a: number;\n size: number;\n time: number;\n};\n\n// ---------------------------------------------------------------------------\n// Base DataBlock types\n// ---------------------------------------------------------------------------\n\nexport type SimDataBlock = {};\n\nexport interface GameBaseDataBlock extends SimDataBlock {}\n\n// ---------------------------------------------------------------------------\n// ShapeBase hierarchy\n// ---------------------------------------------------------------------------\n\nexport type ShapeBaseDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mass?: number;\n drag?: number;\n density?: number;\n maxEnergy?: number;\n cameraMaxDist?: number;\n cameraMinDist?: number;\n cameraDefaultFov?: number;\n cameraMinFov?: number;\n cameraMaxFov?: number;\n debrisShapeName?: string;\n sensorRadius?: number;\n sensorColor?: Color4;\n heat?: number;\n cmdCategory?: string;\n cmdMiniIconName?: string;\n canControl?: boolean;\n canObserve?: boolean;\n observeThroughObject?: boolean;\n emap?: boolean;\n isInvincible?: boolean;\n renderWhenDestroyed?: boolean;\n cmdIcon?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n debris?: number | null;\n inheritEnergyFromMount?: boolean;\n firstPersonOnly?: boolean;\n useEyePoint?: boolean;\n shieldEffectLifetimeMS?: number;\n shieldEffectScale?: Vec3;\n hudImages?: HudImageEntry[];\n};\n\nexport type ShapeBaseImageDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mountPoint?: number;\n offset?: AffineTransform;\n firstPerson?: boolean;\n mass?: number;\n usesEnergy?: boolean;\n minEnergy?: number;\n hasFlash?: boolean;\n projectile?: number | null;\n muzzleFlash?: number | null;\n isSeeker?: boolean;\n seekerRadius?: number;\n maxSeekAngle?: number;\n seekerLockTime?: number;\n seekerFreeTime?: number;\n isTargetLockRequired?: boolean;\n maxLockRange?: number;\n cloakable?: boolean;\n lightType?: number;\n lightRadius?: number;\n lightTime?: number;\n lightColor?: Color4;\n shellExitDir?: Vec3;\n shellExitVariance?: number;\n shellVelocity?: number;\n casing?: number | null;\n accuFire?: boolean;\n states?: ImageState[];\n};\n\n// ---------------------------------------------------------------------------\n// Player\n// ---------------------------------------------------------------------------\n\n/**\n * Field names for the movement/jet/splash sections are binary-verified\n * against Tribes2.exe (build 25034) initPersistFields offsets — the\n * retail struct layout differs from the SVN engine source.\n */\nexport type PlayerDataBlock = ShapeBaseDataBlock & {\n renderFirstPerson?: boolean;\n minLookAngle?: number;\n maxLookAngle?: number;\n maxFreelookAngle?: number;\n maxTimeScale?: number;\n maxStepHeight?: number;\n jetForce?: number;\n underwaterJetForce?: number;\n underwaterVertJetFactor?: number;\n /** Energy drained per 32ms tick while jetting. */\n jetEnergyDrain?: number;\n underwaterJetEnergyDrain?: number;\n /** Jets refuse to fire below this energy level. */\n minJetEnergy?: number;\n maxJetForwardSpeed?: number;\n maxJetHorizontalPercentage?: number;\n jetEmitter?: number | null;\n jetEffect?: number | null;\n runForce?: number;\n runEnergyDrain?: number;\n minRunEnergy?: number;\n maxForwardSpeed?: number;\n maxBackwardSpeed?: number;\n maxSideSpeed?: number;\n maxUnderwaterForwardSpeed?: number;\n maxUnderwaterBackwardSpeed?: number;\n maxUnderwaterSideSpeed?: number;\n runSurfaceAngle?: number;\n recoverDelay?: number;\n recoverRunForceScale?: number;\n jumpForce?: number;\n jumpEnergyDrain?: number;\n minJumpEnergy?: number;\n minJumpSpeed?: number;\n maxJumpSpeed?: number;\n jumpSurfaceAngle?: number;\n jumpDelay?: number;\n horizMaxSpeed?: number;\n horizResistSpeed?: number;\n horizResistFactor?: number;\n upMaxSpeed?: number;\n upResistSpeed?: number;\n upResistFactor?: number;\n splashVelocity?: number;\n splashAngle?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n bubbleEmitTime?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n exitSplashSoundVelocity?: number;\n footstepSplashHeight?: number;\n minImpactSpeed?: number;\n sounds?: (number | null)[];\n boxSize?: Vec3;\n footPuffEmitter?: number | null;\n footPuffNumParts?: number;\n footPuffRadius?: number;\n decalData?: number | null;\n decalOffset?: number;\n dustEmitter?: number | null;\n splash?: number | null;\n splashEmitters?: (number | null)[];\n groundImpactMinSpeed?: number;\n groundImpactShakeFreq?: Vec3;\n groundImpactShakeAmp?: Vec3;\n groundImpactShakeDuration?: number;\n groundImpactShakeFalloff?: number;\n /** Heat signature rates (Tribes 2; retail player.cs: 1/4 and 1/3). */\n heatDecayPerSec?: number;\n heatIncreasePerSec?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Vehicles\n// ---------------------------------------------------------------------------\n\nexport type VehicleDataBlock = ShapeBaseDataBlock & {\n bodyRestitution?: number;\n bodyFriction?: number;\n impactSounds?: (number | null)[];\n minImpactSpeed?: number;\n softImpactSpeed?: number;\n hardImpactSpeed?: number;\n minRollSpeed?: number;\n maxSteeringAngle?: number;\n maxDrag?: number;\n minDrag?: number;\n cameraOffset?: number;\n cameraLag?: number;\n jetForce?: number;\n jetEnergyDrain?: number;\n minJetEnergy?: number;\n triggerDustHeight?: number;\n dustHeight?: number;\n numDmgEmitterAreas?: number;\n integration?: number;\n collisionTol?: number;\n massCenter?: number;\n exitSplashSoundVelocity?: number;\n softSplashSoundVelocity?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n waterSounds?: (number | null)[];\n dustEmitter?: number | null;\n damageEmitters?: (number | null)[];\n splashEmitters?: (number | null)[];\n damageEmitterOffset0?: Vec3;\n damageEmitterOffset1?: Vec3;\n damageLevelTolerance0?: number;\n damageLevelTolerance1?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n collDamageThresholdVel?: number;\n collDamageMultiplier?: number;\n};\n\nexport type FlyingVehicleDataBlock = VehicleDataBlock & {\n jetActivateSound?: number | null;\n jetDeactivateSound?: number | null;\n jetEmitters?: (number | null)[];\n maneuveringForce?: number;\n horizontalSurfaceForce?: number;\n verticalSurfaceForce?: number;\n autoInputDamping?: number;\n steeringForce?: number;\n steeringRollForce?: number;\n rollForce?: number;\n autoAngularForce?: number;\n rotationalDrag?: number;\n maxAutoSpeed?: number;\n autoLinearForce?: number;\n hoverHeight?: number;\n createHoverHeight?: number;\n minTrailSpeed?: number;\n vertThrustMultiple?: number;\n maxForwardSpeed?: number;\n};\n\nexport type HoverVehicleDataBlock = VehicleDataBlock & {\n dragForce?: number;\n mainThrustForce?: number;\n reverseThrustForce?: number;\n strafeThrustForce?: number;\n turboFactor?: number;\n stabLenMin?: number;\n stabLenMax?: number;\n stabSpringConstant?: number;\n stabDampingConstant?: number;\n gyroDrag?: number;\n normalForce?: number;\n restorativeForce?: number;\n steeringForce?: number;\n rollForce?: number;\n pitchForce?: number;\n floatingThrustFactor?: number;\n brakingForce?: number;\n dustTrailOffset?: Vec3;\n dustTrailFreqMod?: number;\n triggerTrailHeight?: number;\n floatSound?: number | null;\n thrustSound?: number | null;\n turboSound?: number | null;\n jetEmitters?: (number | null)[];\n dustTrailEmitter?: number | null;\n mainThrustEmitterFactor?: number;\n strafeThrustEmitterFactor?: number;\n reverseThrustEmitterFactor?: number;\n};\n\nexport type WheeledVehicleDataBlock = VehicleDataBlock & {\n tireRadius?: number;\n tireStaticFriction?: number;\n tireKineticFriction?: number;\n tireRestitution?: number;\n tireLateralForce?: number;\n tireLateralDamping?: number;\n tireLateralRelaxation?: number;\n tireLongitudinalForce?: number;\n tireLongitudinalDamping?: number;\n tireEmitter?: number | null;\n jetSound?: number | null;\n engineSound?: number | null;\n squealSound?: number | null;\n wadeSound?: number | null;\n spring?: number;\n springDamping?: number;\n springLength?: number;\n brakeTorque?: number;\n engineTorque?: number;\n engineBrake?: number;\n maxWheelSpeed?: number;\n steeringAngle?: number;\n steeringReturn?: number;\n steeringDamping?: number;\n powerSteeringFactor?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Static shapes and turrets\n// ---------------------------------------------------------------------------\n\nexport type StaticShapeDataBlock = ShapeBaseDataBlock & {\n noIndividualDamage?: boolean;\n dynamicTypeField?: number;\n};\n\nexport type TurretDataBlock = StaticShapeDataBlock & {\n thetaMin?: number;\n thetaMax?: number;\n thetaNull?: number;\n neverUpdateControl?: boolean;\n primaryAxis?: number;\n maxCapacitorEnergy?: number;\n capacitorRechargeRate?: number;\n};\n\nexport type TurretImageDataBlock = ShapeBaseImageDataBlock & {\n activationMS?: number;\n deactivateDelayMS?: number;\n degPerSecTheta?: number;\n degPerSecPhi?: number;\n dontFireInsideDamageRadius?: boolean;\n damageRadius?: number;\n useCapacitor?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Items\n// ---------------------------------------------------------------------------\n\nexport type ItemDataBlock = ShapeBaseDataBlock & {\n friction?: number;\n elasticity?: number;\n sticky?: boolean;\n gravityMod?: number;\n maxVelocity?: number;\n lightType?: number;\n lightColor?: Color4;\n lightTime?: number;\n lightRadius?: number;\n lightOnlyStatic?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Projectiles\n// ---------------------------------------------------------------------------\n\nexport type ProjectileDataBlock = GameBaseDataBlock & {\n projectileShapeName?: string;\n faceViewerLinkTime?: number;\n lifetime?: number;\n faceViewer?: boolean;\n scale?: Vec3;\n baseEmitter?: number | null;\n delayEmitter?: number | null;\n bubbleEmitter?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n splash?: number | null;\n sound?: number | null;\n wetFireSound?: number | null;\n fireSound?: number | null;\n decals?: (number | null)[];\n lightRadius?: number;\n lightColor?: Color3 | Color4;\n underwaterLightColor?: Color3;\n explodeOnWaterImpact?: boolean;\n depthTolerance?: number;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0062b3c0 / unpackData FUN_0062bea0.\n */\nexport type LinearProjectileDataBlock = ProjectileDataBlock & {\n dryVelocity?: number;\n wetVelocity?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n fizzleTimeMS?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n lifetimeMS?: number;\n explodeOnDeath?: boolean;\n /** Degrees, 0–90. */\n reflectOnWaterImpactAngle?: number;\n /** Degrees, 0–90. */\n deflectionOnWaterImpact?: number;\n fizzleUnderwaterMS?: number;\n activateDelayMS?: number;\n doDynamicClientHits?: boolean;\n};\n\nexport type GrenadeProjectileDataBlock = ProjectileDataBlock & {\n armingDelayMS?: number;\n muzzleVelocity?: number;\n grenadeElasticity?: number;\n grenadeFriction?: number;\n drag?: number;\n density?: number;\n gravityMod?: number;\n lifetimeMS?: number;\n};\n\nexport type SeekerProjectileDataBlock = ProjectileDataBlock & {\n lifetimeMS?: number;\n muzzleVelocity?: number;\n turningSpeed?: number;\n proximityRadius?: number;\n terrainAvoidanceSpeed?: number;\n terrainScanAhead?: number;\n terrainHeightFail?: number;\n terrainAvoidanceRadius?: number;\n flareDistance?: number;\n flareAngle?: number;\n useFlechette?: boolean;\n maxVelocity?: number;\n acceleration?: number;\n flechetteDelayMs?: number;\n exhaustTimeMs?: number;\n exhaustNodeName?: string;\n casingShapeName?: string;\n casingDebris?: number | null;\n puffEmitter?: number | null;\n exhaustEmitter?: number | null;\n};\n\nexport type SniperProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n rifleHeadMultiplier?: number;\n beamColor?: Color4;\n fadeTime?: number;\n startBeamWidth?: number;\n endBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\nexport type ShockLanceProjectileDataBlock = ProjectileDataBlock & {\n zapDuration?: number;\n boltLength?: number;\n numParts?: number;\n lightningFreq?: number;\n lightningDensity?: number;\n lightningAmp?: number;\n lightningWidth?: number;\n shockwave?: number | null;\n startWidth?: number[];\n endWidth?: number[];\n boltSpeed?: number[];\n texWrap?: number[];\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0064a860 / unpackData FUN_0064ae00. The ELF\n * gun: a wavy main beam with lightning arcs around it.\n */\nexport type ELFProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n mainBeamWidth?: number;\n mainBeamSpeed?: number;\n mainBeamRepeat?: number;\n lightningWidth?: number;\n lightningDist?: number;\n /** textures[0..2] — retail: ELFBeam, ELFLightning, BlueImpact. */\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00644910 / unpackData FUN_00644c40. The repair\n * beam: a segmented ribbon (numSegments) with a blur trail.\n */\nexport type RepairProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n beamWidth?: number;\n /** Engine S32 (the old decode read its raw bits as a float). */\n numSegments?: number;\n beamSpeed?: number;\n texRepeat?: number;\n blurFreq?: number;\n blurLifetime?: number;\n cutoffAngle?: number;\n /** textures[0..1] — retail: special/redbump2, special/redflare. */\n textures?: string[];\n};\n\nexport type TargetProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n beamColor?: Color4;\n startBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0063fcb0 / unpackData FUN_00640160.\n */\nexport type TracerProjectileDataBlock = LinearProjectileDataBlock & {\n tracerLength?: number;\n tracerWidth?: number;\n tracerMinPixels?: number;\n /** Registered as a bool in the engine despite the name. */\n tracerAlpha?: boolean;\n tracerColor?: Color4;\n /** Cross fades in when the view angle cosine exceeds this. */\n crossViewAng?: number;\n crossSize?: number;\n renderCross?: boolean;\n tracerTex0?: string;\n tracerTex1?: string;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00694b40 / unpackData FUN_00694d80. The blaster\n * bolt: an oriented additive quad (texture0) with an edge-on cross\n * (texture1) and an untextured motion-blur tail (blur* fields).\n */\nexport type EnergyProjectileDataBlock = GrenadeProjectileDataBlock & {\n /** Cross fades in when the view angle cosine exceeds this (0x168). */\n crossViewAng?: number;\n crossSize?: number;\n blurLifetime?: number;\n blurWidth?: number;\n /** Blur tail color; only RGB is transmitted (alpha defaults to 1). */\n blurColor?: Color4;\n /** texture[0] — the bolt quad (e.g. \"special/blasterBolt\"). */\n texture0?: string;\n /** texture[1] — the edge-on cross (e.g. \"special/blasterBoltCross\"). */\n texture1?: string;\n};\n\nexport type LinearFlareProjectileDataBlock = LinearProjectileDataBlock & {\n /** Spikes kept alive around the bolt (plasma: 35). */\n numFlares?: number;\n flareColor?: Color4;\n /** Billboard texture for a shapeless bolt (e.g. \"flaremod\"). */\n flareModTexture?: string;\n /** Spike texture (e.g. \"flarebase\"). */\n flareBaseTexture?: string;\n /** size[0..2]: spike base scale, and the tip scale it grows from and to. */\n sizes?: [number, number, number];\n};\n\nexport type BombProjectileDataBlock = GrenadeProjectileDataBlock & {\n smokeDist?: number;\n noSmoke?: number;\n boomTime?: number;\n casingDist?: number;\n smokeCushion?: number;\n noSmokeCounter?: number;\n smokeTexture?: string;\n bombTexture?: string;\n};\n\nexport type FlareProjectileDataBlock = GrenadeProjectileDataBlock & {\n size?: number;\n useLensFlare?: boolean;\n flareTexture?: string;\n lensFlareTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Effects: explosions, debris, splash, shockwave\n// ---------------------------------------------------------------------------\n\nexport type ExplosionDataBlock = GameBaseDataBlock & {\n dtsFileName?: string;\n soundProfile?: number | null;\n particleEmitter?: number | null;\n particleDensity?: number;\n particleRadius?: number;\n faceViewer?: boolean;\n explosionScale?: Vec3;\n playSpeed?: number;\n debrisThetaMin?: number;\n debrisThetaMax?: number;\n debrisPhiMin?: number;\n debrisPhiMax?: number;\n debrisMinVelocity?: number;\n debrisMaxVelocity?: number;\n debrisNum?: number;\n debrisVariance?: number;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n offset?: number;\n shakeCamera?: boolean;\n hasLight?: boolean;\n camShakeFreq?: Vec3;\n camShakeAmp?: Vec3;\n camShakeDuration?: number;\n camShakeRadius?: number;\n camShakeFalloff?: number;\n shockwave?: number | null;\n debris?: number | null;\n emitters?: (number | null)[];\n subExplosions?: (number | null)[];\n times?: number[];\n sizes?: Vec3[];\n};\n\nexport type DebrisDataBlock = GameBaseDataBlock & {\n elasticity?: number;\n friction?: number;\n numBounces?: number;\n bounceVariance?: number;\n minSpinSpeed?: number;\n maxSpinSpeed?: number;\n render2D?: boolean;\n explodeOnMaxBounce?: boolean;\n staticOnMaxBounce?: boolean;\n snapOnMaxBounce?: boolean;\n lifetime?: number;\n lifetimeVariance?: number;\n velocity?: number;\n velocityVariance?: number;\n useRadiusMass?: boolean;\n fade?: boolean;\n baseRadius?: number;\n gravModifier?: number;\n terminalVelocity?: number;\n ignoreWater?: boolean;\n texture?: string;\n shapeName?: string;\n emitter0?: number | null;\n emitter1?: number | null;\n explosion?: number | null;\n};\n\nexport type SplashDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n velocity?: number;\n height?: number;\n acceleration?: number;\n texWrap?: number;\n texFactor?: number;\n ejectionFreq?: number;\n ejectionAngle?: number;\n ringLifetime?: number;\n startRadius?: number;\n explosion?: number | null;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n foamTexture?: string;\n};\n\nexport type ShockwaveDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n numVertSegments?: number;\n velocity?: number;\n height?: number;\n verticalCurve?: number;\n acceleration?: number;\n texWrap?: number;\n is2D?: boolean;\n orientToNormal?: boolean;\n mapToTerrain?: boolean;\n renderBottom?: boolean;\n renderSquare?: boolean;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n mapToTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Particles\n// ---------------------------------------------------------------------------\n\nexport type ParticleEmitterDataBlock = GameBaseDataBlock & {\n ejectionPeriodMS?: number;\n periodVarianceMS?: number;\n ejectionVelocity?: number;\n velocityVariance?: number;\n ejectionOffset?: number;\n thetaMin?: number;\n thetaMax?: number;\n phiReferenceVel?: number;\n phiVariance?: number;\n overrideAdvances?: boolean;\n orientParticles?: boolean;\n orientOnVelocity?: boolean;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n useEmitterSizes?: boolean;\n useEmitterColors?: boolean;\n particles?: (number | null)[];\n};\n\nexport type ParticleDataBlock = GameBaseDataBlock & {\n dragCoefficient?: number;\n windCoefficient?: number;\n gravityCoefficient?: number;\n inheritedVelFactor?: number;\n constantAcceleration?: number;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n spinSpeed?: number;\n spinRandomMin?: number;\n spinRandomMax?: number;\n useInvAlpha?: boolean;\n keys?: ParticleKey[];\n textures?: string[];\n};\n\n// ---------------------------------------------------------------------------\n// Audio\n// ---------------------------------------------------------------------------\n\nexport type AudioDescriptionDataBlock = SimDataBlock & {\n volume?: number;\n isLooping?: boolean;\n loopCount?: number;\n minLoopGap?: number;\n maxLoopGap?: number;\n is3D?: boolean;\n referenceDistance?: number;\n maxDistance?: number;\n coneInsideAngle?: number;\n coneOutsideAngle?: number;\n coneOutsideVolume?: number;\n coneVector?: Vec3;\n environmentLevel?: number;\n type?: number;\n};\n\nexport type AudioProfileDataBlock = SimDataBlock & {\n description?: number | null;\n environment?: number | null;\n sampleEnvironment?: number | null;\n filename?: string;\n};\n\nexport type AudioEnvironmentDataBlock = SimDataBlock & {\n useRoom?: boolean;\n room?: number;\n roomHF?: number;\n reflections?: number;\n reverb?: number;\n roomRolloffFactor?: number;\n decayTime?: number;\n decayHFRatio?: number;\n reflectionsDelay?: number;\n reverbDelay?: number;\n roomVolume?: number;\n damping?: number;\n environmentSize?: number;\n environmentDiffusion?: number;\n airAbsorption?: number;\n effectVolume?: number;\n flags?: number;\n};\n\nexport type AudioSampleEnvironmentDataBlock = SimDataBlock & {\n direct?: number;\n directHF?: number;\n room?: number;\n roomHF?: number;\n obstruction?: number;\n obstructionLFRatio?: number;\n occlusion?: number;\n occlusionLFRatio?: number;\n occlusionRoomRatio?: number;\n roomRolloff?: number;\n airAbsorption?: number;\n outsideVolumeHF?: number;\n flags?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Misc / utility datablocks\n// ---------------------------------------------------------------------------\n\nexport type DecalDataBlock = SimDataBlock & {\n sizeX?: number;\n sizeY?: number;\n textureName?: string;\n};\n\nexport interface CameraDataBlock extends ShapeBaseDataBlock {}\n\nexport interface SensorDataBlock extends SimDataBlock {}\n\nexport type TriggerDataBlock = SimDataBlock & {\n tickPeriodMS?: number;\n};\n\nexport type ForceFieldBareDataBlock = SimDataBlock & {\n fadeMS?: number;\n baseTranslucency?: number;\n powerOffTranslucency?: number;\n fadeInOnly?: boolean;\n triggerEnable?: boolean;\n color1?: Color4;\n color2?: Color4;\n framesPerSec?: number;\n numFrames?: number;\n scrollSpeed?: number;\n umapping?: number;\n vmapping?: number;\n texture0?: string;\n texture1?: string;\n texture2?: string;\n texture3?: string;\n texture4?: string;\n};\n\nexport type ParticleEmissionDummyDataBlock = SimDataBlock & {\n timeMultiple?: number;\n};\n\nexport type CommanderIconDataBlock = SimDataBlock & {\n baseImage?: string;\n activeImage?: string;\n inactiveImage?: string;\n selectImage?: string;\n hilightImage?: string;\n};\n\nexport type PrecipitationDataBlock = SimDataBlock & {\n soundProfile?: number | null;\n numDrops?: number;\n maxSize?: number;\n materialList?: string;\n sizeX?: number;\n sizeY?: number;\n movingBoxPer?: number;\n divHeightVal?: number;\n sizeBigBox?: number;\n topBoxSpeed?: number;\n frontBoxSpeed?: number;\n topBoxDrawPer?: number;\n bottomDrawHeight?: number;\n skipIfPer?: number;\n bottomSpeedPer?: number;\n frontSpeedPer?: number;\n frontRadiusPer?: number;\n};\n\nexport type FireballAtmosphereDataBlock = SimDataBlock & {\n emitter?: number | null;\n};\n\nexport type LightningDataBlock = SimDataBlock & {\n strikeSounds?: (number | null)[];\n strikeTextures?: string[];\n thunderSound?: number | null;\n};\n\n// ---------------------------------------------------------------------------\n// Station effects\n// ---------------------------------------------------------------------------\n\nexport type StationFXVehicleDataBlock = SimDataBlock & {\n glowTopHeight?: number;\n glowBottomHeight?: number;\n glowTopRadius?: number;\n glowBottomRadius?: number;\n numGlowSegments?: number;\n glowFadeTime?: number;\n armLightDelay?: number;\n armLightLifetime?: number;\n armLightFadeTime?: number;\n lifetime?: number;\n numArcSegments?: number;\n sphereColor?: Color4;\n spherePhiSegments?: number;\n sphereThetaSegments?: number;\n sphereRadius?: number;\n scale?: Vec3;\n glowNodeName?: string;\n leftNodeName0?: string;\n rightNodeName0?: string;\n leftNodeName1?: string;\n rightNodeName1?: string;\n leftNodeName2?: string;\n rightNodeName2?: string;\n leftNodeName3?: string;\n rightNodeName3?: string;\n texture0?: string;\n texture1?: string;\n};\n\nexport type StationFXPersonalDataBlock = SimDataBlock & {\n glowTopRadius?: number;\n glowBottomRadius?: number;\n glowTopHeight?: number;\n glowBottomHeight?: number;\n numGlowSegments?: number;\n numGlowPanels?: number;\n topAlpha?: number;\n bottomAlpha?: number;\n glowSpeed?: number;\n scrollSpeed?: number;\n leftNodeName?: string;\n rightNodeName?: string;\n texture0?: string;\n texture1?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Miscellaneous game datablocks\n// ---------------------------------------------------------------------------\n\nexport type CannedChatItemDataBlock = SimDataBlock & {\n chatText?: string;\n};\n\nexport interface MissionMarkerDataBlock extends ShapeBaseDataBlock {}\n\nexport type TSShapeConstructorDataBlock = SimDataBlock & {\n shape?: string;\n sequences?: string[];\n};\n\nexport type EffectProfileDataBlock = SimDataBlock & {\n minDistance?: number;\n maxDistance?: number;\n audioScale?: number;\n directional?: boolean;\n effectName?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Jet / running light effects\n// ---------------------------------------------------------------------------\n\nexport type JetEffectDataBlock = GameBaseDataBlock & {\n coolColor?: Color4;\n hotColor?: Color4;\n activateTime?: number;\n deactivateTime?: number;\n length?: number;\n width?: number;\n speed?: number;\n stretch?: number;\n yOffset?: number;\n texture?: string;\n};\n\nexport type RunningLightDataBlock = GameBaseDataBlock & {\n radius?: number;\n color?: Color4;\n type?: number;\n length?: number;\n nodeName?: string;\n direction?: Vec3;\n offset?: Vec3;\n texture?: string;\n};\n"]}
|