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,603 @@
1
+ import { DataBlockClassFirst, SimDBEventObjectIdBits, SimDBEventClassIdBits, SimDBEventIndexBits, SimDBEventTotalBits, } from "./types.js";
2
+ // ============================================================
3
+ // SimDataBlockEvent — DataBlock definition sent during gameplay
4
+ // ============================================================
5
+ function simDataBlockEventUnpack(bs, conn) {
6
+ // Decompiled source of truth:
7
+ // FUN_005ffc90 reads:
8
+ // mProcess flag + readClassId() + readInt(7) + readInt(11) + readInt(12)
9
+ // This matches the on-wire format written by FUN_005ffbc0.
10
+ const mProcess = bs.readFlag();
11
+ if (!mProcess) {
12
+ return {
13
+ type: "SimDataBlockEvent",
14
+ mProcess: false,
15
+ };
16
+ }
17
+ const id = bs.readInt(SimDBEventObjectIdBits) + 0;
18
+ const classId = bs.readInt(SimDBEventClassIdBits) + DataBlockClassFirst;
19
+ const index = bs.readInt(SimDBEventIndexBits);
20
+ const total = bs.readInt(SimDBEventTotalBits);
21
+ const result = {
22
+ type: "SimDataBlockEvent",
23
+ mProcess: true,
24
+ objectId: id,
25
+ classId,
26
+ index,
27
+ total,
28
+ _payloadBitPos: bs.getCurPos(),
29
+ };
30
+ // Try to parse the DataBlock payload if we have a parser.
31
+ // String buffer is already enabled by parsePacket() for the entire packet —
32
+ // do NOT toggle it here, as that would reset accumulated prefix context and
33
+ // then disable string buffer for the rest of the packet's events and ghosts.
34
+ const parser = conn.getDataBlockParser?.(classId);
35
+ if (parser) {
36
+ try {
37
+ result.dataBlockData = parser.unpackData(bs);
38
+ result.dataBlockClassName = parser.name;
39
+ }
40
+ catch {
41
+ result._needsClassParser = true;
42
+ }
43
+ }
44
+ else {
45
+ result._needsClassParser = true;
46
+ }
47
+ return result;
48
+ }
49
+ // ============================================================
50
+ // NetStringEvent — string table update
51
+ // ============================================================
52
+ function netStringEventUnpack(bs, _conn) {
53
+ // Tribes2.exe source of truth (FUN_00589b60):
54
+ // - id: readInt(10)
55
+ // - hasValue: readFlag()
56
+ // - if hasValue: readString() via BitStream::readString(..., 0xff)
57
+ const id = bs.readInt(10);
58
+ const hasValue = bs.readFlag();
59
+ const value = hasValue ? bs.readString() : undefined;
60
+ return { type: "NetStringEvent", id, hasValue, value };
61
+ }
62
+ // ============================================================
63
+ // Sim2DAudioEvent — 2D audio playback
64
+ // ============================================================
65
+ function sim2DAudioEventUnpack(bs, _conn) {
66
+ // Binary FUN_005fff40: FUN_00436d10(bs) = readInt(11) for DataBlock object ref.
67
+ // No +3 offset — object IDs here use the same numbering as ghost dataBlockId
68
+ // references and SimDataBlockEvent.objectId (all keyed by raw readInt(11)).
69
+ const id = bs.readInt(11);
70
+ return { type: "Sim2DAudioEvent", profileId: id };
71
+ }
72
+ // ============================================================
73
+ // Sim3DAudioEvent — 3D positional audio
74
+ // ============================================================
75
+ function sim3DAudioEventUnpack(bs, conn) {
76
+ // Binary FUN_006000f0: FUN_00436d10(bs) = readInt(11) for DataBlock object ref.
77
+ // No +3 offset — same numbering as ghost dataBlockId and SimDataBlockEvent.
78
+ const id = bs.readInt(11);
79
+ let rotation;
80
+ if (bs.readFlag()) {
81
+ // Has cone params — read quaternion
82
+ const qx = bs.readFloat(8);
83
+ const qy = bs.readFloat(8);
84
+ const qz = bs.readFloat(8);
85
+ let qw = Math.sqrt(Math.max(0, 1.0 - (qx * qx + qy * qy + qz * qz)));
86
+ if (bs.readFlag())
87
+ qw = -qw;
88
+ rotation = { x: qx, y: qy, z: qz, w: qw };
89
+ }
90
+ // Read compressed position
91
+ const position = bs.readCompressedPoint(conn.compressionPoint, 0.5);
92
+ return { type: "Sim3DAudioEvent", profileId: id, rotation, position };
93
+ }
94
+ // ============================================================
95
+ // SetSensorGroupEvent
96
+ // ============================================================
97
+ function setSensorGroupEventUnpack(bs, _conn) {
98
+ return { type: "SetSensorGroupEvent", sensorGroup: bs.readInt(5) };
99
+ }
100
+ // ============================================================
101
+ // SetServerTargetEvent
102
+ // ============================================================
103
+ function setServerTargetEventUnpack(bs, _conn) {
104
+ const targetId = bs.readFlag() ? bs.readInt(9) : undefined; // TargetIdBitSize=9
105
+ const targetPos = { x: bs.readF32(), y: bs.readF32(), z: bs.readF32() };
106
+ const result = {
107
+ type: "SetServerTargetEvent",
108
+ targetPos,
109
+ };
110
+ if (targetId !== undefined)
111
+ result.targetId = targetId;
112
+ return result;
113
+ }
114
+ // ============================================================
115
+ // TargetToEvent — waypoint/command targeting
116
+ // ============================================================
117
+ function targetToEventUnpack(bs, _conn) {
118
+ const targetId = bs.readFlag() ? bs.readInt(9) : undefined;
119
+ const targetPos = bs.readFlag()
120
+ ? { x: bs.readF32(), y: bs.readF32(), z: bs.readF32() }
121
+ : undefined;
122
+ const result = {
123
+ type: "TargetToEvent",
124
+ assign: false, // placeholder, overwritten below
125
+ };
126
+ if (targetId !== undefined)
127
+ result.targetId = targetId;
128
+ if (targetPos)
129
+ result.targetPos = targetPos;
130
+ result.assign = bs.readFlag();
131
+ return result;
132
+ }
133
+ // ============================================================
134
+ // SetObjectActiveImageEvent
135
+ // ============================================================
136
+ function setObjectActiveImageEventUnpack(bs, _conn) {
137
+ const objectId = bs.readRangedU32(0, 1023); // MaxGhostCount-1
138
+ const imageSlot = bs.readRangedU32(0, 8); // MaxMountedImages
139
+ return { type: "SetObjectActiveImageEvent", objectId, imageSlot };
140
+ }
141
+ // ============================================================
142
+ // SetMissionCRCEvent
143
+ // ============================================================
144
+ function setMissionCRCEventUnpack(bs, _conn) {
145
+ return { type: "SetMissionCRCEvent", crc: bs.readU32() };
146
+ }
147
+ // ============================================================
148
+ // RemoteCommandEvent — script console command
149
+ // ============================================================
150
+ function remoteCommandEventUnpack(bs, _conn) {
151
+ // Decompiled Tribes 2 binary source of truth:
152
+ // pack: FUN_005bfd40 writes argc(5 bits), then argc×FUN_00588530
153
+ // unpack: FUN_005bfda0 reads argc(5 bits), then argc×FUN_00588690
154
+ const argc = bs.readInt(5);
155
+ const argv = [];
156
+ for (let i = 0; i < argc; i++) {
157
+ argv.push(bs.unpackNetString());
158
+ }
159
+ return {
160
+ type: "RemoteCommandEvent",
161
+ argc,
162
+ argv,
163
+ funcName: argv[0] ?? "",
164
+ args: argv.slice(1),
165
+ };
166
+ }
167
+ // ============================================================
168
+ // TargetInfoEvent — target metadata synchronization
169
+ // ============================================================
170
+ function targetInfoEventUnpack(bs, _conn) {
171
+ // Decompiled Tribes2.exe source of truth (FUN_006735b0):
172
+ // - targetId: readInt(9)
173
+ // - tag fields: outer presence flag; inner non-empty flag; if non-empty readInt(10), else sentinel 0x400
174
+ // - sensorGroup: optional readInt(5)
175
+ // - dataBlock: outer presence flag; inner valid flag; if valid readInt(11), else sentinel -2
176
+ // - renderFlags: optional readInt(9)
177
+ // - voicePitch: optional readFloat(7) * 1.5 + 0.5
178
+ const result = {
179
+ type: "TargetInfoEvent",
180
+ targetId: bs.readInt(9), // TargetIdBitSize=9
181
+ };
182
+ if (bs.readFlag()) {
183
+ result.nameTag = bs.readFlag() ? bs.readInt(10) : 0x400;
184
+ }
185
+ if (bs.readFlag()) {
186
+ result.skinTag = bs.readFlag() ? bs.readInt(10) : 0x400;
187
+ }
188
+ if (bs.readFlag()) {
189
+ result.skinPrefTag = bs.readFlag() ? bs.readInt(10) : 0x400;
190
+ }
191
+ if (bs.readFlag()) {
192
+ result.voiceTag = bs.readFlag() ? bs.readInt(10) : 0x400;
193
+ }
194
+ if (bs.readFlag()) {
195
+ result.typeTag = bs.readFlag() ? bs.readInt(10) : 0x400;
196
+ }
197
+ if (bs.readFlag()) {
198
+ result.sensorGroup = bs.readInt(5);
199
+ }
200
+ if (bs.readFlag()) {
201
+ result.dataBlockId = bs.readFlag() ? bs.readInt(11) : -2;
202
+ }
203
+ if (bs.readFlag()) {
204
+ result.renderFlags = bs.readInt(9); // NumRenderBits=9
205
+ }
206
+ if (bs.readFlag()) {
207
+ const raw = bs.readFloat(7);
208
+ result.voicePitch = raw * 1.5 + 0.5;
209
+ }
210
+ return result;
211
+ }
212
+ // ============================================================
213
+ // TargetFreeEvent — target cleanup notification
214
+ // ============================================================
215
+ function targetFreeEventUnpack(bs, _conn) {
216
+ return { type: "TargetFreeEvent", targetId: bs.readInt(9) };
217
+ }
218
+ // ============================================================
219
+ // SimTargetAudioEvent — target-specific audio
220
+ // ============================================================
221
+ function simTargetAudioEventUnpack(bs, conn) {
222
+ const result = {
223
+ type: "SimTargetAudioEvent",
224
+ targetId: bs.readInt(9),
225
+ fileTag: bs.readInt(12),
226
+ descriptionId: bs.readRangedU32(3, 1026),
227
+ updateSound: false,
228
+ };
229
+ if (bs.readFlag()) {
230
+ result.position = bs.readCompressedPoint(conn.compressionPoint, 0.5);
231
+ }
232
+ result.updateSound = bs.readFlag();
233
+ return result;
234
+ }
235
+ // ============================================================
236
+ // SensorGroupColorEvent — sensor group HUD colors
237
+ // ============================================================
238
+ function sensorGroupColorEventUnpack(bs, _conn) {
239
+ const sensorGroup = bs.readInt(5);
240
+ const updateMask = bs.readU32();
241
+ const colors = [];
242
+ for (let i = 0; i < 32; i++) {
243
+ if ((1 << i) & updateMask) {
244
+ if (bs.readFlag()) {
245
+ colors.push({
246
+ index: i,
247
+ r: bs.readU8(),
248
+ g: bs.readU8(),
249
+ b: bs.readU8(),
250
+ a: bs.readU8(),
251
+ });
252
+ }
253
+ else {
254
+ colors.push({ index: i, default: true });
255
+ }
256
+ }
257
+ }
258
+ return { type: "SensorGroupColorEvent", sensorGroup, updateMask, colors };
259
+ }
260
+ // ============================================================
261
+ // ResetClientTargetsEvent — clear all client targets
262
+ // ============================================================
263
+ function resetClientTargetsEventUnpack(bs, _conn) {
264
+ return {
265
+ type: "ResetClientTargetsEvent",
266
+ clientTargetsOnly: bs.readFlag(),
267
+ };
268
+ }
269
+ // ============================================================
270
+ // RemoveClientTargetTypeEvent — remove targets by type
271
+ // ============================================================
272
+ function removeClientTargetTypeEventUnpack(bs, _conn) {
273
+ return {
274
+ type: "RemoveClientTargetTypeEvent",
275
+ targetType: bs.readRangedU32(0, 3), // NumTypes=3
276
+ };
277
+ }
278
+ // ============================================================
279
+ // SimVoiceStreamEvent — voice chat audio streaming
280
+ // ============================================================
281
+ function simVoiceStreamEventUnpack(bs, _conn) {
282
+ const streamId = bs.readInt(5);
283
+ const sequence = bs.readInt(6); // SEQUENCE_BITS=6
284
+ const codecId = bs.readInt(2);
285
+ // Server connection (demo is always client-side):
286
+ const clientId = bs.readU8();
287
+ const result = {
288
+ type: "SimVoiceStreamEvent",
289
+ streamId,
290
+ sequence,
291
+ codecId,
292
+ clientId,
293
+ size: 0,
294
+ };
295
+ if (sequence === 0) {
296
+ result.objectId = bs.readInt(10); // GhostIdBitSize=10
297
+ }
298
+ // Size
299
+ const VOICE_PACKET_DATA_SIZE = 16; // typical value
300
+ if (bs.readFlag()) {
301
+ result.size = bs.readInt(5); // SIZE_BITS=5
302
+ }
303
+ else {
304
+ result.size = VOICE_PACKET_DATA_SIZE;
305
+ }
306
+ // Skip the audio data bytes (mSize bytes, but first byte is lock byte so we read mSize-1)
307
+ if (result.size > 0) {
308
+ result.audioData = bs.readBitsBuffer(result.size * 8);
309
+ }
310
+ return result;
311
+ }
312
+ // ============================================================
313
+ // GhostingMessageEvent — ghost synchronization control
314
+ // ============================================================
315
+ function ghostingMessageEventUnpack(bs, _conn) {
316
+ return {
317
+ type: "GhostingMessageEvent",
318
+ sequence: bs.readU32(),
319
+ message: bs.readInt(3),
320
+ ghostCount: bs.readInt(11),
321
+ };
322
+ }
323
+ // ============================================================
324
+ // GhostAlwaysObjectEvent — scope-always ghost objects
325
+ // ============================================================
326
+ function ghostAlwaysObjectEventUnpack(bs, conn) {
327
+ const ghostIndex = bs.readInt(10);
328
+ const hasObjectData = bs.readFlag();
329
+ const result = {
330
+ type: "GhostAlwaysObjectEvent",
331
+ ghostIndex,
332
+ _hasObjectData: hasObjectData,
333
+ };
334
+ if (hasObjectData) {
335
+ const classId = bs.readInt(7); // NetObjectClassBitSize=7
336
+ result.classId = classId;
337
+ // Binary FUN_005854e0: classId + full object unpackUpdate payload.
338
+ // We must consume the embedded payload here to keep packet bit alignment.
339
+ const parser = conn.getGhostParser?.(classId);
340
+ if (!parser) {
341
+ throw new Error(`No ghost parser for GhostAlwaysObjectEvent classId=${classId}`);
342
+ }
343
+ result.objectData = parser.unpackUpdate(bs, true, conn);
344
+ }
345
+ return result;
346
+ }
347
+ // ============================================================
348
+ // PathManagerEvent — server path/patrol route updates
349
+ // ============================================================
350
+ function pathManagerEventUnpack(bs, _conn) {
351
+ if (bs.readFlag()) {
352
+ // NewPaths
353
+ const numPaths = bs.readU32();
354
+ const paths = [];
355
+ for (let i = 0; i < numPaths && i < 256; i++) {
356
+ const totalTime = bs.readU32();
357
+ const numPoints = bs.readU32();
358
+ const points = [];
359
+ for (let j = 0; j < numPoints && j < 1024; j++) {
360
+ points.push({
361
+ position: bs.readPoint3F(),
362
+ msToNext: bs.readU32(),
363
+ });
364
+ }
365
+ paths.push({ totalTime, points });
366
+ }
367
+ return { type: "PathManagerEvent", messageType: "NewPaths", paths };
368
+ }
369
+ else {
370
+ // ModifyPath
371
+ const modifiedPath = bs.readU32();
372
+ const totalTime = bs.readU32();
373
+ const numPoints = bs.readU32();
374
+ const points = [];
375
+ for (let j = 0; j < numPoints && j < 1024; j++) {
376
+ points.push({
377
+ position: bs.readPoint3F(),
378
+ msToNext: bs.readU32(),
379
+ });
380
+ }
381
+ return {
382
+ type: "PathManagerEvent",
383
+ messageType: "ModifyPath",
384
+ modifiedPath,
385
+ path: { totalTime, points },
386
+ };
387
+ }
388
+ }
389
+ // ============================================================
390
+ // LightningStrikeEvent — lightning visual effects
391
+ // ============================================================
392
+ function lightningStrikeEventUnpack(bs, _conn) {
393
+ // Binary FUN_00626e40: flag → early return if false → readInt(11) + readFloat(10) + readFloat(10) + flag → readInt(11)
394
+ const result = { type: "LightningStrikeEvent" };
395
+ if (!bs.readFlag()) {
396
+ return result;
397
+ }
398
+ result.sourceGhost = bs.readInt(11); // resolveGhost: getNextPow2(0x401)=2048 → 11 bits
399
+ result.startX = bs.readFloat(10);
400
+ result.startY = bs.readFloat(10);
401
+ if (bs.readFlag()) {
402
+ result.targetGhost = bs.readInt(11);
403
+ }
404
+ return result;
405
+ }
406
+ // ============================================================
407
+ // FileChunkEvent — file transfer data chunks
408
+ // ============================================================
409
+ function fileChunkEventUnpack(bs, _conn) {
410
+ const chunkLen = bs.readRangedU32(0, 63);
411
+ const chunkData = bs.readBitsBuffer(chunkLen * 8);
412
+ return { type: "FileChunkEvent", chunkLen, chunkData };
413
+ }
414
+ // ============================================================
415
+ // DownloadMessageEvent — file download control
416
+ // ============================================================
417
+ function downloadMessageEventUnpack(bs, _conn) {
418
+ return {
419
+ type: "DownloadMessageEvent",
420
+ value: bs.readU32(),
421
+ message: bs.readInt(3),
422
+ };
423
+ }
424
+ // ============================================================
425
+ // FileDownloadRequestEvent — request file transfers
426
+ // ============================================================
427
+ function fileDownloadRequestEventUnpack(bs, _conn) {
428
+ const nameCount = bs.readRangedU32(0, 31);
429
+ const fileNames = [];
430
+ for (let i = 0; i < nameCount; i++) {
431
+ fileNames.push(bs.readString());
432
+ }
433
+ return { type: "FileDownloadRequestEvent", fileNames };
434
+ }
435
+ // ============================================================
436
+ // SimpleMessageEvent — test/debug messages
437
+ // ============================================================
438
+ function simpleMessageEventUnpack(bs, _conn) {
439
+ return { type: "SimpleMessageEvent", message: bs.readString() };
440
+ }
441
+ // ============================================================
442
+ // CRCChallengeEvent — CRC validation challenge from server
443
+ // Binary: FUN_006a2c30 reads 3×U32 + readFlag
444
+ // ============================================================
445
+ function crcChallengeEventUnpack(bs, _conn) {
446
+ return {
447
+ type: "CRCChallengeEvent",
448
+ crcValue: bs.readU32(),
449
+ field1: bs.readU32(),
450
+ field2: bs.readU32(),
451
+ flag: bs.readFlag(),
452
+ };
453
+ }
454
+ // ============================================================
455
+ // CRCChallengeResponseEvent — CRC validation response
456
+ // Binary: FUN_006a2e00 reads 3×U32
457
+ // ============================================================
458
+ function crcChallengeResponseEventUnpack(bs, _conn) {
459
+ return {
460
+ type: "CRCChallengeResponseEvent",
461
+ crcValue: bs.readU32(),
462
+ field1: bs.readU32(),
463
+ field2: bs.readU32(),
464
+ };
465
+ }
466
+ // ============================================================
467
+ // GravityEvent — gravity value synchronization
468
+ // Binary: FUN_005ff5b0 reads 4 bytes (F32 gravity value)
469
+ // ============================================================
470
+ function gravityEventUnpack(bs, _conn) {
471
+ return {
472
+ type: "GravityEvent",
473
+ gravity: bs.readF32(),
474
+ };
475
+ }
476
+ // ============================================================
477
+ // FogChallengeEvent — fog validation (stub: not found in binary)
478
+ // ============================================================
479
+ function fogChallengeEventUnpack(_bs, _conn) {
480
+ return { type: "FogChallengeEvent" };
481
+ }
482
+ // ============================================================
483
+ // Register all event parsers
484
+ // ============================================================
485
+ export function registerEventParsers(registry) {
486
+ registry.catalogEvent({
487
+ name: "SimDataBlockEvent",
488
+ unpack: simDataBlockEventUnpack,
489
+ });
490
+ registry.catalogEvent({
491
+ name: "NetStringEvent",
492
+ unpack: netStringEventUnpack,
493
+ });
494
+ registry.catalogEvent({
495
+ name: "Sim2DAudioEvent",
496
+ unpack: sim2DAudioEventUnpack,
497
+ });
498
+ registry.catalogEvent({
499
+ name: "Sim3DAudioEvent",
500
+ unpack: sim3DAudioEventUnpack,
501
+ });
502
+ registry.catalogEvent({
503
+ name: "SetSensorGroupEvent",
504
+ unpack: setSensorGroupEventUnpack,
505
+ });
506
+ registry.catalogEvent({
507
+ name: "SetServerTargetEvent",
508
+ unpack: setServerTargetEventUnpack,
509
+ });
510
+ registry.catalogEvent({
511
+ name: "TargetToEvent",
512
+ unpack: targetToEventUnpack,
513
+ });
514
+ registry.catalogEvent({
515
+ name: "SetObjectActiveImageEvent",
516
+ unpack: setObjectActiveImageEventUnpack,
517
+ });
518
+ registry.catalogEvent({
519
+ name: "SetMissionCRCEvent",
520
+ unpack: setMissionCRCEventUnpack,
521
+ });
522
+ registry.catalogEvent({
523
+ name: "RemoteCommandEvent",
524
+ unpack: remoteCommandEventUnpack,
525
+ });
526
+ registry.catalogEvent({
527
+ name: "TargetInfoEvent",
528
+ unpack: targetInfoEventUnpack,
529
+ });
530
+ registry.catalogEvent({
531
+ name: "TargetFreeEvent",
532
+ unpack: targetFreeEventUnpack,
533
+ });
534
+ registry.catalogEvent({
535
+ name: "SimTargetAudioEvent",
536
+ unpack: simTargetAudioEventUnpack,
537
+ });
538
+ registry.catalogEvent({
539
+ name: "SensorGroupColorEvent",
540
+ unpack: sensorGroupColorEventUnpack,
541
+ });
542
+ registry.catalogEvent({
543
+ name: "ResetClientTargetsEvent",
544
+ unpack: resetClientTargetsEventUnpack,
545
+ });
546
+ registry.catalogEvent({
547
+ name: "RemoveClientTargetTypeEvent",
548
+ unpack: removeClientTargetTypeEventUnpack,
549
+ });
550
+ registry.catalogEvent({
551
+ name: "SimVoiceStreamEvent",
552
+ unpack: simVoiceStreamEventUnpack,
553
+ });
554
+ registry.catalogEvent({
555
+ name: "GhostingMessageEvent",
556
+ unpack: ghostingMessageEventUnpack,
557
+ });
558
+ registry.catalogEvent({
559
+ name: "GhostAlwaysObjectEvent",
560
+ unpack: ghostAlwaysObjectEventUnpack,
561
+ });
562
+ registry.catalogEvent({
563
+ name: "PathManagerEvent",
564
+ unpack: pathManagerEventUnpack,
565
+ });
566
+ registry.catalogEvent({
567
+ name: "LightningStrikeEvent",
568
+ unpack: lightningStrikeEventUnpack,
569
+ });
570
+ registry.catalogEvent({
571
+ name: "FileChunkEvent",
572
+ unpack: fileChunkEventUnpack,
573
+ });
574
+ registry.catalogEvent({
575
+ name: "DownloadMessageEvent",
576
+ unpack: downloadMessageEventUnpack,
577
+ });
578
+ registry.catalogEvent({
579
+ name: "FileDownloadRequestEvent",
580
+ unpack: fileDownloadRequestEventUnpack,
581
+ });
582
+ registry.catalogEvent({
583
+ name: "SimpleMessageEvent",
584
+ unpack: simpleMessageEventUnpack,
585
+ });
586
+ registry.catalogEvent({
587
+ name: "CRCChallengeEvent",
588
+ unpack: crcChallengeEventUnpack,
589
+ });
590
+ registry.catalogEvent({
591
+ name: "CRCChallengeResponseEvent",
592
+ unpack: crcChallengeResponseEventUnpack,
593
+ });
594
+ registry.catalogEvent({
595
+ name: "GravityEvent",
596
+ unpack: gravityEventUnpack,
597
+ });
598
+ registry.catalogEvent({
599
+ name: "FogChallengeEvent",
600
+ unpack: fogChallengeEventUnpack,
601
+ });
602
+ }
603
+ //# sourceMappingURL=EventParsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventParsers.js","sourceRoot":"","sources":["../src/EventParsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ClassRegistry, GhostEntry, GhostTrackerInterface } from "./ClassRegistry.js";
2
+ export declare class GhostTracker implements GhostTrackerInterface {
3
+ private ghosts;
4
+ getGhost(index: number): GhostEntry | undefined;
5
+ hasGhost(index: number): boolean;
6
+ createGhost(index: number, classId: number, className: string): GhostEntry;
7
+ deleteGhost(index: number): void;
8
+ getAllGhosts(): Map<number, GhostEntry>;
9
+ size(): number;
10
+ clear(): void;
11
+ }
12
+ export declare function registerGhostParsers(registry: ClassRegistry): void;
13
+ //# sourceMappingURL=GhostManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GhostManager.d.ts","sourceRoot":"","sources":["../src/GhostManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EACV,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAiE5B,qBAAa,YAAa,YAAW,qBAAqB;IACxD,OAAO,CAAC,MAAM,CAAiC;IAE/C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IAM1E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAIvC,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,IAAI;CAGd;AA0qED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAwRlE"}