t2-demo-parser 1.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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +823 -0
  3. package/dist/BitStream.d.ts +143 -0
  4. package/dist/BitStream.d.ts.map +1 -0
  5. package/dist/BitStream.js +369 -0
  6. package/dist/BitStream.js.map +1 -0
  7. package/dist/BitStream.test.d.ts +2 -0
  8. package/dist/BitStream.test.d.ts.map +1 -0
  9. package/dist/BitStream.test.js +419 -0
  10. package/dist/BitStream.test.js.map +1 -0
  11. package/dist/ClassRegistry.d.ts +100 -0
  12. package/dist/ClassRegistry.d.ts.map +1 -0
  13. package/dist/ClassRegistry.js +118 -0
  14. package/dist/ClassRegistry.js.map +1 -0
  15. package/dist/ClassRegistry.test.d.ts +2 -0
  16. package/dist/ClassRegistry.test.d.ts.map +1 -0
  17. package/dist/ClassRegistry.test.js +83 -0
  18. package/dist/ClassRegistry.test.js.map +1 -0
  19. package/dist/DataBlockParsers.d.ts +3 -0
  20. package/dist/DataBlockParsers.d.ts.map +1 -0
  21. package/dist/DataBlockParsers.js +2041 -0
  22. package/dist/DataBlockParsers.js.map +1 -0
  23. package/dist/DemoParser.d.ts +155 -0
  24. package/dist/DemoParser.d.ts.map +1 -0
  25. package/dist/DemoParser.js +943 -0
  26. package/dist/DemoParser.js.map +1 -0
  27. package/dist/DemoParser.test.d.ts +2 -0
  28. package/dist/DemoParser.test.d.ts.map +1 -0
  29. package/dist/DemoParser.test.js +472 -0
  30. package/dist/DemoParser.test.js.map +1 -0
  31. package/dist/EventParsers.d.ts +3 -0
  32. package/dist/EventParsers.d.ts.map +1 -0
  33. package/dist/EventParsers.js +603 -0
  34. package/dist/EventParsers.js.map +1 -0
  35. package/dist/GhostManager.d.ts +13 -0
  36. package/dist/GhostManager.d.ts.map +1 -0
  37. package/dist/GhostManager.js +2002 -0
  38. package/dist/GhostManager.js.map +1 -0
  39. package/dist/GhostTracker.test.d.ts +2 -0
  40. package/dist/GhostTracker.test.d.ts.map +1 -0
  41. package/dist/GhostTracker.test.js +64 -0
  42. package/dist/GhostTracker.test.js.map +1 -0
  43. package/dist/HuffmanProcessor.d.ts +12 -0
  44. package/dist/HuffmanProcessor.d.ts.map +1 -0
  45. package/dist/HuffmanProcessor.js +163 -0
  46. package/dist/HuffmanProcessor.js.map +1 -0
  47. package/dist/LiveParser.d.ts +16 -0
  48. package/dist/LiveParser.d.ts.map +1 -0
  49. package/dist/LiveParser.js +29 -0
  50. package/dist/LiveParser.js.map +1 -0
  51. package/dist/PacketParser.d.ts +104 -0
  52. package/dist/PacketParser.d.ts.map +1 -0
  53. package/dist/PacketParser.js +713 -0
  54. package/dist/PacketParser.js.map +1 -0
  55. package/dist/Timeline.d.ts +101 -0
  56. package/dist/Timeline.d.ts.map +1 -0
  57. package/dist/Timeline.js +251 -0
  58. package/dist/Timeline.js.map +1 -0
  59. package/dist/cli.d.ts +3 -0
  60. package/dist/cli.d.ts.map +1 -0
  61. package/dist/cli.js +372 -0
  62. package/dist/cli.js.map +1 -0
  63. package/dist/dataBlockDataTypes.d.ts +877 -0
  64. package/dist/dataBlockDataTypes.d.ts.map +1 -0
  65. package/dist/dataBlockDataTypes.js +2 -0
  66. package/dist/dataBlockDataTypes.js.map +1 -0
  67. package/dist/dataTypes.d.ts +31 -0
  68. package/dist/dataTypes.d.ts.map +1 -0
  69. package/dist/dataTypes.js +5 -0
  70. package/dist/dataTypes.js.map +1 -0
  71. package/dist/dump.d.ts +3 -0
  72. package/dist/dump.d.ts.map +1 -0
  73. package/dist/dump.js +36 -0
  74. package/dist/dump.js.map +1 -0
  75. package/dist/eventDataTypes.d.ts +199 -0
  76. package/dist/eventDataTypes.d.ts.map +1 -0
  77. package/dist/eventDataTypes.js +2 -0
  78. package/dist/eventDataTypes.js.map +1 -0
  79. package/dist/ghostDataTypes.d.ts +573 -0
  80. package/dist/ghostDataTypes.d.ts.map +1 -0
  81. package/dist/ghostDataTypes.js +2 -0
  82. package/dist/ghostDataTypes.js.map +1 -0
  83. package/dist/index.d.ts +17 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +9 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/types.d.ts +261 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +204 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +46 -0
