t2-demo-parser 4.1.0 → 5.0.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.
- package/dist/DataBlockParsers.d.ts.map +1 -1
- package/dist/DataBlockParsers.js +17 -18
- package/dist/DataBlockParsers.js.map +1 -1
- package/dist/PacketParser.d.ts.map +1 -1
- package/dist/PacketParser.js +3 -1
- package/dist/PacketParser.js.map +1 -1
- package/dist/dataBlockDataTypes.d.ts +12 -12
- package/dist/dataBlockDataTypes.d.ts.map +1 -1
- package/dist/dataBlockDataTypes.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 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"]}
|
|
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 tireFriction?: number;\n tireRestitution?: number;\n tireLateralForce?: number;\n tireLateralDamping?: number;\n tireLateralRelaxation?: number;\n tireLongitudinalForce?: number;\n tireLongitudinalDamping?: number;\n tireLongitudinalRelaxation?: number;\n tireEmitter?: number | null;\n jetSound?: number | null;\n engineSound?: number | null;\n squealSound?: number | null;\n wheelImpactSound?: number | null;\n springForce?: number;\n springDamping?: number;\n antiSwayForce?: number;\n antiRockForce?: number;\n maxWheelSpeed?: number;\n engineTorque?: number;\n brakeTorque?: number;\n staticLoadScale?: number;\n stabilizerForce?: number;\n gyroForce?: number;\n gyroDamping?: 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"]}
|