t2-demo-parser 5.0.1 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ghostDataTypes.js","sourceRoot":"","sources":["../src/ghostDataTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n Vec3,\n Quat,\n Color3,\n Color4,\n AffineTransform,\n MatrixF,\n} from \"./dataTypes.js\";\n\n// ---------------------------------------------------------------------------\n// Sub-structures\n// ---------------------------------------------------------------------------\n\nexport type MoveData = {\n pyaw: number;\n ppitch: number;\n proll: number;\n px: number;\n py: number;\n pz: number;\n freeLook: boolean;\n trigger: boolean[];\n};\n\nexport type SoundSlot = {\n index: number;\n playing: boolean;\n profileId?: number;\n};\n\nexport type ThreadState = {\n index: number;\n sequence: number;\n state: number;\n forward: boolean;\n atEnd: boolean;\n};\n\nexport type ImageSlot = {\n index: number;\n dataBlockId?: number;\n skinTagIndex?: number;\n skinName?: string;\n triggerDown?: boolean;\n loaded?: boolean;\n ammo?: boolean;\n wet?: boolean;\n target?: boolean;\n fireCount?: number;\n imageExtraFlag?: boolean;\n};\n\nexport type WheelState = {\n avel: number;\n dy: number;\n dx: number;\n};\n\n// ---------------------------------------------------------------------------\n// GameBase hierarchy\n// ---------------------------------------------------------------------------\n\nexport type GameBaseGhostData = {\n dataBlockId?: number;\n targetId?: number;\n};\n\nexport type ShapeBaseGhostData = GameBaseGhostData & {\n damageLevel?: number;\n damageState?: number;\n blowApart?: boolean;\n damageDir?: Vec3;\n sounds?: SoundSlot[];\n threads?: ThreadState[];\n images?: ImageSlot[];\n imageSkinDirty?: boolean;\n cloaked?: boolean;\n isControlled?: boolean;\n fading?: boolean;\n fadeOut?: boolean;\n fadeTime?: number;\n fadeVal?: boolean;\n stateBMode?: boolean;\n energyPackOn?: boolean;\n shieldNormal?: Vec3;\n energyPercent?: number;\n stateValue1?: number;\n stateValue2?: number;\n mountObject?: number;\n mountNode?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Player\n// ---------------------------------------------------------------------------\n\nexport type PlayerGhostData = ShapeBaseGhostData & {\n impactSound?: number;\n action?: number;\n actionHoldAtEnd?: boolean;\n actionAtEnd?: boolean;\n actionFirstPerson?: boolean;\n actionAnimPos?: number;\n armAction?: number;\n actionState?: number;\n recoverTicks?: number;\n moveFlag0?: boolean;\n moveFlag1?: boolean;\n position?: Vec3;\n velocity?: Vec3;\n headX?: number;\n headZ?: number;\n rotationZ?: number;\n move?: MoveData;\n allowWarp?: boolean;\n energy?: number;\n};\n\n/** ShapeBase::readPacketData: energy level + recharge rate. */\nexport type ShapeBasePacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n};\n\n/** Turret::readPacketData (FUN_00655d70). */\nexport type TurretPacketData = ShapeBasePacketData & {\n /** Ranged 0..4 (3 bits); stored at Turret+0x88c. Meaning unverified. */\n turretState: number;\n /** Three F32s copied into the turret's current rotation state\n * (+0x890..+0x898 → +0x8dc/+0x8d4/+0x8d8). Meaning unverified. */\n rotationValues: [number, number, number];\n};\n\nexport type PlayerPacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n actionState?: number;\n recoverTicks?: number;\n jumpDelay?: number;\n position?: Vec3;\n velocity?: Vec3;\n jumpSurfaceLastContact?: number;\n headX?: number;\n headZ?: number;\n rotationZ?: number;\n controlObjectGhost?: number;\n controlObjectData?: Record<string, unknown>;\n disableMove?: boolean;\n pilot?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Vehicles\n// ---------------------------------------------------------------------------\n\nexport type VehicleGhostData = ShapeBaseGhostData & {\n jetting?: boolean;\n steeringYaw?: number;\n steeringPitch?: number;\n move?: MoveData;\n frozen?: boolean;\n position?: Vec3;\n angPosition?: Quat;\n linMomentum?: Vec3;\n angMomentum?: Vec3;\n energy?: number;\n};\n\nexport type VehiclePacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n steering?: { x: number; y: number };\n linPosition?: Vec3;\n angPosition?: Quat;\n linMomentum?: Vec3;\n angMomentum?: Vec3;\n disableMove?: boolean;\n frozen?: boolean;\n};\n\nexport type WheeledVehicleGhostData = VehicleGhostData & {\n braking?: boolean;\n wheels?: WheelState[];\n};\n\nexport type WheeledVehiclePacketData = VehiclePacketData & {\n braking?: boolean;\n wheels?: WheelState[];\n};\n\nexport type FlyingVehicleGhostData = VehicleGhostData & {\n createHeightOn?: boolean;\n thrustDirection?: number;\n};\n\nexport type HoverVehicleGhostData = VehicleGhostData & {\n thrustDirection?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Items & static shapes\n// ---------------------------------------------------------------------------\n\nexport type ItemGhostData = ShapeBaseGhostData & {\n rotate?: boolean;\n isStatic?: boolean;\n collideable?: boolean;\n scale?: Vec3;\n collisionObject?: number;\n rotation?: { zSign: number; angle: number };\n position?: Vec3;\n atRest?: boolean;\n velocity?: Vec3;\n warp?: boolean;\n};\n\nexport type StaticShapeGhostData = ShapeBaseGhostData & {\n transform?: AffineTransform | MatrixF;\n position?: Vec3;\n scale?: Vec3;\n powered?: boolean;\n};\n\nexport type ScopeAlwaysShapeGhostData = StaticShapeGhostData;\n\nexport type BeaconObjectGhostData = StaticShapeGhostData & {\n beaconType?: number;\n};\n\nexport type TurretGhostData = StaticShapeGhostData & {\n capacitorEnergy?: number;\n phi?: number;\n theta?: number;\n activationLevel?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Mission markers\n// ---------------------------------------------------------------------------\n\nexport type MissionMarkerGhostData = ShapeBaseGhostData & {\n transform?: AffineTransform;\n position?: Vec3;\n scale?: Vec3;\n};\n\nexport type WayPointGhostData = MissionMarkerGhostData & {\n name?: string;\n teamId?: number;\n hidden?: boolean;\n};\n\nexport type SpawnSphereGhostData = MissionMarkerGhostData & {\n radius?: number;\n sphereWeight?: number;\n indoorWeight?: number;\n outdoorWeight?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Camera\n// ---------------------------------------------------------------------------\n\nexport type CameraGhostData = ShapeBaseGhostData & {\n posX?: number;\n posY?: number;\n posZ?: number;\n fovOrDist?: number;\n orbitParam?: number;\n};\n\nexport type CameraPacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n position?: Vec3;\n rotX?: number;\n rotZ?: number;\n cameraMode?: number;\n minOrbitDist?: number;\n maxOrbitDist?: number;\n curOrbitDist?: number;\n observingClientObject?: boolean;\n orbitObjectGhostIndex?: number;\n orbitPoint?: Vec3;\n};\n\n// ---------------------------------------------------------------------------\n// Standalone ghost types (not GameBase subclasses)\n// ---------------------------------------------------------------------------\n\nexport type MarkerGhostData = {\n position?: Vec3;\n};\n\nexport type SimpleNetObjectGhostData = {\n message?: string;\n};\n\nexport type InteriorInstanceGhostData = {\n crc?: number;\n interiorFile?: string;\n showTerrainInside?: boolean;\n transform?: MatrixF;\n scale?: Vec3;\n alarmState?: boolean;\n skinBase?: string;\n audioProfileId?: number;\n audioEnvironmentId?: number;\n};\n\nexport type TSStaticGhostData = {\n transform?: MatrixF;\n scale?: Vec3;\n shapeName?: string;\n};\n\nexport type TerrainBlockGhostData = {\n crc?: number;\n terrFileName?: string;\n detailTextureName?: string;\n squareSize?: number;\n emptySquareRuns?: number[];\n emptySquareRunCount?: number;\n};\n\nexport type TriggerGhostData = {\n tickPeriodMS?: number;\n};\n\nexport type VehicleBlockerGhostData = {\n transform?: MatrixF;\n boundsMin?: Vec3;\n boundsMax?: Vec3;\n};\n\nexport type MissionAreaGhostData = {\n area?: { x: number; y: number; w: number; h: number };\n flightCeiling?: number;\n flightCeilingRange?: number;\n};\n\nexport type AudioEmitterGhostData = {\n initialUpdate?: boolean;\n transform?: AffineTransform;\n audioProfileId?: number;\n audioDescriptionId?: number;\n filename?: string;\n useProfileDescription?: boolean;\n volume?: number;\n isLooping?: boolean;\n is3D?: boolean;\n minDistance?: number;\n maxDistance?: number;\n coneInsideAngle?: number;\n coneOutsideAngle?: number;\n coneOutsideVolume?: number;\n coneVector?: Vec3;\n loopCount?: number;\n minLoopGap?: number;\n maxLoopGap?: number;\n audioType?: number;\n outsideAmbient?: boolean;\n};\n\nexport type PhysicalZoneGhostData = {\n transform?: MatrixF;\n scale?: Vec3;\n points?: Vec3[];\n planes?: Array<{ x: number; y: number; z: number; d: number }>;\n edges?: Array<{\n face0: number;\n face1: number;\n vertex0: number;\n vertex1: number;\n }>;\n velocityMod?: number;\n gravityMod?: number;\n appliedForce?: Vec3;\n active?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Debris\n// ---------------------------------------------------------------------------\n\nexport type DebrisGhostData = GameBaseGhostData & {\n value0?: number;\n value1?: number;\n value2?: number;\n value3?: number;\n value4?: number;\n value5?: number;\n value6?: number;\n value7?: number;\n value8?: number;\n value9?: number;\n value10?: number;\n value11?: number;\n value12?: number;\n value13?: number;\n value14?: number;\n bool0?: boolean;\n bool1?: boolean;\n bool2?: boolean;\n bool3?: boolean;\n bool4?: boolean;\n bool5?: boolean;\n bool6?: boolean;\n string0?: string;\n string1?: string;\n objectRefs?: number[];\n};\n\n// ---------------------------------------------------------------------------\n// Projectiles\n// ---------------------------------------------------------------------------\n\nexport interface ProjectileGhostData extends GameBaseGhostData {}\n\nexport type LinearProjectileGhostData = GameBaseGhostData & {\n hidden?: boolean;\n explodePosition?: Vec3;\n explodeNormal?: Vec3;\n endedWithDecal?: boolean;\n position?: Vec3;\n direction?: Vec3;\n currTick?: number;\n sourceObject?: number;\n sourceSlot?: number;\n excessVel?: number;\n excessDir?: Vec3;\n vehicleObject?: number;\n};\n\nexport type BombProjectileGhostData = GameBaseGhostData & {\n position?: Vec3;\n velocity?: Vec3;\n endPoint?: Vec3;\n endNormal?: Vec3;\n currTick?: number;\n resetFlag?: boolean;\n explodePoint?: Vec3;\n explodeNormal?: Vec3;\n sourceObject?: number;\n sourceSlot?: number;\n vehicleObject?: number;\n};\n\nexport type GrenadeProjectileGhostData = GameBaseGhostData & {\n position?: Vec3;\n velocity?: Vec3;\n currTick?: number;\n quickSplash?: boolean;\n explodePoint?: Vec3;\n explodeNormal?: Vec3;\n sourceObject?: number;\n sourceSlot?: number;\n vehicleObject?: number;\n};\n\nexport type SeekerProjectileGhostData = GameBaseGhostData & {\n explodePosition?: Vec3;\n explodeNormal?: Vec3;\n position?: Vec3;\n velocity?: Vec3;\n targetDirection?: Vec3;\n targetMode?: number;\n targetGhost?: number;\n orientation?: Vec3;\n sourceObject?: number;\n sourceSlot?: number;\n timeoutReset?: boolean;\n};\n\nexport type SniperProjectileGhostData = GameBaseGhostData & {\n energyPercentage?: number;\n initialPosition?: Vec3;\n endPos?: Vec3;\n truncated?: boolean;\n hitWater?: boolean;\n sourceObject?: number;\n sourceSlot?: number;\n clientOwned?: boolean;\n};\n\nexport type ShockLanceProjectileGhostData = GameBaseGhostData & {\n targetObject?: number;\n start?: Vec3;\n end?: Vec3;\n hitObject?: boolean;\n sourceObject?: number;\n sourceSlot?: number;\n};\n\nexport type ELFProjectileGhostData = GameBaseGhostData & {\n sourceObject?: number;\n sourceSlot?: number;\n targetObject?: number;\n};\n\nexport type RepairProjectileGhostData = GameBaseGhostData & {\n sourceObject?: number;\n sourceSlot?: number;\n repairingObject?: number;\n};\n\nexport type TargetProjectileGhostData = GameBaseGhostData & {\n initialPosition?: Vec3;\n endPos?: Vec3;\n truncated?: boolean;\n sourceObject?: number;\n sourceSlot?: number;\n clientOwned?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Force fields\n// ---------------------------------------------------------------------------\n\nexport type ForceFieldBareGhostData = GameBaseGhostData & {\n transform?: AffineTransform;\n scale?: Vec3;\n state?: number;\n position?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Environment & effects\n// ---------------------------------------------------------------------------\n\nexport type SunGhostData = {\n textures?: string[];\n direction?: Vec3;\n color?: Color4;\n ambient?: Color4;\n extraLightProps?: number[];\n};\n\nexport type SkyGhostData = {\n materialList?: string;\n fogColor?: Color3;\n fogVolumeCount?: number;\n useSkyTextures?: boolean;\n renderBottomTexture?: boolean;\n skySolidColor?: Color3;\n windEffectPrecipitation?: boolean;\n fogVolumes?: Array<{\n visibleDistance: number;\n minHeight: number;\n maxHeight: number;\n color: Color3;\n }>;\n cloudLayers?: Array<{\n texture: string;\n heightPercent: number;\n speed: number;\n }>;\n windVelocity?: Vec3;\n stormCurrent?: number;\n stormInit?: {\n startPct: number;\n duration: number;\n indexOrMode: number;\n startTime: number;\n targetPct: number;\n };\n stormCloudsOn?: boolean;\n stormFogOn?: boolean;\n visibleDistance?: number;\n fogDistance?: number;\n stormType?: number;\n stormMagnitude?: number;\n stormTimeline?: {\n startPct: number;\n duration: number;\n indexOrMode: number;\n };\n stormCloudProfile?: {\n enabled: number;\n value0: number;\n value1: number;\n value2: number;\n };\n};\n\nexport type LightningGhostData = GameBaseGhostData & {\n position?: Vec3;\n scale?: Vec3;\n strikeWidth?: number;\n chanceToHitTarget?: number;\n strikeRadius?: number;\n boltStartRadius?: number;\n color?: Color3;\n fadeColor?: Color3;\n useFog?: boolean;\n strikesPerMinute?: number;\n};\n\nexport type WaterBlockGhostData = {\n transform?: AffineTransform;\n scale?: Vec3;\n surfaceName?: string;\n envMapName?: string;\n submergeNames?: string[];\n liquidType?: number;\n density?: number;\n viscosity?: number;\n waveMagnitude?: number;\n surfaceOpacity?: number;\n envMapIntensity?: number;\n removeWetEdges?: boolean;\n audioEnvironmentId?: number;\n};\n\nexport type SplashGhostData = GameBaseGhostData & {\n position?: Vec3;\n};\n\nexport type ShockwaveGhostData = GameBaseGhostData & {\n position?: Vec3;\n normal?: Vec3;\n};\n\nexport type FireballAtmosphereGhostData = GameBaseGhostData & {\n dropRadius?: number;\n dropsPerMinute?: number;\n maxDropAngle?: number;\n minDropAngle?: number;\n startVelocity?: number;\n dropHeight?: number;\n dropDir?: Vec3;\n};\n\nexport type PrecipitationGhostData = GameBaseGhostData & {\n percentage?: number;\n colorCount?: number;\n colors?: Color4[];\n offsetSpeed?: number;\n minVelocity?: number;\n maxVelocity?: number;\n maxDrops?: number;\n maxRadius?: number;\n stormLastTime?: number;\n stormTime?: number;\n stormEndPercentage?: number;\n stormPrecipitationOn?: boolean;\n percentageUpdate?: number;\n};\n\nexport type ParticleEmissionDummyGhostData = GameBaseGhostData & {\n transform?: MatrixF;\n scale?: Vec3;\n emitterDatablockId?: number;\n};\n\n// ---------------------------------------------------------------------------\n// AI\n// ---------------------------------------------------------------------------\n\nexport type StationFXPersonalGhostData = GameBaseGhostData & {\n stationObject?: number;\n};\n\nexport type AIObjectiveGhostData = ShapeBaseGhostData & {\n transform?: AffineTransform;\n scale?: Vec3;\n unknownFlag?: boolean;\n};\n"]}
1
+ {"version":3,"file":"ghostDataTypes.js","sourceRoot":"","sources":["../src/ghostDataTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n Vec3,\n Quat,\n Color3,\n Color4,\n AffineTransform,\n MatrixF,\n} from \"./dataTypes.js\";\n\n// ---------------------------------------------------------------------------\n// Sub-structures\n// ---------------------------------------------------------------------------\n\nexport type MoveData = {\n pyaw: number;\n ppitch: number;\n proll: number;\n px: number;\n py: number;\n pz: number;\n freeLook: boolean;\n trigger: boolean[];\n};\n\nexport type SoundSlot = {\n index: number;\n playing: boolean;\n profileId?: number;\n};\n\nexport type ThreadState = {\n index: number;\n sequence: number;\n state: number;\n forward: boolean;\n atEnd: boolean;\n};\n\nexport type ImageSlot = {\n index: number;\n dataBlockId?: number;\n skinTagIndex?: number;\n skinName?: string;\n triggerDown?: boolean;\n loaded?: boolean;\n ammo?: boolean;\n wet?: boolean;\n target?: boolean;\n fireCount?: number;\n imageExtraFlag?: boolean;\n};\n\nexport type WheelState = {\n avel: number;\n dy: number;\n dx: number;\n};\n\n// ---------------------------------------------------------------------------\n// GameBase hierarchy\n// ---------------------------------------------------------------------------\n\nexport type GameBaseGhostData = {\n dataBlockId?: number;\n targetId?: number;\n};\n\nexport type ShapeBaseGhostData = GameBaseGhostData & {\n damageLevel?: number;\n damageState?: number;\n blowApart?: boolean;\n damageDir?: Vec3;\n sounds?: SoundSlot[];\n threads?: ThreadState[];\n images?: ImageSlot[];\n imageSkinDirty?: boolean;\n cloaked?: boolean;\n isControlled?: boolean;\n fading?: boolean;\n fadeOut?: boolean;\n fadeTime?: number;\n fadeVal?: boolean;\n stateBMode?: boolean;\n energyPackOn?: boolean;\n shieldNormal?: Vec3;\n energyPercent?: number;\n stateValue1?: number;\n stateValue2?: number;\n mountObject?: number;\n mountNode?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Player\n// ---------------------------------------------------------------------------\n\nexport type PlayerGhostData = ShapeBaseGhostData & {\n impactSound?: number;\n action?: number;\n actionHoldAtEnd?: boolean;\n actionAtEnd?: boolean;\n actionFirstPerson?: boolean;\n actionAnimPos?: number;\n armAction?: number;\n actionState?: number;\n recoverTicks?: number;\n moveFlag0?: boolean;\n moveFlag1?: boolean;\n position?: Vec3;\n velocity?: Vec3;\n headX?: number;\n headZ?: number;\n rotationZ?: number;\n move?: MoveData;\n allowWarp?: boolean;\n energy?: number;\n};\n\n/** ShapeBase::readPacketData: energy level + recharge rate. */\nexport type ShapeBasePacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n};\n\n/** Turret::readPacketData (FUN_00655d70). */\nexport type TurretPacketData = ShapeBasePacketData & {\n /** Ranged 0..4 (3 bits); stored at Turret+0x88c. Meaning unverified. */\n turretState: number;\n /** Three F32s copied into the turret's current rotation state\n * (+0x890..+0x898 → +0x8dc/+0x8d4/+0x8d8). Meaning unverified. */\n rotationValues: [number, number, number];\n};\n\nexport type PlayerPacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n actionState?: number;\n recoverTicks?: number;\n jumpDelay?: number;\n position?: Vec3;\n velocity?: Vec3;\n jumpSurfaceLastContact?: number;\n headX?: number;\n headZ?: number;\n rotationZ?: number;\n controlObjectGhost?: number;\n controlObjectData?: Record<string, unknown>;\n disableMove?: boolean;\n pilot?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Vehicles\n// ---------------------------------------------------------------------------\n\nexport type VehicleGhostData = ShapeBaseGhostData & {\n jetting?: boolean;\n steeringYaw?: number;\n steeringPitch?: number;\n move?: MoveData;\n frozen?: boolean;\n position?: Vec3;\n angPosition?: Quat;\n linMomentum?: Vec3;\n angMomentum?: Vec3;\n energy?: number;\n};\n\nexport type VehiclePacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n steering?: { x: number; y: number };\n linPosition?: Vec3;\n angPosition?: Quat;\n linMomentum?: Vec3;\n angMomentum?: Vec3;\n disableMove?: boolean;\n frozen?: boolean;\n};\n\nexport type WheeledVehicleGhostData = VehicleGhostData & {\n braking?: boolean;\n wheels?: WheelState[];\n};\n\nexport type WheeledVehiclePacketData = VehiclePacketData & {\n braking?: boolean;\n wheels?: WheelState[];\n};\n\nexport type FlyingVehicleGhostData = VehicleGhostData & {\n createHeightOn?: boolean;\n thrustDirection?: number;\n};\n\nexport type HoverVehicleGhostData = VehicleGhostData & {\n thrustDirection?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Items & static shapes\n// ---------------------------------------------------------------------------\n\nexport type ItemGhostData = ShapeBaseGhostData & {\n rotate?: boolean;\n isStatic?: boolean;\n collideable?: boolean;\n scale?: Vec3;\n collisionObject?: number;\n rotation?: { zSign: number; angle: number };\n position?: Vec3;\n atRest?: boolean;\n velocity?: Vec3;\n warp?: boolean;\n};\n\nexport type StaticShapeGhostData = ShapeBaseGhostData & {\n transform?: AffineTransform | MatrixF;\n position?: Vec3;\n scale?: Vec3;\n powered?: boolean;\n};\n\nexport type ScopeAlwaysShapeGhostData = StaticShapeGhostData;\n\nexport type BeaconObjectGhostData = StaticShapeGhostData & {\n beaconType?: number;\n};\n\nexport type TurretGhostData = StaticShapeGhostData & {\n capacitorEnergy?: number;\n phi?: number;\n theta?: number;\n activationLevel?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Mission markers\n// ---------------------------------------------------------------------------\n\nexport type MissionMarkerGhostData = ShapeBaseGhostData & {\n transform?: AffineTransform;\n position?: Vec3;\n scale?: Vec3;\n};\n\nexport type WayPointGhostData = MissionMarkerGhostData & {\n name?: string;\n teamId?: number;\n hidden?: boolean;\n};\n\nexport type SpawnSphereGhostData = MissionMarkerGhostData & {\n radius?: number;\n sphereWeight?: number;\n indoorWeight?: number;\n outdoorWeight?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Camera\n// ---------------------------------------------------------------------------\n\nexport type CameraGhostData = ShapeBaseGhostData & {\n posX?: number;\n posY?: number;\n posZ?: number;\n fovOrDist?: number;\n orbitParam?: number;\n};\n\nexport type CameraPacketData = {\n energyLevel?: number;\n rechargeRate?: number;\n position?: Vec3;\n rotX?: number;\n rotZ?: number;\n cameraMode?: number;\n minOrbitDist?: number;\n maxOrbitDist?: number;\n curOrbitDist?: number;\n observingClientObject?: boolean;\n orbitObjectGhostIndex?: number;\n orbitPoint?: Vec3;\n};\n\n// ---------------------------------------------------------------------------\n// Standalone ghost types (not GameBase subclasses)\n// ---------------------------------------------------------------------------\n\nexport type MarkerGhostData = {\n position?: Vec3;\n};\n\nexport type SimpleNetObjectGhostData = {\n message?: string;\n};\n\nexport type InteriorInstanceGhostData = {\n crc?: number;\n interiorFile?: string;\n showTerrainInside?: boolean;\n transform?: MatrixF;\n scale?: Vec3;\n alarmState?: boolean;\n skinBase?: string;\n audioProfileId?: number;\n audioEnvironmentId?: number;\n};\n\nexport type TSStaticGhostData = {\n transform?: MatrixF;\n scale?: Vec3;\n shapeName?: string;\n};\n\nexport type TerrainBlockGhostData = {\n /** Eight terrain texture slots sent by newer TribesNEXT servers. */\n materialNames?: string[];\n crc?: number;\n terrFileName?: string;\n detailTextureName?: string;\n squareSize?: number;\n emptySquareRuns?: number[];\n emptySquareRunCount?: number;\n};\n\nexport type TriggerGhostData = {\n tickPeriodMS?: number;\n};\n\nexport type VehicleBlockerGhostData = {\n transform?: MatrixF;\n boundsMin?: Vec3;\n boundsMax?: Vec3;\n};\n\nexport type MissionAreaGhostData = {\n area?: { x: number; y: number; w: number; h: number };\n flightCeiling?: number;\n flightCeilingRange?: number;\n};\n\nexport type AudioEmitterGhostData = {\n initialUpdate?: boolean;\n transform?: AffineTransform;\n audioProfileId?: number;\n audioDescriptionId?: number;\n filename?: string;\n useProfileDescription?: boolean;\n volume?: number;\n isLooping?: boolean;\n is3D?: boolean;\n minDistance?: number;\n maxDistance?: number;\n coneInsideAngle?: number;\n coneOutsideAngle?: number;\n coneOutsideVolume?: number;\n coneVector?: Vec3;\n loopCount?: number;\n minLoopGap?: number;\n maxLoopGap?: number;\n audioType?: number;\n outsideAmbient?: boolean;\n};\n\nexport type PhysicalZoneGhostData = {\n transform?: MatrixF;\n scale?: Vec3;\n points?: Vec3[];\n planes?: Array<{ x: number; y: number; z: number; d: number }>;\n edges?: Array<{\n face0: number;\n face1: number;\n vertex0: number;\n vertex1: number;\n }>;\n velocityMod?: number;\n gravityMod?: number;\n appliedForce?: Vec3;\n active?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Debris\n// ---------------------------------------------------------------------------\n\nexport type DebrisGhostData = GameBaseGhostData & {\n value0?: number;\n value1?: number;\n value2?: number;\n value3?: number;\n value4?: number;\n value5?: number;\n value6?: number;\n value7?: number;\n value8?: number;\n value9?: number;\n value10?: number;\n value11?: number;\n value12?: number;\n value13?: number;\n value14?: number;\n bool0?: boolean;\n bool1?: boolean;\n bool2?: boolean;\n bool3?: boolean;\n bool4?: boolean;\n bool5?: boolean;\n bool6?: boolean;\n string0?: string;\n string1?: string;\n objectRefs?: number[];\n};\n\n// ---------------------------------------------------------------------------\n// Projectiles\n// ---------------------------------------------------------------------------\n\nexport interface ProjectileGhostData extends GameBaseGhostData {}\n\nexport type LinearProjectileGhostData = GameBaseGhostData & {\n hidden?: boolean;\n explodePosition?: Vec3;\n explodeNormal?: Vec3;\n endedWithDecal?: boolean;\n position?: Vec3;\n direction?: Vec3;\n currTick?: number;\n sourceObject?: number;\n sourceSlot?: number;\n excessVel?: number;\n excessDir?: Vec3;\n vehicleObject?: number;\n};\n\nexport type BombProjectileGhostData = GameBaseGhostData & {\n position?: Vec3;\n velocity?: Vec3;\n endPoint?: Vec3;\n endNormal?: Vec3;\n currTick?: number;\n resetFlag?: boolean;\n explodePoint?: Vec3;\n explodeNormal?: Vec3;\n sourceObject?: number;\n sourceSlot?: number;\n vehicleObject?: number;\n};\n\nexport type GrenadeProjectileGhostData = GameBaseGhostData & {\n position?: Vec3;\n velocity?: Vec3;\n currTick?: number;\n quickSplash?: boolean;\n explodePoint?: Vec3;\n explodeNormal?: Vec3;\n sourceObject?: number;\n sourceSlot?: number;\n vehicleObject?: number;\n};\n\nexport type SeekerProjectileGhostData = GameBaseGhostData & {\n explodePosition?: Vec3;\n explodeNormal?: Vec3;\n position?: Vec3;\n velocity?: Vec3;\n targetDirection?: Vec3;\n targetMode?: number;\n targetGhost?: number;\n orientation?: Vec3;\n sourceObject?: number;\n sourceSlot?: number;\n timeoutReset?: boolean;\n};\n\nexport type SniperProjectileGhostData = GameBaseGhostData & {\n energyPercentage?: number;\n initialPosition?: Vec3;\n endPos?: Vec3;\n truncated?: boolean;\n hitWater?: boolean;\n sourceObject?: number;\n sourceSlot?: number;\n clientOwned?: boolean;\n};\n\nexport type ShockLanceProjectileGhostData = GameBaseGhostData & {\n targetObject?: number;\n start?: Vec3;\n end?: Vec3;\n hitObject?: boolean;\n sourceObject?: number;\n sourceSlot?: number;\n};\n\nexport type ELFProjectileGhostData = GameBaseGhostData & {\n sourceObject?: number;\n sourceSlot?: number;\n targetObject?: number;\n};\n\nexport type RepairProjectileGhostData = GameBaseGhostData & {\n sourceObject?: number;\n sourceSlot?: number;\n repairingObject?: number;\n};\n\nexport type TargetProjectileGhostData = GameBaseGhostData & {\n initialPosition?: Vec3;\n endPos?: Vec3;\n truncated?: boolean;\n sourceObject?: number;\n sourceSlot?: number;\n clientOwned?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Force fields\n// ---------------------------------------------------------------------------\n\nexport type ForceFieldBareGhostData = GameBaseGhostData & {\n transform?: AffineTransform;\n scale?: Vec3;\n state?: number;\n position?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Environment & effects\n// ---------------------------------------------------------------------------\n\nexport type SunGhostData = {\n textures?: string[];\n direction?: Vec3;\n color?: Color4;\n ambient?: Color4;\n extraLightProps?: number[];\n};\n\nexport type SkyGhostData = {\n materialList?: string;\n fogColor?: Color3;\n fogVolumeCount?: number;\n useSkyTextures?: boolean;\n renderBottomTexture?: boolean;\n skySolidColor?: Color3;\n windEffectPrecipitation?: boolean;\n fogVolumes?: Array<{\n visibleDistance: number;\n minHeight: number;\n maxHeight: number;\n color: Color3;\n }>;\n cloudLayers?: Array<{\n texture: string;\n heightPercent: number;\n speed: number;\n }>;\n windVelocity?: Vec3;\n stormCurrent?: number;\n stormInit?: {\n startPct: number;\n duration: number;\n indexOrMode: number;\n startTime: number;\n targetPct: number;\n };\n stormCloudsOn?: boolean;\n stormFogOn?: boolean;\n visibleDistance?: number;\n fogDistance?: number;\n stormType?: number;\n stormMagnitude?: number;\n stormTimeline?: {\n startPct: number;\n duration: number;\n indexOrMode: number;\n };\n stormCloudProfile?: {\n enabled: number;\n value0: number;\n value1: number;\n value2: number;\n };\n};\n\nexport type LightningGhostData = GameBaseGhostData & {\n position?: Vec3;\n scale?: Vec3;\n strikeWidth?: number;\n chanceToHitTarget?: number;\n strikeRadius?: number;\n boltStartRadius?: number;\n color?: Color3;\n fadeColor?: Color3;\n useFog?: boolean;\n strikesPerMinute?: number;\n};\n\nexport type WaterBlockGhostData = {\n transform?: AffineTransform;\n scale?: Vec3;\n surfaceName?: string;\n envMapName?: string;\n submergeNames?: string[];\n liquidType?: number;\n density?: number;\n viscosity?: number;\n waveMagnitude?: number;\n surfaceOpacity?: number;\n envMapIntensity?: number;\n removeWetEdges?: boolean;\n audioEnvironmentId?: number;\n};\n\nexport type SplashGhostData = GameBaseGhostData & {\n position?: Vec3;\n};\n\nexport type ShockwaveGhostData = GameBaseGhostData & {\n position?: Vec3;\n normal?: Vec3;\n};\n\nexport type FireballAtmosphereGhostData = GameBaseGhostData & {\n dropRadius?: number;\n dropsPerMinute?: number;\n maxDropAngle?: number;\n minDropAngle?: number;\n startVelocity?: number;\n dropHeight?: number;\n dropDir?: Vec3;\n};\n\nexport type PrecipitationGhostData = GameBaseGhostData & {\n percentage?: number;\n colorCount?: number;\n colors?: Color4[];\n offsetSpeed?: number;\n minVelocity?: number;\n maxVelocity?: number;\n maxDrops?: number;\n maxRadius?: number;\n stormLastTime?: number;\n stormTime?: number;\n stormEndPercentage?: number;\n stormPrecipitationOn?: boolean;\n percentageUpdate?: number;\n};\n\nexport type ParticleEmissionDummyGhostData = GameBaseGhostData & {\n transform?: MatrixF;\n scale?: Vec3;\n emitterDatablockId?: number;\n};\n\n// ---------------------------------------------------------------------------\n// AI\n// ---------------------------------------------------------------------------\n\nexport type StationFXPersonalGhostData = GameBaseGhostData & {\n stationObject?: number;\n};\n\nexport type AIObjectiveGhostData = ShapeBaseGhostData & {\n transform?: AffineTransform;\n scale?: Vec3;\n unknownFlag?: boolean;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "t2-demo-parser",
3
- "version": "5.0.1",
3
+ "version": "5.0.2",
4
4
  "author": "Brian Beck <exogen@gmail.com>",
5
5
  "description": "Parser for Tribes 2 demo recordings (.rec files)",
6
6
  "keywords": [