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.
- package/LICENSE +21 -0
- package/README.md +823 -0
- package/dist/BitStream.d.ts +143 -0
- package/dist/BitStream.d.ts.map +1 -0
- package/dist/BitStream.js +369 -0
- package/dist/BitStream.js.map +1 -0
- package/dist/BitStream.test.d.ts +2 -0
- package/dist/BitStream.test.d.ts.map +1 -0
- package/dist/BitStream.test.js +419 -0
- package/dist/BitStream.test.js.map +1 -0
- package/dist/ClassRegistry.d.ts +100 -0
- package/dist/ClassRegistry.d.ts.map +1 -0
- package/dist/ClassRegistry.js +118 -0
- package/dist/ClassRegistry.js.map +1 -0
- package/dist/ClassRegistry.test.d.ts +2 -0
- package/dist/ClassRegistry.test.d.ts.map +1 -0
- package/dist/ClassRegistry.test.js +83 -0
- package/dist/ClassRegistry.test.js.map +1 -0
- package/dist/DataBlockParsers.d.ts +3 -0
- package/dist/DataBlockParsers.d.ts.map +1 -0
- package/dist/DataBlockParsers.js +2041 -0
- package/dist/DataBlockParsers.js.map +1 -0
- package/dist/DemoParser.d.ts +155 -0
- package/dist/DemoParser.d.ts.map +1 -0
- package/dist/DemoParser.js +943 -0
- package/dist/DemoParser.js.map +1 -0
- package/dist/DemoParser.test.d.ts +2 -0
- package/dist/DemoParser.test.d.ts.map +1 -0
- package/dist/DemoParser.test.js +472 -0
- package/dist/DemoParser.test.js.map +1 -0
- package/dist/EventParsers.d.ts +3 -0
- package/dist/EventParsers.d.ts.map +1 -0
- package/dist/EventParsers.js +603 -0
- package/dist/EventParsers.js.map +1 -0
- package/dist/GhostManager.d.ts +13 -0
- package/dist/GhostManager.d.ts.map +1 -0
- package/dist/GhostManager.js +2002 -0
- package/dist/GhostManager.js.map +1 -0
- package/dist/GhostTracker.test.d.ts +2 -0
- package/dist/GhostTracker.test.d.ts.map +1 -0
- package/dist/GhostTracker.test.js +64 -0
- package/dist/GhostTracker.test.js.map +1 -0
- package/dist/HuffmanProcessor.d.ts +12 -0
- package/dist/HuffmanProcessor.d.ts.map +1 -0
- package/dist/HuffmanProcessor.js +163 -0
- package/dist/HuffmanProcessor.js.map +1 -0
- package/dist/LiveParser.d.ts +16 -0
- package/dist/LiveParser.d.ts.map +1 -0
- package/dist/LiveParser.js +29 -0
- package/dist/LiveParser.js.map +1 -0
- package/dist/PacketParser.d.ts +104 -0
- package/dist/PacketParser.d.ts.map +1 -0
- package/dist/PacketParser.js +713 -0
- package/dist/PacketParser.js.map +1 -0
- package/dist/Timeline.d.ts +101 -0
- package/dist/Timeline.d.ts.map +1 -0
- package/dist/Timeline.js +251 -0
- package/dist/Timeline.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +372 -0
- package/dist/cli.js.map +1 -0
- package/dist/dataBlockDataTypes.d.ts +877 -0
- package/dist/dataBlockDataTypes.d.ts.map +1 -0
- package/dist/dataBlockDataTypes.js +2 -0
- package/dist/dataBlockDataTypes.js.map +1 -0
- package/dist/dataTypes.d.ts +31 -0
- package/dist/dataTypes.d.ts.map +1 -0
- package/dist/dataTypes.js +5 -0
- package/dist/dataTypes.js.map +1 -0
- package/dist/dump.d.ts +3 -0
- package/dist/dump.d.ts.map +1 -0
- package/dist/dump.js +36 -0
- package/dist/dump.js.map +1 -0
- package/dist/eventDataTypes.d.ts +199 -0
- package/dist/eventDataTypes.d.ts.map +1 -0
- package/dist/eventDataTypes.js +2 -0
- package/dist/eventDataTypes.js.map +1 -0
- package/dist/ghostDataTypes.d.ts +573 -0
- package/dist/ghostDataTypes.d.ts.map +1 -0
- package/dist/ghostDataTypes.js +2 -0
- package/dist/ghostDataTypes.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +261 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +204 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
package/dist/types.d.ts
ADDED
|
@@ -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
|
+
}
|