t2-demo-parser 3.0.2 → 4.1.0

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":"dataBlockDataTypes.js","sourceRoot":"","sources":["../src/dataBlockDataTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type { Vec3, Color3, Color4, AffineTransform } from \"./dataTypes.js\";\n\n// ---------------------------------------------------------------------------\n// Sub-structures\n// ---------------------------------------------------------------------------\n\nexport type HudImageEntry = {\n friendlyName: string;\n enemyName?: string;\n renderCenter: boolean;\n renderModulated: boolean;\n renderAlways: boolean;\n renderDistance: boolean;\n renderName: boolean;\n};\n\n/**\n * One ShapeBaseImageData state. Transition values are 1-based state\n * indices (0 = no transition), in the engine's own packing order —\n * binary-verified; earlier versions had the names rotated by two slots\n * (no NotLoaded/Loaded, phantom generic0 pair) and consumers carried a\n * remap table to compensate.\n */\nexport type ImageState = {\n name: string;\n transitionOnNotLoaded: number;\n transitionOnLoaded: number;\n transitionOnAmmo: number;\n transitionOnNoAmmo: number;\n transitionOnTarget: number;\n transitionOnNoTarget: number;\n transitionOnWet: number;\n transitionOnNotWet: number;\n transitionOnTriggerUp: number;\n transitionOnTriggerDown: number;\n transitionOnTimeout: number;\n timeoutValue?: number;\n waitForTimeout: boolean;\n fire: boolean;\n ejectShell: boolean;\n scaleAnimation: boolean;\n direction: boolean;\n reload: boolean;\n energyDrain?: number;\n loaded: number;\n spin: number;\n recoil: number;\n sequence?: number;\n sequenceVis?: number;\n flashSequence: boolean;\n ignoreLoadedForReady: boolean;\n emitter: number | null;\n emitterTime?: number;\n emitterNode?: number;\n sound: number | null;\n};\n\nexport type ParticleKey = {\n r: number;\n g: number;\n b: number;\n a: number;\n size: number;\n time: number;\n};\n\n// ---------------------------------------------------------------------------\n// Base DataBlock types\n// ---------------------------------------------------------------------------\n\nexport type SimDataBlock = {};\n\nexport interface GameBaseDataBlock extends SimDataBlock {}\n\n// ---------------------------------------------------------------------------\n// ShapeBase hierarchy\n// ---------------------------------------------------------------------------\n\nexport type ShapeBaseDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mass?: number;\n drag?: number;\n density?: number;\n maxEnergy?: number;\n cameraMaxDist?: number;\n cameraMinDist?: number;\n cameraDefaultFov?: number;\n cameraMinFov?: number;\n cameraMaxFov?: number;\n debrisShapeName?: string;\n sensorRadius?: number;\n sensorColor?: Color4;\n heat?: number;\n cmdCategory?: string;\n cmdMiniIconName?: string;\n canControl?: boolean;\n canObserve?: boolean;\n observeThroughObject?: boolean;\n emap?: boolean;\n isInvincible?: boolean;\n renderWhenDestroyed?: boolean;\n cmdIcon?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n debris?: number | null;\n inheritEnergyFromMount?: boolean;\n firstPersonOnly?: boolean;\n useEyePoint?: boolean;\n shieldEffectLifetimeMS?: number;\n shieldEffectScale?: Vec3;\n hudImages?: HudImageEntry[];\n};\n\nexport type ShapeBaseImageDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mountPoint?: number;\n offset?: AffineTransform;\n firstPerson?: boolean;\n mass?: number;\n usesEnergy?: boolean;\n minEnergy?: number;\n hasFlash?: boolean;\n projectile?: number | null;\n muzzleFlash?: number | null;\n isSeeker?: boolean;\n seekerRadius?: number;\n maxSeekAngle?: number;\n seekerLockTime?: number;\n seekerFreeTime?: number;\n isTargetLockRequired?: boolean;\n maxLockRange?: number;\n cloakable?: boolean;\n lightType?: number;\n lightRadius?: number;\n lightTime?: number;\n lightColor?: Color4;\n shellExitDir?: Vec3;\n shellExitVariance?: number;\n shellVelocity?: number;\n casing?: number | null;\n accuFire?: boolean;\n states?: ImageState[];\n};\n\n// ---------------------------------------------------------------------------\n// Player\n// ---------------------------------------------------------------------------\n\n/**\n * Field names for the movement/jet/splash sections are binary-verified\n * against Tribes2.exe (build 25034) initPersistFields offsets — the\n * retail struct layout differs from the SVN engine source.\n */\nexport type PlayerDataBlock = ShapeBaseDataBlock & {\n renderFirstPerson?: boolean;\n minLookAngle?: number;\n maxLookAngle?: number;\n maxFreelookAngle?: number;\n maxTimeScale?: number;\n maxStepHeight?: number;\n jetForce?: number;\n underwaterJetForce?: number;\n underwaterVertJetFactor?: number;\n /** Energy drained per 32ms tick while jetting. */\n jetEnergyDrain?: number;\n underwaterJetEnergyDrain?: number;\n /** Jets refuse to fire below this energy level. */\n minJetEnergy?: number;\n maxJetForwardSpeed?: number;\n maxJetHorizontalPercentage?: number;\n jetEmitter?: number | null;\n jetEffect?: number | null;\n runForce?: number;\n runEnergyDrain?: number;\n minRunEnergy?: number;\n maxForwardSpeed?: number;\n maxBackwardSpeed?: number;\n maxSideSpeed?: number;\n maxUnderwaterForwardSpeed?: number;\n maxUnderwaterBackwardSpeed?: number;\n maxUnderwaterSideSpeed?: number;\n runSurfaceAngle?: number;\n recoverDelay?: number;\n recoverRunForceScale?: number;\n jumpForce?: number;\n jumpEnergyDrain?: number;\n minJumpEnergy?: number;\n minJumpSpeed?: number;\n maxJumpSpeed?: number;\n jumpSurfaceAngle?: number;\n jumpDelay?: number;\n horizMaxSpeed?: number;\n horizResistSpeed?: number;\n horizResistFactor?: number;\n upMaxSpeed?: number;\n upResistSpeed?: number;\n upResistFactor?: number;\n splashVelocity?: number;\n splashAngle?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n bubbleEmitTime?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n exitSplashSoundVelocity?: number;\n footstepSplashHeight?: number;\n minImpactSpeed?: number;\n sounds?: (number | null)[];\n boxSize?: Vec3;\n footPuffEmitter?: number | null;\n footPuffNumParts?: number;\n footPuffRadius?: number;\n decalData?: number | null;\n decalOffset?: number;\n dustEmitter?: number | null;\n splash?: number | null;\n splashEmitters?: (number | null)[];\n groundImpactMinSpeed?: number;\n groundImpactShakeFreq?: Vec3;\n groundImpactShakeAmp?: Vec3;\n groundImpactShakeDuration?: number;\n groundImpactShakeFalloff?: number;\n /** Heat signature rates (Tribes 2; retail player.cs: 1/4 and 1/3). */\n heatDecayPerSec?: number;\n heatIncreasePerSec?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Vehicles\n// ---------------------------------------------------------------------------\n\nexport type VehicleDataBlock = ShapeBaseDataBlock & {\n bodyRestitution?: number;\n bodyFriction?: number;\n impactSounds?: (number | null)[];\n minImpactSpeed?: number;\n softImpactSpeed?: number;\n hardImpactSpeed?: number;\n minRollSpeed?: number;\n maxSteeringAngle?: number;\n maxDrag?: number;\n minDrag?: number;\n cameraOffset?: number;\n cameraLag?: number;\n jetForce?: number;\n jetEnergyDrain?: number;\n minJetEnergy?: number;\n triggerDustHeight?: number;\n dustHeight?: number;\n numDmgEmitterAreas?: number;\n integration?: number;\n collisionTol?: number;\n massCenter?: number;\n exitSplashSoundVelocity?: number;\n softSplashSoundVelocity?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n waterSounds?: (number | null)[];\n dustEmitter?: number | null;\n damageEmitters?: (number | null)[];\n splashEmitters?: (number | null)[];\n damageEmitterOffset0?: Vec3;\n damageEmitterOffset1?: Vec3;\n damageLevelTolerance0?: number;\n damageLevelTolerance1?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n collDamageThresholdVel?: number;\n collDamageMultiplier?: number;\n};\n\nexport type FlyingVehicleDataBlock = VehicleDataBlock & {\n jetActivateSound?: number | null;\n jetDeactivateSound?: number | null;\n jetEmitters?: (number | null)[];\n maneuveringForce?: number;\n horizontalSurfaceForce?: number;\n verticalSurfaceForce?: number;\n autoInputDamping?: number;\n steeringForce?: number;\n steeringRollForce?: number;\n rollForce?: number;\n autoAngularForce?: number;\n rotationalDrag?: number;\n maxAutoSpeed?: number;\n autoLinearForce?: number;\n hoverHeight?: number;\n createHoverHeight?: number;\n minTrailSpeed?: number;\n vertThrustMultiple?: number;\n maxForwardSpeed?: number;\n};\n\nexport type HoverVehicleDataBlock = VehicleDataBlock & {\n dragForce?: number;\n mainThrustForce?: number;\n reverseThrustForce?: number;\n strafeThrustForce?: number;\n turboFactor?: number;\n stabLenMin?: number;\n stabLenMax?: number;\n stabSpringConstant?: number;\n stabDampingConstant?: number;\n gyroDrag?: number;\n normalForce?: number;\n restorativeForce?: number;\n steeringForce?: number;\n rollForce?: number;\n pitchForce?: number;\n floatingThrustFactor?: number;\n brakingForce?: number;\n dustTrailOffset?: Vec3;\n dustTrailFreqMod?: number;\n triggerTrailHeight?: number;\n floatSound?: number | null;\n thrustSound?: number | null;\n turboSound?: number | null;\n jetEmitters?: (number | null)[];\n dustTrailEmitter?: number | null;\n mainThrustEmitterFactor?: number;\n strafeThrustEmitterFactor?: number;\n reverseThrustEmitterFactor?: number;\n};\n\nexport type WheeledVehicleDataBlock = VehicleDataBlock & {\n tireRadius?: number;\n tireStaticFriction?: number;\n tireKineticFriction?: number;\n tireRestitution?: number;\n tireLateralForce?: number;\n tireLateralDamping?: number;\n tireLateralRelaxation?: number;\n tireLongitudinalForce?: number;\n tireLongitudinalDamping?: number;\n tireEmitter?: number | null;\n jetSound?: number | null;\n engineSound?: number | null;\n squealSound?: number | null;\n wadeSound?: number | null;\n spring?: number;\n springDamping?: number;\n springLength?: number;\n brakeTorque?: number;\n engineTorque?: number;\n engineBrake?: number;\n maxWheelSpeed?: number;\n steeringAngle?: number;\n steeringReturn?: number;\n steeringDamping?: number;\n powerSteeringFactor?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Static shapes and turrets\n// ---------------------------------------------------------------------------\n\nexport type StaticShapeDataBlock = ShapeBaseDataBlock & {\n noIndividualDamage?: boolean;\n dynamicTypeField?: number;\n};\n\nexport type TurretDataBlock = StaticShapeDataBlock & {\n thetaMin?: number;\n thetaMax?: number;\n thetaNull?: number;\n neverUpdateControl?: boolean;\n primaryAxis?: number;\n maxCapacitorEnergy?: number;\n capacitorRechargeRate?: number;\n};\n\nexport type TurretImageDataBlock = ShapeBaseImageDataBlock & {\n activationMS?: number;\n deactivateDelayMS?: number;\n degPerSecTheta?: number;\n degPerSecPhi?: number;\n dontFireInsideDamageRadius?: boolean;\n damageRadius?: number;\n useCapacitor?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Items\n// ---------------------------------------------------------------------------\n\nexport type ItemDataBlock = ShapeBaseDataBlock & {\n friction?: number;\n elasticity?: number;\n sticky?: boolean;\n gravityMod?: number;\n maxVelocity?: number;\n lightType?: number;\n lightColor?: Color4;\n lightTime?: number;\n lightRadius?: number;\n lightOnlyStatic?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Projectiles\n// ---------------------------------------------------------------------------\n\nexport type ProjectileDataBlock = GameBaseDataBlock & {\n projectileShapeName?: string;\n faceViewerLinkTime?: number;\n lifetime?: number;\n faceViewer?: boolean;\n scale?: Vec3;\n baseEmitter?: number | null;\n delayEmitter?: number | null;\n bubbleEmitter?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n splash?: number | null;\n sound?: number | null;\n wetFireSound?: number | null;\n fireSound?: number | null;\n decals?: (number | null)[];\n lightRadius?: number;\n lightColor?: Color3 | Color4;\n underwaterLightColor?: Color3;\n explodeOnWaterImpact?: boolean;\n depthTolerance?: number;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0062b3c0 / unpackData FUN_0062bea0.\n */\nexport type LinearProjectileDataBlock = ProjectileDataBlock & {\n dryVelocity?: number;\n wetVelocity?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n fizzleTimeMS?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n lifetimeMS?: number;\n explodeOnDeath?: boolean;\n /** Degrees, 0–90. */\n reflectOnWaterImpactAngle?: number;\n /** Degrees, 0–90. */\n deflectionOnWaterImpact?: number;\n fizzleUnderwaterMS?: number;\n activateDelayMS?: number;\n doDynamicClientHits?: boolean;\n};\n\nexport type GrenadeProjectileDataBlock = ProjectileDataBlock & {\n armingDelayMS?: number;\n muzzleVelocity?: number;\n grenadeElasticity?: number;\n grenadeFriction?: number;\n drag?: number;\n density?: number;\n gravityMod?: number;\n lifetimeMS?: number;\n};\n\nexport type SeekerProjectileDataBlock = ProjectileDataBlock & {\n lifetimeMS?: number;\n muzzleVelocity?: number;\n turningSpeed?: number;\n proximityRadius?: number;\n terrainAvoidanceSpeed?: number;\n terrainScanAhead?: number;\n terrainHeightFail?: number;\n terrainAvoidanceRadius?: number;\n flareDistance?: number;\n flareAngle?: number;\n useFlechette?: boolean;\n maxVelocity?: number;\n acceleration?: number;\n flechetteDelayMs?: number;\n exhaustTimeMs?: number;\n exhaustNodeName?: string;\n casingShapeName?: string;\n casingDebris?: number | null;\n puffEmitter?: number | null;\n exhaustEmitter?: number | null;\n};\n\nexport type SniperProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n rifleHeadMultiplier?: number;\n beamColor?: Color4;\n fadeTime?: number;\n startBeamWidth?: number;\n endBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\nexport type ShockLanceProjectileDataBlock = ProjectileDataBlock & {\n zapDuration?: number;\n boltLength?: number;\n numParts?: number;\n lightningFreq?: number;\n lightningDensity?: number;\n lightningAmp?: number;\n lightningWidth?: number;\n shockwave?: number | null;\n startWidth?: number[];\n endWidth?: number[];\n boltSpeed?: number[];\n texWrap?: number[];\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0064a860 / unpackData FUN_0064ae00. The ELF\n * gun: a wavy main beam with lightning arcs around it.\n */\nexport type ELFProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n mainBeamWidth?: number;\n mainBeamSpeed?: number;\n mainBeamRepeat?: number;\n lightningWidth?: number;\n lightningDist?: number;\n /** textures[0..2] — retail: ELFBeam, ELFLightning, BlueImpact. */\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00644910 / unpackData FUN_00644c40. The repair\n * beam: a segmented ribbon (numSegments) with a blur trail.\n */\nexport type RepairProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n beamWidth?: number;\n /** Engine S32 (the old decode read its raw bits as a float). */\n numSegments?: number;\n beamSpeed?: number;\n texRepeat?: number;\n blurFreq?: number;\n blurLifetime?: number;\n cutoffAngle?: number;\n /** textures[0..1] — retail: special/redbump2, special/redflare. */\n textures?: string[];\n};\n\nexport type TargetProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n beamColor?: Color4;\n startBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0063fcb0 / unpackData FUN_00640160.\n */\nexport type TracerProjectileDataBlock = LinearProjectileDataBlock & {\n tracerLength?: number;\n tracerWidth?: number;\n tracerMinPixels?: number;\n /** Registered as a bool in the engine despite the name. */\n tracerAlpha?: boolean;\n tracerColor?: Color4;\n /** Cross fades in when the view angle cosine exceeds this. */\n crossViewAng?: number;\n crossSize?: number;\n renderCross?: boolean;\n tracerTex0?: string;\n tracerTex1?: string;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00694b40 / unpackData FUN_00694d80. The blaster\n * bolt: an oriented additive quad (texture0) with an edge-on cross\n * (texture1) and an untextured motion-blur tail (blur* fields).\n */\nexport type EnergyProjectileDataBlock = GrenadeProjectileDataBlock & {\n /** Cross fades in when the view angle cosine exceeds this (0x168). */\n crossViewAng?: number;\n crossSize?: number;\n blurLifetime?: number;\n blurWidth?: number;\n /** Blur tail color; only RGB is transmitted (alpha defaults to 1). */\n blurColor?: Color4;\n /** texture[0] — the bolt quad (e.g. \"special/blasterBolt\"). */\n texture0?: string;\n /** texture[1] — the edge-on cross (e.g. \"special/blasterBoltCross\"). */\n texture1?: string;\n};\n\nexport type LinearFlareProjectileDataBlock = LinearProjectileDataBlock & {\n /** Spikes kept alive around the bolt (plasma: 35). */\n numFlares?: number;\n flareColor?: Color4;\n /** Billboard texture for a shapeless bolt (e.g. \"flaremod\"). */\n flareModTexture?: string;\n /** Spike texture (e.g. \"flarebase\"). */\n flareBaseTexture?: string;\n /** size[0..2]: spike base scale, and the tip scale it grows from and to. */\n sizes?: [number, number, number];\n};\n\nexport type BombProjectileDataBlock = GrenadeProjectileDataBlock & {\n smokeDist?: number;\n noSmoke?: number;\n boomTime?: number;\n casingDist?: number;\n smokeCushion?: number;\n noSmokeCounter?: number;\n smokeTexture?: string;\n bombTexture?: string;\n};\n\nexport type FlareProjectileDataBlock = GrenadeProjectileDataBlock & {\n size?: number;\n useLensFlare?: boolean;\n flareTexture?: string;\n lensFlareTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Effects: explosions, debris, splash, shockwave\n// ---------------------------------------------------------------------------\n\nexport type ExplosionDataBlock = GameBaseDataBlock & {\n dtsFileName?: string;\n soundProfile?: number | null;\n particleEmitter?: number | null;\n particleDensity?: number;\n particleRadius?: number;\n faceViewer?: boolean;\n explosionScale?: Vec3;\n playSpeed?: number;\n debrisThetaMin?: number;\n debrisThetaMax?: number;\n debrisPhiMin?: number;\n debrisPhiMax?: number;\n debrisMinVelocity?: number;\n debrisMaxVelocity?: number;\n debrisNum?: number;\n debrisVariance?: number;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n offset?: number;\n shakeCamera?: boolean;\n hasLight?: boolean;\n camShakeFreq?: Vec3;\n camShakeAmp?: Vec3;\n camShakeDuration?: number;\n camShakeRadius?: number;\n camShakeFalloff?: number;\n shockwave?: number | null;\n debris?: number | null;\n emitters?: (number | null)[];\n subExplosions?: (number | null)[];\n times?: number[];\n sizes?: Vec3[];\n};\n\nexport type DebrisDataBlock = GameBaseDataBlock & {\n elasticity?: number;\n friction?: number;\n numBounces?: number;\n bounceVariance?: number;\n minSpinSpeed?: number;\n maxSpinSpeed?: number;\n render2D?: boolean;\n explodeOnMaxBounce?: boolean;\n staticOnMaxBounce?: boolean;\n snapOnMaxBounce?: boolean;\n lifetime?: number;\n lifetimeVariance?: number;\n velocity?: number;\n velocityVariance?: number;\n useRadiusMass?: boolean;\n fade?: boolean;\n baseRadius?: number;\n gravModifier?: number;\n terminalVelocity?: number;\n ignoreWater?: boolean;\n texture?: string;\n shapeName?: string;\n emitter0?: number | null;\n emitter1?: number | null;\n explosion?: number | null;\n};\n\nexport type SplashDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n velocity?: number;\n height?: number;\n acceleration?: number;\n texWrap?: number;\n texFactor?: number;\n ejectionFreq?: number;\n ejectionAngle?: number;\n ringLifetime?: number;\n startRadius?: number;\n explosion?: number | null;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n foamTexture?: string;\n};\n\nexport type ShockwaveDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n numVertSegments?: number;\n velocity?: number;\n height?: number;\n verticalCurve?: number;\n acceleration?: number;\n texWrap?: number;\n is2D?: boolean;\n orientToNormal?: boolean;\n mapToTerrain?: boolean;\n renderBottom?: boolean;\n renderSquare?: boolean;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n mapToTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Particles\n// ---------------------------------------------------------------------------\n\nexport type ParticleEmitterDataBlock = GameBaseDataBlock & {\n ejectionPeriodMS?: number;\n periodVarianceMS?: number;\n ejectionVelocity?: number;\n velocityVariance?: number;\n ejectionOffset?: number;\n thetaMin?: number;\n thetaMax?: number;\n phiReferenceVel?: number;\n phiVariance?: number;\n overrideAdvances?: boolean;\n orientParticles?: boolean;\n orientOnVelocity?: boolean;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n useEmitterSizes?: boolean;\n useEmitterColors?: boolean;\n particles?: (number | null)[];\n};\n\nexport type ParticleDataBlock = GameBaseDataBlock & {\n dragCoefficient?: number;\n windCoefficient?: number;\n gravityCoefficient?: number;\n inheritedVelFactor?: number;\n constantAcceleration?: number;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n spinSpeed?: number;\n spinRandomMin?: number;\n spinRandomMax?: number;\n useInvAlpha?: boolean;\n keys?: ParticleKey[];\n textures?: string[];\n};\n\n// ---------------------------------------------------------------------------\n// Audio\n// ---------------------------------------------------------------------------\n\nexport type AudioDescriptionDataBlock = SimDataBlock & {\n volume?: number;\n isLooping?: boolean;\n loopCount?: number;\n minLoopGap?: number;\n maxLoopGap?: number;\n is3D?: boolean;\n referenceDistance?: number;\n maxDistance?: number;\n coneInsideAngle?: number;\n coneOutsideAngle?: number;\n coneOutsideVolume?: number;\n coneVector?: Vec3;\n environmentLevel?: number;\n type?: number;\n};\n\nexport type AudioProfileDataBlock = SimDataBlock & {\n description?: number | null;\n environment?: number | null;\n sampleEnvironment?: number | null;\n filename?: string;\n};\n\nexport type AudioEnvironmentDataBlock = SimDataBlock & {\n useRoom?: boolean;\n room?: number;\n roomHF?: number;\n reflections?: number;\n reverb?: number;\n roomRolloffFactor?: number;\n decayTime?: number;\n decayHFRatio?: number;\n reflectionsDelay?: number;\n reverbDelay?: number;\n roomVolume?: number;\n damping?: number;\n environmentSize?: number;\n environmentDiffusion?: number;\n airAbsorption?: number;\n effectVolume?: number;\n flags?: number;\n};\n\nexport type AudioSampleEnvironmentDataBlock = SimDataBlock & {\n direct?: number;\n directHF?: number;\n room?: number;\n roomHF?: number;\n obstruction?: number;\n obstructionLFRatio?: number;\n occlusion?: number;\n occlusionLFRatio?: number;\n occlusionRoomRatio?: number;\n roomRolloff?: number;\n airAbsorption?: number;\n outsideVolumeHF?: number;\n flags?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Misc / utility datablocks\n// ---------------------------------------------------------------------------\n\nexport type DecalDataBlock = SimDataBlock & {\n sizeX?: number;\n sizeY?: number;\n textureName?: string;\n};\n\nexport interface CameraDataBlock extends ShapeBaseDataBlock {}\n\nexport interface SensorDataBlock extends SimDataBlock {}\n\nexport type TriggerDataBlock = SimDataBlock & {\n tickPeriodMS?: number;\n};\n\nexport type ForceFieldBareDataBlock = SimDataBlock & {\n fadeMS?: number;\n baseTranslucency?: number;\n powerOffTranslucency?: number;\n fadeInOnly?: boolean;\n triggerEnable?: boolean;\n color1?: Color4;\n color2?: Color4;\n framesPerSec?: number;\n numFrames?: number;\n scrollSpeed?: number;\n umapping?: number;\n vmapping?: number;\n texture0?: string;\n texture1?: string;\n texture2?: string;\n texture3?: string;\n texture4?: string;\n};\n\nexport type ParticleEmissionDummyDataBlock = SimDataBlock & {\n timeMultiple?: number;\n};\n\nexport type CommanderIconDataBlock = SimDataBlock & {\n baseImage?: string;\n activeImage?: string;\n inactiveImage?: string;\n selectImage?: string;\n hilightImage?: string;\n};\n\nexport type PrecipitationDataBlock = SimDataBlock & {\n soundProfile?: number | null;\n numDrops?: number;\n maxSize?: number;\n materialList?: string;\n sizeX?: number;\n sizeY?: number;\n movingBoxPer?: number;\n divHeightVal?: number;\n sizeBigBox?: number;\n topBoxSpeed?: number;\n frontBoxSpeed?: number;\n topBoxDrawPer?: number;\n bottomDrawHeight?: number;\n skipIfPer?: number;\n bottomSpeedPer?: number;\n frontSpeedPer?: number;\n frontRadiusPer?: number;\n};\n\nexport type FireballAtmosphereDataBlock = SimDataBlock & {\n emitter?: number | null;\n};\n\nexport type LightningDataBlock = SimDataBlock & {\n strikeSounds?: (number | null)[];\n strikeTextures?: string[];\n thunderSound?: number | null;\n};\n\n// ---------------------------------------------------------------------------\n// Station effects\n// ---------------------------------------------------------------------------\n\nexport type StationFXVehicleDataBlock = SimDataBlock & {\n glowTopHeight?: number;\n glowBottomHeight?: number;\n glowTopRadius?: number;\n glowBottomRadius?: number;\n numGlowSegments?: number;\n glowFadeTime?: number;\n armLightDelay?: number;\n armLightLifetime?: number;\n armLightFadeTime?: number;\n lifetime?: number;\n numArcSegments?: number;\n sphereColor?: Color4;\n spherePhiSegments?: number;\n sphereThetaSegments?: number;\n sphereRadius?: number;\n scale?: Vec3;\n glowNodeName?: string;\n leftNodeName0?: string;\n rightNodeName0?: string;\n leftNodeName1?: string;\n rightNodeName1?: string;\n leftNodeName2?: string;\n rightNodeName2?: string;\n leftNodeName3?: string;\n rightNodeName3?: string;\n texture0?: string;\n texture1?: string;\n};\n\nexport type StationFXPersonalDataBlock = SimDataBlock & {\n glowTopRadius?: number;\n glowBottomRadius?: number;\n glowTopHeight?: number;\n glowBottomHeight?: number;\n numGlowSegments?: number;\n numGlowPanels?: number;\n topAlpha?: number;\n bottomAlpha?: number;\n glowSpeed?: number;\n scrollSpeed?: number;\n leftNodeName?: string;\n rightNodeName?: string;\n texture0?: string;\n texture1?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Miscellaneous game datablocks\n// ---------------------------------------------------------------------------\n\nexport type CannedChatItemDataBlock = SimDataBlock & {\n chatText?: string;\n};\n\nexport interface MissionMarkerDataBlock extends ShapeBaseDataBlock {}\n\nexport type TSShapeConstructorDataBlock = SimDataBlock & {\n shape?: string;\n sequences?: string[];\n};\n\nexport type EffectProfileDataBlock = SimDataBlock & {\n minDistance?: number;\n maxDistance?: number;\n audioScale?: number;\n directional?: boolean;\n effectName?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Jet / running light effects\n// ---------------------------------------------------------------------------\n\nexport type JetEffectDataBlock = GameBaseDataBlock & {\n coolColor?: Color4;\n hotColor?: Color4;\n activateTime?: number;\n deactivateTime?: number;\n length?: number;\n width?: number;\n speed?: number;\n stretch?: number;\n yOffset?: number;\n texture?: string;\n};\n\nexport type RunningLightDataBlock = GameBaseDataBlock & {\n radius?: number;\n color?: Color4;\n type?: number;\n length?: number;\n nodeName?: string;\n direction?: Vec3;\n offset?: Vec3;\n texture?: string;\n};\n"]}
1
+ {"version":3,"file":"dataBlockDataTypes.js","sourceRoot":"","sources":["../src/dataBlockDataTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type { Vec3, Color3, Color4, AffineTransform } from \"./dataTypes.js\";\n\n// ---------------------------------------------------------------------------\n// Sub-structures\n// ---------------------------------------------------------------------------\n\nexport type HudImageEntry = {\n friendlyName: string;\n enemyName?: string;\n renderCenter: boolean;\n renderModulated: boolean;\n renderAlways: boolean;\n renderDistance: boolean;\n renderName: boolean;\n};\n\n/**\n * One ShapeBaseImageData state. Transition values are 1-based state\n * indices (0 = no transition), in the engine's own packing order —\n * binary-verified; earlier versions had the names rotated by two slots\n * (no NotLoaded/Loaded, phantom generic0 pair) and consumers carried a\n * remap table to compensate.\n */\nexport type ImageState = {\n name: string;\n transitionOnNotLoaded: number;\n transitionOnLoaded: number;\n transitionOnAmmo: number;\n transitionOnNoAmmo: number;\n transitionOnTarget: number;\n transitionOnNoTarget: number;\n transitionOnWet: number;\n transitionOnNotWet: number;\n transitionOnTriggerUp: number;\n transitionOnTriggerDown: number;\n transitionOnTimeout: number;\n timeoutValue?: number;\n waitForTimeout: boolean;\n fire: boolean;\n ejectShell: boolean;\n scaleAnimation: boolean;\n direction: boolean;\n reload: boolean;\n energyDrain?: number;\n loaded: number;\n spin: number;\n recoil: number;\n sequence?: number;\n sequenceVis?: number;\n flashSequence: boolean;\n ignoreLoadedForReady: boolean;\n emitter: number | null;\n emitterTime?: number;\n emitterNode?: number;\n sound: number | null;\n};\n\nexport type ParticleKey = {\n r: number;\n g: number;\n b: number;\n a: number;\n size: number;\n time: number;\n};\n\n// ---------------------------------------------------------------------------\n// Base DataBlock types\n// ---------------------------------------------------------------------------\n\nexport type SimDataBlock = {};\n\nexport interface GameBaseDataBlock extends SimDataBlock {}\n\n// ---------------------------------------------------------------------------\n// ShapeBase hierarchy\n// ---------------------------------------------------------------------------\n\nexport type ShapeBaseDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mass?: number;\n drag?: number;\n density?: number;\n maxEnergy?: number;\n cameraMaxDist?: number;\n cameraMinDist?: number;\n cameraDefaultFov?: number;\n cameraMinFov?: number;\n cameraMaxFov?: number;\n debrisShapeName?: string;\n sensorRadius?: number;\n sensorColor?: Color4;\n heat?: number;\n cmdCategory?: string;\n cmdMiniIconName?: string;\n canControl?: boolean;\n canObserve?: boolean;\n observeThroughObject?: boolean;\n emap?: boolean;\n isInvincible?: boolean;\n renderWhenDestroyed?: boolean;\n cmdIcon?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n debris?: number | null;\n inheritEnergyFromMount?: boolean;\n firstPersonOnly?: boolean;\n useEyePoint?: boolean;\n shieldEffectLifetimeMS?: number;\n shieldEffectScale?: Vec3;\n hudImages?: HudImageEntry[];\n};\n\nexport type ShapeBaseImageDataBlock = GameBaseDataBlock & {\n crc?: number;\n shapeName?: string;\n mountPoint?: number;\n offset?: AffineTransform;\n firstPerson?: boolean;\n mass?: number;\n usesEnergy?: boolean;\n minEnergy?: number;\n hasFlash?: boolean;\n projectile?: number | null;\n muzzleFlash?: number | null;\n isSeeker?: boolean;\n seekerRadius?: number;\n maxSeekAngle?: number;\n seekerLockTime?: number;\n seekerFreeTime?: number;\n isTargetLockRequired?: boolean;\n maxLockRange?: number;\n cloakable?: boolean;\n lightType?: number;\n lightRadius?: number;\n lightTime?: number;\n lightColor?: Color4;\n shellExitDir?: Vec3;\n shellExitVariance?: number;\n shellVelocity?: number;\n casing?: number | null;\n accuFire?: boolean;\n states?: ImageState[];\n};\n\n// ---------------------------------------------------------------------------\n// Player\n// ---------------------------------------------------------------------------\n\n/**\n * Field names for the movement/jet/splash sections are binary-verified\n * against Tribes2.exe (build 25034) initPersistFields offsets — the\n * retail struct layout differs from the SVN engine source.\n */\nexport type PlayerDataBlock = ShapeBaseDataBlock & {\n renderFirstPerson?: boolean;\n minLookAngle?: number;\n maxLookAngle?: number;\n maxFreelookAngle?: number;\n maxTimeScale?: number;\n maxStepHeight?: number;\n jetForce?: number;\n underwaterJetForce?: number;\n underwaterVertJetFactor?: number;\n /** Energy drained per 32ms tick while jetting. */\n jetEnergyDrain?: number;\n underwaterJetEnergyDrain?: number;\n /** Jets refuse to fire below this energy level. */\n minJetEnergy?: number;\n maxJetForwardSpeed?: number;\n maxJetHorizontalPercentage?: number;\n jetEmitter?: number | null;\n jetEffect?: number | null;\n runForce?: number;\n runEnergyDrain?: number;\n minRunEnergy?: number;\n maxForwardSpeed?: number;\n maxBackwardSpeed?: number;\n maxSideSpeed?: number;\n maxUnderwaterForwardSpeed?: number;\n maxUnderwaterBackwardSpeed?: number;\n maxUnderwaterSideSpeed?: number;\n runSurfaceAngle?: number;\n recoverDelay?: number;\n recoverRunForceScale?: number;\n jumpForce?: number;\n jumpEnergyDrain?: number;\n minJumpEnergy?: number;\n minJumpSpeed?: number;\n maxJumpSpeed?: number;\n jumpSurfaceAngle?: number;\n jumpDelay?: number;\n horizMaxSpeed?: number;\n horizResistSpeed?: number;\n horizResistFactor?: number;\n upMaxSpeed?: number;\n upResistSpeed?: number;\n upResistFactor?: number;\n splashVelocity?: number;\n splashAngle?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n bubbleEmitTime?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n exitSplashSoundVelocity?: number;\n footstepSplashHeight?: number;\n minImpactSpeed?: number;\n sounds?: (number | null)[];\n boxSize?: Vec3;\n footPuffEmitter?: number | null;\n footPuffNumParts?: number;\n footPuffRadius?: number;\n decalData?: number | null;\n decalOffset?: number;\n dustEmitter?: number | null;\n splash?: number | null;\n splashEmitters?: (number | null)[];\n groundImpactMinSpeed?: number;\n groundImpactShakeFreq?: Vec3;\n groundImpactShakeAmp?: Vec3;\n groundImpactShakeDuration?: number;\n groundImpactShakeFalloff?: number;\n /** Heat signature rates (Tribes 2; retail player.cs: 1/4 and 1/3). */\n heatDecayPerSec?: number;\n heatIncreasePerSec?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Vehicles\n// ---------------------------------------------------------------------------\n\nexport type VehicleDataBlock = ShapeBaseDataBlock & {\n bodyRestitution?: number;\n bodyFriction?: number;\n impactSounds?: (number | null)[];\n minImpactSpeed?: number;\n softImpactSpeed?: number;\n hardImpactSpeed?: number;\n minRollSpeed?: number;\n maxSteeringAngle?: number;\n maxDrag?: number;\n minDrag?: number;\n cameraOffset?: number;\n cameraLag?: number;\n jetForce?: number;\n jetEnergyDrain?: number;\n minJetEnergy?: number;\n triggerDustHeight?: number;\n dustHeight?: number;\n numDmgEmitterAreas?: number;\n integration?: number;\n collisionTol?: number;\n massCenter?: number;\n exitSplashSoundVelocity?: number;\n softSplashSoundVelocity?: number;\n mediumSplashSoundVelocity?: number;\n hardSplashSoundVelocity?: number;\n waterSounds?: (number | null)[];\n dustEmitter?: number | null;\n damageEmitters?: (number | null)[];\n splashEmitters?: (number | null)[];\n damageEmitterOffset0?: Vec3;\n damageEmitterOffset1?: Vec3;\n damageLevelTolerance0?: number;\n damageLevelTolerance1?: number;\n splashFreqMod?: number;\n splashVelEpsilon?: number;\n collDamageThresholdVel?: number;\n collDamageMultiplier?: number;\n};\n\nexport type FlyingVehicleDataBlock = VehicleDataBlock & {\n jetActivateSound?: number | null;\n jetDeactivateSound?: number | null;\n jetEmitters?: (number | null)[];\n maneuveringForce?: number;\n horizontalSurfaceForce?: number;\n verticalSurfaceForce?: number;\n autoInputDamping?: number;\n steeringForce?: number;\n steeringRollForce?: number;\n rollForce?: number;\n autoAngularForce?: number;\n rotationalDrag?: number;\n maxAutoSpeed?: number;\n autoLinearForce?: number;\n hoverHeight?: number;\n createHoverHeight?: number;\n minTrailSpeed?: number;\n vertThrustMultiple?: number;\n maxForwardSpeed?: number;\n};\n\nexport type HoverVehicleDataBlock = VehicleDataBlock & {\n dragForce?: number;\n mainThrustForce?: number;\n reverseThrustForce?: number;\n strafeThrustForce?: number;\n turboFactor?: number;\n stabLenMin?: number;\n stabLenMax?: number;\n stabSpringConstant?: number;\n stabDampingConstant?: number;\n gyroDrag?: number;\n normalForce?: number;\n restorativeForce?: number;\n steeringForce?: number;\n rollForce?: number;\n pitchForce?: number;\n floatingThrustFactor?: number;\n brakingForce?: number;\n dustTrailOffset?: Vec3;\n dustTrailFreqMod?: number;\n triggerTrailHeight?: number;\n floatSound?: number | null;\n thrustSound?: number | null;\n turboSound?: number | null;\n jetEmitters?: (number | null)[];\n dustTrailEmitter?: number | null;\n mainThrustEmitterFactor?: number;\n strafeThrustEmitterFactor?: number;\n reverseThrustEmitterFactor?: number;\n};\n\nexport type WheeledVehicleDataBlock = VehicleDataBlock & {\n tireRadius?: number;\n tireStaticFriction?: number;\n tireKineticFriction?: number;\n tireRestitution?: number;\n tireLateralForce?: number;\n tireLateralDamping?: number;\n tireLateralRelaxation?: number;\n tireLongitudinalForce?: number;\n tireLongitudinalDamping?: number;\n tireEmitter?: number | null;\n jetSound?: number | null;\n engineSound?: number | null;\n squealSound?: number | null;\n wadeSound?: number | null;\n spring?: number;\n springDamping?: number;\n springLength?: number;\n brakeTorque?: number;\n engineTorque?: number;\n engineBrake?: number;\n maxWheelSpeed?: number;\n steeringAngle?: number;\n steeringReturn?: number;\n steeringDamping?: number;\n powerSteeringFactor?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Static shapes and turrets\n// ---------------------------------------------------------------------------\n\nexport type StaticShapeDataBlock = ShapeBaseDataBlock & {\n noIndividualDamage?: boolean;\n dynamicTypeField?: number;\n};\n\nexport type TurretDataBlock = StaticShapeDataBlock & {\n thetaMin?: number;\n thetaMax?: number;\n thetaNull?: number;\n neverUpdateControl?: boolean;\n primaryAxis?: number;\n maxCapacitorEnergy?: number;\n capacitorRechargeRate?: number;\n};\n\nexport type TurretImageDataBlock = ShapeBaseImageDataBlock & {\n activationMS?: number;\n deactivateDelayMS?: number;\n degPerSecTheta?: number;\n degPerSecPhi?: number;\n dontFireInsideDamageRadius?: boolean;\n damageRadius?: number;\n useCapacitor?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Items\n// ---------------------------------------------------------------------------\n\nexport type ItemDataBlock = ShapeBaseDataBlock & {\n friction?: number;\n elasticity?: number;\n sticky?: boolean;\n gravityMod?: number;\n maxVelocity?: number;\n lightType?: number;\n lightColor?: Color4;\n lightTime?: number;\n lightRadius?: number;\n lightOnlyStatic?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Projectiles\n// ---------------------------------------------------------------------------\n\nexport type ProjectileDataBlock = GameBaseDataBlock & {\n projectileShapeName?: string;\n faceViewerLinkTime?: number;\n lifetime?: number;\n faceViewer?: boolean;\n scale?: Vec3;\n baseEmitter?: number | null;\n delayEmitter?: number | null;\n bubbleEmitter?: number | null;\n explosion?: number | null;\n underwaterExplosion?: number | null;\n splash?: number | null;\n sound?: number | null;\n wetFireSound?: number | null;\n fireSound?: number | null;\n decals?: (number | null)[];\n lightRadius?: number;\n lightColor?: Color3 | Color4;\n underwaterLightColor?: Color3;\n explodeOnWaterImpact?: boolean;\n depthTolerance?: number;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0062b3c0 / unpackData FUN_0062bea0.\n */\nexport type LinearProjectileDataBlock = ProjectileDataBlock & {\n dryVelocity?: number;\n wetVelocity?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n fizzleTimeMS?: number;\n /** Milliseconds, tick-rounded (32ms) by the engine's onAdd. */\n lifetimeMS?: number;\n explodeOnDeath?: boolean;\n /** Degrees, 0–90. */\n reflectOnWaterImpactAngle?: number;\n /** Degrees, 0–90. */\n deflectionOnWaterImpact?: number;\n fizzleUnderwaterMS?: number;\n activateDelayMS?: number;\n doDynamicClientHits?: boolean;\n};\n\nexport type GrenadeProjectileDataBlock = ProjectileDataBlock & {\n armingDelayMS?: number;\n muzzleVelocity?: number;\n grenadeElasticity?: number;\n grenadeFriction?: number;\n drag?: number;\n density?: number;\n gravityMod?: number;\n lifetimeMS?: number;\n};\n\nexport type SeekerProjectileDataBlock = ProjectileDataBlock & {\n lifetimeMS?: number;\n muzzleVelocity?: number;\n turningSpeed?: number;\n proximityRadius?: number;\n terrainAvoidanceSpeed?: number;\n terrainScanAhead?: number;\n terrainHeightFail?: number;\n terrainAvoidanceRadius?: number;\n flareDistance?: number;\n flareAngle?: number;\n useFlechette?: boolean;\n maxVelocity?: number;\n acceleration?: number;\n flechetteDelayMs?: number;\n exhaustTimeMs?: number;\n exhaustNodeName?: string;\n casingShapeName?: string;\n casingDebris?: number | null;\n puffEmitter?: number | null;\n exhaustEmitter?: number | null;\n};\n\nexport type SniperProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n rifleHeadMultiplier?: number;\n beamColor?: Color4;\n fadeTime?: number;\n startBeamWidth?: number;\n endBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\nexport type ShockLanceProjectileDataBlock = ProjectileDataBlock & {\n zapDuration?: number;\n boltLength?: number;\n numParts?: number;\n lightningFreq?: number;\n lightningDensity?: number;\n lightningAmp?: number;\n lightningWidth?: number;\n shockwave?: number | null;\n startWidth?: number[];\n endWidth?: number[];\n boltSpeed?: number[];\n texWrap?: number[];\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0064a860 / unpackData FUN_0064ae00. The ELF\n * gun: a wavy main beam with lightning arcs around it.\n */\nexport type ELFProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n mainBeamWidth?: number;\n mainBeamSpeed?: number;\n mainBeamRepeat?: number;\n lightningWidth?: number;\n lightningDist?: number;\n /** textures[0..2] — retail: ELFBeam, ELFLightning, BlueImpact. */\n textures?: string[];\n emitter?: number | null;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00644910 / unpackData FUN_00644c40. The repair\n * beam: a segmented ribbon (numSegments) with a blur trail.\n */\nexport type RepairProjectileDataBlock = ProjectileDataBlock & {\n beamRange?: number;\n beamWidth?: number;\n /** Engine S32 (the old decode read its raw bits as a float). */\n numSegments?: number;\n beamSpeed?: number;\n texRepeat?: number;\n blurFreq?: number;\n blurLifetime?: number;\n cutoffAngle?: number;\n /** textures[0..1] — retail: special/redbump2, special/redflare. */\n textures?: string[];\n};\n\nexport type TargetProjectileDataBlock = ProjectileDataBlock & {\n maxRifleRange?: number;\n beamColor?: Color4;\n startBeamWidth?: number;\n pulseBeamWidth?: number;\n beamFlareAngle?: number;\n minFlareSize?: number;\n maxFlareSize?: number;\n pulseSpeed?: number;\n pulseLength?: number;\n textures?: string[];\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_0063fcb0 / unpackData FUN_00640160.\n */\nexport type TracerProjectileDataBlock = LinearProjectileDataBlock & {\n tracerLength?: number;\n tracerWidth?: number;\n tracerMinPixels?: number;\n /** Registered as a bool in the engine despite the name. */\n tracerAlpha?: boolean;\n tracerColor?: Color4;\n /** Cross fades in when the view angle cosine exceeds this. */\n crossViewAng?: number;\n crossSize?: number;\n renderCross?: boolean;\n tracerTex0?: string;\n tracerTex1?: string;\n};\n\n/**\n * Field names binary-verified against Tribes2.exe (build 25034):\n * initPersistFields FUN_00694b40 / unpackData FUN_00694d80. The blaster\n * bolt: an oriented additive quad (texture0) with an edge-on cross\n * (texture1) and an untextured motion-blur tail (blur* fields).\n */\nexport type EnergyProjectileDataBlock = GrenadeProjectileDataBlock & {\n /** Cross fades in when the view angle cosine exceeds this (0x168). */\n crossViewAng?: number;\n crossSize?: number;\n blurLifetime?: number;\n blurWidth?: number;\n /** Blur tail color; only RGB is transmitted (alpha defaults to 1). */\n blurColor?: Color4;\n /** texture[0] — the bolt quad (e.g. \"special/blasterBolt\"). */\n texture0?: string;\n /** texture[1] — the edge-on cross (e.g. \"special/blasterBoltCross\"). */\n texture1?: string;\n};\n\nexport type LinearFlareProjectileDataBlock = LinearProjectileDataBlock & {\n /** Spikes kept alive around the bolt (plasma: 35). */\n numFlares?: number;\n flareColor?: Color4;\n /** Billboard texture for a shapeless bolt (e.g. \"flaremod\"). */\n flareModTexture?: string;\n /** Spike texture (e.g. \"flarebase\"). */\n flareBaseTexture?: string;\n /** size[0..2]: spike base scale, and the tip scale it grows from and to. */\n sizes?: [number, number, number];\n};\n\nexport type BombProjectileDataBlock = GrenadeProjectileDataBlock & {\n smokeDist?: number;\n noSmoke?: number;\n boomTime?: number;\n casingDist?: number;\n smokeCushion?: number;\n noSmokeCounter?: number;\n smokeTexture?: string;\n bombTexture?: string;\n};\n\nexport type FlareProjectileDataBlock = GrenadeProjectileDataBlock & {\n size?: number;\n useLensFlare?: boolean;\n flareTexture?: string;\n lensFlareTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Effects: explosions, debris, splash, shockwave\n// ---------------------------------------------------------------------------\n\nexport type ExplosionDataBlock = GameBaseDataBlock & {\n dtsFileName?: string;\n soundProfile?: number | null;\n particleEmitter?: number | null;\n particleDensity?: number;\n particleRadius?: number;\n faceViewer?: boolean;\n explosionScale?: Vec3;\n playSpeed?: number;\n debrisThetaMin?: number;\n debrisThetaMax?: number;\n debrisPhiMin?: number;\n debrisPhiMax?: number;\n debrisMinVelocity?: number;\n debrisMaxVelocity?: number;\n debrisNum?: number;\n debrisVariance?: number;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n offset?: number;\n shakeCamera?: boolean;\n hasLight?: boolean;\n camShakeFreq?: Vec3;\n camShakeAmp?: Vec3;\n camShakeDuration?: number;\n camShakeRadius?: number;\n camShakeFalloff?: number;\n shockwave?: number | null;\n debris?: number | null;\n emitters?: (number | null)[];\n subExplosions?: (number | null)[];\n times?: number[];\n sizes?: Vec3[];\n};\n\nexport type DebrisDataBlock = GameBaseDataBlock & {\n elasticity?: number;\n friction?: number;\n numBounces?: number;\n bounceVariance?: number;\n minSpinSpeed?: number;\n maxSpinSpeed?: number;\n render2D?: boolean;\n explodeOnMaxBounce?: boolean;\n staticOnMaxBounce?: boolean;\n snapOnMaxBounce?: boolean;\n lifetime?: number;\n lifetimeVariance?: number;\n velocity?: number;\n velocityVariance?: number;\n useRadiusMass?: boolean;\n fade?: boolean;\n baseRadius?: number;\n gravModifier?: number;\n terminalVelocity?: number;\n ignoreWater?: boolean;\n texture?: string;\n shapeName?: string;\n emitter0?: number | null;\n emitter1?: number | null;\n explosion?: number | null;\n};\n\nexport type SplashDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n velocity?: number;\n height?: number;\n acceleration?: number;\n texWrap?: number;\n texFactor?: number;\n ejectionFreq?: number;\n ejectionAngle?: number;\n ringLifetime?: number;\n startRadius?: number;\n explosion?: number | null;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n foamTexture?: string;\n};\n\nexport type ShockwaveDataBlock = GameBaseDataBlock & {\n scale?: Vec3;\n delayMS?: number;\n delayVariance?: number;\n lifetimeMS?: number;\n lifetimeVariance?: number;\n width?: number;\n numSegments?: number;\n numVertSegments?: number;\n velocity?: number;\n height?: number;\n verticalCurve?: number;\n acceleration?: number;\n texWrap?: number;\n is2D?: boolean;\n orientToNormal?: boolean;\n mapToTerrain?: boolean;\n renderBottom?: boolean;\n renderSquare?: boolean;\n emitters?: (number | null)[];\n colors?: Color4[];\n times?: number[];\n textureName?: string;\n mapToTexture?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Particles\n// ---------------------------------------------------------------------------\n\nexport type ParticleEmitterDataBlock = GameBaseDataBlock & {\n ejectionPeriodMS?: number;\n periodVarianceMS?: number;\n ejectionVelocity?: number;\n velocityVariance?: number;\n ejectionOffset?: number;\n thetaMin?: number;\n thetaMax?: number;\n phiReferenceVel?: number;\n phiVariance?: number;\n overrideAdvances?: boolean;\n orientParticles?: boolean;\n orientOnVelocity?: boolean;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n useEmitterSizes?: boolean;\n useEmitterColors?: boolean;\n particles?: (number | null)[];\n};\n\nexport type ParticleDataBlock = GameBaseDataBlock & {\n dragCoefficient?: number;\n windCoefficient?: number;\n gravityCoefficient?: number;\n inheritedVelFactor?: number;\n constantAcceleration?: number;\n lifetimeMS?: number;\n lifetimeVarianceMS?: number;\n spinSpeed?: number;\n spinRandomMin?: number;\n spinRandomMax?: number;\n useInvAlpha?: boolean;\n keys?: ParticleKey[];\n textures?: string[];\n};\n\n// ---------------------------------------------------------------------------\n// Audio\n// ---------------------------------------------------------------------------\n\nexport type AudioDescriptionDataBlock = SimDataBlock & {\n volume?: number;\n isLooping?: boolean;\n loopCount?: number;\n minLoopGap?: number;\n maxLoopGap?: number;\n is3D?: boolean;\n referenceDistance?: number;\n maxDistance?: number;\n coneInsideAngle?: number;\n coneOutsideAngle?: number;\n coneOutsideVolume?: number;\n coneVector?: Vec3;\n environmentLevel?: number;\n type?: number;\n};\n\nexport type AudioProfileDataBlock = SimDataBlock & {\n description?: number | null;\n environment?: number | null;\n sampleEnvironment?: number | null;\n filename?: string;\n};\n\nexport type AudioEnvironmentDataBlock = SimDataBlock & {\n useRoom?: boolean;\n room?: number;\n roomHF?: number;\n reflections?: number;\n reverb?: number;\n roomRolloffFactor?: number;\n decayTime?: number;\n decayHFRatio?: number;\n reflectionsDelay?: number;\n reverbDelay?: number;\n roomVolume?: number;\n damping?: number;\n environmentSize?: number;\n environmentDiffusion?: number;\n airAbsorption?: number;\n effectVolume?: number;\n flags?: number;\n};\n\nexport type AudioSampleEnvironmentDataBlock = SimDataBlock & {\n direct?: number;\n directHF?: number;\n room?: number;\n roomHF?: number;\n obstruction?: number;\n obstructionLFRatio?: number;\n occlusion?: number;\n occlusionLFRatio?: number;\n occlusionRoomRatio?: number;\n roomRolloff?: number;\n airAbsorption?: number;\n outsideVolumeHF?: number;\n flags?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Misc / utility datablocks\n// ---------------------------------------------------------------------------\n\nexport type DecalDataBlock = SimDataBlock & {\n sizeX?: number;\n sizeY?: number;\n textureName?: string;\n};\n\nexport interface CameraDataBlock extends ShapeBaseDataBlock {}\n\nexport interface SensorDataBlock extends SimDataBlock {}\n\nexport type TriggerDataBlock = SimDataBlock & {\n tickPeriodMS?: number;\n};\n\nexport type ForceFieldBareDataBlock = SimDataBlock & {\n fadeMS?: number;\n baseTranslucency?: number;\n powerOffTranslucency?: number;\n teamPermiable?: boolean;\n otherPermiable?: boolean;\n color1?: Color4;\n color2?: Color4;\n framesPerSec?: number;\n numFrames?: number;\n scrollSpeed?: number;\n umapping?: number;\n vmapping?: number;\n texture0?: string;\n texture1?: string;\n texture2?: string;\n texture3?: string;\n texture4?: string;\n};\n\nexport type ParticleEmissionDummyDataBlock = SimDataBlock & {\n timeMultiple?: number;\n};\n\nexport type CommanderIconDataBlock = SimDataBlock & {\n baseImage?: string;\n activeImage?: string;\n inactiveImage?: string;\n selectImage?: string;\n hilightImage?: string;\n};\n\nexport type PrecipitationDataBlock = SimDataBlock & {\n soundProfile?: number | null;\n numDrops?: number;\n maxSize?: number;\n materialList?: string;\n sizeX?: number;\n sizeY?: number;\n movingBoxPer?: number;\n divHeightVal?: number;\n sizeBigBox?: number;\n topBoxSpeed?: number;\n frontBoxSpeed?: number;\n topBoxDrawPer?: number;\n bottomDrawHeight?: number;\n skipIfPer?: number;\n bottomSpeedPer?: number;\n frontSpeedPer?: number;\n frontRadiusPer?: number;\n};\n\nexport type FireballAtmosphereDataBlock = SimDataBlock & {\n emitter?: number | null;\n};\n\nexport type LightningDataBlock = SimDataBlock & {\n strikeSounds?: (number | null)[];\n strikeTextures?: string[];\n thunderSound?: number | null;\n};\n\n// ---------------------------------------------------------------------------\n// Station effects\n// ---------------------------------------------------------------------------\n\nexport type StationFXVehicleDataBlock = SimDataBlock & {\n glowTopHeight?: number;\n glowBottomHeight?: number;\n glowTopRadius?: number;\n glowBottomRadius?: number;\n numGlowSegments?: number;\n glowFadeTime?: number;\n armLightDelay?: number;\n armLightLifetime?: number;\n armLightFadeTime?: number;\n lifetime?: number;\n numArcSegments?: number;\n sphereColor?: Color4;\n spherePhiSegments?: number;\n sphereThetaSegments?: number;\n sphereRadius?: number;\n scale?: Vec3;\n glowNodeName?: string;\n leftNodeName0?: string;\n rightNodeName0?: string;\n leftNodeName1?: string;\n rightNodeName1?: string;\n leftNodeName2?: string;\n rightNodeName2?: string;\n leftNodeName3?: string;\n rightNodeName3?: string;\n texture0?: string;\n texture1?: string;\n};\n\nexport type StationFXPersonalDataBlock = SimDataBlock & {\n glowTopRadius?: number;\n glowBottomRadius?: number;\n glowTopHeight?: number;\n glowBottomHeight?: number;\n numGlowSegments?: number;\n numGlowPanels?: number;\n topAlpha?: number;\n bottomAlpha?: number;\n glowSpeed?: number;\n scrollSpeed?: number;\n leftNodeName?: string;\n rightNodeName?: string;\n texture0?: string;\n texture1?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Miscellaneous game datablocks\n// ---------------------------------------------------------------------------\n\nexport type CannedChatItemDataBlock = SimDataBlock & {\n chatText?: string;\n};\n\nexport interface MissionMarkerDataBlock extends ShapeBaseDataBlock {}\n\nexport type TSShapeConstructorDataBlock = SimDataBlock & {\n shape?: string;\n sequences?: string[];\n};\n\nexport type EffectProfileDataBlock = SimDataBlock & {\n minDistance?: number;\n maxDistance?: number;\n audioScale?: number;\n directional?: boolean;\n effectName?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Jet / running light effects\n// ---------------------------------------------------------------------------\n\nexport type JetEffectDataBlock = GameBaseDataBlock & {\n coolColor?: Color4;\n hotColor?: Color4;\n activateTime?: number;\n deactivateTime?: number;\n length?: number;\n width?: number;\n speed?: number;\n stretch?: number;\n yOffset?: number;\n texture?: string;\n};\n\nexport type RunningLightDataBlock = GameBaseDataBlock & {\n radius?: number;\n color?: Color4;\n type?: number;\n length?: number;\n nodeName?: string;\n direction?: Vec3;\n offset?: Vec3;\n texture?: string;\n};\n"]}
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ export { createLiveParser, passiveObserverProtocolState, freshConnectionProtocol
9
9
  export type { LiveParserKit, LiveParserSeed } from "./LiveParser.js";
10
10
  export { GhostStateAccumulator, mergeGhostParsedData, } from "./GhostStateAccumulator.js";
11
11
  export { buildTimeline, getTimelineStats, exportTimeline } from "./Timeline.js";
12
- export type { DemoHeader, DemoFile, DemoBlock, InitialBlockData, ConnectionProtocolState, DataBlockHeader, PathManagerEntry, ParsedDataBlock, ScoreEntry, SensorGroupColor, TargetEntry, Move, InfoBlock, DnetHeader, RateInfo, GameState, PacketData, ParseFault, NetEventInfo, GhostUpdate, LoadResult, } from "./types.js";
12
+ export type { DemoHeader, DemoFile, DemoBlock, InitialBlockData, ConnectionProtocolState, DataBlockHeader, PathManagerEntry, ParsedDataBlock, SensorGroupColor, TargetEntry, Move, InfoBlock, DnetHeader, RateInfo, GameState, PacketData, ParseFault, NetEventInfo, GhostUpdate, LoadResult, } from "./types.js";
13
13
  export { BlockTypePacket, BlockTypeSendPacket, BlockTypeMove, BlockTypeInfo, DemoIdentString, DemoProtocolVersion, MoveTickMs, MaxGhostCount, GhostIdBitSize, NetStringTableMaxStrings, StringIdBitSize, NetEventClassBitSize, NetEventClassFirst, NetObjectClassBitSize, NetObjectClassFirst, MaxPacketDataSize, MaxTriggerKeys, MoveCountBits, MaxMoveCount, DataBlockObjectIdFirst, DataBlockObjectIdBitSize, DataBlockClassFirst, DataBlockClassBitSize, DataBlockClassNames, NetObjectClassNames, NetEventClassNames, } from "./types.js";
14
14
  export type { GhostKeyframe, GhostInstance, ControlObjectKeyframe, GameEvent, DemoTimeline, TimelineStats, ExportTimeline, } from "./Timeline.js";
15
15
  export type { EventParser, ConnectionContext, GhostParserEntry, GhostEntry, GhostTrackerInterface, ParsedData, } from "./ClassRegistry.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhF,YAAY,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,IAAI,EACJ,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EACrB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,eAAe,EACf,OAAO,GACR,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,8BAA8B,EAC9B,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EACV,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EACT,QAAQ,EACR,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA0BhF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC","sourcesContent":["export { DemoParser } from \"./DemoParser.js\";\nexport { BitStream } from \"./BitStream.js\";\nexport { BitWriter } from \"./BitWriter.js\";\nexport { createDefaultRegistry } from \"./defaultRegistry.js\";\nexport { PacketParser } from \"./PacketParser.js\";\nexport { ClassRegistry } from \"./ClassRegistry.js\";\nexport { GhostTracker } from \"./GhostManager.js\";\nexport {\n createLiveParser,\n passiveObserverProtocolState,\n freshConnectionProtocolState,\n} from \"./LiveParser.js\";\nexport type { LiveParserKit, LiveParserSeed } from \"./LiveParser.js\";\nexport {\n GhostStateAccumulator,\n mergeGhostParsedData,\n} from \"./GhostStateAccumulator.js\";\nexport { buildTimeline, getTimelineStats, exportTimeline } from \"./Timeline.js\";\n\nexport type {\n DemoHeader,\n DemoFile,\n DemoBlock,\n InitialBlockData,\n ConnectionProtocolState,\n DataBlockHeader,\n PathManagerEntry,\n ParsedDataBlock,\n ScoreEntry,\n SensorGroupColor,\n TargetEntry,\n Move,\n InfoBlock,\n DnetHeader,\n RateInfo,\n GameState,\n PacketData,\n ParseFault,\n NetEventInfo,\n GhostUpdate,\n LoadResult,\n} from \"./types.js\";\n\nexport {\n BlockTypePacket,\n BlockTypeSendPacket,\n BlockTypeMove,\n BlockTypeInfo,\n DemoIdentString,\n DemoProtocolVersion,\n MoveTickMs,\n MaxGhostCount,\n GhostIdBitSize,\n NetStringTableMaxStrings,\n StringIdBitSize,\n NetEventClassBitSize,\n NetEventClassFirst,\n NetObjectClassBitSize,\n NetObjectClassFirst,\n MaxPacketDataSize,\n MaxTriggerKeys,\n MoveCountBits,\n MaxMoveCount,\n DataBlockObjectIdFirst,\n DataBlockObjectIdBitSize,\n DataBlockClassFirst,\n DataBlockClassBitSize,\n DataBlockClassNames,\n NetObjectClassNames,\n NetEventClassNames,\n} from \"./types.js\";\n\nexport type {\n GhostKeyframe,\n GhostInstance,\n ControlObjectKeyframe,\n GameEvent,\n DemoTimeline,\n TimelineStats,\n ExportTimeline,\n} from \"./Timeline.js\";\n\nexport type {\n EventParser,\n ConnectionContext,\n GhostParserEntry,\n GhostEntry,\n GhostTrackerInterface,\n ParsedData,\n} from \"./ClassRegistry.js\";\n\n// Shared primitive types\nexport type {\n Vec3,\n Quat,\n Color3,\n Color4,\n AffineTransform,\n MatrixF,\n} from \"./dataTypes.js\";\n\n// Ghost data types (parsed ghost update/packet data)\nexport type {\n MoveData,\n SoundSlot,\n ThreadState,\n ImageSlot,\n WheelState,\n GameBaseGhostData,\n ShapeBaseGhostData,\n PlayerGhostData,\n PlayerPacketData,\n ShapeBasePacketData,\n VehicleGhostData,\n VehiclePacketData,\n TurretPacketData,\n WheeledVehicleGhostData,\n WheeledVehiclePacketData,\n FlyingVehicleGhostData,\n HoverVehicleGhostData,\n ItemGhostData,\n StaticShapeGhostData,\n ScopeAlwaysShapeGhostData,\n BeaconObjectGhostData,\n TurretGhostData,\n MissionMarkerGhostData,\n WayPointGhostData,\n SpawnSphereGhostData,\n CameraGhostData,\n CameraPacketData,\n MarkerGhostData,\n SimpleNetObjectGhostData,\n InteriorInstanceGhostData,\n DebrisGhostData,\n ProjectileGhostData,\n LinearProjectileGhostData,\n BombProjectileGhostData,\n GrenadeProjectileGhostData,\n SeekerProjectileGhostData,\n SniperProjectileGhostData,\n ShockLanceProjectileGhostData,\n ELFProjectileGhostData,\n RepairProjectileGhostData,\n TargetProjectileGhostData,\n ForceFieldBareGhostData,\n TSStaticGhostData,\n TerrainBlockGhostData,\n SunGhostData,\n SkyGhostData,\n LightningGhostData,\n WaterBlockGhostData,\n MissionAreaGhostData,\n SplashGhostData,\n ShockwaveGhostData,\n FireballAtmosphereGhostData,\n VehicleBlockerGhostData,\n ParticleEmissionDummyGhostData,\n PrecipitationGhostData,\n TriggerGhostData,\n PhysicalZoneGhostData,\n AudioEmitterGhostData,\n StationFXPersonalGhostData,\n AIObjectiveGhostData,\n} from \"./ghostDataTypes.js\";\n\n// DataBlock data types (parsed datablock definitions)\nexport type {\n HudImageEntry,\n ImageState,\n ParticleKey,\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} from \"./dataBlockDataTypes.js\";\n\n// Event data types (parsed network event data)\nexport type {\n EventData,\n SimDataBlockEventData,\n NetStringEventData,\n Sim2DAudioEventData,\n Sim3DAudioEventData,\n SetSensorGroupEventData,\n SetServerTargetEventData,\n TargetToEventData,\n SetObjectActiveImageEventData,\n SetMissionCRCEventData,\n RemoteCommandEventData,\n TargetInfoEventData,\n TargetFreeEventData,\n SimTargetAudioEventData,\n SensorGroupColorEntry,\n SensorGroupColorEventData,\n ResetClientTargetsEventData,\n RemoveClientTargetTypeEventData,\n SimVoiceStreamEventData,\n GhostingMessageEventData,\n GhostAlwaysObjectEventData,\n PathPoint,\n PathData,\n PathManagerEventData,\n LightningStrikeEventData,\n FileChunkEventData,\n DownloadMessageEventData,\n FileDownloadRequestEventData,\n SimpleMessageEventData,\n CRCChallengeEventData,\n CRCChallengeResponseEventData,\n GravityEventData,\n FogChallengeEventData,\n AnyEventData,\n} from \"./eventDataTypes.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAyBhF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC","sourcesContent":["export { DemoParser } from \"./DemoParser.js\";\nexport { BitStream } from \"./BitStream.js\";\nexport { BitWriter } from \"./BitWriter.js\";\nexport { createDefaultRegistry } from \"./defaultRegistry.js\";\nexport { PacketParser } from \"./PacketParser.js\";\nexport { ClassRegistry } from \"./ClassRegistry.js\";\nexport { GhostTracker } from \"./GhostManager.js\";\nexport {\n createLiveParser,\n passiveObserverProtocolState,\n freshConnectionProtocolState,\n} from \"./LiveParser.js\";\nexport type { LiveParserKit, LiveParserSeed } from \"./LiveParser.js\";\nexport {\n GhostStateAccumulator,\n mergeGhostParsedData,\n} from \"./GhostStateAccumulator.js\";\nexport { buildTimeline, getTimelineStats, exportTimeline } from \"./Timeline.js\";\n\nexport type {\n DemoHeader,\n DemoFile,\n DemoBlock,\n InitialBlockData,\n ConnectionProtocolState,\n DataBlockHeader,\n PathManagerEntry,\n ParsedDataBlock,\n SensorGroupColor,\n TargetEntry,\n Move,\n InfoBlock,\n DnetHeader,\n RateInfo,\n GameState,\n PacketData,\n ParseFault,\n NetEventInfo,\n GhostUpdate,\n LoadResult,\n} from \"./types.js\";\n\nexport {\n BlockTypePacket,\n BlockTypeSendPacket,\n BlockTypeMove,\n BlockTypeInfo,\n DemoIdentString,\n DemoProtocolVersion,\n MoveTickMs,\n MaxGhostCount,\n GhostIdBitSize,\n NetStringTableMaxStrings,\n StringIdBitSize,\n NetEventClassBitSize,\n NetEventClassFirst,\n NetObjectClassBitSize,\n NetObjectClassFirst,\n MaxPacketDataSize,\n MaxTriggerKeys,\n MoveCountBits,\n MaxMoveCount,\n DataBlockObjectIdFirst,\n DataBlockObjectIdBitSize,\n DataBlockClassFirst,\n DataBlockClassBitSize,\n DataBlockClassNames,\n NetObjectClassNames,\n NetEventClassNames,\n} from \"./types.js\";\n\nexport type {\n GhostKeyframe,\n GhostInstance,\n ControlObjectKeyframe,\n GameEvent,\n DemoTimeline,\n TimelineStats,\n ExportTimeline,\n} from \"./Timeline.js\";\n\nexport type {\n EventParser,\n ConnectionContext,\n GhostParserEntry,\n GhostEntry,\n GhostTrackerInterface,\n ParsedData,\n} from \"./ClassRegistry.js\";\n\n// Shared primitive types\nexport type {\n Vec3,\n Quat,\n Color3,\n Color4,\n AffineTransform,\n MatrixF,\n} from \"./dataTypes.js\";\n\n// Ghost data types (parsed ghost update/packet data)\nexport type {\n MoveData,\n SoundSlot,\n ThreadState,\n ImageSlot,\n WheelState,\n GameBaseGhostData,\n ShapeBaseGhostData,\n PlayerGhostData,\n PlayerPacketData,\n ShapeBasePacketData,\n VehicleGhostData,\n VehiclePacketData,\n TurretPacketData,\n WheeledVehicleGhostData,\n WheeledVehiclePacketData,\n FlyingVehicleGhostData,\n HoverVehicleGhostData,\n ItemGhostData,\n StaticShapeGhostData,\n ScopeAlwaysShapeGhostData,\n BeaconObjectGhostData,\n TurretGhostData,\n MissionMarkerGhostData,\n WayPointGhostData,\n SpawnSphereGhostData,\n CameraGhostData,\n CameraPacketData,\n MarkerGhostData,\n SimpleNetObjectGhostData,\n InteriorInstanceGhostData,\n DebrisGhostData,\n ProjectileGhostData,\n LinearProjectileGhostData,\n BombProjectileGhostData,\n GrenadeProjectileGhostData,\n SeekerProjectileGhostData,\n SniperProjectileGhostData,\n ShockLanceProjectileGhostData,\n ELFProjectileGhostData,\n RepairProjectileGhostData,\n TargetProjectileGhostData,\n ForceFieldBareGhostData,\n TSStaticGhostData,\n TerrainBlockGhostData,\n SunGhostData,\n SkyGhostData,\n LightningGhostData,\n WaterBlockGhostData,\n MissionAreaGhostData,\n SplashGhostData,\n ShockwaveGhostData,\n FireballAtmosphereGhostData,\n VehicleBlockerGhostData,\n ParticleEmissionDummyGhostData,\n PrecipitationGhostData,\n TriggerGhostData,\n PhysicalZoneGhostData,\n AudioEmitterGhostData,\n StationFXPersonalGhostData,\n AIObjectiveGhostData,\n} from \"./ghostDataTypes.js\";\n\n// DataBlock data types (parsed datablock definitions)\nexport type {\n HudImageEntry,\n ImageState,\n ParticleKey,\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} from \"./dataBlockDataTypes.js\";\n\n// Event data types (parsed network event data)\nexport type {\n EventData,\n SimDataBlockEventData,\n NetStringEventData,\n Sim2DAudioEventData,\n Sim3DAudioEventData,\n SetSensorGroupEventData,\n SetServerTargetEventData,\n TargetToEventData,\n SetObjectActiveImageEventData,\n SetMissionCRCEventData,\n RemoteCommandEventData,\n TargetInfoEventData,\n TargetFreeEventData,\n SimTargetAudioEventData,\n SensorGroupColorEntry,\n SensorGroupColorEventData,\n ResetClientTargetsEventData,\n RemoveClientTargetTypeEventData,\n SimVoiceStreamEventData,\n GhostingMessageEventData,\n GhostAlwaysObjectEventData,\n PathPoint,\n PathData,\n PathManagerEventData,\n LightningStrikeEventData,\n FileChunkEventData,\n DownloadMessageEventData,\n FileDownloadRequestEventData,\n SimpleMessageEventData,\n CRCChallengeEventData,\n CRCChallengeResponseEventData,\n GravityEventData,\n FogChallengeEventData,\n AnyEventData,\n} from \"./eventDataTypes.js\";\n"]}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { MoveData } from "./ghostDataTypes.js";
1
2
  import type { ParsedData } from "./ClassRegistry.js";
2
3
  /** Ident string at the start of every .rec file (checked on playback). */
3
4
  export declare const DemoIdentString = "Tribes2 Recording";
@@ -210,16 +211,6 @@ export interface ParsedDataBlock {
210
211
  objectId: number;
211
212
  data: ParsedData;
212
213
  }
213
- export interface ScoreEntry {
214
- clientId: number;
215
- teamId: number;
216
- score: number;
217
- field0: number;
218
- field1: number;
219
- field2: number;
220
- isBot: boolean;
221
- triggerFlags: boolean[];
222
- }
223
214
  /**
224
215
  * IFF (Identification Friend or Foe) color for one sensor group pairing.
225
216
  * sensorGroupColors[myGroup][theirGroup] determines how `theirGroup` appears
@@ -265,7 +256,8 @@ export interface InitialBlockData {
265
256
  firstPerson: boolean;
266
257
  connectionFields: number[];
267
258
  stateArray: number[];
268
- scoreEntries: ScoreEntry[];
259
+ /** Queued client moves (GameConnection::mMoveList), starting at connectionFields[4]. */
260
+ moves: MoveData[];
269
261
  demoValues: string[];
270
262
  sensorGroupColors: SensorGroupColor[];
271
263
  targetEntries: TargetEntry[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ParsedData } from \"./ClassRegistry.js\";\n\n/** Ident string at the start of every .rec file (checked on playback). */\nexport const DemoIdentString = \"Tribes2 Recording\";\n/** Protocol version written by build 25034; playback rejects any other. */\nexport const DemoProtocolVersion = 0x330004;\n/** One Move block per simulation tick, 32ms each (DemoParser.bufferedMoveTicks). */\nexport const MoveTickMs = 32;\n\n// Key constants from the V12 engine source\nexport const MaxGhostCount = 1024;\nexport const GhostIdBitSize = 10;\nexport const NetStringTableMaxStrings = 4096;\nexport const StringIdBitSize = 12;\nexport const NetEventClassBitSize = 6;\nexport const NetEventClassFirst = 255;\nexport const NetObjectClassBitSize = 7;\nexport const NetObjectClassFirst = 0;\nexport const MaxPacketDataSize = 1500;\nexport const MaxTriggerKeys = 6;\nexport const MoveCountBits = 5;\nexport const MaxMoveCount = 30;\n\n// GhostingMessageEvent message types (NetConnection::GhostMSG enum).\nexport const GhostMsgGhostAlwaysDone = 0;\nexport const GhostMsgGhostAlwaysAck = 1;\nexport const GhostMsgEndGhosting = 2;\nexport const GhostMsgGhostingActive = 3;\n\n// DataBlock constants.\n// For SimDataBlockEvent header (initial block + events), the binary uses:\n// readInt(11) objectId, readInt(7) classId, readInt(11) index, readInt(12) total.\n// For DataBlock references in payloads (readDataBlockRef), V12 source uses:\n// readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast).\nexport const DataBlockObjectIdFirst = 3;\nexport const DataBlockObjectIdBitSize = 10;\nexport const DataBlockObjectIdLast =\n DataBlockObjectIdFirst + (1 << DataBlockObjectIdBitSize) - 1; // 1026\nexport const DataBlockClassFirst = 128;\nexport const DataBlockClassBitSize = 7;\n\n// SimDataBlockEvent header bit sizes (from decompiled binary).\n// These are the HEADER field sizes, which differ from the payload reference sizes.\n// readClassInfo uses getNextPow2(0x800=2048) → getBitCount(2048)=11 for objectId.\n// The classId, index, and total are read with literal values 7, 11, 12 (from 0x80, 0xb, 0xc).\nexport const SimDBEventObjectIdBits = 11;\nexport const SimDBEventClassIdBits = 7; // same as DataBlockClassBitSize\nexport const SimDBEventIndexBits = 11;\nexport const SimDBEventTotalBits = 12;\n\n// Deterministic DataBlock class name mapping, derived from machine code\n// analysis of the Tribes 2 binary (build 25034). All 54 DataBlock classes\n// with mClassIdBase=0x80 are sorted by C strcmp (ASCII byte order), which\n// is how AbstractClassRep::initialize assigns sequential classIds.\n// Index N in this array corresponds to classId N (group-local) or\n// classId N+128 (V12 global format).\nexport const DataBlockClassNames: readonly string[] = [\n \"AudioDescription\", // 0 / 128\n \"AudioEnvironment\", // 1 / 129\n \"AudioProfile\", // 2 / 130\n \"AudioSampleEnvironment\", // 3 / 131\n \"BombProjectileData\", // 4 / 132\n \"CameraData\", // 5 / 133\n \"CannedChatItem\", // 6 / 134\n \"CommanderIconData\", // 7 / 135\n \"DebrisData\", // 8 / 136\n \"DecalData\", // 9 / 137\n \"ELFProjectileData\", // 10 / 138\n \"EffectProfile\", // 11 / 139\n \"EnergyProjectileData\", // 12 / 140\n \"ExplosionData\", // 13 / 141\n \"FireballAtmosphereData\", // 14 / 142\n \"FlareProjectileData\", // 15 / 143\n \"FlyingVehicleData\", // 16 / 144\n \"ForceFieldBareData\", // 17 / 145\n \"GameBaseData\", // 18 / 146\n \"GrenadeProjectileData\", // 19 / 147\n \"HoverVehicleData\", // 20 / 148\n \"ItemData\", // 21 / 149\n \"JetEffectData\", // 22 / 150\n \"LightningData\", // 23 / 151\n \"LinearFlareProjectileData\", // 24 / 152\n \"LinearProjectileData\", // 25 / 153\n \"MissionMarkerData\", // 26 / 154\n \"ParticleData\", // 27 / 155\n \"ParticleEmissionDummyData\", // 28 / 156\n \"ParticleEmitterData\", // 29 / 157\n \"PlayerData\", // 30 / 158\n \"PrecipitationData\", // 31 / 159\n \"ProjectileData\", // 32 / 160\n \"RepairProjectileData\", // 33 / 161\n \"RunningLightData\", // 34 / 162\n \"SeekerProjectileData\", // 35 / 163\n \"SensorData\", // 36 / 164\n \"ShapeBaseData\", // 37 / 165\n \"ShapeBaseImageData\", // 38 / 166\n \"ShockLanceProjectileData\", // 39 / 167\n \"ShockwaveData\", // 40 / 168\n \"SimDataBlock\", // 41 / 169\n \"SniperProjectileData\", // 42 / 170\n \"SplashData\", // 43 / 171\n \"StaticShapeData\", // 44 / 172\n \"StationFXPersonalData\", // 45 / 173\n \"StationFXVehicleData\", // 46 / 174\n \"TSShapeConstructor\", // 47 / 175\n \"TargetProjectileData\", // 48 / 176\n \"TracerProjectileData\", // 49 / 177\n \"TriggerData\", // 50 / 178\n \"TurretData\", // 51 / 179\n \"TurretImageData\", // 52 / 180\n \"WheeledVehicleData\", // 53 / 181\n] as const;\n\n// Deterministic NetObject (ghost) class name mapping, derived from machine code\n// analysis of the Tribes 2 binary (build 25034). All 53 NetObject classes\n// with mClassIdBase=0 are sorted by C strcmp (ASCII byte order), which\n// is how AbstractClassRep::initialize assigns sequential classIds.\n// Index N in this array corresponds to classId N (NetObjectClassFirst + N).\n// Verified against decompiled FUN_00423cb0 class table initialization.\n// Vehicle is NOT a ghost class (classGroup=0xFFFFFFFF in binary).\nexport const NetObjectClassNames: readonly string[] = [\n \"AIObjective\", // 0\n \"AudioEmitter\", // 1\n \"BeaconObject\", // 2\n \"BombProjectile\", // 3\n \"Camera\", // 4\n \"Debris\", // 5\n \"ELFProjectile\", // 6\n \"EnergyProjectile\", // 7\n \"FireballAtmosphere\", // 8\n \"FlareProjectile\", // 9\n \"FlyingVehicle\", // 10\n \"ForceFieldBare\", // 11\n \"GameBase\", // 12\n \"GrenadeProjectile\", // 13\n \"HoverVehicle\", // 14\n \"InteriorInstance\", // 15\n \"Item\", // 16\n \"Lightning\", // 17\n \"LinearFlareProjectile\", // 18\n \"LinearProjectile\", // 19\n \"Marker\", // 20\n \"MissionArea\", // 21\n \"MissionMarker\", // 22\n \"ParticleEmissionDummy\", // 23\n \"PhysicalZone\", // 24\n \"Player\", // 25\n \"Precipitation\", // 26\n \"Projectile\", // 27\n \"RepairProjectile\", // 28\n \"ScopeAlwaysShape\", // 29\n \"SeekerProjectile\", // 30\n \"ShapeBase\", // 31\n \"ShockLanceProjectile\", // 32\n \"Shockwave\", // 33\n \"SimpleNetObject\", // 34\n \"Sky\", // 35\n \"SniperProjectile\", // 36\n \"SpawnSphere\", // 37\n \"Splash\", // 38\n \"StaticShape\", // 39\n \"StationFXPersonal\", // 40\n \"StationFXVehicle\", // 41\n \"Sun\", // 42\n \"TSStatic\", // 43\n \"TargetProjectile\", // 44\n \"TerrainBlock\", // 45\n \"TracerProjectile\", // 46\n \"Trigger\", // 47\n \"Turret\", // 48\n \"VehicleBlocker\", // 49\n \"WaterBlock\", // 50\n \"WayPoint\", // 51\n \"WheeledVehicle\", // 52\n] as const;\n\n// Deterministic NetEvent class name mapping, derived from machine code\n// analysis of the Tribes 2 binary (build 25034). All 26 NetEvent classes\n// with mClassIdBase=0xFF are sorted by C strcmp (ASCII byte order), which\n// is how AbstractClassRep::initialize assigns sequential classIds.\n// Index N in this array corresponds to classId NetEventClassFirst + N (255 + N).\nexport const NetEventClassNames: readonly string[] = [\n \"CRCChallengeEvent\", // 0 / 255\n \"CRCChallengeResponseEvent\", // 1 / 256\n \"FogChallengeEvent\", // 2 / 257\n \"GhostAlwaysObjectEvent\", // 3 / 258\n \"GhostingMessageEvent\", // 4 / 259\n \"GravityEvent\", // 5 / 260\n \"LightningStrikeEvent\", // 6 / 261\n \"NetStringEvent\", // 7 / 262\n \"PathManagerEvent\", // 8 / 263\n \"RemoteCommandEvent\", // 9 / 264\n \"RemoveClientTargetTypeEvent\", // 10 / 265\n \"ResetClientTargetsEvent\", // 11 / 266\n \"SensorGroupColorEvent\", // 12 / 267\n \"SetMissionCRCEvent\", // 13 / 268\n \"SetObjectActiveImageEvent\", // 14 / 269\n \"SetSensorGroupEvent\", // 15 / 270\n \"SetServerTargetEvent\", // 16 / 271\n \"Sim2DAudioEvent\", // 17 / 272\n \"Sim3DAudioEvent\", // 18 / 273\n \"SimDataBlockEvent\", // 19 / 274\n \"SimTargetAudioEvent\", // 20 / 275\n \"SimVoiceStreamEvent\", // 21 / 276\n \"SimpleMessageEvent\", // 22 / 277\n \"TargetFreeEvent\", // 23 / 278\n \"TargetInfoEvent\", // 24 / 279\n \"TargetToEvent\", // 25 / 280\n] as const;\n\n// Block types in the U16 packed format (type = typeSize >> 12)\n// These are from TorqueSDK-style recordBlock/handleRecordedBlock\nexport const BlockTypePacket = 0; // Received network packet (dnet data)\nexport const BlockTypeSendPacket = 1; // SendPacket trigger (size=0, no data)\nexport const BlockTypeMove = 2; // Raw Move struct (64 bytes)\nexport const BlockTypeInfo = 3; // Info block (8 bytes: U32 + F32)\n\n// Packet types from dnet\nexport const DataPacket = 0;\nexport const PingPacket = 1;\nexport const AckPacket = 2;\n\nexport interface Move {\n px: number;\n py: number;\n pz: number;\n pyaw: number;\n ppitch: number;\n proll: number;\n x: number;\n y: number;\n z: number;\n yaw: number;\n pitch: number;\n roll: number;\n id: number;\n sendCount: number;\n freeLook: boolean;\n trigger: boolean[];\n}\n\n/**\n * Type 3 block, written by GameConnection::readPacket right after each\n * received packet (FUN_005fb9b0): the `$firstPerson` flag and the control\n * camera FOV, replayed through setControlCameraFov on playback.\n */\nexport interface InfoBlock {\n /** Byte 0 of the block. The engine writes a bool through a 4-byte slot;\n * the other three bytes are uninitialized stack in real recordings. */\n firstPerson: boolean;\n /** Control camera field of view in degrees (F32). */\n cameraFov: number;\n}\n\nexport interface DataBlockHeader {\n objectId: number;\n classId: number;\n index: number;\n total: number;\n dataBitsStart: number;\n}\n\nexport interface DnetHeader {\n gameFlag: boolean;\n connectSeqBit: number;\n seqNumber: number;\n highestAck: number;\n packetType: number;\n ackByteCount: number;\n ackMask: number;\n}\n\nexport interface RateInfo {\n updateDelay?: number;\n packetSize?: number;\n maxUpdateDelay?: number;\n maxPacketSize?: number;\n}\n\nexport interface GhostUpdate {\n index: number;\n type: \"create\" | \"update\" | \"delete\";\n classId?: number;\n updateBitsStart: number;\n updateBitsEnd: number;\n parsedData?: ParsedData;\n /** Set when the ghost's data could not be parsed (unknown class,\n * parser threw, or tracker divergence). The ghost section stops\n * here and the tracker no longer mirrors the server. */\n failed?: boolean;\n /** Why parsing failed (parser name and error text). */\n error?: string;\n}\n\n/**\n * A packet the parser could not fully consume. The engine drops the\n * connection on any of these (\"Invalid packet\"), and by default the\n * PacketParser halts too (see `haltOnFault`): later packets come back\n * empty with the same fault attached. Continuing would mean parsing\n * against ghost/event state that no longer mirrors the server.\n */\nexport interface ParseFault {\n stage: \"gameState\" | \"event\" | \"ghost\";\n message: string;\n}\n\nexport interface NetEventInfo {\n classId: number;\n guaranteed: boolean;\n sequenceNumber?: number;\n absoluteSequenceNumber?: number;\n dataBitsStart: number;\n dataBitsEnd: number;\n parsedData?: ParsedData;\n /** Set when the event could not be parsed (unknown class or parser\n * threw), leaving the stream position unreliable. */\n failed?: boolean;\n /** Why parsing failed (parser name and error text). */\n error?: string;\n}\n\nexport interface PacketData {\n dnetHeader: DnetHeader;\n rateInfo: RateInfo;\n gameState: GameState;\n events: NetEventInfo[];\n ghosts: GhostUpdate[];\n /** Bit position where ghost section starts (readGhosts call). */\n ghostSectionStart?: number;\n /** Present when any section of the packet failed to parse. */\n parseFault?: ParseFault;\n}\n\nexport interface GameState {\n lastMoveAck: number;\n damageFlash?: number;\n whiteOut?: number;\n selfLocked?: boolean;\n selfHomed?: boolean;\n seekerTracking?: boolean;\n seekerTrackingPos?: { x: number; y: number; z: number };\n seekerMode?: number;\n seekerObjectGhostIndex?: number;\n targetPos?: { x: number; y: number; z: number };\n pinged: boolean;\n jammed: boolean;\n controlObjectGhostIndex?: number;\n controlObjectDataStart?: number;\n controlObjectDataEnd?: number;\n controlObjectData?: ParsedData;\n /** Why the control object's readPacketData could not be applied. */\n controlObjectError?: string;\n compressionPoint?: { x: number; y: number; z: number };\n targetVisibility?: { index: number; mask: number }[];\n cameraFov?: number;\n}\n\nexport interface DemoBlock {\n index: number;\n type: number;\n size: number;\n data: Uint8Array;\n parsed?: PacketData | Move | InfoBlock;\n /** Set if decoding the block threw (a parser bug — packets report\n * wire problems through `PacketData.parseFault` instead). */\n parseError?: string;\n}\n\nexport interface ConnectionProtocolState {\n lastSeqRecvdAtSend: number[];\n lastSeqRecvd: number;\n highestAckedSeq: number;\n lastSendSeq: number;\n ackMask: number;\n connectSequence: number;\n lastRecvAckAck: number;\n connectionEstablished: boolean;\n}\n\nexport interface StringTableEntry {\n id: number;\n value: string;\n}\n\nexport interface ParsedDataBlock {\n classId: number;\n className: string;\n objectId: number;\n data: ParsedData;\n}\n\nexport interface ScoreEntry {\n clientId: number;\n teamId: number;\n score: number;\n field0: number;\n field1: number;\n field2: number;\n isBot: boolean;\n triggerFlags: boolean[];\n}\n\n/**\n * IFF (Identification Friend or Foe) color for one sensor group pairing.\n * sensorGroupColors[myGroup][theirGroup] determines how `theirGroup` appears\n * to `myGroup` (e.g., red for enemy, green for friendly).\n */\nexport interface SensorGroupColor {\n group: number;\n targetGroup: number;\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface TargetEntry {\n targetId: number;\n sensorData?: number;\n voiceMapData?: number;\n name?: string;\n skin?: string;\n skinPref?: string;\n voice?: string;\n typeDescription?: string;\n sensorGroup: number;\n targetData: number;\n dataBlockRef?: number;\n damageLevel: number;\n}\n\nexport interface PathManagerEntry {\n entryId: number;\n records: {\n field0: number;\n field1: number;\n field2: number;\n auxField: number;\n }[];\n}\n\nexport interface InitialBlockData {\n taggedStrings: Map<number, string>;\n dataBlockHeaders: DataBlockHeader[];\n dataBlockCount: number;\n dataBlocks: Map<number, ParsedDataBlock>;\n /** Initial $firstPerson state from GameConnection::writeDemoStartBlock. */\n firstPerson: boolean;\n connectionFields: number[];\n stateArray: number[];\n scoreEntries: ScoreEntry[];\n demoValues: string[];\n sensorGroupColors: SensorGroupColor[];\n targetEntries: TargetEntry[];\n connectionState: ConnectionProtocolState;\n roundTripTime: number;\n packetLoss: number;\n pathManager: PathManagerEntry[];\n notifyCount: number;\n nextRecvEventSeq: number;\n ghostingSequence: number;\n initialGhosts: GhostUpdate[];\n initialEvents: NetEventInfo[];\n controlObjectGhostIndex: number;\n controlObjectData?: ParsedData;\n /** Compression point established by the control object's readPacketData\n * (its position), used to decode compressed points in packets that\n * precede the first in-stream compression-point update. */\n initialCompressionPoint?: { x: number; y: number; z: number };\n missionName: string;\n missionCRC: number;\n phase2TrailingBits?: number;\n phase2Valid?: boolean;\n phase2Error?: string;\n /**\n * Seeded state the engine would choke on during playback even though\n * the block decodes. Empty for every recording made by Tribes2.exe;\n * populated for hand-built (from-connect) initial blocks that break an\n * engine invariant — e.g. a notify count that does not equal\n * `lastSendSeq - highestAckedSeq` (NetConnection::handleNotify\n * dereferences an empty notify queue).\n */\n warnings: string[];\n}\n\nexport interface DemoHeader {\n identString: string;\n protocolVersion: number;\n demoLengthMs: number;\n initialBlockSize: number;\n}\n\nexport interface DemoFile {\n header: DemoHeader;\n initialBlock: InitialBlockData;\n blocks: DemoBlock[];\n}\n\nexport interface LoadResult {\n header: DemoHeader;\n initialBlock: InitialBlockData;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MoveData } from \"./ghostDataTypes.js\";\nimport type { ParsedData } from \"./ClassRegistry.js\";\n\n/** Ident string at the start of every .rec file (checked on playback). */\nexport const DemoIdentString = \"Tribes2 Recording\";\n/** Protocol version written by build 25034; playback rejects any other. */\nexport const DemoProtocolVersion = 0x330004;\n/** One Move block per simulation tick, 32ms each (DemoParser.bufferedMoveTicks). */\nexport const MoveTickMs = 32;\n\n// Key constants from the V12 engine source\nexport const MaxGhostCount = 1024;\nexport const GhostIdBitSize = 10;\nexport const NetStringTableMaxStrings = 4096;\nexport const StringIdBitSize = 12;\nexport const NetEventClassBitSize = 6;\nexport const NetEventClassFirst = 255;\nexport const NetObjectClassBitSize = 7;\nexport const NetObjectClassFirst = 0;\nexport const MaxPacketDataSize = 1500;\nexport const MaxTriggerKeys = 6;\nexport const MoveCountBits = 5;\nexport const MaxMoveCount = 30;\n\n// GhostingMessageEvent message types (NetConnection::GhostMSG enum).\nexport const GhostMsgGhostAlwaysDone = 0;\nexport const GhostMsgGhostAlwaysAck = 1;\nexport const GhostMsgEndGhosting = 2;\nexport const GhostMsgGhostingActive = 3;\n\n// DataBlock constants.\n// For SimDataBlockEvent header (initial block + events), the binary uses:\n// readInt(11) objectId, readInt(7) classId, readInt(11) index, readInt(12) total.\n// For DataBlock references in payloads (readDataBlockRef), V12 source uses:\n// readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast).\nexport const DataBlockObjectIdFirst = 3;\nexport const DataBlockObjectIdBitSize = 10;\nexport const DataBlockObjectIdLast =\n DataBlockObjectIdFirst + (1 << DataBlockObjectIdBitSize) - 1; // 1026\nexport const DataBlockClassFirst = 128;\nexport const DataBlockClassBitSize = 7;\n\n// SimDataBlockEvent header bit sizes (from decompiled binary).\n// These are the HEADER field sizes, which differ from the payload reference sizes.\n// readClassInfo uses getNextPow2(0x800=2048) → getBitCount(2048)=11 for objectId.\n// The classId, index, and total are read with literal values 7, 11, 12 (from 0x80, 0xb, 0xc).\nexport const SimDBEventObjectIdBits = 11;\nexport const SimDBEventClassIdBits = 7; // same as DataBlockClassBitSize\nexport const SimDBEventIndexBits = 11;\nexport const SimDBEventTotalBits = 12;\n\n// Deterministic DataBlock class name mapping, derived from machine code\n// analysis of the Tribes 2 binary (build 25034). All 54 DataBlock classes\n// with mClassIdBase=0x80 are sorted by C strcmp (ASCII byte order), which\n// is how AbstractClassRep::initialize assigns sequential classIds.\n// Index N in this array corresponds to classId N (group-local) or\n// classId N+128 (V12 global format).\nexport const DataBlockClassNames: readonly string[] = [\n \"AudioDescription\", // 0 / 128\n \"AudioEnvironment\", // 1 / 129\n \"AudioProfile\", // 2 / 130\n \"AudioSampleEnvironment\", // 3 / 131\n \"BombProjectileData\", // 4 / 132\n \"CameraData\", // 5 / 133\n \"CannedChatItem\", // 6 / 134\n \"CommanderIconData\", // 7 / 135\n \"DebrisData\", // 8 / 136\n \"DecalData\", // 9 / 137\n \"ELFProjectileData\", // 10 / 138\n \"EffectProfile\", // 11 / 139\n \"EnergyProjectileData\", // 12 / 140\n \"ExplosionData\", // 13 / 141\n \"FireballAtmosphereData\", // 14 / 142\n \"FlareProjectileData\", // 15 / 143\n \"FlyingVehicleData\", // 16 / 144\n \"ForceFieldBareData\", // 17 / 145\n \"GameBaseData\", // 18 / 146\n \"GrenadeProjectileData\", // 19 / 147\n \"HoverVehicleData\", // 20 / 148\n \"ItemData\", // 21 / 149\n \"JetEffectData\", // 22 / 150\n \"LightningData\", // 23 / 151\n \"LinearFlareProjectileData\", // 24 / 152\n \"LinearProjectileData\", // 25 / 153\n \"MissionMarkerData\", // 26 / 154\n \"ParticleData\", // 27 / 155\n \"ParticleEmissionDummyData\", // 28 / 156\n \"ParticleEmitterData\", // 29 / 157\n \"PlayerData\", // 30 / 158\n \"PrecipitationData\", // 31 / 159\n \"ProjectileData\", // 32 / 160\n \"RepairProjectileData\", // 33 / 161\n \"RunningLightData\", // 34 / 162\n \"SeekerProjectileData\", // 35 / 163\n \"SensorData\", // 36 / 164\n \"ShapeBaseData\", // 37 / 165\n \"ShapeBaseImageData\", // 38 / 166\n \"ShockLanceProjectileData\", // 39 / 167\n \"ShockwaveData\", // 40 / 168\n \"SimDataBlock\", // 41 / 169\n \"SniperProjectileData\", // 42 / 170\n \"SplashData\", // 43 / 171\n \"StaticShapeData\", // 44 / 172\n \"StationFXPersonalData\", // 45 / 173\n \"StationFXVehicleData\", // 46 / 174\n \"TSShapeConstructor\", // 47 / 175\n \"TargetProjectileData\", // 48 / 176\n \"TracerProjectileData\", // 49 / 177\n \"TriggerData\", // 50 / 178\n \"TurretData\", // 51 / 179\n \"TurretImageData\", // 52 / 180\n \"WheeledVehicleData\", // 53 / 181\n] as const;\n\n// Deterministic NetObject (ghost) class name mapping, derived from machine code\n// analysis of the Tribes 2 binary (build 25034). All 53 NetObject classes\n// with mClassIdBase=0 are sorted by C strcmp (ASCII byte order), which\n// is how AbstractClassRep::initialize assigns sequential classIds.\n// Index N in this array corresponds to classId N (NetObjectClassFirst + N).\n// Verified against decompiled FUN_00423cb0 class table initialization.\n// Vehicle is NOT a ghost class (classGroup=0xFFFFFFFF in binary).\nexport const NetObjectClassNames: readonly string[] = [\n \"AIObjective\", // 0\n \"AudioEmitter\", // 1\n \"BeaconObject\", // 2\n \"BombProjectile\", // 3\n \"Camera\", // 4\n \"Debris\", // 5\n \"ELFProjectile\", // 6\n \"EnergyProjectile\", // 7\n \"FireballAtmosphere\", // 8\n \"FlareProjectile\", // 9\n \"FlyingVehicle\", // 10\n \"ForceFieldBare\", // 11\n \"GameBase\", // 12\n \"GrenadeProjectile\", // 13\n \"HoverVehicle\", // 14\n \"InteriorInstance\", // 15\n \"Item\", // 16\n \"Lightning\", // 17\n \"LinearFlareProjectile\", // 18\n \"LinearProjectile\", // 19\n \"Marker\", // 20\n \"MissionArea\", // 21\n \"MissionMarker\", // 22\n \"ParticleEmissionDummy\", // 23\n \"PhysicalZone\", // 24\n \"Player\", // 25\n \"Precipitation\", // 26\n \"Projectile\", // 27\n \"RepairProjectile\", // 28\n \"ScopeAlwaysShape\", // 29\n \"SeekerProjectile\", // 30\n \"ShapeBase\", // 31\n \"ShockLanceProjectile\", // 32\n \"Shockwave\", // 33\n \"SimpleNetObject\", // 34\n \"Sky\", // 35\n \"SniperProjectile\", // 36\n \"SpawnSphere\", // 37\n \"Splash\", // 38\n \"StaticShape\", // 39\n \"StationFXPersonal\", // 40\n \"StationFXVehicle\", // 41\n \"Sun\", // 42\n \"TSStatic\", // 43\n \"TargetProjectile\", // 44\n \"TerrainBlock\", // 45\n \"TracerProjectile\", // 46\n \"Trigger\", // 47\n \"Turret\", // 48\n \"VehicleBlocker\", // 49\n \"WaterBlock\", // 50\n \"WayPoint\", // 51\n \"WheeledVehicle\", // 52\n] as const;\n\n// Deterministic NetEvent class name mapping, derived from machine code\n// analysis of the Tribes 2 binary (build 25034). All 26 NetEvent classes\n// with mClassIdBase=0xFF are sorted by C strcmp (ASCII byte order), which\n// is how AbstractClassRep::initialize assigns sequential classIds.\n// Index N in this array corresponds to classId NetEventClassFirst + N (255 + N).\nexport const NetEventClassNames: readonly string[] = [\n \"CRCChallengeEvent\", // 0 / 255\n \"CRCChallengeResponseEvent\", // 1 / 256\n \"FogChallengeEvent\", // 2 / 257\n \"GhostAlwaysObjectEvent\", // 3 / 258\n \"GhostingMessageEvent\", // 4 / 259\n \"GravityEvent\", // 5 / 260\n \"LightningStrikeEvent\", // 6 / 261\n \"NetStringEvent\", // 7 / 262\n \"PathManagerEvent\", // 8 / 263\n \"RemoteCommandEvent\", // 9 / 264\n \"RemoveClientTargetTypeEvent\", // 10 / 265\n \"ResetClientTargetsEvent\", // 11 / 266\n \"SensorGroupColorEvent\", // 12 / 267\n \"SetMissionCRCEvent\", // 13 / 268\n \"SetObjectActiveImageEvent\", // 14 / 269\n \"SetSensorGroupEvent\", // 15 / 270\n \"SetServerTargetEvent\", // 16 / 271\n \"Sim2DAudioEvent\", // 17 / 272\n \"Sim3DAudioEvent\", // 18 / 273\n \"SimDataBlockEvent\", // 19 / 274\n \"SimTargetAudioEvent\", // 20 / 275\n \"SimVoiceStreamEvent\", // 21 / 276\n \"SimpleMessageEvent\", // 22 / 277\n \"TargetFreeEvent\", // 23 / 278\n \"TargetInfoEvent\", // 24 / 279\n \"TargetToEvent\", // 25 / 280\n] as const;\n\n// Block types in the U16 packed format (type = typeSize >> 12)\n// These are from TorqueSDK-style recordBlock/handleRecordedBlock\nexport const BlockTypePacket = 0; // Received network packet (dnet data)\nexport const BlockTypeSendPacket = 1; // SendPacket trigger (size=0, no data)\nexport const BlockTypeMove = 2; // Raw Move struct (64 bytes)\nexport const BlockTypeInfo = 3; // Info block (8 bytes: U32 + F32)\n\n// Packet types from dnet\nexport const DataPacket = 0;\nexport const PingPacket = 1;\nexport const AckPacket = 2;\n\nexport interface Move {\n px: number;\n py: number;\n pz: number;\n pyaw: number;\n ppitch: number;\n proll: number;\n x: number;\n y: number;\n z: number;\n yaw: number;\n pitch: number;\n roll: number;\n id: number;\n sendCount: number;\n freeLook: boolean;\n trigger: boolean[];\n}\n\n/**\n * Type 3 block, written by GameConnection::readPacket right after each\n * received packet (FUN_005fb9b0): the `$firstPerson` flag and the control\n * camera FOV, replayed through setControlCameraFov on playback.\n */\nexport interface InfoBlock {\n /** Byte 0 of the block. The engine writes a bool through a 4-byte slot;\n * the other three bytes are uninitialized stack in real recordings. */\n firstPerson: boolean;\n /** Control camera field of view in degrees (F32). */\n cameraFov: number;\n}\n\nexport interface DataBlockHeader {\n objectId: number;\n classId: number;\n index: number;\n total: number;\n dataBitsStart: number;\n}\n\nexport interface DnetHeader {\n gameFlag: boolean;\n connectSeqBit: number;\n seqNumber: number;\n highestAck: number;\n packetType: number;\n ackByteCount: number;\n ackMask: number;\n}\n\nexport interface RateInfo {\n updateDelay?: number;\n packetSize?: number;\n maxUpdateDelay?: number;\n maxPacketSize?: number;\n}\n\nexport interface GhostUpdate {\n index: number;\n type: \"create\" | \"update\" | \"delete\";\n classId?: number;\n updateBitsStart: number;\n updateBitsEnd: number;\n parsedData?: ParsedData;\n /** Set when the ghost's data could not be parsed (unknown class,\n * parser threw, or tracker divergence). The ghost section stops\n * here and the tracker no longer mirrors the server. */\n failed?: boolean;\n /** Why parsing failed (parser name and error text). */\n error?: string;\n}\n\n/**\n * A packet the parser could not fully consume. The engine drops the\n * connection on any of these (\"Invalid packet\"), and by default the\n * PacketParser halts too (see `haltOnFault`): later packets come back\n * empty with the same fault attached. Continuing would mean parsing\n * against ghost/event state that no longer mirrors the server.\n */\nexport interface ParseFault {\n stage: \"gameState\" | \"event\" | \"ghost\";\n message: string;\n}\n\nexport interface NetEventInfo {\n classId: number;\n guaranteed: boolean;\n sequenceNumber?: number;\n absoluteSequenceNumber?: number;\n dataBitsStart: number;\n dataBitsEnd: number;\n parsedData?: ParsedData;\n /** Set when the event could not be parsed (unknown class or parser\n * threw), leaving the stream position unreliable. */\n failed?: boolean;\n /** Why parsing failed (parser name and error text). */\n error?: string;\n}\n\nexport interface PacketData {\n dnetHeader: DnetHeader;\n rateInfo: RateInfo;\n gameState: GameState;\n events: NetEventInfo[];\n ghosts: GhostUpdate[];\n /** Bit position where ghost section starts (readGhosts call). */\n ghostSectionStart?: number;\n /** Present when any section of the packet failed to parse. */\n parseFault?: ParseFault;\n}\n\nexport interface GameState {\n lastMoveAck: number;\n damageFlash?: number;\n whiteOut?: number;\n selfLocked?: boolean;\n selfHomed?: boolean;\n seekerTracking?: boolean;\n seekerTrackingPos?: { x: number; y: number; z: number };\n seekerMode?: number;\n seekerObjectGhostIndex?: number;\n targetPos?: { x: number; y: number; z: number };\n pinged: boolean;\n jammed: boolean;\n controlObjectGhostIndex?: number;\n controlObjectDataStart?: number;\n controlObjectDataEnd?: number;\n controlObjectData?: ParsedData;\n /** Why the control object's readPacketData could not be applied. */\n controlObjectError?: string;\n compressionPoint?: { x: number; y: number; z: number };\n targetVisibility?: { index: number; mask: number }[];\n cameraFov?: number;\n}\n\nexport interface DemoBlock {\n index: number;\n type: number;\n size: number;\n data: Uint8Array;\n parsed?: PacketData | Move | InfoBlock;\n /** Set if decoding the block threw (a parser bug — packets report\n * wire problems through `PacketData.parseFault` instead). */\n parseError?: string;\n}\n\nexport interface ConnectionProtocolState {\n lastSeqRecvdAtSend: number[];\n lastSeqRecvd: number;\n highestAckedSeq: number;\n lastSendSeq: number;\n ackMask: number;\n connectSequence: number;\n lastRecvAckAck: number;\n connectionEstablished: boolean;\n}\n\nexport interface StringTableEntry {\n id: number;\n value: string;\n}\n\nexport interface ParsedDataBlock {\n classId: number;\n className: string;\n objectId: number;\n data: ParsedData;\n}\n\n/**\n * IFF (Identification Friend or Foe) color for one sensor group pairing.\n * sensorGroupColors[myGroup][theirGroup] determines how `theirGroup` appears\n * to `myGroup` (e.g., red for enemy, green for friendly).\n */\nexport interface SensorGroupColor {\n group: number;\n targetGroup: number;\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface TargetEntry {\n targetId: number;\n sensorData?: number;\n voiceMapData?: number;\n name?: string;\n skin?: string;\n skinPref?: string;\n voice?: string;\n typeDescription?: string;\n sensorGroup: number;\n targetData: number;\n dataBlockRef?: number;\n damageLevel: number;\n}\n\nexport interface PathManagerEntry {\n entryId: number;\n records: {\n field0: number;\n field1: number;\n field2: number;\n auxField: number;\n }[];\n}\n\nexport interface InitialBlockData {\n taggedStrings: Map<number, string>;\n dataBlockHeaders: DataBlockHeader[];\n dataBlockCount: number;\n dataBlocks: Map<number, ParsedDataBlock>;\n /** Initial $firstPerson state from GameConnection::writeDemoStartBlock. */\n firstPerson: boolean;\n connectionFields: number[];\n stateArray: number[];\n /** Queued client moves (GameConnection::mMoveList), starting at connectionFields[4]. */\n moves: MoveData[];\n demoValues: string[];\n sensorGroupColors: SensorGroupColor[];\n targetEntries: TargetEntry[];\n connectionState: ConnectionProtocolState;\n roundTripTime: number;\n packetLoss: number;\n pathManager: PathManagerEntry[];\n notifyCount: number;\n nextRecvEventSeq: number;\n ghostingSequence: number;\n initialGhosts: GhostUpdate[];\n initialEvents: NetEventInfo[];\n controlObjectGhostIndex: number;\n controlObjectData?: ParsedData;\n /** Compression point established by the control object's readPacketData\n * (its position), used to decode compressed points in packets that\n * precede the first in-stream compression-point update. */\n initialCompressionPoint?: { x: number; y: number; z: number };\n missionName: string;\n missionCRC: number;\n phase2TrailingBits?: number;\n phase2Valid?: boolean;\n phase2Error?: string;\n /**\n * Seeded state the engine would choke on during playback even though\n * the block decodes. Empty for every recording made by Tribes2.exe;\n * populated for hand-built (from-connect) initial blocks that break an\n * engine invariant — e.g. a notify count that does not equal\n * `lastSendSeq - highestAckedSeq` (NetConnection::handleNotify\n * dereferences an empty notify queue).\n */\n warnings: string[];\n}\n\nexport interface DemoHeader {\n identString: string;\n protocolVersion: number;\n demoLengthMs: number;\n initialBlockSize: number;\n}\n\nexport interface DemoFile {\n header: DemoHeader;\n initialBlock: InitialBlockData;\n blocks: DemoBlock[];\n}\n\nexport interface LoadResult {\n header: DemoHeader;\n initialBlock: InitialBlockData;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "t2-demo-parser",
3
- "version": "3.0.2",
3
+ "version": "4.1.0",
4
4
  "author": "Brian Beck <exogen@gmail.com>",
5
5
  "description": "Parser for Tribes 2 demo recordings (.rec files)",
6
6
  "keywords": [