t2-demo-parser 3.0.1 → 3.0.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBlockParsers.d.ts","sourceRoot":"","sources":["../src/DataBlockParsers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DataBlockParsers.d.ts","sourceRoot":"","sources":["../src/DataBlockParsers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA0wExD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CA0OtE"}
|
package/dist/DataBlockParsers.js
CHANGED
|
@@ -754,9 +754,12 @@ function projectileDataUnpack(bs) {
|
|
|
754
754
|
decals.push(readDataBlockRef(bs));
|
|
755
755
|
}
|
|
756
756
|
result.decals = decals;
|
|
757
|
-
// flag(hasLight); if true: readFloat(8) + 3×readFloat(7)
|
|
757
|
+
// flag(hasLight); if true: readFloat(8) × 20 + 3×readFloat(7).
|
|
758
|
+
// ProjectileData::unpackData (FUN_00631360) multiplies the 8-bit
|
|
759
|
+
// radius by 20.0 (packData writes lightRadius / 20; the field is
|
|
760
|
+
// clamped to [1, 20] in onAdd).
|
|
758
761
|
if (bs.readFlag()) {
|
|
759
|
-
result.lightRadius = bs.readFloat(8);
|
|
762
|
+
result.lightRadius = bs.readFloat(8) * 20;
|
|
760
763
|
result.lightColor = {
|
|
761
764
|
r: bs.readFloat(7),
|
|
762
765
|
g: bs.readFloat(7),
|
|
@@ -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 // 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"]}
|
|
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) × 20 + 3×readFloat(7).\n // ProjectileData::unpackData (FUN_00631360) multiplies the 8-bit\n // radius by 20.0 (packData writes lightRadius / 20; the field is\n // clamped to [1, 20] in onAdd).\n if (bs.readFlag()) {\n result.lightRadius = bs.readFloat(8) * 20;\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"]}
|