@@ -0,0 +1,261 @@
1
+ import type { ParsedData } from "./ClassRegistry.js";
2
+ export declare const MaxGhostCount = 1024;
3
+ export declare const GhostIdBitSize = 10;
4
+ export declare const NetStringTableMaxStrings = 4096;
5
+ export declare const StringIdBitSize = 12;
6
+ export declare const NetEventClassBitSize = 6;
7
+ export declare const NetEventClassFirst = 255;
8
+ export declare const NetObjectClassBitSize = 7;
9
+ export declare const NetObjectClassFirst = 0;
10
+ export declare const MaxPacketDataSize = 1500;
11
+ export declare const MaxTriggerKeys = 6;
12
+ export declare const MoveCountBits = 5;
13
+ export declare const MaxMoveCount = 30;
14
+ export declare const GhostMsgGhostAlwaysDone = 0;
15
+ export declare const GhostMsgGhostAlwaysAck = 1;
16
+ export declare const GhostMsgEndGhosting = 2;
17
+ export declare const GhostMsgGhostingActive = 3;
18
+ export declare const DataBlockObjectIdFirst = 3;
19
+ export declare const DataBlockObjectIdBitSize = 10;
20
+ export declare const DataBlockObjectIdLast: number;
21
+ export declare const DataBlockClassFirst = 128;
22
+ export declare const DataBlockClassBitSize = 7;
23
+ export declare const SimDBEventObjectIdBits = 11;
24
+ export declare const SimDBEventClassIdBits = 7;
25
+ export declare const SimDBEventIndexBits = 11;
26
+ export declare const SimDBEventTotalBits = 12;
27
+ export declare const DataBlockClassNames: readonly string[];
28
+ export declare const NetObjectClassNames: readonly string[];
29
+ export declare const NetEventClassNames: readonly string[];
30
+ export declare const BlockTypePacket = 0;
31
+ export declare const BlockTypeSendPacket = 1;
32
+ export declare const BlockTypeMove = 2;
33
+ export declare const BlockTypeInfo = 3;
34
+ export declare const DataPacket = 0;
35
+ export declare const PingPacket = 1;
36
+ export declare const AckPacket = 2;
37
+ export interface Move {
38
+ px: number;
39
+ py: number;
40
+ pz: number;
41
+ pyaw: number;
42
+ ppitch: number;
43
+ proll: number;
44
+ x: number;
45
+ y: number;
46
+ z: number;
47
+ yaw: number;
48
+ pitch: number;
49
+ roll: number;
50
+ id: number;
51
+ sendCount: number;
52
+ freeLook: boolean;
53
+ trigger: boolean[];
54
+ }
55
+ export interface InfoBlock {
56
+ value1: number;
57
+ value2: number;
58
+ }
59
+ export interface DataBlockHeader {
60
+ objectId: number;
61
+ classId: number;
62
+ index: number;
63
+ total: number;
64
+ dataBitsStart: number;
65
+ }
66
+ export interface DnetHeader {
67
+ gameFlag: boolean;
68
+ connectSeqBit: number;
69
+ seqNumber: number;
70
+ highestAck: number;
71
+ packetType: number;
72
+ ackByteCount: number;
73
+ ackMask: number;
74
+ }
75
+ export interface RateInfo {
76
+ updateDelay?: number;
77
+ packetSize?: number;
78
+ maxUpdateDelay?: number;
79
+ maxPacketSize?: number;
80
+ }
81
+ export interface GhostUpdate {
82
+ index: number;
83
+ type: "create" | "update" | "delete";
84
+ classId?: number;
85
+ updateBitsStart: number;
86
+ updateBitsEnd: number;
87
+ parsedData?: ParsedData;
88
+ }
89
+ export interface NetEventInfo {
90
+ classId: number;
91
+ guaranteed: boolean;
92
+ sequenceNumber?: number;
93
+ absoluteSequenceNumber?: number;
94
+ dataBitsStart: number;
95
+ dataBitsEnd: number;
96
+ parsedData?: ParsedData;
97
+ }
98
+ export interface PacketData {
99
+ dnetHeader: DnetHeader;
100
+ rateInfo: RateInfo;
101
+ gameState: GameState;
102
+ events: NetEventInfo[];
103
+ ghosts: GhostUpdate[];
104
+ /** Bit position where ghost section starts (readGhosts call). */
105
+ ghostSectionStart?: number;
106
+ }
107
+ export interface GameState {
108
+ lastMoveAck: number;
109
+ damageFlash?: number;
110
+ whiteOut?: number;
111
+ selfLocked?: boolean;
112
+ selfHomed?: boolean;
113
+ seekerTracking?: boolean;
114
+ seekerTrackingPos?: {
115
+ x: number;
116
+ y: number;
117
+ z: number;
118
+ };
119
+ seekerMode?: number;
120
+ seekerObjectGhostIndex?: number;
121
+ targetPos?: {
122
+ x: number;
123
+ y: number;
124
+ z: number;
125
+ };
126
+ pinged: boolean;
127
+ jammed: boolean;
128
+ controlObjectGhostIndex?: number;
129
+ controlObjectDataStart?: number;
130
+ controlObjectDataEnd?: number;
131
+ controlObjectData?: ParsedData;
132
+ compressionPoint?: {
133
+ x: number;
134
+ y: number;
135
+ z: number;
136
+ };
137
+ targetVisibility?: {
138
+ index: number;
139
+ mask: number;
140
+ }[];
141
+ cameraFov?: number;
142
+ }
143
+ export interface DemoBlock {
144
+ index: number;
145
+ type: number;
146
+ size: number;
147
+ data: Uint8Array;
148
+ parsed?: PacketData | Move | InfoBlock;
149
+ }
150
+ export interface ConnectionProtocolState {
151
+ lastSeqRecvdAtSend: number[];
152
+ lastSeqRecvd: number;
153
+ highestAckedSeq: number;
154
+ lastSendSeq: number;
155
+ ackMask: number;
156
+ connectSequence: number;
157
+ lastRecvAckAck: number;
158
+ connectionEstablished: boolean;
159
+ }
160
+ export interface StringTableEntry {
161
+ id: number;
162
+ value: string;
163
+ }
164
+ export interface ParsedDataBlock {
165
+ classId: number;
166
+ className: string;
167
+ objectId: number;
168
+ data: ParsedData;
169
+ }
170
+ export interface ScoreEntry {
171
+ clientId: number;
172
+ teamId: number;
173
+ score: number;
174
+ field0: number;
175
+ field1: number;
176
+ field2: number;
177
+ isBot: boolean;
178
+ triggerFlags: boolean[];
179
+ }
180
+ /**
181
+ * IFF (Identification Friend or Foe) color for one sensor group pairing.
182
+ * sensorGroupColors[myGroup][theirGroup] determines how `theirGroup` appears
183
+ * to `myGroup` (e.g., red for enemy, green for friendly).
184
+ */
185
+ export interface SensorGroupColor {
186
+ group: number;
187
+ targetGroup: number;
188
+ r: number;
189
+ g: number;
190
+ b: number;
191
+ a: number;
192
+ }
193
+ export interface TargetEntry {
194
+ targetId: number;
195
+ sensorData?: number;
196
+ voiceMapData?: number;
197
+ name?: string;
198
+ skin?: string;
199
+ skinPref?: string;
200
+ voice?: string;
201
+ typeDescription?: string;
202
+ sensorGroup: number;
203
+ targetData: number;
204
+ dataBlockRef?: number;
205
+ damageLevel: number;
206
+ }
207
+ export interface PathManagerEntry {
208
+ entryId: number;
209
+ records: {
210
+ field0: number;
211
+ field1: number;
212
+ field2: number;
213
+ auxField: number;
214
+ }[];
215
+ }
216
+ export interface InitialBlockData {
217
+ taggedStrings: Map<number, string>;
218
+ dataBlockHeaders: DataBlockHeader[];
219
+ dataBlockCount: number;
220
+ dataBlocks: Map<number, ParsedDataBlock>;
221
+ /** Initial $firstPerson state from GameConnection::writeDemoStartBlock. */
222
+ firstPerson: boolean;
223
+ connectionFields: number[];
224
+ stateArray: number[];
225
+ scoreEntries: ScoreEntry[];
226
+ demoValues: string[];
227
+ sensorGroupColors: SensorGroupColor[];
228
+ targetEntries: TargetEntry[];
229
+ connectionState: ConnectionProtocolState;
230
+ roundTripTime: number;
231
+ packetLoss: number;
232
+ pathManager: PathManagerEntry[];
233
+ notifyCount: number;
234
+ nextRecvEventSeq: number;
235
+ ghostingSequence: number;
236
+ initialGhosts: GhostUpdate[];
237
+ initialEvents: NetEventInfo[];
238
+ controlObjectGhostIndex: number;
239
+ controlObjectData?: ParsedData;
240
+ missionName: string;
241
+ missionCRC: number;
242
+ phase2TrailingBits?: number;
243
+ phase2Valid?: boolean;
244
+ phase2Error?: string;
245
+ }
246
+ export interface DemoHeader {
247
+ identString: string;
248
+ protocolVersion: number;
249
+ demoLengthMs: number;
250
+ initialBlockSize: number;
251
+ }
252
+ export interface DemoFile {
253
+ header: DemoHeader;
254
+ initialBlock: InitialBlockData;
255
+ blocks: DemoBlock[];
256
+ }
257
+ export interface LoadResult {
258
+ header: DemoHeader;
259
+ initialBlock: InitialBlockData;
260
+ }
261
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,204 @@
1
+ // Key constants from the V12 engine source
2
+ export const MaxGhostCount = 1024;
3
+ export const GhostIdBitSize = 10;
4
+ export const NetStringTableMaxStrings = 4096;
5
+ export const StringIdBitSize = 12;
6
+ export const NetEventClassBitSize = 6;
7
+ export const NetEventClassFirst = 255;
8
+ export const NetObjectClassBitSize = 7;
9
+ export const NetObjectClassFirst = 0;
10
+ export const MaxPacketDataSize = 1500;
11
+ export const MaxTriggerKeys = 6;
12
+ export const MoveCountBits = 5;
13
+ export const MaxMoveCount = 30;
14
+ // GhostingMessageEvent message types (NetConnection::GhostMSG enum).
15
+ export const GhostMsgGhostAlwaysDone = 0;
16
+ export const GhostMsgGhostAlwaysAck = 1;
17
+ export const GhostMsgEndGhosting = 2;
18
+ export const GhostMsgGhostingActive = 3;
19
+ // DataBlock constants.
20
+ // For SimDataBlockEvent header (initial block + events), the binary uses:
21
+ // readInt(11) objectId, readInt(7) classId, readInt(11) index, readInt(12) total.
22
+ // For DataBlock references in payloads (readDataBlockRef), V12 source uses:
23
+ // readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast).
24
+ export const DataBlockObjectIdFirst = 3;
25
+ export const DataBlockObjectIdBitSize = 10;
26
+ export const DataBlockObjectIdLast = DataBlockObjectIdFirst + (1 << DataBlockObjectIdBitSize) - 1; // 1026
27
+ export const DataBlockClassFirst = 128;
28
+ export const DataBlockClassBitSize = 7;
29
+ // SimDataBlockEvent header bit sizes (from decompiled binary).
30
+ // These are the HEADER field sizes, which differ from the payload reference sizes.
31
+ // readClassInfo uses getNextPow2(0x800=2048) → getBitCount(2048)=11 for objectId.
32
+ // The classId, index, and total are read with literal values 7, 11, 12 (from 0x80, 0xb, 0xc).
33
+ export const SimDBEventObjectIdBits = 11;
34
+ export const SimDBEventClassIdBits = 7; // same as DataBlockClassBitSize
35
+ export const SimDBEventIndexBits = 11;
36
+ export const SimDBEventTotalBits = 12;
37
+ // Deterministic DataBlock class name mapping, derived from machine code
38
+ // analysis of the Tribes 2 binary (build 25034). All 54 DataBlock classes
39
+ // with mClassIdBase=0x80 are sorted by C strcmp (ASCII byte order), which
40
+ // is how AbstractClassRep::initialize assigns sequential classIds.
41
+ // Index N in this array corresponds to classId N (group-local) or
42
+ // classId N+128 (V12 global format).
43
+ export const DataBlockClassNames = [
44
+ "AudioDescription", // 0 / 128
45
+ "AudioEnvironment", // 1 / 129
46
+ "AudioProfile", // 2 / 130
47
+ "AudioSampleEnvironment", // 3 / 131
48
+ "BombProjectileData", // 4 / 132
49
+ "CameraData", // 5 / 133
50
+ "CannedChatItem", // 6 / 134
51
+ "CommanderIconData", // 7 / 135
52
+ "DebrisData", // 8 / 136
53
+ "DecalData", // 9 / 137
54
+ "ELFProjectileData", // 10 / 138
55
+ "EffectProfile", // 11 / 139
56
+ "EnergyProjectileData", // 12 / 140
57
+ "ExplosionData", // 13 / 141
58
+ "FireballAtmosphereData", // 14 / 142
59
+ "FlareProjectileData", // 15 / 143
60
+ "FlyingVehicleData", // 16 / 144
61
+ "ForceFieldBareData", // 17 / 145
62
+ "GameBaseData", // 18 / 146
63
+ "GrenadeProjectileData", // 19 / 147
64
+ "HoverVehicleData", // 20 / 148
65
+ "ItemData", // 21 / 149
66
+ "JetEffectData", // 22 / 150
67
+ "LightningData", // 23 / 151
68
+ "LinearFlareProjectileData", // 24 / 152
69
+ "LinearProjectileData", // 25 / 153
70
+ "MissionMarkerData", // 26 / 154
71
+ "ParticleData", // 27 / 155
72
+ "ParticleEmissionDummyData", // 28 / 156
73
+ "ParticleEmitterData", // 29 / 157
74
+ "PlayerData", // 30 / 158
75
+ "PrecipitationData", // 31 / 159
76
+ "ProjectileData", // 32 / 160
77
+ "RepairProjectileData", // 33 / 161
78
+ "RunningLightData", // 34 / 162
79
+ "SeekerProjectileData", // 35 / 163
80
+ "SensorData", // 36 / 164
81
+ "ShapeBaseData", // 37 / 165
82
+ "ShapeBaseImageData", // 38 / 166
83
+ "ShockLanceProjectileData", // 39 / 167
84
+ "ShockwaveData", // 40 / 168
85
+ "SimDataBlock", // 41 / 169
86
+ "SniperProjectileData", // 42 / 170
87
+ "SplashData", // 43 / 171
88
+ "StaticShapeData", // 44 / 172
89
+ "StationFXPersonalData", // 45 / 173
90
+ "StationFXVehicleData", // 46 / 174
91
+ "TSShapeConstructor", // 47 / 175
92
+ "TargetProjectileData", // 48 / 176
93
+ "TracerProjectileData", // 49 / 177
94
+ "TriggerData", // 50 / 178
95
+ "TurretData", // 51 / 179
96
+ "TurretImageData", // 52 / 180
97
+ "WheeledVehicleData", // 53 / 181
98
+ ];
99
+ // Deterministic NetObject (ghost) class name mapping, derived from machine code
100
+ // analysis of the Tribes 2 binary (build 25034). All 53 NetObject classes
101
+ // with mClassIdBase=0 are sorted by C strcmp (ASCII byte order), which
102
+ // is how AbstractClassRep::initialize assigns sequential classIds.
103
+ // Index N in this array corresponds to classId N (NetObjectClassFirst + N).
104
+ // Verified against decompiled FUN_00423cb0 class table initialization.
105
+ // Vehicle is NOT a ghost class (classGroup=0xFFFFFFFF in binary).
106
+ export const NetObjectClassNames = [
107
+ "AIObjective", // 0
108
+ "AudioEmitter", // 1
109
+ "BeaconObject", // 2
110
+ "BombProjectile", // 3
111
+ "Camera", // 4
112
+ "Debris", // 5
113
+ "ELFProjectile", // 6
114
+ "EnergyProjectile", // 7
115
+ "FireballAtmosphere", // 8
116
+ "FlareProjectile", // 9
117
+ "FlyingVehicle", // 10
118
+ "ForceFieldBare", // 11
119
+ "GameBase", // 12
120
+ "GrenadeProjectile", // 13
121
+ "HoverVehicle", // 14
122
+ "InteriorInstance", // 15
123
+ "Item", // 16
124
+ "Lightning", // 17
125
+ "LinearFlareProjectile", // 18
126
+ "LinearProjectile", // 19
127
+ "Marker", // 20
128
+ "MissionArea", // 21
129
+ "MissionMarker", // 22
130
+ "ParticleEmissionDummy", // 23
131
+ "PhysicalZone", // 24
132
+ "Player", // 25
133
+ "Precipitation", // 26
134
+ "Projectile", // 27
135
+ "RepairProjectile", // 28
136
+ "ScopeAlwaysShape", // 29
137
+ "SeekerProjectile", // 30
138
+ "ShapeBase", // 31
139
+ "ShockLanceProjectile", // 32
140
+ "Shockwave", // 33
141
+ "SimpleNetObject", // 34
142
+ "Sky", // 35
143
+ "SniperProjectile", // 36
144
+ "SpawnSphere", // 37
145
+ "Splash", // 38
146
+ "StaticShape", // 39
147
+ "StationFXPersonal", // 40
148
+ "StationFXVehicle", // 41
149
+ "Sun", // 42
150
+ "TSStatic", // 43
151
+ "TargetProjectile", // 44
152
+ "TerrainBlock", // 45
153
+ "TracerProjectile", // 46
154
+ "Trigger", // 47
155
+ "Turret", // 48
156
+ "VehicleBlocker", // 49
157
+ "WaterBlock", // 50
158
+ "WayPoint", // 51
159
+ "WheeledVehicle", // 52
160
+ ];
161
+ // Deterministic NetEvent class name mapping, derived from machine code
162
+ // analysis of the Tribes 2 binary (build 25034). All 26 NetEvent classes
163
+ // with mClassIdBase=0xFF are sorted by C strcmp (ASCII byte order), which
164
+ // is how AbstractClassRep::initialize assigns sequential classIds.
165
+ // Index N in this array corresponds to classId NetEventClassFirst + N (255 + N).
166
+ export const NetEventClassNames = [
167
+ "CRCChallengeEvent", // 0 / 255
168
+ "CRCChallengeResponseEvent", // 1 / 256
169
+ "FogChallengeEvent", // 2 / 257
170
+ "GhostAlwaysObjectEvent", // 3 / 258
171
+ "GhostingMessageEvent", // 4 / 259
172
+ "GravityEvent", // 5 / 260
173
+ "LightningStrikeEvent", // 6 / 261
174
+ "NetStringEvent", // 7 / 262
175
+ "PathManagerEvent", // 8 / 263
176
+ "RemoteCommandEvent", // 9 / 264
177
+ "RemoveClientTargetTypeEvent", // 10 / 265
178
+ "ResetClientTargetsEvent", // 11 / 266
179
+ "SensorGroupColorEvent", // 12 / 267
180
+ "SetMissionCRCEvent", // 13 / 268
181
+ "SetObjectActiveImageEvent", // 14 / 269
182
+ "SetSensorGroupEvent", // 15 / 270
183
+ "SetServerTargetEvent", // 16 / 271
184
+ "Sim2DAudioEvent", // 17 / 272
185
+ "Sim3DAudioEvent", // 18 / 273
186
+ "SimDataBlockEvent", // 19 / 274
187
+ "SimTargetAudioEvent", // 20 / 275
188
+ "SimVoiceStreamEvent", // 21 / 276
189
+ "SimpleMessageEvent", // 22 / 277
190
+ "TargetFreeEvent", // 23 / 278
191
+ "TargetInfoEvent", // 24 / 279
192
+ "TargetToEvent", // 25 / 280
193
+ ];
194
+ // Block types in the U16 packed format (type = typeSize >> 12)
195
+ // These are from TorqueSDK-style recordBlock/handleRecordedBlock
196
+ export const BlockTypePacket = 0; // Received network packet (dnet data)
197
+ export const BlockTypeSendPacket = 1; // SendPacket trigger (size=0, no data)
198
+ export const BlockTypeMove = 2; // Raw Move struct (64 bytes)
199
+ export const BlockTypeInfo = 3; // Info block (8 bytes: U32 + F32)
200
+ // Packet types from dnet
201
+ export const DataPacket = 0;
202
+ export const PingPacket = 1;
203
+ export const AckPacket = 2;
204
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "t2-demo-parser",
3
+ "version": "1.0.0",
4
+ "author": "Brian Beck <exogen@gmail.com>",
5
+ "description": "Parser for Tribes 2 demo recordings (.rec files)",
6
+ "keywords": [
7
+ "tribes2",
8
+ "tribes-2",
9
+ "torque",
10
+ "demo",
11
+ "replay",
12
+ "parser"
13
+ ],
14
+ "license": "MIT",
15
+ "type": "module",
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "bin": {
20
+ "t2-demo-parser": "./dist/cli.js"
21
+ },
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "default": "./dist/index.js"
26
+ }
27
+ },
28
+ "scripts": {
29
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
30
+ "dev": "tsx src/cli.ts",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest",
33
+ "prepare": "npm run build"
34
+ },
35
+ "dependencies": {
36
+ "debug": "^4.4.3",
37
+ "fflate": "^0.8.2"
38
+ },
39
+ "devDependencies": {
40
+ "@types/debug": "^4.1.12",
41
+ "@types/node": "^25.2.3",
42
+ "tsx": "^4.21.0",
43
+ "typescript": "^5.9.3",
44
+ "vitest": "^4.0.18"
45
+ }
46
+ }