quake2ts 0.0.481 → 0.0.483
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/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +16 -16
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +79 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +80 -2
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/session.d.ts +21 -1
- package/packages/client/dist/types/session.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +4 -4
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +1867 -2058
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +1547 -1745
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/combat/weapons/animation.d.ts +0 -7
- package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/common.d.ts +7 -0
- package/packages/game/dist/types/combat/weapons/common.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/switching.d.ts +1 -0
- package/packages/game/dist/types/combat/weapons/switching.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts +1 -0
- package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
|
@@ -1,14 +1,12 @@
|
|
|
1
|
+
// ../shared/dist/esm/index.js
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
-
var __esm = (fn, res) => function __init() {
|
|
4
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
5
|
-
};
|
|
6
3
|
var __export = (target, all) => {
|
|
7
4
|
for (var name in all)
|
|
8
5
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
6
|
};
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
var ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
8
|
+
var STOP_EPSILON = 0.1;
|
|
9
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
12
10
|
function copyVec3(a) {
|
|
13
11
|
return { x: a.x, y: a.y, z: a.z };
|
|
14
12
|
}
|
|
@@ -155,6 +153,11 @@ function rotatePointAroundVector(dir, point, degrees) {
|
|
|
155
153
|
z: rot[2][0] * point.x + rot[2][1] * point.y + rot[2][2] * point.z
|
|
156
154
|
};
|
|
157
155
|
}
|
|
156
|
+
var PITCH = 0;
|
|
157
|
+
var YAW = 1;
|
|
158
|
+
var ROLL = 2;
|
|
159
|
+
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
160
|
+
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
158
161
|
function axisComponent(vec, axis) {
|
|
159
162
|
switch (axis) {
|
|
160
163
|
case PITCH:
|
|
@@ -240,9 +243,413 @@ function vectorToAngles(vec) {
|
|
|
240
243
|
}
|
|
241
244
|
return { x: -pitch, y: yaw, z: 0 };
|
|
242
245
|
}
|
|
246
|
+
var ANORMS = [
|
|
247
|
+
[-0.525731, 0, 0.850651],
|
|
248
|
+
[-0.442863, 0.238856, 0.864188],
|
|
249
|
+
[-0.295242, 0, 0.955423],
|
|
250
|
+
[-0.309017, 0.5, 0.809017],
|
|
251
|
+
[-0.16246, 0.262866, 0.951056],
|
|
252
|
+
[0, 0, 1],
|
|
253
|
+
[0, 0.850651, 0.525731],
|
|
254
|
+
[-0.147621, 0.716567, 0.681718],
|
|
255
|
+
[0.147621, 0.716567, 0.681718],
|
|
256
|
+
[0, 0.525731, 0.850651],
|
|
257
|
+
[0.309017, 0.5, 0.809017],
|
|
258
|
+
[0.525731, 0, 0.850651],
|
|
259
|
+
[0.295242, 0, 0.955423],
|
|
260
|
+
[0.442863, 0.238856, 0.864188],
|
|
261
|
+
[0.16246, 0.262866, 0.951056],
|
|
262
|
+
[-0.681718, 0.147621, 0.716567],
|
|
263
|
+
[-0.809017, 0.309017, 0.5],
|
|
264
|
+
[-0.587785, 0.425325, 0.688191],
|
|
265
|
+
[-0.850651, 0.525731, 0],
|
|
266
|
+
[-0.864188, 0.442863, 0.238856],
|
|
267
|
+
[-0.716567, 0.681718, 0.147621],
|
|
268
|
+
[-0.688191, 0.587785, 0.425325],
|
|
269
|
+
[-0.5, 0.809017, 0.309017],
|
|
270
|
+
[-0.238856, 0.864188, 0.442863],
|
|
271
|
+
[-0.425325, 0.688191, 0.587785],
|
|
272
|
+
[-0.716567, 0.681718, -0.147621],
|
|
273
|
+
[-0.5, 0.809017, -0.309017],
|
|
274
|
+
[-0.525731, 0.850651, 0],
|
|
275
|
+
[0, 0.850651, -0.525731],
|
|
276
|
+
[-0.238856, 0.864188, -0.442863],
|
|
277
|
+
[0, 0.955423, -0.295242],
|
|
278
|
+
[-0.262866, 0.951056, -0.16246],
|
|
279
|
+
[0, 1, 0],
|
|
280
|
+
[0, 0.955423, 0.295242],
|
|
281
|
+
[-0.262866, 0.951056, 0.16246],
|
|
282
|
+
[0.238856, 0.864188, 0.442863],
|
|
283
|
+
[0.262866, 0.951056, 0.16246],
|
|
284
|
+
[0.5, 0.809017, 0.309017],
|
|
285
|
+
[0.238856, 0.864188, -0.442863],
|
|
286
|
+
[0.262866, 0.951056, -0.16246],
|
|
287
|
+
[0.5, 0.809017, -0.309017],
|
|
288
|
+
[0.850651, 0.525731, 0],
|
|
289
|
+
[0.716567, 0.681718, 0.147621],
|
|
290
|
+
[0.716567, 0.681718, -0.147621],
|
|
291
|
+
[0.525731, 0.850651, 0],
|
|
292
|
+
[0.425325, 0.688191, 0.587785],
|
|
293
|
+
[0.864188, 0.442863, 0.238856],
|
|
294
|
+
[0.688191, 0.587785, 0.425325],
|
|
295
|
+
[0.809017, 0.309017, 0.5],
|
|
296
|
+
[0.681718, 0.147621, 0.716567],
|
|
297
|
+
[0.587785, 0.425325, 0.688191],
|
|
298
|
+
[0.955423, 0.295242, 0],
|
|
299
|
+
[1, 0, 0],
|
|
300
|
+
[0.951056, 0.16246, 0.262866],
|
|
301
|
+
[0.850651, -0.525731, 0],
|
|
302
|
+
[0.955423, -0.295242, 0],
|
|
303
|
+
[0.864188, -0.442863, 0.238856],
|
|
304
|
+
[0.951056, -0.16246, 0.262866],
|
|
305
|
+
[0.809017, -0.309017, 0.5],
|
|
306
|
+
[0.681718, -0.147621, 0.716567],
|
|
307
|
+
[0.850651, 0, 0.525731],
|
|
308
|
+
[0.864188, 0.442863, -0.238856],
|
|
309
|
+
[0.809017, 0.309017, -0.5],
|
|
310
|
+
[0.951056, 0.16246, -0.262866],
|
|
311
|
+
[0.525731, 0, -0.850651],
|
|
312
|
+
[0.681718, 0.147621, -0.716567],
|
|
313
|
+
[0.681718, -0.147621, -0.716567],
|
|
314
|
+
[0.850651, 0, -0.525731],
|
|
315
|
+
[0.809017, -0.309017, -0.5],
|
|
316
|
+
[0.864188, -0.442863, -0.238856],
|
|
317
|
+
[0.951056, -0.16246, -0.262866],
|
|
318
|
+
[0.147621, 0.716567, -0.681718],
|
|
319
|
+
[0.309017, 0.5, -0.809017],
|
|
320
|
+
[0.425325, 0.688191, -0.587785],
|
|
321
|
+
[0.442863, 0.238856, -0.864188],
|
|
322
|
+
[0.587785, 0.425325, -0.688191],
|
|
323
|
+
[0.688191, 0.587785, -0.425325],
|
|
324
|
+
[-0.147621, 0.716567, -0.681718],
|
|
325
|
+
[-0.309017, 0.5, -0.809017],
|
|
326
|
+
[0, 0.525731, -0.850651],
|
|
327
|
+
[-0.525731, 0, -0.850651],
|
|
328
|
+
[-0.442863, 0.238856, -0.864188],
|
|
329
|
+
[-0.295242, 0, -0.955423],
|
|
330
|
+
[-0.16246, 0.262866, -0.951056],
|
|
331
|
+
[0, 0, -1],
|
|
332
|
+
[0.295242, 0, -0.955423],
|
|
333
|
+
[0.16246, 0.262866, -0.951056],
|
|
334
|
+
[-0.442863, -0.238856, -0.864188],
|
|
335
|
+
[-0.309017, -0.5, -0.809017],
|
|
336
|
+
[-0.16246, -0.262866, -0.951056],
|
|
337
|
+
[0, -0.850651, -0.525731],
|
|
338
|
+
[-0.147621, -0.716567, -0.681718],
|
|
339
|
+
[0.147621, -0.716567, -0.681718],
|
|
340
|
+
[0, -0.525731, -0.850651],
|
|
341
|
+
[0.309017, -0.5, -0.809017],
|
|
342
|
+
[0.442863, -0.238856, -0.864188],
|
|
343
|
+
[0.16246, -0.262866, -0.951056],
|
|
344
|
+
[0.238856, -0.864188, -0.442863],
|
|
345
|
+
[0.5, -0.809017, -0.309017],
|
|
346
|
+
[0.425325, -0.688191, -0.587785],
|
|
347
|
+
[0.716567, -0.681718, -0.147621],
|
|
348
|
+
[0.688191, -0.587785, -0.425325],
|
|
349
|
+
[0.587785, -0.425325, -0.688191],
|
|
350
|
+
[0, -0.955423, -0.295242],
|
|
351
|
+
[0, -1, 0],
|
|
352
|
+
[0.262866, -0.951056, -0.16246],
|
|
353
|
+
[0, -0.850651, 0.525731],
|
|
354
|
+
[0, -0.955423, 0.295242],
|
|
355
|
+
[0.238856, -0.864188, 0.442863],
|
|
356
|
+
[0.262866, -0.951056, 0.16246],
|
|
357
|
+
[0.5, -0.809017, 0.309017],
|
|
358
|
+
[0.716567, -0.681718, 0.147621],
|
|
359
|
+
[0.525731, -0.850651, 0],
|
|
360
|
+
[-0.238856, -0.864188, -0.442863],
|
|
361
|
+
[-0.5, -0.809017, -0.309017],
|
|
362
|
+
[-0.262866, -0.951056, -0.16246],
|
|
363
|
+
[-0.850651, -0.525731, 0],
|
|
364
|
+
[-0.716567, -0.681718, -0.147621],
|
|
365
|
+
[-0.716567, -0.681718, 0.147621],
|
|
366
|
+
[-0.525731, -0.850651, 0],
|
|
367
|
+
[-0.5, -0.809017, 0.309017],
|
|
368
|
+
[-0.238856, -0.864188, 0.442863],
|
|
369
|
+
[-0.262866, -0.951056, 0.16246],
|
|
370
|
+
[-0.864188, -0.442863, 0.238856],
|
|
371
|
+
[-0.809017, -0.309017, 0.5],
|
|
372
|
+
[-0.688191, -0.587785, 0.425325],
|
|
373
|
+
[-0.681718, -0.147621, 0.716567],
|
|
374
|
+
[-0.442863, -0.238856, 0.864188],
|
|
375
|
+
[-0.587785, -0.425325, 0.688191],
|
|
376
|
+
[-0.309017, -0.5, 0.809017],
|
|
377
|
+
[-0.147621, -0.716567, 0.681718],
|
|
378
|
+
[-0.425325, -0.688191, 0.587785],
|
|
379
|
+
[-0.16246, -0.262866, 0.951056],
|
|
380
|
+
[0.442863, -0.238856, 0.864188],
|
|
381
|
+
[0.16246, -0.262866, 0.951056],
|
|
382
|
+
[0.309017, -0.5, 0.809017],
|
|
383
|
+
[0.147621, -0.716567, 0.681718],
|
|
384
|
+
[0, -0.525731, 0.850651],
|
|
385
|
+
[0.425325, -0.688191, 0.587785],
|
|
386
|
+
[0.587785, -0.425325, 0.688191],
|
|
387
|
+
[0.688191, -0.587785, 0.425325],
|
|
388
|
+
[-0.955423, 0.295242, 0],
|
|
389
|
+
[-0.951056, 0.16246, 0.262866],
|
|
390
|
+
[-1, 0, 0],
|
|
391
|
+
[-0.850651, 0, 0.525731],
|
|
392
|
+
[-0.955423, -0.295242, 0],
|
|
393
|
+
[-0.951056, -0.16246, 0.262866],
|
|
394
|
+
[-0.864188, 0.442863, -0.238856],
|
|
395
|
+
[-0.951056, 0.16246, -0.262866],
|
|
396
|
+
[-0.809017, 0.309017, -0.5],
|
|
397
|
+
[-0.864188, -0.442863, -0.238856],
|
|
398
|
+
[-0.951056, -0.16246, -0.262866],
|
|
399
|
+
[-0.809017, -0.309017, -0.5],
|
|
400
|
+
[-0.681718, 0.147621, -0.716567],
|
|
401
|
+
[-0.681718, -0.147621, -0.716567],
|
|
402
|
+
[-0.850651, 0, -0.525731],
|
|
403
|
+
[-0.688191, 0.587785, -0.425325],
|
|
404
|
+
[-0.587785, 0.425325, -0.688191],
|
|
405
|
+
[-0.425325, 0.688191, -0.587785],
|
|
406
|
+
[-0.425325, -0.688191, -0.587785],
|
|
407
|
+
[-0.587785, -0.425325, -0.688191],
|
|
408
|
+
[-0.688191, -0.587785, -0.425325]
|
|
409
|
+
];
|
|
410
|
+
var STATE_SIZE = 624;
|
|
411
|
+
var MIDDLE_WORD = 397;
|
|
412
|
+
var MATRIX_A = 2567483615;
|
|
413
|
+
var UPPER_MASK = 2147483648;
|
|
414
|
+
var LOWER_MASK = 2147483647;
|
|
415
|
+
var TWO_POW_32 = 4294967296;
|
|
416
|
+
var MersenneTwister19937 = class {
|
|
417
|
+
constructor(seed = 5489) {
|
|
418
|
+
this.state = new Uint32Array(STATE_SIZE);
|
|
419
|
+
this.index = STATE_SIZE;
|
|
420
|
+
this.seed(seed);
|
|
421
|
+
}
|
|
422
|
+
seed(seed) {
|
|
423
|
+
this.state[0] = seed >>> 0;
|
|
424
|
+
for (let i = 1; i < STATE_SIZE; i++) {
|
|
425
|
+
const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
|
|
426
|
+
const next = Math.imul(prev >>> 0, 1812433253) + i;
|
|
427
|
+
this.state[i] = next >>> 0;
|
|
428
|
+
}
|
|
429
|
+
this.index = STATE_SIZE;
|
|
430
|
+
}
|
|
431
|
+
nextUint32() {
|
|
432
|
+
if (this.index >= STATE_SIZE) {
|
|
433
|
+
this.twist();
|
|
434
|
+
}
|
|
435
|
+
let y = this.state[this.index++];
|
|
436
|
+
y ^= y >>> 11;
|
|
437
|
+
y ^= y << 7 & 2636928640;
|
|
438
|
+
y ^= y << 15 & 4022730752;
|
|
439
|
+
y ^= y >>> 18;
|
|
440
|
+
return y >>> 0;
|
|
441
|
+
}
|
|
442
|
+
twist() {
|
|
443
|
+
for (let i = 0; i < STATE_SIZE; i++) {
|
|
444
|
+
const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
|
|
445
|
+
let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
|
|
446
|
+
if ((y & 1) !== 0) {
|
|
447
|
+
next ^= MATRIX_A;
|
|
448
|
+
}
|
|
449
|
+
this.state[i] = next >>> 0;
|
|
450
|
+
}
|
|
451
|
+
this.index = 0;
|
|
452
|
+
}
|
|
453
|
+
getState() {
|
|
454
|
+
return {
|
|
455
|
+
index: this.index,
|
|
456
|
+
state: Array.from(this.state)
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
setState(snapshot) {
|
|
460
|
+
if (snapshot.state.length !== STATE_SIZE) {
|
|
461
|
+
throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
|
|
462
|
+
}
|
|
463
|
+
this.index = snapshot.index;
|
|
464
|
+
this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
var RandomGenerator = class {
|
|
468
|
+
constructor(options = {}) {
|
|
469
|
+
this.mt = new MersenneTwister19937(options.seed);
|
|
470
|
+
}
|
|
471
|
+
seed(seed) {
|
|
472
|
+
this.mt.seed(seed);
|
|
473
|
+
}
|
|
474
|
+
/** Uniform float in [0, 1). */
|
|
475
|
+
frandom() {
|
|
476
|
+
return this.mt.nextUint32() / TWO_POW_32;
|
|
477
|
+
}
|
|
478
|
+
/** Uniform float in [min, max). */
|
|
479
|
+
frandomRange(minInclusive, maxExclusive) {
|
|
480
|
+
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
481
|
+
}
|
|
482
|
+
/** Uniform float in [0, max). */
|
|
483
|
+
frandomMax(maxExclusive) {
|
|
484
|
+
return this.frandomRange(0, maxExclusive);
|
|
485
|
+
}
|
|
486
|
+
/** Uniform float in [-1, 1). */
|
|
487
|
+
crandom() {
|
|
488
|
+
return this.frandomRange(-1, 1);
|
|
489
|
+
}
|
|
490
|
+
/** Uniform float in (-1, 1). */
|
|
491
|
+
crandomOpen() {
|
|
492
|
+
const epsilon = Number.EPSILON;
|
|
493
|
+
return this.frandomRange(-1 + epsilon, 1);
|
|
494
|
+
}
|
|
495
|
+
/** Raw uint32 sample. */
|
|
496
|
+
irandomUint32() {
|
|
497
|
+
return this.mt.nextUint32();
|
|
498
|
+
}
|
|
499
|
+
/** Uniform integer in [min, max). */
|
|
500
|
+
irandomRange(minInclusive, maxExclusive) {
|
|
501
|
+
if (maxExclusive - minInclusive <= 1) {
|
|
502
|
+
return minInclusive;
|
|
503
|
+
}
|
|
504
|
+
const span = maxExclusive - minInclusive;
|
|
505
|
+
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
506
|
+
let sample;
|
|
507
|
+
do {
|
|
508
|
+
sample = this.mt.nextUint32();
|
|
509
|
+
} while (sample >= limit);
|
|
510
|
+
return minInclusive + sample % span;
|
|
511
|
+
}
|
|
512
|
+
/** Uniform integer in [0, max). */
|
|
513
|
+
irandom(maxExclusive) {
|
|
514
|
+
if (maxExclusive <= 0) {
|
|
515
|
+
return 0;
|
|
516
|
+
}
|
|
517
|
+
return this.irandomRange(0, maxExclusive);
|
|
518
|
+
}
|
|
519
|
+
/** Uniform time in milliseconds [min, max). */
|
|
520
|
+
randomTimeRange(minMs, maxMs) {
|
|
521
|
+
if (maxMs <= minMs) {
|
|
522
|
+
return minMs;
|
|
523
|
+
}
|
|
524
|
+
return this.irandomRange(minMs, maxMs);
|
|
525
|
+
}
|
|
526
|
+
/** Uniform time in milliseconds [0, max). */
|
|
527
|
+
randomTime(maxMs) {
|
|
528
|
+
return this.irandom(maxMs);
|
|
529
|
+
}
|
|
530
|
+
randomIndex(container) {
|
|
531
|
+
return this.irandom(container.length);
|
|
532
|
+
}
|
|
533
|
+
getState() {
|
|
534
|
+
return { mt: this.mt.getState() };
|
|
535
|
+
}
|
|
536
|
+
setState(snapshot) {
|
|
537
|
+
this.mt.setState(snapshot.mt);
|
|
538
|
+
}
|
|
539
|
+
};
|
|
243
540
|
function createRandomGenerator(options) {
|
|
244
541
|
return new RandomGenerator(options);
|
|
245
542
|
}
|
|
543
|
+
var CONTENTS_SOLID = 1 << 0;
|
|
544
|
+
var CONTENTS_WINDOW = 1 << 1;
|
|
545
|
+
var CONTENTS_AUX = 1 << 2;
|
|
546
|
+
var CONTENTS_LAVA = 1 << 3;
|
|
547
|
+
var CONTENTS_SLIME = 1 << 4;
|
|
548
|
+
var CONTENTS_WATER = 1 << 5;
|
|
549
|
+
var CONTENTS_MIST = 1 << 6;
|
|
550
|
+
var CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
551
|
+
var CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
552
|
+
var CONTENTS_AREAPORTAL = 1 << 15;
|
|
553
|
+
var CONTENTS_PLAYERCLIP = 1 << 16;
|
|
554
|
+
var CONTENTS_MONSTERCLIP = 1 << 17;
|
|
555
|
+
var CONTENTS_CURRENT_0 = 1 << 18;
|
|
556
|
+
var CONTENTS_CURRENT_90 = 1 << 19;
|
|
557
|
+
var CONTENTS_CURRENT_180 = 1 << 20;
|
|
558
|
+
var CONTENTS_CURRENT_270 = 1 << 21;
|
|
559
|
+
var CONTENTS_CURRENT_UP = 1 << 22;
|
|
560
|
+
var CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
561
|
+
var CONTENTS_ORIGIN = 1 << 24;
|
|
562
|
+
var CONTENTS_MONSTER = 1 << 25;
|
|
563
|
+
var CONTENTS_DEADMONSTER = 1 << 26;
|
|
564
|
+
var CONTENTS_DETAIL = 1 << 27;
|
|
565
|
+
var CONTENTS_TRANSLUCENT = 1 << 28;
|
|
566
|
+
var CONTENTS_LADDER = 1 << 29;
|
|
567
|
+
var CONTENTS_PLAYER = 1 << 30;
|
|
568
|
+
var CONTENTS_PROJECTILE = 1 << 31;
|
|
569
|
+
var SURF_LIGHT = 1 << 0;
|
|
570
|
+
var SURF_SLICK = 1 << 1;
|
|
571
|
+
var SURF_SKY = 1 << 2;
|
|
572
|
+
var SURF_WARP = 1 << 3;
|
|
573
|
+
var SURF_TRANS33 = 1 << 4;
|
|
574
|
+
var SURF_TRANS66 = 1 << 5;
|
|
575
|
+
var SURF_FLOWING = 1 << 6;
|
|
576
|
+
var SURF_NODRAW = 1 << 7;
|
|
577
|
+
var SURF_ALPHATEST = 1 << 25;
|
|
578
|
+
var SURF_N64_UV = 1 << 28;
|
|
579
|
+
var SURF_N64_SCROLL_X = 1 << 29;
|
|
580
|
+
var SURF_N64_SCROLL_Y = 1 << 30;
|
|
581
|
+
var SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
582
|
+
var MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
583
|
+
var MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
584
|
+
var MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
585
|
+
var MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
586
|
+
var MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
587
|
+
var MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
588
|
+
var MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
589
|
+
var MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
590
|
+
var MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
591
|
+
var MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
592
|
+
var MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
593
|
+
var MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
594
|
+
var MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
595
|
+
var MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
596
|
+
var CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
597
|
+
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
598
|
+
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
599
|
+
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
600
|
+
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
601
|
+
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
602
|
+
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
603
|
+
return CvarFlags2;
|
|
604
|
+
})(CvarFlags || {});
|
|
605
|
+
var MAX_CLIENTS = 256;
|
|
606
|
+
var MAX_LIGHTSTYLES = 256;
|
|
607
|
+
var MAX_MODELS = 8192;
|
|
608
|
+
var MAX_SOUNDS = 2048;
|
|
609
|
+
var MAX_IMAGES = 512;
|
|
610
|
+
var MAX_ITEMS = 256;
|
|
611
|
+
var MAX_GENERAL = MAX_CLIENTS * 2;
|
|
612
|
+
var MAX_SHADOW_LIGHTS = 256;
|
|
613
|
+
var MAX_WHEEL_ITEMS = 32;
|
|
614
|
+
var ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
615
|
+
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
616
|
+
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
617
|
+
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
618
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
619
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
620
|
+
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
621
|
+
ConfigStringIndex2[ConfigStringIndex2["HealthBarName"] = 55] = "HealthBarName";
|
|
622
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
623
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
624
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
625
|
+
ConfigStringIndex2[ConfigStringIndex2["Story"] = 54] = "Story";
|
|
626
|
+
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
627
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
628
|
+
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
629
|
+
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
630
|
+
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
631
|
+
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
632
|
+
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
633
|
+
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
634
|
+
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
635
|
+
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
636
|
+
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
637
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
638
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
639
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
640
|
+
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
641
|
+
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
642
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
643
|
+
return ConfigStringIndex2;
|
|
644
|
+
})(ConfigStringIndex || {});
|
|
645
|
+
var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
646
|
+
var replay_exports = {};
|
|
647
|
+
__export(replay_exports, {
|
|
648
|
+
addReplayFrame: () => addReplayFrame,
|
|
649
|
+
createReplaySession: () => createReplaySession,
|
|
650
|
+
deserializeReplay: () => deserializeReplay,
|
|
651
|
+
serializeReplay: () => serializeReplay
|
|
652
|
+
});
|
|
246
653
|
function serializeReplay(session) {
|
|
247
654
|
return JSON.stringify(session, null, 2);
|
|
248
655
|
}
|
|
@@ -271,6 +678,14 @@ function addReplayFrame(session, cmd, serverFrame, startTime) {
|
|
|
271
678
|
timestamp: Date.now() - startTime
|
|
272
679
|
});
|
|
273
680
|
}
|
|
681
|
+
var WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
682
|
+
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
683
|
+
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
684
|
+
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
685
|
+
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
686
|
+
return WaterLevel4;
|
|
687
|
+
})(WaterLevel || {});
|
|
688
|
+
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
274
689
|
function applyPmoveFriction(params) {
|
|
275
690
|
const {
|
|
276
691
|
velocity,
|
|
@@ -369,6 +784,120 @@ function buildWaterWish(params) {
|
|
|
369
784
|
wishspeed
|
|
370
785
|
};
|
|
371
786
|
}
|
|
787
|
+
var ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
788
|
+
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
789
|
+
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
790
|
+
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
791
|
+
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
792
|
+
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
793
|
+
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
794
|
+
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
795
|
+
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
796
|
+
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
797
|
+
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
798
|
+
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
799
|
+
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
800
|
+
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
801
|
+
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
802
|
+
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
803
|
+
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
804
|
+
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
805
|
+
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
806
|
+
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
807
|
+
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
808
|
+
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
809
|
+
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
810
|
+
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
811
|
+
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
812
|
+
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
813
|
+
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
814
|
+
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
815
|
+
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
816
|
+
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
817
|
+
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
818
|
+
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
819
|
+
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
820
|
+
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
821
|
+
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
822
|
+
return ServerCommand22;
|
|
823
|
+
})(ServerCommand || {});
|
|
824
|
+
var TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
825
|
+
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
826
|
+
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
827
|
+
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
828
|
+
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
829
|
+
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
830
|
+
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
831
|
+
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
832
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
833
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
834
|
+
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
835
|
+
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
836
|
+
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
837
|
+
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
838
|
+
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
839
|
+
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
840
|
+
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
841
|
+
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
842
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
843
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
844
|
+
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
845
|
+
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
846
|
+
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
847
|
+
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
848
|
+
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
849
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
850
|
+
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
851
|
+
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
852
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
853
|
+
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
854
|
+
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
855
|
+
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
856
|
+
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
857
|
+
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
858
|
+
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
859
|
+
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
860
|
+
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
861
|
+
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
862
|
+
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
863
|
+
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
864
|
+
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
865
|
+
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
866
|
+
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
867
|
+
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
868
|
+
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
869
|
+
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
870
|
+
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
871
|
+
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
872
|
+
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
873
|
+
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
874
|
+
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
875
|
+
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
876
|
+
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
877
|
+
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
878
|
+
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
879
|
+
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
880
|
+
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
881
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
882
|
+
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
883
|
+
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
884
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
885
|
+
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
886
|
+
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
887
|
+
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
888
|
+
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
889
|
+
return TempEntity2;
|
|
890
|
+
})(TempEntity || {});
|
|
891
|
+
var MZ_BLASTER = 0;
|
|
892
|
+
var MZ_MACHINEGUN = 1;
|
|
893
|
+
var MZ_SHOTGUN = 2;
|
|
894
|
+
var MZ_CHAINGUN1 = 3;
|
|
895
|
+
var MZ_RAILGUN = 6;
|
|
896
|
+
var MZ_ROCKET = 7;
|
|
897
|
+
var MZ_GRENADE = 8;
|
|
898
|
+
var MZ_SSHOTGUN = 11;
|
|
899
|
+
var MZ_BFG = 12;
|
|
900
|
+
var MZ_HYPERBLASTER = 13;
|
|
372
901
|
function toSigned16(val) {
|
|
373
902
|
return val << 16 >> 16;
|
|
374
903
|
}
|
|
@@ -414,6 +943,191 @@ function setCompressedInteger(stats, startIndex, id, count, bitsPerValue) {
|
|
|
414
943
|
const valueToWrite = base & ~mask | count << bitShift & mask;
|
|
415
944
|
writeUint16LE(stats, startIndex, byteOffset, valueToWrite & 65535);
|
|
416
945
|
}
|
|
946
|
+
var PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
947
|
+
PowerupId22["QuadDamage"] = "quad";
|
|
948
|
+
PowerupId22["Invulnerability"] = "invulnerability";
|
|
949
|
+
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
950
|
+
PowerupId22["Rebreather"] = "rebreather";
|
|
951
|
+
PowerupId22["Silencer"] = "silencer";
|
|
952
|
+
PowerupId22["PowerScreen"] = "power_screen";
|
|
953
|
+
PowerupId22["PowerShield"] = "power_shield";
|
|
954
|
+
PowerupId22["QuadFire"] = "quad_fire";
|
|
955
|
+
PowerupId22["Invisibility"] = "invisibility";
|
|
956
|
+
PowerupId22["Bandolier"] = "bandolier";
|
|
957
|
+
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
958
|
+
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
959
|
+
PowerupId22["DoubleDamage"] = "double_damage";
|
|
960
|
+
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
961
|
+
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
962
|
+
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
963
|
+
PowerupId22["Doppelganger"] = "doppelganger";
|
|
964
|
+
PowerupId22["TagToken"] = "tag_token";
|
|
965
|
+
PowerupId22["TechResistance"] = "tech_resistance";
|
|
966
|
+
PowerupId22["TechStrength"] = "tech_strength";
|
|
967
|
+
PowerupId22["TechHaste"] = "tech_haste";
|
|
968
|
+
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
969
|
+
PowerupId22["Flashlight"] = "flashlight";
|
|
970
|
+
PowerupId22["Compass"] = "compass";
|
|
971
|
+
return PowerupId22;
|
|
972
|
+
})(PowerupId || {});
|
|
973
|
+
var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
974
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
975
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
976
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
977
|
+
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
978
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
979
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
980
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
981
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
982
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
983
|
+
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
984
|
+
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
985
|
+
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
986
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
987
|
+
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
988
|
+
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
989
|
+
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
990
|
+
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
991
|
+
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
992
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
993
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
994
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
995
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
996
|
+
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
997
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
998
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
999
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
1000
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
1001
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
1002
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
1003
|
+
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
1004
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
1005
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
1006
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
1007
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
1008
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
1009
|
+
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
1010
|
+
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
1011
|
+
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
1012
|
+
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
1013
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
1014
|
+
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
1015
|
+
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
1016
|
+
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
1017
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
1018
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
1019
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
1020
|
+
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
1021
|
+
return PlayerStat2;
|
|
1022
|
+
})(PlayerStat || {});
|
|
1023
|
+
var AMMO_MAX = 12;
|
|
1024
|
+
var NUM_BITS_FOR_AMMO = 9;
|
|
1025
|
+
var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
1026
|
+
var POWERUP_MAX = 23;
|
|
1027
|
+
var NUM_BITS_FOR_POWERUP = 2;
|
|
1028
|
+
var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
1029
|
+
var POWERUP_STAT_MAP = {
|
|
1030
|
+
[
|
|
1031
|
+
"power_screen"
|
|
1032
|
+
/* PowerScreen */
|
|
1033
|
+
]: 0,
|
|
1034
|
+
[
|
|
1035
|
+
"power_shield"
|
|
1036
|
+
/* PowerShield */
|
|
1037
|
+
]: 1,
|
|
1038
|
+
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
1039
|
+
[
|
|
1040
|
+
"quad"
|
|
1041
|
+
/* QuadDamage */
|
|
1042
|
+
]: 3,
|
|
1043
|
+
[
|
|
1044
|
+
"quad_fire"
|
|
1045
|
+
/* QuadFire */
|
|
1046
|
+
]: 4,
|
|
1047
|
+
[
|
|
1048
|
+
"invulnerability"
|
|
1049
|
+
/* Invulnerability */
|
|
1050
|
+
]: 5,
|
|
1051
|
+
[
|
|
1052
|
+
"invisibility"
|
|
1053
|
+
/* Invisibility */
|
|
1054
|
+
]: 6,
|
|
1055
|
+
[
|
|
1056
|
+
"silencer"
|
|
1057
|
+
/* Silencer */
|
|
1058
|
+
]: 7,
|
|
1059
|
+
[
|
|
1060
|
+
"rebreather"
|
|
1061
|
+
/* Rebreather */
|
|
1062
|
+
]: 8,
|
|
1063
|
+
[
|
|
1064
|
+
"enviro_suit"
|
|
1065
|
+
/* EnviroSuit */
|
|
1066
|
+
]: 9,
|
|
1067
|
+
[
|
|
1068
|
+
"bandolier"
|
|
1069
|
+
/* Bandolier */
|
|
1070
|
+
]: 10,
|
|
1071
|
+
// Placeholder/Map mismatch handling?
|
|
1072
|
+
[
|
|
1073
|
+
"ammo_pack"
|
|
1074
|
+
/* AmmoPack */
|
|
1075
|
+
]: 10,
|
|
1076
|
+
// Original reused indices or had gaps?
|
|
1077
|
+
[
|
|
1078
|
+
"ir_goggles"
|
|
1079
|
+
/* IRGoggles */
|
|
1080
|
+
]: 11,
|
|
1081
|
+
[
|
|
1082
|
+
"double_damage"
|
|
1083
|
+
/* DoubleDamage */
|
|
1084
|
+
]: 12,
|
|
1085
|
+
[
|
|
1086
|
+
"sphere_vengeance"
|
|
1087
|
+
/* SphereVengeance */
|
|
1088
|
+
]: 13,
|
|
1089
|
+
[
|
|
1090
|
+
"sphere_hunter"
|
|
1091
|
+
/* SphereHunter */
|
|
1092
|
+
]: 14,
|
|
1093
|
+
[
|
|
1094
|
+
"sphere_defender"
|
|
1095
|
+
/* SphereDefender */
|
|
1096
|
+
]: 15,
|
|
1097
|
+
[
|
|
1098
|
+
"doppelganger"
|
|
1099
|
+
/* Doppelganger */
|
|
1100
|
+
]: 16,
|
|
1101
|
+
[
|
|
1102
|
+
"flashlight"
|
|
1103
|
+
/* Flashlight */
|
|
1104
|
+
]: 17,
|
|
1105
|
+
[
|
|
1106
|
+
"compass"
|
|
1107
|
+
/* Compass */
|
|
1108
|
+
]: 18,
|
|
1109
|
+
[
|
|
1110
|
+
"tech_resistance"
|
|
1111
|
+
/* TechResistance */
|
|
1112
|
+
]: 19,
|
|
1113
|
+
[
|
|
1114
|
+
"tech_strength"
|
|
1115
|
+
/* TechStrength */
|
|
1116
|
+
]: 20,
|
|
1117
|
+
[
|
|
1118
|
+
"tech_haste"
|
|
1119
|
+
/* TechHaste */
|
|
1120
|
+
]: 21,
|
|
1121
|
+
[
|
|
1122
|
+
"tech_regeneration"
|
|
1123
|
+
/* TechRegeneration */
|
|
1124
|
+
]: 22,
|
|
1125
|
+
// Add missing mappings to avoid runtime lookups failing for new types
|
|
1126
|
+
[
|
|
1127
|
+
"tag_token"
|
|
1128
|
+
/* TagToken */
|
|
1129
|
+
]: -1
|
|
1130
|
+
};
|
|
417
1131
|
function G_SetAmmoStat(stats, ammoId, count) {
|
|
418
1132
|
if (ammoId < 0 || ammoId >= AMMO_MAX) return;
|
|
419
1133
|
let val = count;
|
|
@@ -434,1382 +1148,666 @@ function G_SetPowerupStat(stats, powerupId, val) {
|
|
|
434
1148
|
if (safeVal < 0) safeVal = 0;
|
|
435
1149
|
setCompressedInteger(stats, 41, index, safeVal, NUM_BITS_FOR_POWERUP);
|
|
436
1150
|
}
|
|
437
|
-
var
|
|
438
|
-
|
|
439
|
-
"
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
}
|
|
682
|
-
/** Uniform float in [0, 1). */
|
|
683
|
-
frandom() {
|
|
684
|
-
return this.mt.nextUint32() / TWO_POW_32;
|
|
685
|
-
}
|
|
686
|
-
/** Uniform float in [min, max). */
|
|
687
|
-
frandomRange(minInclusive, maxExclusive) {
|
|
688
|
-
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
689
|
-
}
|
|
690
|
-
/** Uniform float in [0, max). */
|
|
691
|
-
frandomMax(maxExclusive) {
|
|
692
|
-
return this.frandomRange(0, maxExclusive);
|
|
693
|
-
}
|
|
694
|
-
/** Uniform float in [-1, 1). */
|
|
695
|
-
crandom() {
|
|
696
|
-
return this.frandomRange(-1, 1);
|
|
697
|
-
}
|
|
698
|
-
/** Uniform float in (-1, 1). */
|
|
699
|
-
crandomOpen() {
|
|
700
|
-
const epsilon = Number.EPSILON;
|
|
701
|
-
return this.frandomRange(-1 + epsilon, 1);
|
|
702
|
-
}
|
|
703
|
-
/** Raw uint32 sample. */
|
|
704
|
-
irandomUint32() {
|
|
705
|
-
return this.mt.nextUint32();
|
|
706
|
-
}
|
|
707
|
-
/** Uniform integer in [min, max). */
|
|
708
|
-
irandomRange(minInclusive, maxExclusive) {
|
|
709
|
-
if (maxExclusive - minInclusive <= 1) {
|
|
710
|
-
return minInclusive;
|
|
711
|
-
}
|
|
712
|
-
const span = maxExclusive - minInclusive;
|
|
713
|
-
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
714
|
-
let sample;
|
|
715
|
-
do {
|
|
716
|
-
sample = this.mt.nextUint32();
|
|
717
|
-
} while (sample >= limit);
|
|
718
|
-
return minInclusive + sample % span;
|
|
719
|
-
}
|
|
720
|
-
/** Uniform integer in [0, max). */
|
|
721
|
-
irandom(maxExclusive) {
|
|
722
|
-
if (maxExclusive <= 0) {
|
|
723
|
-
return 0;
|
|
724
|
-
}
|
|
725
|
-
return this.irandomRange(0, maxExclusive);
|
|
726
|
-
}
|
|
727
|
-
/** Uniform time in milliseconds [min, max). */
|
|
728
|
-
randomTimeRange(minMs, maxMs) {
|
|
729
|
-
if (maxMs <= minMs) {
|
|
730
|
-
return minMs;
|
|
731
|
-
}
|
|
732
|
-
return this.irandomRange(minMs, maxMs);
|
|
733
|
-
}
|
|
734
|
-
/** Uniform time in milliseconds [0, max). */
|
|
735
|
-
randomTime(maxMs) {
|
|
736
|
-
return this.irandom(maxMs);
|
|
737
|
-
}
|
|
738
|
-
randomIndex(container) {
|
|
739
|
-
return this.irandom(container.length);
|
|
740
|
-
}
|
|
741
|
-
getState() {
|
|
742
|
-
return { mt: this.mt.getState() };
|
|
743
|
-
}
|
|
744
|
-
setState(snapshot) {
|
|
745
|
-
this.mt.setState(snapshot.mt);
|
|
746
|
-
}
|
|
747
|
-
};
|
|
748
|
-
CONTENTS_SOLID = 1 << 0;
|
|
749
|
-
CONTENTS_WINDOW = 1 << 1;
|
|
750
|
-
CONTENTS_AUX = 1 << 2;
|
|
751
|
-
CONTENTS_LAVA = 1 << 3;
|
|
752
|
-
CONTENTS_SLIME = 1 << 4;
|
|
753
|
-
CONTENTS_WATER = 1 << 5;
|
|
754
|
-
CONTENTS_MIST = 1 << 6;
|
|
755
|
-
CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
756
|
-
CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
757
|
-
CONTENTS_AREAPORTAL = 1 << 15;
|
|
758
|
-
CONTENTS_PLAYERCLIP = 1 << 16;
|
|
759
|
-
CONTENTS_MONSTERCLIP = 1 << 17;
|
|
760
|
-
CONTENTS_CURRENT_0 = 1 << 18;
|
|
761
|
-
CONTENTS_CURRENT_90 = 1 << 19;
|
|
762
|
-
CONTENTS_CURRENT_180 = 1 << 20;
|
|
763
|
-
CONTENTS_CURRENT_270 = 1 << 21;
|
|
764
|
-
CONTENTS_CURRENT_UP = 1 << 22;
|
|
765
|
-
CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
766
|
-
CONTENTS_ORIGIN = 1 << 24;
|
|
767
|
-
CONTENTS_MONSTER = 1 << 25;
|
|
768
|
-
CONTENTS_DEADMONSTER = 1 << 26;
|
|
769
|
-
CONTENTS_DETAIL = 1 << 27;
|
|
770
|
-
CONTENTS_TRANSLUCENT = 1 << 28;
|
|
771
|
-
CONTENTS_LADDER = 1 << 29;
|
|
772
|
-
CONTENTS_PLAYER = 1 << 30;
|
|
773
|
-
CONTENTS_PROJECTILE = 1 << 31;
|
|
774
|
-
SURF_LIGHT = 1 << 0;
|
|
775
|
-
SURF_SLICK = 1 << 1;
|
|
776
|
-
SURF_SKY = 1 << 2;
|
|
777
|
-
SURF_WARP = 1 << 3;
|
|
778
|
-
SURF_TRANS33 = 1 << 4;
|
|
779
|
-
SURF_TRANS66 = 1 << 5;
|
|
780
|
-
SURF_FLOWING = 1 << 6;
|
|
781
|
-
SURF_NODRAW = 1 << 7;
|
|
782
|
-
SURF_ALPHATEST = 1 << 25;
|
|
783
|
-
SURF_N64_UV = 1 << 28;
|
|
784
|
-
SURF_N64_SCROLL_X = 1 << 29;
|
|
785
|
-
SURF_N64_SCROLL_Y = 1 << 30;
|
|
786
|
-
SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
787
|
-
MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
788
|
-
MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
789
|
-
MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
790
|
-
MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
791
|
-
MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
792
|
-
MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
793
|
-
MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
794
|
-
MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
795
|
-
MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
796
|
-
MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
797
|
-
MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
798
|
-
MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
799
|
-
MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
800
|
-
MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
801
|
-
CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
802
|
-
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
803
|
-
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
804
|
-
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
805
|
-
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
806
|
-
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
807
|
-
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
808
|
-
return CvarFlags2;
|
|
809
|
-
})(CvarFlags || {});
|
|
810
|
-
MAX_CLIENTS = 256;
|
|
811
|
-
MAX_LIGHTSTYLES = 256;
|
|
812
|
-
MAX_MODELS = 8192;
|
|
813
|
-
MAX_SOUNDS = 2048;
|
|
814
|
-
MAX_IMAGES = 512;
|
|
815
|
-
MAX_ITEMS = 256;
|
|
816
|
-
MAX_GENERAL = MAX_CLIENTS * 2;
|
|
817
|
-
MAX_SHADOW_LIGHTS = 256;
|
|
818
|
-
MAX_WHEEL_ITEMS = 32;
|
|
819
|
-
ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
820
|
-
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
821
|
-
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
822
|
-
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
823
|
-
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
824
|
-
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
825
|
-
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
826
|
-
ConfigStringIndex2[ConfigStringIndex2["HealthBarName"] = 55] = "HealthBarName";
|
|
827
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
828
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
829
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
830
|
-
ConfigStringIndex2[ConfigStringIndex2["Story"] = 54] = "Story";
|
|
831
|
-
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
832
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
833
|
-
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
834
|
-
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
835
|
-
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
836
|
-
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
837
|
-
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
838
|
-
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
839
|
-
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
840
|
-
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
841
|
-
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
842
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
843
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
844
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
845
|
-
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
846
|
-
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
847
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
848
|
-
return ConfigStringIndex2;
|
|
849
|
-
})(ConfigStringIndex || {});
|
|
850
|
-
MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
851
|
-
replay_exports = {};
|
|
852
|
-
__export2(replay_exports, {
|
|
853
|
-
addReplayFrame: () => addReplayFrame,
|
|
854
|
-
createReplaySession: () => createReplaySession,
|
|
855
|
-
deserializeReplay: () => deserializeReplay,
|
|
856
|
-
serializeReplay: () => serializeReplay
|
|
857
|
-
});
|
|
858
|
-
WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
859
|
-
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
860
|
-
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
861
|
-
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
862
|
-
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
863
|
-
return WaterLevel4;
|
|
864
|
-
})(WaterLevel || {});
|
|
865
|
-
WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
866
|
-
ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
867
|
-
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
868
|
-
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
869
|
-
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
870
|
-
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
871
|
-
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
872
|
-
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
873
|
-
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
874
|
-
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
875
|
-
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
876
|
-
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
877
|
-
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
878
|
-
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
879
|
-
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
880
|
-
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
881
|
-
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
882
|
-
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
883
|
-
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
884
|
-
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
885
|
-
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
886
|
-
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
887
|
-
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
888
|
-
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
889
|
-
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
890
|
-
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
891
|
-
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
892
|
-
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
893
|
-
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
894
|
-
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
895
|
-
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
896
|
-
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
897
|
-
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
898
|
-
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
899
|
-
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
900
|
-
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
901
|
-
return ServerCommand22;
|
|
902
|
-
})(ServerCommand || {});
|
|
903
|
-
TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
904
|
-
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
905
|
-
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
906
|
-
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
907
|
-
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
908
|
-
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
909
|
-
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
910
|
-
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
911
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
912
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
913
|
-
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
914
|
-
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
915
|
-
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
916
|
-
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
917
|
-
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
918
|
-
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
919
|
-
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
920
|
-
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
921
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
922
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
923
|
-
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
924
|
-
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
925
|
-
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
926
|
-
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
927
|
-
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
928
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
929
|
-
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
930
|
-
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
931
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
932
|
-
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
933
|
-
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
934
|
-
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
935
|
-
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
936
|
-
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
937
|
-
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
938
|
-
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
939
|
-
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
940
|
-
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
941
|
-
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
942
|
-
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
943
|
-
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
944
|
-
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
945
|
-
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
946
|
-
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
947
|
-
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
948
|
-
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
949
|
-
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
950
|
-
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
951
|
-
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
952
|
-
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
953
|
-
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
954
|
-
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
955
|
-
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
956
|
-
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
957
|
-
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
958
|
-
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
959
|
-
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
960
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
961
|
-
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
962
|
-
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
963
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
964
|
-
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
965
|
-
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
966
|
-
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
967
|
-
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
968
|
-
return TempEntity2;
|
|
969
|
-
})(TempEntity || {});
|
|
970
|
-
MZ_BLASTER = 0;
|
|
971
|
-
MZ_MACHINEGUN = 1;
|
|
972
|
-
MZ_SHOTGUN = 2;
|
|
973
|
-
MZ_CHAINGUN1 = 3;
|
|
974
|
-
MZ_RAILGUN = 6;
|
|
975
|
-
MZ_ROCKET = 7;
|
|
976
|
-
MZ_GRENADE = 8;
|
|
977
|
-
MZ_SSHOTGUN = 11;
|
|
978
|
-
MZ_BFG = 12;
|
|
979
|
-
MZ_HYPERBLASTER = 13;
|
|
980
|
-
PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
981
|
-
PowerupId22["QuadDamage"] = "quad";
|
|
982
|
-
PowerupId22["Invulnerability"] = "invulnerability";
|
|
983
|
-
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
984
|
-
PowerupId22["Rebreather"] = "rebreather";
|
|
985
|
-
PowerupId22["Silencer"] = "silencer";
|
|
986
|
-
PowerupId22["PowerScreen"] = "power_screen";
|
|
987
|
-
PowerupId22["PowerShield"] = "power_shield";
|
|
988
|
-
PowerupId22["QuadFire"] = "quad_fire";
|
|
989
|
-
PowerupId22["Invisibility"] = "invisibility";
|
|
990
|
-
PowerupId22["Bandolier"] = "bandolier";
|
|
991
|
-
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
992
|
-
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
993
|
-
PowerupId22["DoubleDamage"] = "double_damage";
|
|
994
|
-
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
995
|
-
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
996
|
-
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
997
|
-
PowerupId22["Doppelganger"] = "doppelganger";
|
|
998
|
-
PowerupId22["TagToken"] = "tag_token";
|
|
999
|
-
PowerupId22["TechResistance"] = "tech_resistance";
|
|
1000
|
-
PowerupId22["TechStrength"] = "tech_strength";
|
|
1001
|
-
PowerupId22["TechHaste"] = "tech_haste";
|
|
1002
|
-
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
1003
|
-
PowerupId22["Flashlight"] = "flashlight";
|
|
1004
|
-
PowerupId22["Compass"] = "compass";
|
|
1005
|
-
return PowerupId22;
|
|
1006
|
-
})(PowerupId || {});
|
|
1007
|
-
PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
1008
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
1009
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
1010
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
1011
|
-
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
1012
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
1013
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
1014
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
1015
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
1016
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
1017
|
-
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
1018
|
-
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
1019
|
-
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
1020
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
1021
|
-
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
1022
|
-
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
1023
|
-
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
1024
|
-
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
1025
|
-
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
1026
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
1027
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
1028
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
1029
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
1030
|
-
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
1031
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
1032
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
1033
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
1034
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
1035
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
1036
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
1037
|
-
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
1038
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
1039
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
1040
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
1041
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
1042
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
1043
|
-
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
1044
|
-
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
1045
|
-
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
1046
|
-
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
1047
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
1048
|
-
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
1049
|
-
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
1050
|
-
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
1051
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
1052
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
1053
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
1054
|
-
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
1055
|
-
return PlayerStat2;
|
|
1056
|
-
})(PlayerStat || {});
|
|
1057
|
-
AMMO_MAX = 12;
|
|
1058
|
-
NUM_BITS_FOR_AMMO = 9;
|
|
1059
|
-
NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
1060
|
-
POWERUP_MAX = 23;
|
|
1061
|
-
NUM_BITS_FOR_POWERUP = 2;
|
|
1062
|
-
NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
1063
|
-
POWERUP_STAT_MAP = {
|
|
1064
|
-
[
|
|
1065
|
-
"power_screen"
|
|
1066
|
-
/* PowerScreen */
|
|
1067
|
-
]: 0,
|
|
1068
|
-
[
|
|
1069
|
-
"power_shield"
|
|
1070
|
-
/* PowerShield */
|
|
1071
|
-
]: 1,
|
|
1072
|
-
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
1073
|
-
[
|
|
1074
|
-
"quad"
|
|
1075
|
-
/* QuadDamage */
|
|
1076
|
-
]: 3,
|
|
1077
|
-
[
|
|
1078
|
-
"quad_fire"
|
|
1079
|
-
/* QuadFire */
|
|
1080
|
-
]: 4,
|
|
1081
|
-
[
|
|
1082
|
-
"invulnerability"
|
|
1083
|
-
/* Invulnerability */
|
|
1084
|
-
]: 5,
|
|
1085
|
-
[
|
|
1086
|
-
"invisibility"
|
|
1087
|
-
/* Invisibility */
|
|
1088
|
-
]: 6,
|
|
1089
|
-
[
|
|
1090
|
-
"silencer"
|
|
1091
|
-
/* Silencer */
|
|
1092
|
-
]: 7,
|
|
1093
|
-
[
|
|
1094
|
-
"rebreather"
|
|
1095
|
-
/* Rebreather */
|
|
1096
|
-
]: 8,
|
|
1097
|
-
[
|
|
1098
|
-
"enviro_suit"
|
|
1099
|
-
/* EnviroSuit */
|
|
1100
|
-
]: 9,
|
|
1101
|
-
[
|
|
1102
|
-
"bandolier"
|
|
1103
|
-
/* Bandolier */
|
|
1104
|
-
]: 10,
|
|
1105
|
-
// Placeholder/Map mismatch handling?
|
|
1106
|
-
[
|
|
1107
|
-
"ammo_pack"
|
|
1108
|
-
/* AmmoPack */
|
|
1109
|
-
]: 10,
|
|
1110
|
-
// Original reused indices or had gaps?
|
|
1111
|
-
[
|
|
1112
|
-
"ir_goggles"
|
|
1113
|
-
/* IRGoggles */
|
|
1114
|
-
]: 11,
|
|
1115
|
-
[
|
|
1116
|
-
"double_damage"
|
|
1117
|
-
/* DoubleDamage */
|
|
1118
|
-
]: 12,
|
|
1119
|
-
[
|
|
1120
|
-
"sphere_vengeance"
|
|
1121
|
-
/* SphereVengeance */
|
|
1122
|
-
]: 13,
|
|
1123
|
-
[
|
|
1124
|
-
"sphere_hunter"
|
|
1125
|
-
/* SphereHunter */
|
|
1126
|
-
]: 14,
|
|
1127
|
-
[
|
|
1128
|
-
"sphere_defender"
|
|
1129
|
-
/* SphereDefender */
|
|
1130
|
-
]: 15,
|
|
1131
|
-
[
|
|
1132
|
-
"doppelganger"
|
|
1133
|
-
/* Doppelganger */
|
|
1134
|
-
]: 16,
|
|
1135
|
-
[
|
|
1136
|
-
"flashlight"
|
|
1137
|
-
/* Flashlight */
|
|
1138
|
-
]: 17,
|
|
1139
|
-
[
|
|
1140
|
-
"compass"
|
|
1141
|
-
/* Compass */
|
|
1142
|
-
]: 18,
|
|
1143
|
-
[
|
|
1144
|
-
"tech_resistance"
|
|
1145
|
-
/* TechResistance */
|
|
1146
|
-
]: 19,
|
|
1147
|
-
[
|
|
1148
|
-
"tech_strength"
|
|
1149
|
-
/* TechStrength */
|
|
1150
|
-
]: 20,
|
|
1151
|
-
[
|
|
1152
|
-
"tech_haste"
|
|
1153
|
-
/* TechHaste */
|
|
1154
|
-
]: 21,
|
|
1155
|
-
[
|
|
1156
|
-
"tech_regeneration"
|
|
1157
|
-
/* TechRegeneration */
|
|
1158
|
-
]: 22,
|
|
1159
|
-
// Add missing mappings to avoid runtime lookups failing for new types
|
|
1160
|
-
[
|
|
1161
|
-
"tag_token"
|
|
1162
|
-
/* TagToken */
|
|
1163
|
-
]: -1
|
|
1164
|
-
};
|
|
1165
|
-
RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
1166
|
-
RenderFx2[RenderFx2["MinLight"] = 1] = "MinLight";
|
|
1167
|
-
RenderFx2[RenderFx2["ViewerModel"] = 2] = "ViewerModel";
|
|
1168
|
-
RenderFx2[RenderFx2["WeaponModel"] = 4] = "WeaponModel";
|
|
1169
|
-
RenderFx2[RenderFx2["FullBright"] = 8] = "FullBright";
|
|
1170
|
-
RenderFx2[RenderFx2["DepthHack"] = 16] = "DepthHack";
|
|
1171
|
-
RenderFx2[RenderFx2["Translucent"] = 32] = "Translucent";
|
|
1172
|
-
RenderFx2[RenderFx2["FrameLerp"] = 64] = "FrameLerp";
|
|
1173
|
-
RenderFx2[RenderFx2["Beam"] = 128] = "Beam";
|
|
1174
|
-
RenderFx2[RenderFx2["CustomLight"] = 256] = "CustomLight";
|
|
1175
|
-
RenderFx2[RenderFx2["Glow"] = 512] = "Glow";
|
|
1176
|
-
RenderFx2[RenderFx2["ShellRed"] = 1024] = "ShellRed";
|
|
1177
|
-
RenderFx2[RenderFx2["ShellGreen"] = 2048] = "ShellGreen";
|
|
1178
|
-
RenderFx2[RenderFx2["ShellBlue"] = 4096] = "ShellBlue";
|
|
1179
|
-
RenderFx2[RenderFx2["IrVisible"] = 32768] = "IrVisible";
|
|
1180
|
-
RenderFx2[RenderFx2["ShellDouble"] = 65536] = "ShellDouble";
|
|
1181
|
-
RenderFx2[RenderFx2["ShellHalfDam"] = 131072] = "ShellHalfDam";
|
|
1182
|
-
RenderFx2[RenderFx2["MinLightPlus"] = 262144] = "MinLightPlus";
|
|
1183
|
-
RenderFx2[RenderFx2["ExtraLight"] = 524288] = "ExtraLight";
|
|
1184
|
-
RenderFx2[RenderFx2["BeamLightning"] = 1048576] = "BeamLightning";
|
|
1185
|
-
RenderFx2[RenderFx2["Flashlight"] = 2097152] = "Flashlight";
|
|
1186
|
-
return RenderFx2;
|
|
1187
|
-
})(RenderFx || {});
|
|
1188
|
-
entityFlags_exports = {};
|
|
1189
|
-
__export2(entityFlags_exports, {
|
|
1190
|
-
U_ANGLE1: () => U_ANGLE1,
|
|
1191
|
-
U_ANGLE2: () => U_ANGLE2,
|
|
1192
|
-
U_ANGLE3: () => U_ANGLE3,
|
|
1193
|
-
U_EFFECTS: () => U_EFFECTS,
|
|
1194
|
-
U_EVENT: () => U_EVENT,
|
|
1195
|
-
U_FRAME: () => U_FRAME,
|
|
1196
|
-
U_MODEL: () => U_MODEL,
|
|
1197
|
-
U_MODEL2: () => U_MODEL2,
|
|
1198
|
-
U_MODEL3: () => U_MODEL3,
|
|
1199
|
-
U_MODEL4: () => U_MODEL4,
|
|
1200
|
-
U_MOREBITS: () => U_MOREBITS,
|
|
1201
|
-
U_NUMBER: () => U_NUMBER,
|
|
1202
|
-
U_ORIGIN1: () => U_ORIGIN1,
|
|
1203
|
-
U_ORIGIN2: () => U_ORIGIN2,
|
|
1204
|
-
U_ORIGIN3: () => U_ORIGIN3,
|
|
1205
|
-
U_REMOVE: () => U_REMOVE,
|
|
1206
|
-
U_RENDERFX: () => U_RENDERFX,
|
|
1207
|
-
U_SKIN: () => U_SKIN,
|
|
1208
|
-
U_SOLID: () => U_SOLID,
|
|
1209
|
-
U_SOUND: () => U_SOUND
|
|
1210
|
-
});
|
|
1211
|
-
U_NUMBER = 1 << 0;
|
|
1212
|
-
U_MODEL = 1 << 1;
|
|
1213
|
-
U_SOUND = 1 << 2;
|
|
1214
|
-
U_ORIGIN1 = 1 << 3;
|
|
1215
|
-
U_ORIGIN2 = 1 << 4;
|
|
1216
|
-
U_ORIGIN3 = 1 << 5;
|
|
1217
|
-
U_ANGLE1 = 1 << 6;
|
|
1218
|
-
U_ANGLE2 = 1 << 7;
|
|
1219
|
-
U_ANGLE3 = 1 << 8;
|
|
1220
|
-
U_FRAME = 1 << 9;
|
|
1221
|
-
U_SKIN = 1 << 10;
|
|
1222
|
-
U_EFFECTS = 1 << 11;
|
|
1223
|
-
U_RENDERFX = 1 << 12;
|
|
1224
|
-
U_SOLID = 1 << 13;
|
|
1225
|
-
U_EVENT = 1 << 14;
|
|
1226
|
-
U_MOREBITS = 1 << 15;
|
|
1227
|
-
U_MODEL2 = 1 << 0;
|
|
1228
|
-
U_MODEL3 = 1 << 1;
|
|
1229
|
-
U_MODEL4 = 1 << 2;
|
|
1230
|
-
U_REMOVE = 32768;
|
|
1231
|
-
FRAMETIME2 = 0.025;
|
|
1232
|
-
MASK_WATER2 = 33554432;
|
|
1233
|
-
WaterLevel3 = {
|
|
1234
|
-
None: 0,
|
|
1235
|
-
Feet: 1,
|
|
1236
|
-
Waist: 2,
|
|
1237
|
-
Under: 3
|
|
1238
|
-
};
|
|
1239
|
-
categorizePosition2 = (state, trace) => {
|
|
1240
|
-
const point = { ...state.origin };
|
|
1241
|
-
point.z -= 0.25;
|
|
1242
|
-
const traceResult = trace(state.origin, point);
|
|
1243
|
-
return {
|
|
1244
|
-
...state,
|
|
1245
|
-
onGround: traceResult.fraction < 1
|
|
1246
|
-
};
|
|
1247
|
-
};
|
|
1248
|
-
checkWater = (state, pointContents2) => {
|
|
1249
|
-
const point = { ...state.origin };
|
|
1250
|
-
const { mins, maxs } = state;
|
|
1251
|
-
point.z = state.origin.z + mins.z + 1;
|
|
1252
|
-
const contents = pointContents2(point);
|
|
1253
|
-
if (!(contents & MASK_WATER2)) {
|
|
1254
|
-
return { ...state, waterLevel: WaterLevel3.None };
|
|
1255
|
-
}
|
|
1256
|
-
let waterLevel = WaterLevel3.Feet;
|
|
1257
|
-
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1258
|
-
point.z = waist;
|
|
1259
|
-
const waistContents = pointContents2(point);
|
|
1260
|
-
if (waistContents & MASK_WATER2) {
|
|
1261
|
-
waterLevel = WaterLevel3.Waist;
|
|
1262
|
-
const head = state.origin.z + 22;
|
|
1263
|
-
point.z = head;
|
|
1264
|
-
const headContents = pointContents2(point);
|
|
1265
|
-
if (headContents & MASK_WATER2) {
|
|
1266
|
-
waterLevel = WaterLevel3.Under;
|
|
1267
|
-
}
|
|
1268
|
-
}
|
|
1269
|
-
return { ...state, waterLevel };
|
|
1270
|
-
};
|
|
1271
|
-
applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1272
|
-
let newState = { ...state };
|
|
1273
|
-
newState = categorizePosition2(newState, trace);
|
|
1274
|
-
newState = checkWater(newState, pointContents2);
|
|
1275
|
-
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1276
|
-
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1277
|
-
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1278
|
-
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1279
|
-
y: viewAngles.y,
|
|
1280
|
-
z: viewAngles.z
|
|
1281
|
-
};
|
|
1282
|
-
const { forward, right } = angleVectors(adjustedAngles);
|
|
1283
|
-
const frictionedVelocity = applyPmoveFriction({
|
|
1284
|
-
velocity,
|
|
1285
|
-
frametime: FRAMETIME2,
|
|
1286
|
-
onGround,
|
|
1287
|
-
groundIsSlick: false,
|
|
1288
|
-
onLadder: false,
|
|
1289
|
-
waterlevel: waterLevel,
|
|
1290
|
-
pmFriction: 6,
|
|
1291
|
-
pmStopSpeed: 100,
|
|
1292
|
-
pmWaterFriction: 1
|
|
1293
|
-
});
|
|
1294
|
-
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1295
|
-
forward,
|
|
1296
|
-
right,
|
|
1297
|
-
cmd,
|
|
1298
|
-
maxSpeed: 320
|
|
1299
|
-
}) : buildAirGroundWish({
|
|
1300
|
-
forward,
|
|
1301
|
-
right,
|
|
1302
|
-
cmd,
|
|
1303
|
-
maxSpeed: 320
|
|
1304
|
-
});
|
|
1305
|
-
const finalVelocity = applyPmoveAccelerate({
|
|
1306
|
-
velocity: frictionedVelocity,
|
|
1307
|
-
wishdir: wish.wishdir,
|
|
1308
|
-
wishspeed: wish.wishspeed,
|
|
1309
|
-
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1310
|
-
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1311
|
-
frametime: FRAMETIME2
|
|
1312
|
-
});
|
|
1313
|
-
const traceResult = trace(origin, {
|
|
1314
|
-
x: origin.x + finalVelocity.x * FRAMETIME2,
|
|
1315
|
-
y: origin.y + finalVelocity.y * FRAMETIME2,
|
|
1316
|
-
z: origin.z + finalVelocity.z * FRAMETIME2
|
|
1317
|
-
});
|
|
1318
|
-
return {
|
|
1319
|
-
...newState,
|
|
1320
|
-
origin: traceResult.endpos,
|
|
1321
|
-
velocity: finalVelocity
|
|
1322
|
-
};
|
|
1323
|
-
};
|
|
1324
|
-
BinaryWriter = class {
|
|
1325
|
-
constructor(sizeOrBuffer = 1400) {
|
|
1326
|
-
if (typeof sizeOrBuffer === "number") {
|
|
1327
|
-
this.buffer = new Uint8Array(sizeOrBuffer);
|
|
1328
|
-
this.fixed = false;
|
|
1329
|
-
} else {
|
|
1330
|
-
this.buffer = sizeOrBuffer;
|
|
1331
|
-
this.fixed = true;
|
|
1332
|
-
}
|
|
1333
|
-
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1334
|
-
this.offset = 0;
|
|
1335
|
-
}
|
|
1336
|
-
ensureSpace(bytes) {
|
|
1337
|
-
if (this.offset + bytes > this.buffer.byteLength) {
|
|
1338
|
-
if (this.fixed) {
|
|
1339
|
-
throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
|
|
1340
|
-
}
|
|
1341
|
-
const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
|
|
1342
|
-
const newBuffer = new Uint8Array(newSize);
|
|
1343
|
-
newBuffer.set(this.buffer);
|
|
1344
|
-
this.buffer = newBuffer;
|
|
1345
|
-
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1346
|
-
}
|
|
1347
|
-
}
|
|
1348
|
-
writeByte(value) {
|
|
1349
|
-
this.ensureSpace(1);
|
|
1350
|
-
this.view.setUint8(this.offset, value);
|
|
1351
|
-
this.offset += 1;
|
|
1352
|
-
}
|
|
1353
|
-
writeChar(value) {
|
|
1354
|
-
this.ensureSpace(1);
|
|
1355
|
-
this.view.setInt8(this.offset, value);
|
|
1356
|
-
this.offset += 1;
|
|
1357
|
-
}
|
|
1358
|
-
writeShort(value) {
|
|
1359
|
-
this.ensureSpace(2);
|
|
1360
|
-
this.view.setInt16(this.offset, value, true);
|
|
1361
|
-
this.offset += 2;
|
|
1362
|
-
}
|
|
1363
|
-
writeLong(value) {
|
|
1364
|
-
this.ensureSpace(4);
|
|
1365
|
-
this.view.setInt32(this.offset, value, true);
|
|
1366
|
-
this.offset += 4;
|
|
1367
|
-
}
|
|
1368
|
-
writeFloat(value) {
|
|
1369
|
-
this.ensureSpace(4);
|
|
1370
|
-
this.view.setFloat32(this.offset, value, true);
|
|
1371
|
-
this.offset += 4;
|
|
1372
|
-
}
|
|
1373
|
-
writeString(value) {
|
|
1374
|
-
const len = value.length;
|
|
1375
|
-
this.ensureSpace(len + 1);
|
|
1376
|
-
for (let i = 0; i < len; i++) {
|
|
1377
|
-
this.view.setUint8(this.offset + i, value.charCodeAt(i));
|
|
1378
|
-
}
|
|
1379
|
-
this.view.setUint8(this.offset + len, 0);
|
|
1380
|
-
this.offset += len + 1;
|
|
1381
|
-
}
|
|
1382
|
-
writeCoord(value) {
|
|
1383
|
-
this.writeShort(Math.trunc(value * 8));
|
|
1384
|
-
}
|
|
1385
|
-
writeAngle(value) {
|
|
1386
|
-
this.writeByte(Math.trunc(value * 256 / 360) & 255);
|
|
1387
|
-
}
|
|
1388
|
-
writeAngle16(value) {
|
|
1389
|
-
this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
|
|
1390
|
-
}
|
|
1391
|
-
writePos(pos) {
|
|
1392
|
-
this.writeCoord(pos.x);
|
|
1393
|
-
this.writeCoord(pos.y);
|
|
1394
|
-
this.writeCoord(pos.z);
|
|
1151
|
+
var RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
1152
|
+
RenderFx2[RenderFx2["MinLight"] = 1] = "MinLight";
|
|
1153
|
+
RenderFx2[RenderFx2["ViewerModel"] = 2] = "ViewerModel";
|
|
1154
|
+
RenderFx2[RenderFx2["WeaponModel"] = 4] = "WeaponModel";
|
|
1155
|
+
RenderFx2[RenderFx2["FullBright"] = 8] = "FullBright";
|
|
1156
|
+
RenderFx2[RenderFx2["DepthHack"] = 16] = "DepthHack";
|
|
1157
|
+
RenderFx2[RenderFx2["Translucent"] = 32] = "Translucent";
|
|
1158
|
+
RenderFx2[RenderFx2["FrameLerp"] = 64] = "FrameLerp";
|
|
1159
|
+
RenderFx2[RenderFx2["Beam"] = 128] = "Beam";
|
|
1160
|
+
RenderFx2[RenderFx2["CustomLight"] = 256] = "CustomLight";
|
|
1161
|
+
RenderFx2[RenderFx2["Glow"] = 512] = "Glow";
|
|
1162
|
+
RenderFx2[RenderFx2["ShellRed"] = 1024] = "ShellRed";
|
|
1163
|
+
RenderFx2[RenderFx2["ShellGreen"] = 2048] = "ShellGreen";
|
|
1164
|
+
RenderFx2[RenderFx2["ShellBlue"] = 4096] = "ShellBlue";
|
|
1165
|
+
RenderFx2[RenderFx2["IrVisible"] = 32768] = "IrVisible";
|
|
1166
|
+
RenderFx2[RenderFx2["ShellDouble"] = 65536] = "ShellDouble";
|
|
1167
|
+
RenderFx2[RenderFx2["ShellHalfDam"] = 131072] = "ShellHalfDam";
|
|
1168
|
+
RenderFx2[RenderFx2["MinLightPlus"] = 262144] = "MinLightPlus";
|
|
1169
|
+
RenderFx2[RenderFx2["ExtraLight"] = 524288] = "ExtraLight";
|
|
1170
|
+
RenderFx2[RenderFx2["BeamLightning"] = 1048576] = "BeamLightning";
|
|
1171
|
+
RenderFx2[RenderFx2["Flashlight"] = 2097152] = "Flashlight";
|
|
1172
|
+
return RenderFx2;
|
|
1173
|
+
})(RenderFx || {});
|
|
1174
|
+
var entityFlags_exports = {};
|
|
1175
|
+
__export(entityFlags_exports, {
|
|
1176
|
+
U_ANGLE1: () => U_ANGLE1,
|
|
1177
|
+
U_ANGLE2: () => U_ANGLE2,
|
|
1178
|
+
U_ANGLE3: () => U_ANGLE3,
|
|
1179
|
+
U_EFFECTS: () => U_EFFECTS,
|
|
1180
|
+
U_EVENT: () => U_EVENT,
|
|
1181
|
+
U_FRAME: () => U_FRAME,
|
|
1182
|
+
U_MODEL: () => U_MODEL,
|
|
1183
|
+
U_MODEL2: () => U_MODEL2,
|
|
1184
|
+
U_MODEL3: () => U_MODEL3,
|
|
1185
|
+
U_MODEL4: () => U_MODEL4,
|
|
1186
|
+
U_MOREBITS: () => U_MOREBITS,
|
|
1187
|
+
U_NUMBER: () => U_NUMBER,
|
|
1188
|
+
U_ORIGIN1: () => U_ORIGIN1,
|
|
1189
|
+
U_ORIGIN2: () => U_ORIGIN2,
|
|
1190
|
+
U_ORIGIN3: () => U_ORIGIN3,
|
|
1191
|
+
U_REMOVE: () => U_REMOVE,
|
|
1192
|
+
U_RENDERFX: () => U_RENDERFX,
|
|
1193
|
+
U_SKIN: () => U_SKIN,
|
|
1194
|
+
U_SOLID: () => U_SOLID,
|
|
1195
|
+
U_SOUND: () => U_SOUND
|
|
1196
|
+
});
|
|
1197
|
+
var U_NUMBER = 1 << 0;
|
|
1198
|
+
var U_MODEL = 1 << 1;
|
|
1199
|
+
var U_SOUND = 1 << 2;
|
|
1200
|
+
var U_ORIGIN1 = 1 << 3;
|
|
1201
|
+
var U_ORIGIN2 = 1 << 4;
|
|
1202
|
+
var U_ORIGIN3 = 1 << 5;
|
|
1203
|
+
var U_ANGLE1 = 1 << 6;
|
|
1204
|
+
var U_ANGLE2 = 1 << 7;
|
|
1205
|
+
var U_ANGLE3 = 1 << 8;
|
|
1206
|
+
var U_FRAME = 1 << 9;
|
|
1207
|
+
var U_SKIN = 1 << 10;
|
|
1208
|
+
var U_EFFECTS = 1 << 11;
|
|
1209
|
+
var U_RENDERFX = 1 << 12;
|
|
1210
|
+
var U_SOLID = 1 << 13;
|
|
1211
|
+
var U_EVENT = 1 << 14;
|
|
1212
|
+
var U_MOREBITS = 1 << 15;
|
|
1213
|
+
var U_MODEL2 = 1 << 0;
|
|
1214
|
+
var U_MODEL3 = 1 << 1;
|
|
1215
|
+
var U_MODEL4 = 1 << 2;
|
|
1216
|
+
var U_REMOVE = 32768;
|
|
1217
|
+
var FRAMETIME2 = 0.025;
|
|
1218
|
+
var MASK_WATER2 = 33554432;
|
|
1219
|
+
var WaterLevel3 = {
|
|
1220
|
+
None: 0,
|
|
1221
|
+
Feet: 1,
|
|
1222
|
+
Waist: 2,
|
|
1223
|
+
Under: 3
|
|
1224
|
+
};
|
|
1225
|
+
var categorizePosition2 = (state, trace) => {
|
|
1226
|
+
const point = { ...state.origin };
|
|
1227
|
+
point.z -= 0.25;
|
|
1228
|
+
const traceResult = trace(state.origin, point);
|
|
1229
|
+
return {
|
|
1230
|
+
...state,
|
|
1231
|
+
onGround: traceResult.fraction < 1
|
|
1232
|
+
};
|
|
1233
|
+
};
|
|
1234
|
+
var checkWater = (state, pointContents2) => {
|
|
1235
|
+
const point = { ...state.origin };
|
|
1236
|
+
const { mins, maxs } = state;
|
|
1237
|
+
point.z = state.origin.z + mins.z + 1;
|
|
1238
|
+
const contents = pointContents2(point);
|
|
1239
|
+
if (!(contents & MASK_WATER2)) {
|
|
1240
|
+
return { ...state, waterLevel: WaterLevel3.None };
|
|
1241
|
+
}
|
|
1242
|
+
let waterLevel = WaterLevel3.Feet;
|
|
1243
|
+
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1244
|
+
point.z = waist;
|
|
1245
|
+
const waistContents = pointContents2(point);
|
|
1246
|
+
if (waistContents & MASK_WATER2) {
|
|
1247
|
+
waterLevel = WaterLevel3.Waist;
|
|
1248
|
+
const head = state.origin.z + 22;
|
|
1249
|
+
point.z = head;
|
|
1250
|
+
const headContents = pointContents2(point);
|
|
1251
|
+
if (headContents & MASK_WATER2) {
|
|
1252
|
+
waterLevel = WaterLevel3.Under;
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
return { ...state, waterLevel };
|
|
1256
|
+
};
|
|
1257
|
+
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1258
|
+
let newState = { ...state };
|
|
1259
|
+
newState = categorizePosition2(newState, trace);
|
|
1260
|
+
newState = checkWater(newState, pointContents2);
|
|
1261
|
+
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1262
|
+
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1263
|
+
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1264
|
+
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1265
|
+
y: viewAngles.y,
|
|
1266
|
+
z: viewAngles.z
|
|
1267
|
+
};
|
|
1268
|
+
const { forward, right } = angleVectors(adjustedAngles);
|
|
1269
|
+
const frictionedVelocity = applyPmoveFriction({
|
|
1270
|
+
velocity,
|
|
1271
|
+
frametime: FRAMETIME2,
|
|
1272
|
+
onGround,
|
|
1273
|
+
groundIsSlick: false,
|
|
1274
|
+
onLadder: false,
|
|
1275
|
+
waterlevel: waterLevel,
|
|
1276
|
+
pmFriction: 6,
|
|
1277
|
+
pmStopSpeed: 100,
|
|
1278
|
+
pmWaterFriction: 1
|
|
1279
|
+
});
|
|
1280
|
+
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1281
|
+
forward,
|
|
1282
|
+
right,
|
|
1283
|
+
cmd,
|
|
1284
|
+
maxSpeed: 320
|
|
1285
|
+
}) : buildAirGroundWish({
|
|
1286
|
+
forward,
|
|
1287
|
+
right,
|
|
1288
|
+
cmd,
|
|
1289
|
+
maxSpeed: 320
|
|
1290
|
+
});
|
|
1291
|
+
const finalVelocity = applyPmoveAccelerate({
|
|
1292
|
+
velocity: frictionedVelocity,
|
|
1293
|
+
wishdir: wish.wishdir,
|
|
1294
|
+
wishspeed: wish.wishspeed,
|
|
1295
|
+
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1296
|
+
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1297
|
+
frametime: FRAMETIME2
|
|
1298
|
+
});
|
|
1299
|
+
const traceResult = trace(origin, {
|
|
1300
|
+
x: origin.x + finalVelocity.x * FRAMETIME2,
|
|
1301
|
+
y: origin.y + finalVelocity.y * FRAMETIME2,
|
|
1302
|
+
z: origin.z + finalVelocity.z * FRAMETIME2
|
|
1303
|
+
});
|
|
1304
|
+
return {
|
|
1305
|
+
...newState,
|
|
1306
|
+
origin: traceResult.endpos,
|
|
1307
|
+
velocity: finalVelocity
|
|
1308
|
+
};
|
|
1309
|
+
};
|
|
1310
|
+
var BinaryWriter = class {
|
|
1311
|
+
constructor(sizeOrBuffer = 1400) {
|
|
1312
|
+
if (typeof sizeOrBuffer === "number") {
|
|
1313
|
+
this.buffer = new Uint8Array(sizeOrBuffer);
|
|
1314
|
+
this.fixed = false;
|
|
1315
|
+
} else {
|
|
1316
|
+
this.buffer = sizeOrBuffer;
|
|
1317
|
+
this.fixed = true;
|
|
1318
|
+
}
|
|
1319
|
+
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1320
|
+
this.offset = 0;
|
|
1321
|
+
}
|
|
1322
|
+
ensureSpace(bytes) {
|
|
1323
|
+
if (this.offset + bytes > this.buffer.byteLength) {
|
|
1324
|
+
if (this.fixed) {
|
|
1325
|
+
throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
|
|
1326
|
+
}
|
|
1327
|
+
const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
|
|
1328
|
+
const newBuffer = new Uint8Array(newSize);
|
|
1329
|
+
newBuffer.set(this.buffer);
|
|
1330
|
+
this.buffer = newBuffer;
|
|
1331
|
+
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
writeByte(value) {
|
|
1335
|
+
this.ensureSpace(1);
|
|
1336
|
+
this.view.setUint8(this.offset, value);
|
|
1337
|
+
this.offset += 1;
|
|
1338
|
+
}
|
|
1339
|
+
writeChar(value) {
|
|
1340
|
+
this.ensureSpace(1);
|
|
1341
|
+
this.view.setInt8(this.offset, value);
|
|
1342
|
+
this.offset += 1;
|
|
1343
|
+
}
|
|
1344
|
+
writeShort(value) {
|
|
1345
|
+
this.ensureSpace(2);
|
|
1346
|
+
this.view.setInt16(this.offset, value, true);
|
|
1347
|
+
this.offset += 2;
|
|
1348
|
+
}
|
|
1349
|
+
writeLong(value) {
|
|
1350
|
+
this.ensureSpace(4);
|
|
1351
|
+
this.view.setInt32(this.offset, value, true);
|
|
1352
|
+
this.offset += 4;
|
|
1353
|
+
}
|
|
1354
|
+
writeFloat(value) {
|
|
1355
|
+
this.ensureSpace(4);
|
|
1356
|
+
this.view.setFloat32(this.offset, value, true);
|
|
1357
|
+
this.offset += 4;
|
|
1358
|
+
}
|
|
1359
|
+
writeString(value) {
|
|
1360
|
+
const len = value.length;
|
|
1361
|
+
this.ensureSpace(len + 1);
|
|
1362
|
+
for (let i = 0; i < len; i++) {
|
|
1363
|
+
this.view.setUint8(this.offset + i, value.charCodeAt(i));
|
|
1364
|
+
}
|
|
1365
|
+
this.view.setUint8(this.offset + len, 0);
|
|
1366
|
+
this.offset += len + 1;
|
|
1367
|
+
}
|
|
1368
|
+
writeCoord(value) {
|
|
1369
|
+
this.writeShort(Math.trunc(value * 8));
|
|
1370
|
+
}
|
|
1371
|
+
writeAngle(value) {
|
|
1372
|
+
this.writeByte(Math.trunc(value * 256 / 360) & 255);
|
|
1373
|
+
}
|
|
1374
|
+
writeAngle16(value) {
|
|
1375
|
+
this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
|
|
1376
|
+
}
|
|
1377
|
+
writePos(pos) {
|
|
1378
|
+
this.writeCoord(pos.x);
|
|
1379
|
+
this.writeCoord(pos.y);
|
|
1380
|
+
this.writeCoord(pos.z);
|
|
1381
|
+
}
|
|
1382
|
+
writeDir(dir) {
|
|
1383
|
+
let maxDot = -1;
|
|
1384
|
+
let bestIndex = 0;
|
|
1385
|
+
if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
|
|
1386
|
+
this.writeByte(0);
|
|
1387
|
+
return;
|
|
1388
|
+
}
|
|
1389
|
+
for (let i = 0; i < ANORMS.length; i++) {
|
|
1390
|
+
const norm = ANORMS[i];
|
|
1391
|
+
const dot = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
|
|
1392
|
+
if (dot > maxDot) {
|
|
1393
|
+
maxDot = dot;
|
|
1394
|
+
bestIndex = i;
|
|
1395
1395
|
}
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1396
|
+
}
|
|
1397
|
+
this.writeByte(bestIndex);
|
|
1398
|
+
}
|
|
1399
|
+
getData() {
|
|
1400
|
+
return this.buffer.slice(0, this.offset);
|
|
1401
|
+
}
|
|
1402
|
+
getBuffer() {
|
|
1403
|
+
return this.buffer;
|
|
1404
|
+
}
|
|
1405
|
+
getOffset() {
|
|
1406
|
+
return this.offset;
|
|
1407
|
+
}
|
|
1408
|
+
reset() {
|
|
1409
|
+
this.offset = 0;
|
|
1410
|
+
}
|
|
1411
|
+
};
|
|
1412
|
+
var _NetChan = class _NetChan2 {
|
|
1413
|
+
constructor() {
|
|
1414
|
+
this.qport = 0;
|
|
1415
|
+
this.incomingSequence = 0;
|
|
1416
|
+
this.outgoingSequence = 0;
|
|
1417
|
+
this.incomingAcknowledged = 0;
|
|
1418
|
+
this.incomingReliableAcknowledged = false;
|
|
1419
|
+
this.incomingReliableSequence = 0;
|
|
1420
|
+
this.outgoingReliableSequence = 0;
|
|
1421
|
+
this.reliableLength = 0;
|
|
1422
|
+
this.fragmentSendOffset = 0;
|
|
1423
|
+
this.fragmentBuffer = null;
|
|
1424
|
+
this.fragmentLength = 0;
|
|
1425
|
+
this.fragmentReceived = 0;
|
|
1426
|
+
this.lastReceived = 0;
|
|
1427
|
+
this.lastSent = 0;
|
|
1428
|
+
this.remoteAddress = null;
|
|
1429
|
+
this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
|
|
1430
|
+
const now = Date.now();
|
|
1431
|
+
this.lastReceived = now;
|
|
1432
|
+
this.lastSent = now;
|
|
1433
|
+
this.qport = Math.floor(Math.random() * 65536);
|
|
1434
|
+
}
|
|
1435
|
+
/**
|
|
1436
|
+
* Setup the netchan with specific settings
|
|
1437
|
+
*/
|
|
1438
|
+
setup(qport, address = null) {
|
|
1439
|
+
this.qport = qport;
|
|
1440
|
+
this.remoteAddress = address;
|
|
1441
|
+
this.reset();
|
|
1442
|
+
}
|
|
1443
|
+
/**
|
|
1444
|
+
* Reset the netchan state
|
|
1445
|
+
*/
|
|
1446
|
+
reset() {
|
|
1447
|
+
this.incomingSequence = 0;
|
|
1448
|
+
this.outgoingSequence = 0;
|
|
1449
|
+
this.incomingAcknowledged = 0;
|
|
1450
|
+
this.incomingReliableAcknowledged = false;
|
|
1451
|
+
this.incomingReliableSequence = 0;
|
|
1452
|
+
this.outgoingReliableSequence = 0;
|
|
1453
|
+
this.reliableLength = 0;
|
|
1454
|
+
this.reliableMessage.reset();
|
|
1455
|
+
this.fragmentSendOffset = 0;
|
|
1456
|
+
this.fragmentBuffer = null;
|
|
1457
|
+
this.fragmentLength = 0;
|
|
1458
|
+
this.fragmentReceived = 0;
|
|
1459
|
+
this.lastReceived = Date.now();
|
|
1460
|
+
this.lastSent = Date.now();
|
|
1461
|
+
}
|
|
1462
|
+
/**
|
|
1463
|
+
* Transmits a packet containing reliable and unreliable data
|
|
1464
|
+
*/
|
|
1465
|
+
transmit(unreliableData) {
|
|
1466
|
+
this.outgoingSequence++;
|
|
1467
|
+
this.lastSent = Date.now();
|
|
1468
|
+
let sendReliableLength = 0;
|
|
1469
|
+
let isFragment = false;
|
|
1470
|
+
let fragmentStart = 0;
|
|
1471
|
+
if (this.reliableLength > 0) {
|
|
1472
|
+
if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
|
|
1473
|
+
isFragment = true;
|
|
1474
|
+
if (this.fragmentSendOffset >= this.reliableLength) {
|
|
1475
|
+
this.fragmentSendOffset = 0;
|
|
1402
1476
|
}
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
maxDot = dot;
|
|
1408
|
-
bestIndex = i;
|
|
1409
|
-
}
|
|
1477
|
+
const remaining = this.reliableLength - this.fragmentSendOffset;
|
|
1478
|
+
sendReliableLength = remaining;
|
|
1479
|
+
if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
|
|
1480
|
+
sendReliableLength = _NetChan2.FRAGMENT_SIZE;
|
|
1410
1481
|
}
|
|
1411
|
-
this.
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
}
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1482
|
+
fragmentStart = this.fragmentSendOffset;
|
|
1483
|
+
this.fragmentSendOffset += sendReliableLength;
|
|
1484
|
+
} else {
|
|
1485
|
+
sendReliableLength = this.reliableLength;
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
const headerSize = _NetChan2.PACKET_HEADER;
|
|
1489
|
+
const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
|
|
1490
|
+
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
1491
|
+
if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
|
|
1492
|
+
unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
|
|
1493
|
+
if (unreliableSize < 0) unreliableSize = 0;
|
|
1494
|
+
}
|
|
1495
|
+
const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
|
|
1496
|
+
const view = new DataView(buffer);
|
|
1497
|
+
const result = new Uint8Array(buffer);
|
|
1498
|
+
let sequence = this.outgoingSequence;
|
|
1499
|
+
if (sendReliableLength > 0) {
|
|
1500
|
+
sequence |= 2147483648;
|
|
1501
|
+
if ((this.outgoingReliableSequence & 1) !== 0) {
|
|
1502
|
+
sequence |= 1073741824;
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
view.setUint32(0, sequence, true);
|
|
1506
|
+
let ack = this.incomingSequence;
|
|
1507
|
+
if ((this.incomingReliableSequence & 1) !== 0) {
|
|
1508
|
+
ack |= 2147483648;
|
|
1509
|
+
}
|
|
1510
|
+
view.setUint32(4, ack, true);
|
|
1511
|
+
view.setUint16(8, this.qport, true);
|
|
1512
|
+
let offset = headerSize;
|
|
1513
|
+
if (sendReliableLength > 0) {
|
|
1514
|
+
let lengthField = sendReliableLength;
|
|
1515
|
+
if (isFragment) {
|
|
1516
|
+
lengthField |= 32768;
|
|
1517
|
+
}
|
|
1518
|
+
view.setUint16(offset, lengthField, true);
|
|
1519
|
+
offset += 2;
|
|
1520
|
+
if (isFragment) {
|
|
1521
|
+
view.setUint32(offset, fragmentStart, true);
|
|
1522
|
+
offset += 4;
|
|
1523
|
+
view.setUint32(offset, this.reliableLength, true);
|
|
1524
|
+
offset += 4;
|
|
1525
|
+
}
|
|
1526
|
+
const reliableBuffer = this.reliableMessage.getBuffer();
|
|
1527
|
+
const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
|
|
1528
|
+
result.set(reliableBytes, offset);
|
|
1529
|
+
offset += sendReliableLength;
|
|
1530
|
+
}
|
|
1531
|
+
if (unreliableData && unreliableSize > 0) {
|
|
1532
|
+
const chunk = unreliableData.slice(0, unreliableSize);
|
|
1533
|
+
result.set(chunk, offset);
|
|
1534
|
+
}
|
|
1535
|
+
return result;
|
|
1536
|
+
}
|
|
1537
|
+
/**
|
|
1538
|
+
* Processes a received packet
|
|
1539
|
+
* Returns the payload data (reliable + unreliable) to be processed, or null if discarded
|
|
1540
|
+
*/
|
|
1541
|
+
process(packet) {
|
|
1542
|
+
if (packet.length < _NetChan2.PACKET_HEADER) {
|
|
1543
|
+
return null;
|
|
1544
|
+
}
|
|
1545
|
+
this.lastReceived = Date.now();
|
|
1546
|
+
const view = new DataView(packet.buffer, packet.byteOffset, packet.byteLength);
|
|
1547
|
+
const sequence = view.getUint32(0, true);
|
|
1548
|
+
const ack = view.getUint32(4, true);
|
|
1549
|
+
const qport = view.getUint16(8, true);
|
|
1550
|
+
if (this.qport !== qport) {
|
|
1551
|
+
return null;
|
|
1552
|
+
}
|
|
1553
|
+
const seqNumberClean = sequence & ~(2147483648 | 1073741824);
|
|
1554
|
+
if ((seqNumberClean - this.incomingSequence | 0) <= 0) {
|
|
1555
|
+
return null;
|
|
1556
|
+
}
|
|
1557
|
+
this.incomingSequence = seqNumberClean;
|
|
1558
|
+
const ackNumber = ack & ~2147483648;
|
|
1559
|
+
const ackReliable = (ack & 2147483648) !== 0;
|
|
1560
|
+
if (ackNumber > this.incomingAcknowledged) {
|
|
1561
|
+
this.incomingAcknowledged = ackNumber;
|
|
1562
|
+
}
|
|
1563
|
+
if (this.reliableLength > 0) {
|
|
1564
|
+
const receivedAckBit = ackReliable ? 1 : 0;
|
|
1565
|
+
const currentReliableBit = this.outgoingReliableSequence & 1;
|
|
1566
|
+
if (receivedAckBit !== currentReliableBit) {
|
|
1467
1567
|
this.reliableLength = 0;
|
|
1468
1568
|
this.reliableMessage.reset();
|
|
1569
|
+
this.outgoingReliableSequence ^= 1;
|
|
1469
1570
|
this.fragmentSendOffset = 0;
|
|
1470
|
-
this.fragmentBuffer = null;
|
|
1471
|
-
this.fragmentLength = 0;
|
|
1472
|
-
this.fragmentReceived = 0;
|
|
1473
|
-
this.lastReceived = Date.now();
|
|
1474
|
-
this.lastSent = Date.now();
|
|
1475
1571
|
}
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
} else {
|
|
1499
|
-
sendReliableLength = this.reliableLength;
|
|
1500
|
-
}
|
|
1501
|
-
}
|
|
1502
|
-
const headerSize = _NetChan2.PACKET_HEADER;
|
|
1503
|
-
const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
|
|
1504
|
-
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
1505
|
-
if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
|
|
1506
|
-
unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
|
|
1507
|
-
if (unreliableSize < 0) unreliableSize = 0;
|
|
1508
|
-
}
|
|
1509
|
-
const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
|
|
1510
|
-
const view = new DataView(buffer);
|
|
1511
|
-
const result = new Uint8Array(buffer);
|
|
1512
|
-
let sequence = this.outgoingSequence;
|
|
1513
|
-
if (sendReliableLength > 0) {
|
|
1514
|
-
sequence |= 2147483648;
|
|
1515
|
-
if ((this.outgoingReliableSequence & 1) !== 0) {
|
|
1516
|
-
sequence |= 1073741824;
|
|
1517
|
-
}
|
|
1518
|
-
}
|
|
1519
|
-
view.setUint32(0, sequence, true);
|
|
1520
|
-
let ack = this.incomingSequence;
|
|
1521
|
-
if ((this.incomingReliableSequence & 1) !== 0) {
|
|
1522
|
-
ack |= 2147483648;
|
|
1523
|
-
}
|
|
1524
|
-
view.setUint32(4, ack, true);
|
|
1525
|
-
view.setUint16(8, this.qport, true);
|
|
1526
|
-
let offset = headerSize;
|
|
1527
|
-
if (sendReliableLength > 0) {
|
|
1528
|
-
let lengthField = sendReliableLength;
|
|
1529
|
-
if (isFragment) {
|
|
1530
|
-
lengthField |= 32768;
|
|
1531
|
-
}
|
|
1532
|
-
view.setUint16(offset, lengthField, true);
|
|
1533
|
-
offset += 2;
|
|
1534
|
-
if (isFragment) {
|
|
1535
|
-
view.setUint32(offset, fragmentStart, true);
|
|
1536
|
-
offset += 4;
|
|
1537
|
-
view.setUint32(offset, this.reliableLength, true);
|
|
1538
|
-
offset += 4;
|
|
1572
|
+
}
|
|
1573
|
+
const hasReliableData = (sequence & 2147483648) !== 0;
|
|
1574
|
+
const reliableSeqBit = (sequence & 1073741824) !== 0 ? 1 : 0;
|
|
1575
|
+
let payloadOffset = _NetChan2.PACKET_HEADER;
|
|
1576
|
+
let reliableData = null;
|
|
1577
|
+
if (hasReliableData) {
|
|
1578
|
+
if (payloadOffset + 2 > packet.byteLength) return null;
|
|
1579
|
+
let reliableLen = view.getUint16(payloadOffset, true);
|
|
1580
|
+
payloadOffset += 2;
|
|
1581
|
+
const isFragment = (reliableLen & 32768) !== 0;
|
|
1582
|
+
reliableLen &= 32767;
|
|
1583
|
+
const expectedBit = this.incomingReliableSequence & 1;
|
|
1584
|
+
if (reliableSeqBit === expectedBit) {
|
|
1585
|
+
if (isFragment) {
|
|
1586
|
+
if (payloadOffset + 8 > packet.byteLength) return null;
|
|
1587
|
+
const fragStart = view.getUint32(payloadOffset, true);
|
|
1588
|
+
payloadOffset += 4;
|
|
1589
|
+
const fragTotal = view.getUint32(payloadOffset, true);
|
|
1590
|
+
payloadOffset += 4;
|
|
1591
|
+
if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1592
|
+
console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
|
|
1593
|
+
return null;
|
|
1539
1594
|
}
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
}
|
|
1545
|
-
if (unreliableData && unreliableSize > 0) {
|
|
1546
|
-
const chunk = unreliableData.slice(0, unreliableSize);
|
|
1547
|
-
result.set(chunk, offset);
|
|
1548
|
-
}
|
|
1549
|
-
return result;
|
|
1550
|
-
}
|
|
1551
|
-
/**
|
|
1552
|
-
* Processes a received packet
|
|
1553
|
-
* Returns the payload data (reliable + unreliable) to be processed, or null if discarded
|
|
1554
|
-
*/
|
|
1555
|
-
process(packet) {
|
|
1556
|
-
if (packet.length < _NetChan2.PACKET_HEADER) {
|
|
1557
|
-
return null;
|
|
1558
|
-
}
|
|
1559
|
-
this.lastReceived = Date.now();
|
|
1560
|
-
const view = new DataView(packet.buffer, packet.byteOffset, packet.byteLength);
|
|
1561
|
-
const sequence = view.getUint32(0, true);
|
|
1562
|
-
const ack = view.getUint32(4, true);
|
|
1563
|
-
const qport = view.getUint16(8, true);
|
|
1564
|
-
if (this.qport !== qport) {
|
|
1565
|
-
return null;
|
|
1566
|
-
}
|
|
1567
|
-
const seqNumberClean = sequence & ~(2147483648 | 1073741824);
|
|
1568
|
-
if ((seqNumberClean - this.incomingSequence | 0) <= 0) {
|
|
1569
|
-
return null;
|
|
1570
|
-
}
|
|
1571
|
-
this.incomingSequence = seqNumberClean;
|
|
1572
|
-
const ackNumber = ack & ~2147483648;
|
|
1573
|
-
const ackReliable = (ack & 2147483648) !== 0;
|
|
1574
|
-
if (ackNumber > this.incomingAcknowledged) {
|
|
1575
|
-
this.incomingAcknowledged = ackNumber;
|
|
1576
|
-
}
|
|
1577
|
-
if (this.reliableLength > 0) {
|
|
1578
|
-
const receivedAckBit = ackReliable ? 1 : 0;
|
|
1579
|
-
const currentReliableBit = this.outgoingReliableSequence & 1;
|
|
1580
|
-
if (receivedAckBit !== currentReliableBit) {
|
|
1581
|
-
this.reliableLength = 0;
|
|
1582
|
-
this.reliableMessage.reset();
|
|
1583
|
-
this.outgoingReliableSequence ^= 1;
|
|
1584
|
-
this.fragmentSendOffset = 0;
|
|
1595
|
+
if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
|
|
1596
|
+
this.fragmentBuffer = new Uint8Array(fragTotal);
|
|
1597
|
+
this.fragmentLength = fragTotal;
|
|
1598
|
+
this.fragmentReceived = 0;
|
|
1585
1599
|
}
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
let reliableLen = view.getUint16(payloadOffset, true);
|
|
1594
|
-
payloadOffset += 2;
|
|
1595
|
-
const isFragment = (reliableLen & 32768) !== 0;
|
|
1596
|
-
reliableLen &= 32767;
|
|
1597
|
-
const expectedBit = this.incomingReliableSequence & 1;
|
|
1598
|
-
if (reliableSeqBit === expectedBit) {
|
|
1599
|
-
if (isFragment) {
|
|
1600
|
-
if (payloadOffset + 8 > packet.byteLength) return null;
|
|
1601
|
-
const fragStart = view.getUint32(payloadOffset, true);
|
|
1602
|
-
payloadOffset += 4;
|
|
1603
|
-
const fragTotal = view.getUint32(payloadOffset, true);
|
|
1604
|
-
payloadOffset += 4;
|
|
1605
|
-
if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1606
|
-
console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
|
|
1607
|
-
return null;
|
|
1608
|
-
}
|
|
1609
|
-
if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
|
|
1610
|
-
this.fragmentBuffer = new Uint8Array(fragTotal);
|
|
1611
|
-
this.fragmentLength = fragTotal;
|
|
1612
|
-
this.fragmentReceived = 0;
|
|
1613
|
-
}
|
|
1614
|
-
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1615
|
-
const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
|
|
1616
|
-
if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
|
|
1617
|
-
this.fragmentBuffer.set(data, fragStart);
|
|
1618
|
-
this.fragmentReceived += reliableLen;
|
|
1619
|
-
if (this.fragmentReceived >= fragTotal) {
|
|
1620
|
-
reliableData = this.fragmentBuffer;
|
|
1621
|
-
this.incomingReliableSequence++;
|
|
1622
|
-
this.fragmentBuffer = null;
|
|
1623
|
-
this.fragmentLength = 0;
|
|
1624
|
-
this.fragmentReceived = 0;
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
} else {
|
|
1600
|
+
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1601
|
+
const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
|
|
1602
|
+
if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
|
|
1603
|
+
this.fragmentBuffer.set(data, fragStart);
|
|
1604
|
+
this.fragmentReceived += reliableLen;
|
|
1605
|
+
if (this.fragmentReceived >= fragTotal) {
|
|
1606
|
+
reliableData = this.fragmentBuffer;
|
|
1628
1607
|
this.incomingReliableSequence++;
|
|
1629
|
-
|
|
1630
|
-
|
|
1608
|
+
this.fragmentBuffer = null;
|
|
1609
|
+
this.fragmentLength = 0;
|
|
1610
|
+
this.fragmentReceived = 0;
|
|
1631
1611
|
}
|
|
1632
1612
|
}
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
const totalLen = reliableData.length + unreliableData.length;
|
|
1638
|
-
const result = new Uint8Array(totalLen);
|
|
1639
|
-
result.set(reliableData, 0);
|
|
1640
|
-
result.set(unreliableData, reliableData.length);
|
|
1641
|
-
return result;
|
|
1642
|
-
}
|
|
1643
|
-
if (unreliableData) {
|
|
1644
|
-
return unreliableData;
|
|
1645
|
-
}
|
|
1646
|
-
return new Uint8Array(0);
|
|
1647
|
-
}
|
|
1648
|
-
/**
|
|
1649
|
-
* Checks if reliable message buffer is empty and ready for new data
|
|
1650
|
-
*/
|
|
1651
|
-
canSendReliable() {
|
|
1652
|
-
return this.reliableLength === 0;
|
|
1653
|
-
}
|
|
1654
|
-
/**
|
|
1655
|
-
* Writes a byte to the reliable message buffer
|
|
1656
|
-
*/
|
|
1657
|
-
writeReliableByte(value) {
|
|
1658
|
-
if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1659
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1660
|
-
}
|
|
1661
|
-
this.reliableMessage.writeByte(value);
|
|
1662
|
-
this.reliableLength++;
|
|
1663
|
-
}
|
|
1664
|
-
/**
|
|
1665
|
-
* Writes a short to the reliable message buffer
|
|
1666
|
-
*/
|
|
1667
|
-
writeReliableShort(value) {
|
|
1668
|
-
if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1669
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1670
|
-
}
|
|
1671
|
-
this.reliableMessage.writeShort(value);
|
|
1672
|
-
this.reliableLength += 2;
|
|
1673
|
-
}
|
|
1674
|
-
/**
|
|
1675
|
-
* Writes a long to the reliable message buffer
|
|
1676
|
-
*/
|
|
1677
|
-
writeReliableLong(value) {
|
|
1678
|
-
if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1679
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1680
|
-
}
|
|
1681
|
-
this.reliableMessage.writeLong(value);
|
|
1682
|
-
this.reliableLength += 4;
|
|
1683
|
-
}
|
|
1684
|
-
/**
|
|
1685
|
-
* Writes a string to the reliable message buffer
|
|
1686
|
-
*/
|
|
1687
|
-
writeReliableString(value) {
|
|
1688
|
-
const len = value.length + 1;
|
|
1689
|
-
if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1690
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1691
|
-
}
|
|
1692
|
-
this.reliableMessage.writeString(value);
|
|
1693
|
-
this.reliableLength += len;
|
|
1694
|
-
}
|
|
1695
|
-
/**
|
|
1696
|
-
* Returns the current reliable data buffer
|
|
1697
|
-
*/
|
|
1698
|
-
getReliableData() {
|
|
1699
|
-
if (this.reliableLength === 0) {
|
|
1700
|
-
return new Uint8Array(0);
|
|
1613
|
+
} else {
|
|
1614
|
+
this.incomingReliableSequence++;
|
|
1615
|
+
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1616
|
+
reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
|
|
1701
1617
|
}
|
|
1702
|
-
const buffer = this.reliableMessage.getBuffer();
|
|
1703
|
-
return buffer.subarray(0, this.reliableLength);
|
|
1704
1618
|
}
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
}
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1619
|
+
payloadOffset += reliableLen;
|
|
1620
|
+
}
|
|
1621
|
+
const unreliableData = packet.slice(payloadOffset);
|
|
1622
|
+
if (reliableData && reliableData.length > 0) {
|
|
1623
|
+
const totalLen = reliableData.length + unreliableData.length;
|
|
1624
|
+
const result = new Uint8Array(totalLen);
|
|
1625
|
+
result.set(reliableData, 0);
|
|
1626
|
+
result.set(unreliableData, reliableData.length);
|
|
1627
|
+
return result;
|
|
1628
|
+
}
|
|
1629
|
+
if (unreliableData) {
|
|
1630
|
+
return unreliableData;
|
|
1631
|
+
}
|
|
1632
|
+
return new Uint8Array(0);
|
|
1633
|
+
}
|
|
1634
|
+
/**
|
|
1635
|
+
* Checks if reliable message buffer is empty and ready for new data
|
|
1636
|
+
*/
|
|
1637
|
+
canSendReliable() {
|
|
1638
|
+
return this.reliableLength === 0;
|
|
1639
|
+
}
|
|
1640
|
+
/**
|
|
1641
|
+
* Writes a byte to the reliable message buffer
|
|
1642
|
+
*/
|
|
1643
|
+
writeReliableByte(value) {
|
|
1644
|
+
if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1645
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1646
|
+
}
|
|
1647
|
+
this.reliableMessage.writeByte(value);
|
|
1648
|
+
this.reliableLength++;
|
|
1649
|
+
}
|
|
1650
|
+
/**
|
|
1651
|
+
* Writes a short to the reliable message buffer
|
|
1652
|
+
*/
|
|
1653
|
+
writeReliableShort(value) {
|
|
1654
|
+
if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1655
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1656
|
+
}
|
|
1657
|
+
this.reliableMessage.writeShort(value);
|
|
1658
|
+
this.reliableLength += 2;
|
|
1659
|
+
}
|
|
1660
|
+
/**
|
|
1661
|
+
* Writes a long to the reliable message buffer
|
|
1662
|
+
*/
|
|
1663
|
+
writeReliableLong(value) {
|
|
1664
|
+
if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1665
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1666
|
+
}
|
|
1667
|
+
this.reliableMessage.writeLong(value);
|
|
1668
|
+
this.reliableLength += 4;
|
|
1669
|
+
}
|
|
1670
|
+
/**
|
|
1671
|
+
* Writes a string to the reliable message buffer
|
|
1672
|
+
*/
|
|
1673
|
+
writeReliableString(value) {
|
|
1674
|
+
const len = value.length + 1;
|
|
1675
|
+
if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1676
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1677
|
+
}
|
|
1678
|
+
this.reliableMessage.writeString(value);
|
|
1679
|
+
this.reliableLength += len;
|
|
1680
|
+
}
|
|
1681
|
+
/**
|
|
1682
|
+
* Returns the current reliable data buffer
|
|
1683
|
+
*/
|
|
1684
|
+
getReliableData() {
|
|
1685
|
+
if (this.reliableLength === 0) {
|
|
1686
|
+
return new Uint8Array(0);
|
|
1687
|
+
}
|
|
1688
|
+
const buffer = this.reliableMessage.getBuffer();
|
|
1689
|
+
return buffer.subarray(0, this.reliableLength);
|
|
1690
|
+
}
|
|
1691
|
+
/**
|
|
1692
|
+
* Checks if we need to send a keepalive packet
|
|
1693
|
+
*/
|
|
1694
|
+
needsKeepalive(currentTime) {
|
|
1695
|
+
return currentTime - this.lastSent > 1e3;
|
|
1696
|
+
}
|
|
1697
|
+
/**
|
|
1698
|
+
* Checks if the connection has timed out
|
|
1699
|
+
*/
|
|
1700
|
+
isTimedOut(currentTime, timeoutMs = 3e4) {
|
|
1701
|
+
return currentTime - this.lastReceived > timeoutMs;
|
|
1702
|
+
}
|
|
1703
|
+
};
|
|
1704
|
+
_NetChan.MAX_MSGLEN = 1400;
|
|
1705
|
+
_NetChan.FRAGMENT_SIZE = 1024;
|
|
1706
|
+
_NetChan.PACKET_HEADER = 10;
|
|
1707
|
+
_NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
|
|
1708
|
+
_NetChan.MAX_RELIABLE_BUFFER = 262144;
|
|
1709
|
+
var WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1710
|
+
WeaponId22["Blaster"] = "blaster";
|
|
1711
|
+
WeaponId22["Shotgun"] = "shotgun";
|
|
1712
|
+
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1713
|
+
WeaponId22["Machinegun"] = "machinegun";
|
|
1714
|
+
WeaponId22["Chaingun"] = "chaingun";
|
|
1715
|
+
WeaponId22["HandGrenade"] = "grenades";
|
|
1716
|
+
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1717
|
+
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1718
|
+
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1719
|
+
WeaponId22["Railgun"] = "railgun";
|
|
1720
|
+
WeaponId22["BFG10K"] = "bfg10k";
|
|
1721
|
+
WeaponId22["Grapple"] = "grapple";
|
|
1722
|
+
WeaponId22["ChainFist"] = "chainfist";
|
|
1723
|
+
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1724
|
+
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1725
|
+
WeaponId22["IonRipper"] = "ionripper";
|
|
1726
|
+
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1727
|
+
WeaponId22["Phalanx"] = "phalanx";
|
|
1728
|
+
WeaponId22["Disruptor"] = "disruptor";
|
|
1729
|
+
WeaponId22["Trap"] = "trap";
|
|
1730
|
+
return WeaponId22;
|
|
1731
|
+
})(WeaponId || {});
|
|
1732
|
+
var AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1733
|
+
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1734
|
+
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1735
|
+
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1736
|
+
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1737
|
+
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1738
|
+
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1739
|
+
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1740
|
+
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1741
|
+
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1742
|
+
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1743
|
+
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1744
|
+
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1745
|
+
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1746
|
+
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1747
|
+
return AmmoType22;
|
|
1748
|
+
})(AmmoType || {});
|
|
1749
|
+
var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1750
|
+
var AmmoItemId = /* @__PURE__ */ ((AmmoItemId2) => {
|
|
1751
|
+
AmmoItemId2["Shells"] = "ammo_shells";
|
|
1752
|
+
AmmoItemId2["Bullets"] = "ammo_bullets";
|
|
1753
|
+
AmmoItemId2["Rockets"] = "ammo_rockets";
|
|
1754
|
+
AmmoItemId2["Grenades"] = "ammo_grenades";
|
|
1755
|
+
AmmoItemId2["Cells"] = "ammo_cells";
|
|
1756
|
+
AmmoItemId2["Slugs"] = "ammo_slugs";
|
|
1757
|
+
AmmoItemId2["MagSlugs"] = "ammo_magslug";
|
|
1758
|
+
AmmoItemId2["Flechettes"] = "ammo_flechettes";
|
|
1759
|
+
AmmoItemId2["Disruptor"] = "ammo_disruptor";
|
|
1760
|
+
AmmoItemId2["Tesla"] = "ammo_tesla";
|
|
1761
|
+
AmmoItemId2["Trap"] = "ammo_trap";
|
|
1762
|
+
AmmoItemId2["Prox"] = "ammo_prox";
|
|
1763
|
+
return AmmoItemId2;
|
|
1764
|
+
})(AmmoItemId || {});
|
|
1765
|
+
var WEAPON_WHEEL_ORDER = [
|
|
1766
|
+
"blaster",
|
|
1767
|
+
"shotgun",
|
|
1768
|
+
"supershotgun",
|
|
1769
|
+
"machinegun",
|
|
1770
|
+
"chaingun",
|
|
1771
|
+
"grenadelauncher",
|
|
1772
|
+
"rocketlauncher",
|
|
1773
|
+
"grenades",
|
|
1774
|
+
"hyperblaster",
|
|
1775
|
+
"railgun",
|
|
1776
|
+
"bfg10k"
|
|
1777
|
+
/* BFG10K */
|
|
1778
|
+
];
|
|
1779
|
+
var SoundChannel = /* @__PURE__ */ ((SoundChannel2) => {
|
|
1780
|
+
SoundChannel2[SoundChannel2["Auto"] = 0] = "Auto";
|
|
1781
|
+
SoundChannel2[SoundChannel2["Weapon"] = 1] = "Weapon";
|
|
1782
|
+
SoundChannel2[SoundChannel2["Voice"] = 2] = "Voice";
|
|
1783
|
+
SoundChannel2[SoundChannel2["Item"] = 3] = "Item";
|
|
1784
|
+
SoundChannel2[SoundChannel2["Body"] = 4] = "Body";
|
|
1785
|
+
SoundChannel2[SoundChannel2["Aux"] = 5] = "Aux";
|
|
1786
|
+
SoundChannel2[SoundChannel2["Footstep"] = 6] = "Footstep";
|
|
1787
|
+
SoundChannel2[SoundChannel2["Aux3"] = 7] = "Aux3";
|
|
1788
|
+
SoundChannel2[SoundChannel2["NoPhsAdd"] = 8] = "NoPhsAdd";
|
|
1789
|
+
SoundChannel2[SoundChannel2["Reliable"] = 16] = "Reliable";
|
|
1790
|
+
SoundChannel2[SoundChannel2["ForcePos"] = 32] = "ForcePos";
|
|
1791
|
+
return SoundChannel2;
|
|
1792
|
+
})(SoundChannel || {});
|
|
1793
|
+
var ATTN_NORM = 1;
|
|
1794
|
+
var ATTN_IDLE = 2;
|
|
1811
1795
|
|
|
1812
1796
|
// src/inventory/ammo.ts
|
|
1797
|
+
var AMMO_ITEM_DEFINITIONS = {
|
|
1798
|
+
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1799
|
+
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1800
|
+
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1801
|
+
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1802
|
+
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1803
|
+
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1804
|
+
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1805
|
+
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1806
|
+
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1807
|
+
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1808
|
+
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1809
|
+
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1810
|
+
};
|
|
1813
1811
|
function getAmmoItemDefinition(id) {
|
|
1814
1812
|
return AMMO_ITEM_DEFINITIONS[id];
|
|
1815
1813
|
}
|
|
@@ -1863,55 +1861,54 @@ function pickupAmmo(inventory, itemId, options = {}) {
|
|
|
1863
1861
|
const amount = options.countOverride ?? def.quantity;
|
|
1864
1862
|
return addAmmo(inventory, def.ammoType, amount);
|
|
1865
1863
|
}
|
|
1866
|
-
var AMMO_ITEM_DEFINITIONS;
|
|
1867
|
-
var init_ammo = __esm({
|
|
1868
|
-
"src/inventory/ammo.ts"() {
|
|
1869
|
-
"use strict";
|
|
1870
|
-
init_esm();
|
|
1871
|
-
AMMO_ITEM_DEFINITIONS = {
|
|
1872
|
-
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1873
|
-
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1874
|
-
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1875
|
-
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1876
|
-
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1877
|
-
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1878
|
-
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1879
|
-
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1880
|
-
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1881
|
-
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1882
|
-
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1883
|
-
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1884
|
-
};
|
|
1885
|
-
}
|
|
1886
|
-
});
|
|
1887
1864
|
|
|
1888
1865
|
// src/combat/damageFlags.ts
|
|
1866
|
+
var DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1867
|
+
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1868
|
+
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1869
|
+
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1870
|
+
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1871
|
+
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1872
|
+
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1873
|
+
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1874
|
+
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1875
|
+
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1876
|
+
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1877
|
+
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1878
|
+
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1879
|
+
return DamageFlags2;
|
|
1880
|
+
})(DamageFlags || {});
|
|
1889
1881
|
function hasAnyDamageFlag(flags, mask) {
|
|
1890
1882
|
return (flags & mask) !== 0;
|
|
1891
1883
|
}
|
|
1892
|
-
var DamageFlags;
|
|
1893
|
-
var init_damageFlags = __esm({
|
|
1894
|
-
"src/combat/damageFlags.ts"() {
|
|
1895
|
-
"use strict";
|
|
1896
|
-
DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1897
|
-
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1898
|
-
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1899
|
-
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1900
|
-
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1901
|
-
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1902
|
-
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1903
|
-
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1904
|
-
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1905
|
-
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1906
|
-
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1907
|
-
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1908
|
-
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1909
|
-
return DamageFlags2;
|
|
1910
|
-
})(DamageFlags || {});
|
|
1911
|
-
}
|
|
1912
|
-
});
|
|
1913
1884
|
|
|
1914
1885
|
// src/combat/armor.ts
|
|
1886
|
+
var ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1887
|
+
ArmorType2["BODY"] = "body";
|
|
1888
|
+
ArmorType2["COMBAT"] = "combat";
|
|
1889
|
+
ArmorType2["JACKET"] = "jacket";
|
|
1890
|
+
return ArmorType2;
|
|
1891
|
+
})(ArmorType || {});
|
|
1892
|
+
var ARMOR_INFO = {
|
|
1893
|
+
["jacket" /* JACKET */]: {
|
|
1894
|
+
baseCount: 25,
|
|
1895
|
+
maxCount: 50,
|
|
1896
|
+
normalProtection: 0.3,
|
|
1897
|
+
energyProtection: 0
|
|
1898
|
+
},
|
|
1899
|
+
["combat" /* COMBAT */]: {
|
|
1900
|
+
baseCount: 50,
|
|
1901
|
+
maxCount: 100,
|
|
1902
|
+
normalProtection: 0.6,
|
|
1903
|
+
energyProtection: 0.3
|
|
1904
|
+
},
|
|
1905
|
+
["body" /* BODY */]: {
|
|
1906
|
+
baseCount: 100,
|
|
1907
|
+
maxCount: 200,
|
|
1908
|
+
normalProtection: 0.8,
|
|
1909
|
+
energyProtection: 0.6
|
|
1910
|
+
}
|
|
1911
|
+
};
|
|
1915
1912
|
function applyRegularArmor(damage, flags, state) {
|
|
1916
1913
|
if (damage <= 0 || hasAnyDamageFlag(flags, 2 /* NO_ARMOR */ | 128 /* NO_REG_ARMOR */) || !state.armorType || state.armorCount <= 0) {
|
|
1917
1914
|
return { saved: 0, remainingArmor: state.armorCount };
|
|
@@ -1975,42 +1972,28 @@ function applyPowerArmor(damage, flags, hitPoint, _hitNormal, state, options = {
|
|
|
1975
1972
|
const remainingCells = Math.max(0, state.cellCount - cellsSpent);
|
|
1976
1973
|
return { saved, remainingCells };
|
|
1977
1974
|
}
|
|
1978
|
-
var ArmorType, ARMOR_INFO;
|
|
1979
|
-
var init_armor = __esm({
|
|
1980
|
-
"src/combat/armor.ts"() {
|
|
1981
|
-
"use strict";
|
|
1982
|
-
init_esm();
|
|
1983
|
-
init_damageFlags();
|
|
1984
|
-
ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1985
|
-
ArmorType2["BODY"] = "body";
|
|
1986
|
-
ArmorType2["COMBAT"] = "combat";
|
|
1987
|
-
ArmorType2["JACKET"] = "jacket";
|
|
1988
|
-
return ArmorType2;
|
|
1989
|
-
})(ArmorType || {});
|
|
1990
|
-
ARMOR_INFO = {
|
|
1991
|
-
["jacket" /* JACKET */]: {
|
|
1992
|
-
baseCount: 25,
|
|
1993
|
-
maxCount: 50,
|
|
1994
|
-
normalProtection: 0.3,
|
|
1995
|
-
energyProtection: 0
|
|
1996
|
-
},
|
|
1997
|
-
["combat" /* COMBAT */]: {
|
|
1998
|
-
baseCount: 50,
|
|
1999
|
-
maxCount: 100,
|
|
2000
|
-
normalProtection: 0.6,
|
|
2001
|
-
energyProtection: 0.3
|
|
2002
|
-
},
|
|
2003
|
-
["body" /* BODY */]: {
|
|
2004
|
-
baseCount: 100,
|
|
2005
|
-
maxCount: 200,
|
|
2006
|
-
normalProtection: 0.8,
|
|
2007
|
-
energyProtection: 0.6
|
|
2008
|
-
}
|
|
2009
|
-
};
|
|
2010
|
-
}
|
|
2011
|
-
});
|
|
2012
1975
|
|
|
2013
1976
|
// src/inventory/playerInventory.ts
|
|
1977
|
+
var KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
1978
|
+
KeyId2["Blue"] = "key_blue";
|
|
1979
|
+
KeyId2["Red"] = "key_red";
|
|
1980
|
+
KeyId2["Green"] = "key_green";
|
|
1981
|
+
KeyId2["Yellow"] = "key_yellow";
|
|
1982
|
+
KeyId2["DataCD"] = "key_data_cd";
|
|
1983
|
+
KeyId2["PowerCube"] = "key_power_cube";
|
|
1984
|
+
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
1985
|
+
KeyId2["PowerCore"] = "key_power_core";
|
|
1986
|
+
KeyId2["Pyramid"] = "key_pyramid";
|
|
1987
|
+
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
1988
|
+
KeyId2["Pass"] = "key_pass";
|
|
1989
|
+
KeyId2["CommanderHead"] = "key_commander_head";
|
|
1990
|
+
KeyId2["Airstrike"] = "key_airstrike";
|
|
1991
|
+
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
1992
|
+
KeyId2["Nuke"] = "key_nuke";
|
|
1993
|
+
KeyId2["RedFlag"] = "key_red_flag";
|
|
1994
|
+
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
1995
|
+
return KeyId2;
|
|
1996
|
+
})(KeyId || {});
|
|
2014
1997
|
function createPlayerInventory(init = {}) {
|
|
2015
1998
|
const ammoCaps = init.ammoCaps;
|
|
2016
1999
|
const inv = {
|
|
@@ -2312,143 +2295,6 @@ function deserializePlayerInventory(serialized, options = {}) {
|
|
|
2312
2295
|
items: new Set(serialized.items)
|
|
2313
2296
|
};
|
|
2314
2297
|
}
|
|
2315
|
-
var KeyId;
|
|
2316
|
-
var init_playerInventory = __esm({
|
|
2317
|
-
"src/inventory/playerInventory.ts"() {
|
|
2318
|
-
"use strict";
|
|
2319
|
-
init_ammo();
|
|
2320
|
-
init_esm();
|
|
2321
|
-
init_armor();
|
|
2322
|
-
KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
2323
|
-
KeyId2["Blue"] = "key_blue";
|
|
2324
|
-
KeyId2["Red"] = "key_red";
|
|
2325
|
-
KeyId2["Green"] = "key_green";
|
|
2326
|
-
KeyId2["Yellow"] = "key_yellow";
|
|
2327
|
-
KeyId2["DataCD"] = "key_data_cd";
|
|
2328
|
-
KeyId2["PowerCube"] = "key_power_cube";
|
|
2329
|
-
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
2330
|
-
KeyId2["PowerCore"] = "key_power_core";
|
|
2331
|
-
KeyId2["Pyramid"] = "key_pyramid";
|
|
2332
|
-
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
2333
|
-
KeyId2["Pass"] = "key_pass";
|
|
2334
|
-
KeyId2["CommanderHead"] = "key_commander_head";
|
|
2335
|
-
KeyId2["Airstrike"] = "key_airstrike";
|
|
2336
|
-
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
2337
|
-
KeyId2["Nuke"] = "key_nuke";
|
|
2338
|
-
KeyId2["RedFlag"] = "key_red_flag";
|
|
2339
|
-
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
2340
|
-
return KeyId2;
|
|
2341
|
-
})(KeyId || {});
|
|
2342
|
-
}
|
|
2343
|
-
});
|
|
2344
|
-
|
|
2345
|
-
// src/combat/weapons/state.ts
|
|
2346
|
-
function createPlayerWeaponStates() {
|
|
2347
|
-
return {
|
|
2348
|
-
states: /* @__PURE__ */ new Map()
|
|
2349
|
-
};
|
|
2350
|
-
}
|
|
2351
|
-
function getWeaponState(playerStates, weaponId) {
|
|
2352
|
-
let state = playerStates.states.get(weaponId);
|
|
2353
|
-
if (!state) {
|
|
2354
|
-
state = { lastFireTime: 0 };
|
|
2355
|
-
playerStates.states.set(weaponId, state);
|
|
2356
|
-
}
|
|
2357
|
-
return state;
|
|
2358
|
-
}
|
|
2359
|
-
var WeaponStateEnum;
|
|
2360
|
-
var init_state = __esm({
|
|
2361
|
-
"src/combat/weapons/state.ts"() {
|
|
2362
|
-
"use strict";
|
|
2363
|
-
WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
2364
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
2365
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
2366
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
2367
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
2368
|
-
return WeaponStateEnum2;
|
|
2369
|
-
})(WeaponStateEnum || {});
|
|
2370
|
-
}
|
|
2371
|
-
});
|
|
2372
|
-
|
|
2373
|
-
// src/combat/weapons/switching.ts
|
|
2374
|
-
var switching_exports = {};
|
|
2375
|
-
__export(switching_exports, {
|
|
2376
|
-
ChangeWeapon: () => ChangeWeapon,
|
|
2377
|
-
NoAmmoWeaponChange: () => NoAmmoWeaponChange,
|
|
2378
|
-
setInstantSwitch: () => setInstantSwitch,
|
|
2379
|
-
switchToBestWeapon: () => switchToBestWeapon
|
|
2380
|
-
});
|
|
2381
|
-
function setInstantSwitch(enabled) {
|
|
2382
|
-
instantSwitch = enabled;
|
|
2383
|
-
}
|
|
2384
|
-
function ChangeWeapon(ent, weaponId) {
|
|
2385
|
-
if (!ent.client) return;
|
|
2386
|
-
const client = ent.client;
|
|
2387
|
-
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
2388
|
-
return;
|
|
2389
|
-
}
|
|
2390
|
-
if (weaponId) {
|
|
2391
|
-
selectWeapon(client.inventory, weaponId);
|
|
2392
|
-
client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
2393
|
-
client.gun_frame = 0;
|
|
2394
|
-
if (instantSwitch) {
|
|
2395
|
-
client.weaponstate = 0 /* WEAPON_READY */;
|
|
2396
|
-
client.weapon_think_time = 0;
|
|
2397
|
-
return;
|
|
2398
|
-
}
|
|
2399
|
-
client.weapon_think_time = 0;
|
|
2400
|
-
}
|
|
2401
|
-
}
|
|
2402
|
-
function NoAmmoWeaponChange(ent) {
|
|
2403
|
-
if (!ent.client) return;
|
|
2404
|
-
switchToBestWeapon(ent);
|
|
2405
|
-
}
|
|
2406
|
-
function switchToBestWeapon(player) {
|
|
2407
|
-
if (!player.client) {
|
|
2408
|
-
return;
|
|
2409
|
-
}
|
|
2410
|
-
const inventory = player.client.inventory;
|
|
2411
|
-
let bestWeapon = null;
|
|
2412
|
-
if (inventory.ownedWeapons.has(WeaponId.BFG10K) && inventory.ammo.counts[AmmoType.Cells] >= 50) {
|
|
2413
|
-
bestWeapon = WeaponId.BFG10K;
|
|
2414
|
-
} else if (inventory.ownedWeapons.has(WeaponId.RocketLauncher) && inventory.ammo.counts[AmmoType.Rockets] >= 1) {
|
|
2415
|
-
bestWeapon = WeaponId.RocketLauncher;
|
|
2416
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Railgun) && inventory.ammo.counts[AmmoType.Slugs] >= 1) {
|
|
2417
|
-
bestWeapon = WeaponId.Railgun;
|
|
2418
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Chaingun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
2419
|
-
bestWeapon = WeaponId.Chaingun;
|
|
2420
|
-
} else if (inventory.ownedWeapons.has(WeaponId.SuperShotgun) && inventory.ammo.counts[AmmoType.Shells] >= 2) {
|
|
2421
|
-
bestWeapon = WeaponId.SuperShotgun;
|
|
2422
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Machinegun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
2423
|
-
bestWeapon = WeaponId.Machinegun;
|
|
2424
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Shotgun) && inventory.ammo.counts[AmmoType.Shells] >= 1) {
|
|
2425
|
-
bestWeapon = WeaponId.Shotgun;
|
|
2426
|
-
} else {
|
|
2427
|
-
bestWeapon = WeaponId.Blaster;
|
|
2428
|
-
}
|
|
2429
|
-
if (bestWeapon && bestWeapon !== inventory.currentWeapon) {
|
|
2430
|
-
selectWeapon(inventory, bestWeapon);
|
|
2431
|
-
player.client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
2432
|
-
player.client.gun_frame = 0;
|
|
2433
|
-
if (instantSwitch) {
|
|
2434
|
-
player.client.weaponstate = 0 /* WEAPON_READY */;
|
|
2435
|
-
}
|
|
2436
|
-
player.client.weapon_think_time = 0;
|
|
2437
|
-
}
|
|
2438
|
-
}
|
|
2439
|
-
var instantSwitch;
|
|
2440
|
-
var init_switching = __esm({
|
|
2441
|
-
"src/combat/weapons/switching.ts"() {
|
|
2442
|
-
"use strict";
|
|
2443
|
-
init_playerInventory();
|
|
2444
|
-
init_ammo();
|
|
2445
|
-
instantSwitch = false;
|
|
2446
|
-
}
|
|
2447
|
-
});
|
|
2448
|
-
|
|
2449
|
-
// src/entities/entity.ts
|
|
2450
|
-
init_esm();
|
|
2451
|
-
init_playerInventory();
|
|
2452
2298
|
|
|
2453
2299
|
// src/combat/damageMods.ts
|
|
2454
2300
|
var DamageMod = /* @__PURE__ */ ((DamageMod2) => {
|
|
@@ -2578,9 +2424,6 @@ function damageModName(mod) {
|
|
|
2578
2424
|
return `MOD_${DamageMod[mod]}`;
|
|
2579
2425
|
}
|
|
2580
2426
|
|
|
2581
|
-
// src/entities/entity.ts
|
|
2582
|
-
init_ammo();
|
|
2583
|
-
|
|
2584
2427
|
// src/ai/constants.ts
|
|
2585
2428
|
var RANGE_MELEE = 20;
|
|
2586
2429
|
var RANGE_NEAR = 440;
|
|
@@ -3039,19 +2882,7 @@ var ENTITY_FIELD_METADATA = [
|
|
|
3039
2882
|
{ name: "fov", type: "float", save: true }
|
|
3040
2883
|
];
|
|
3041
2884
|
|
|
3042
|
-
// src/entities/system.ts
|
|
3043
|
-
init_esm();
|
|
3044
|
-
|
|
3045
|
-
// src/physics/movement.ts
|
|
3046
|
-
init_esm();
|
|
3047
|
-
|
|
3048
|
-
// src/ai/movement.ts
|
|
3049
|
-
init_esm();
|
|
3050
|
-
init_esm();
|
|
3051
|
-
|
|
3052
2885
|
// src/ai/perception.ts
|
|
3053
|
-
init_esm();
|
|
3054
|
-
init_esm();
|
|
3055
2886
|
var RangeCategory = /* @__PURE__ */ ((RangeCategory6) => {
|
|
3056
2887
|
RangeCategory6["Melee"] = "melee";
|
|
3057
2888
|
RangeCategory6["Near"] = "near";
|
|
@@ -3111,11 +2942,7 @@ function visible(self, other, trace, options) {
|
|
|
3111
2942
|
return result.fraction === 1 || result.ent === other;
|
|
3112
2943
|
}
|
|
3113
2944
|
|
|
3114
|
-
// src/ai/targeting.ts
|
|
3115
|
-
init_esm();
|
|
3116
|
-
|
|
3117
2945
|
// src/ai/monster.ts
|
|
3118
|
-
init_esm();
|
|
3119
2946
|
function M_CheckAttack_Base(self, context, stand_ground_chance, melee_chance, near_chance, mid_chance, far_chance, strafe_scalar) {
|
|
3120
2947
|
if (self.enemy && self.enemy.flags & 1 << 24) {
|
|
3121
2948
|
return false;
|
|
@@ -4028,15 +3855,6 @@ function checkTriggers(ent, system) {
|
|
|
4028
3855
|
}
|
|
4029
3856
|
}
|
|
4030
3857
|
|
|
4031
|
-
// src/combat/specialDamage.ts
|
|
4032
|
-
init_esm();
|
|
4033
|
-
|
|
4034
|
-
// src/combat/damage.ts
|
|
4035
|
-
init_esm();
|
|
4036
|
-
init_armor();
|
|
4037
|
-
init_damageFlags();
|
|
4038
|
-
init_esm();
|
|
4039
|
-
|
|
4040
3858
|
// src/imports.ts
|
|
4041
3859
|
var MulticastType = /* @__PURE__ */ ((MulticastType2) => {
|
|
4042
3860
|
MulticastType2[MulticastType2["All"] = 0] = "All";
|
|
@@ -4356,7 +4174,6 @@ function killBox(teleporter, targets, options = {}) {
|
|
|
4356
4174
|
}
|
|
4357
4175
|
|
|
4358
4176
|
// src/physics/fluid.ts
|
|
4359
|
-
init_esm();
|
|
4360
4177
|
function checkWater2(ent, system, imports) {
|
|
4361
4178
|
const origin = ent.origin;
|
|
4362
4179
|
const mins = ent.mins;
|
|
@@ -4924,9 +4741,6 @@ var ThinkScheduler = class {
|
|
|
4924
4741
|
}
|
|
4925
4742
|
};
|
|
4926
4743
|
|
|
4927
|
-
// src/entities/system.ts
|
|
4928
|
-
init_esm();
|
|
4929
|
-
|
|
4930
4744
|
// src/entities/spatial.ts
|
|
4931
4745
|
var CELL_SIZE = 256;
|
|
4932
4746
|
function getCellKey(x, y, z) {
|
|
@@ -5669,14 +5483,7 @@ var EntitySystem = class {
|
|
|
5669
5483
|
}
|
|
5670
5484
|
};
|
|
5671
5485
|
|
|
5672
|
-
// src/entities/misc.ts
|
|
5673
|
-
init_esm();
|
|
5674
|
-
|
|
5675
|
-
// src/entities/misc/flyers.ts
|
|
5676
|
-
init_esm();
|
|
5677
|
-
|
|
5678
5486
|
// src/entities/utils.ts
|
|
5679
|
-
init_esm();
|
|
5680
5487
|
var VEC_UP = { x: 0, y: -1, z: 0 };
|
|
5681
5488
|
var MOVEDIR_UP = { x: 0, y: 0, z: 1 };
|
|
5682
5489
|
var VEC_DOWN = { x: 0, y: -2, z: 0 };
|
|
@@ -5858,15 +5665,6 @@ function registerMiscBigViper(registry) {
|
|
|
5858
5665
|
});
|
|
5859
5666
|
}
|
|
5860
5667
|
|
|
5861
|
-
// src/entities/misc/viperMissile.ts
|
|
5862
|
-
init_esm();
|
|
5863
|
-
|
|
5864
|
-
// src/entities/projectiles.ts
|
|
5865
|
-
init_esm();
|
|
5866
|
-
|
|
5867
|
-
// src/entities/projectiles/trap.ts
|
|
5868
|
-
init_esm();
|
|
5869
|
-
|
|
5870
5668
|
// src/entities/items/foodcube.ts
|
|
5871
5669
|
var EF_GIB = 8;
|
|
5872
5670
|
function createFoodCubePickupEntity(game) {
|
|
@@ -5893,7 +5691,6 @@ function createFoodCubePickupEntity(game) {
|
|
|
5893
5691
|
}
|
|
5894
5692
|
|
|
5895
5693
|
// src/entities/projectiles/trap.ts
|
|
5896
|
-
init_esm();
|
|
5897
5694
|
function clamp(val, min, max) {
|
|
5898
5695
|
return Math.max(min, Math.min(max, val));
|
|
5899
5696
|
}
|
|
@@ -6668,7 +6465,6 @@ function registerMiscViperMissile(registry) {
|
|
|
6668
6465
|
}
|
|
6669
6466
|
|
|
6670
6467
|
// src/entities/misc/decorative.ts
|
|
6671
|
-
init_esm();
|
|
6672
6468
|
var random = createRandomGenerator();
|
|
6673
6469
|
function misc_satellite_dish_think(self, context) {
|
|
6674
6470
|
self.frame++;
|
|
@@ -7166,7 +6962,6 @@ function registerMiscSpawns(registry) {
|
|
|
7166
6962
|
}
|
|
7167
6963
|
|
|
7168
6964
|
// src/entities/targets.ts
|
|
7169
|
-
init_esm();
|
|
7170
6965
|
var ATTN_NONE = 0;
|
|
7171
6966
|
var ATTN_NORM2 = 1;
|
|
7172
6967
|
var SPEAKER_SPAWNFLAGS = {
|
|
@@ -7913,11 +7708,7 @@ function registerTargetSpawns(registry) {
|
|
|
7913
7708
|
});
|
|
7914
7709
|
}
|
|
7915
7710
|
|
|
7916
|
-
// src/entities/triggers.ts
|
|
7917
|
-
init_esm();
|
|
7918
|
-
|
|
7919
7711
|
// src/entities/triggers/fog.ts
|
|
7920
|
-
init_esm();
|
|
7921
7712
|
function clamp2(value, min, max) {
|
|
7922
7713
|
return Math.min(Math.max(value, min), max);
|
|
7923
7714
|
}
|
|
@@ -8036,7 +7827,6 @@ function registerTriggerFog(registry) {
|
|
|
8036
7827
|
}
|
|
8037
7828
|
|
|
8038
7829
|
// src/entities/triggers/flashlight.ts
|
|
8039
|
-
init_esm();
|
|
8040
7830
|
var registerTriggerFlashlight = (registry) => {
|
|
8041
7831
|
registry.register("trigger_flashlight", (self, context) => {
|
|
8042
7832
|
self.solid = 1 /* Trigger */;
|
|
@@ -8651,28 +8441,32 @@ function registerBadArea(registry) {
|
|
|
8651
8441
|
});
|
|
8652
8442
|
}
|
|
8653
8443
|
|
|
8654
|
-
// src/
|
|
8655
|
-
|
|
8656
|
-
|
|
8657
|
-
|
|
8658
|
-
|
|
8659
|
-
|
|
8660
|
-
|
|
8444
|
+
// src/combat/weapons/state.ts
|
|
8445
|
+
var WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
8446
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
8447
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
8448
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
8449
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
8450
|
+
return WeaponStateEnum2;
|
|
8451
|
+
})(WeaponStateEnum || {});
|
|
8452
|
+
function createPlayerWeaponStates() {
|
|
8453
|
+
return {
|
|
8454
|
+
states: /* @__PURE__ */ new Map()
|
|
8455
|
+
};
|
|
8456
|
+
}
|
|
8457
|
+
function getWeaponState(playerStates, weaponId) {
|
|
8458
|
+
let state = playerStates.states.get(weaponId);
|
|
8459
|
+
if (!state) {
|
|
8460
|
+
state = { lastFireTime: 0 };
|
|
8461
|
+
playerStates.states.set(weaponId, state);
|
|
8462
|
+
}
|
|
8463
|
+
return state;
|
|
8464
|
+
}
|
|
8661
8465
|
|
|
8662
8466
|
// src/buttons.ts
|
|
8663
8467
|
var BUTTON_ATTACK = 1;
|
|
8664
8468
|
|
|
8665
|
-
// src/combat/weapons/animation.ts
|
|
8666
|
-
init_playerInventory();
|
|
8667
|
-
|
|
8668
|
-
// src/combat/weapons/firing.ts
|
|
8669
|
-
init_state();
|
|
8670
|
-
init_playerInventory();
|
|
8671
|
-
init_ammo();
|
|
8672
|
-
init_esm();
|
|
8673
|
-
|
|
8674
8469
|
// src/combat/weapons/projectSource.ts
|
|
8675
|
-
init_esm();
|
|
8676
8470
|
var VIEW_HEIGHT = 22;
|
|
8677
8471
|
function P_ProjectSource(game, ent, offset, forward, right, up) {
|
|
8678
8472
|
const origin = copyVec3(ent.origin);
|
|
@@ -8689,6 +8483,7 @@ function P_ProjectSource(game, ent, offset, forward, right, up) {
|
|
|
8689
8483
|
}
|
|
8690
8484
|
|
|
8691
8485
|
// src/combat/weapons/frames.ts
|
|
8486
|
+
var FRAME_GRENADE_IDLE_LAST = 48;
|
|
8692
8487
|
var FRAME_SHOTGUN_ACTIVATE_LAST = 7;
|
|
8693
8488
|
var FRAME_SHOTGUN_FIRE_LAST = 18;
|
|
8694
8489
|
var FRAME_SHOTGUN_IDLE_LAST = 36;
|
|
@@ -9155,7 +8950,79 @@ function fireBFG(game, player) {
|
|
|
9155
8950
|
}
|
|
9156
8951
|
}
|
|
9157
8952
|
|
|
9158
|
-
// src/combat/weapons/
|
|
8953
|
+
// src/combat/weapons/switching.ts
|
|
8954
|
+
var instantSwitch = false;
|
|
8955
|
+
function getWeaponIdleLastFrame(weaponId) {
|
|
8956
|
+
switch (weaponId) {
|
|
8957
|
+
case WeaponId.HandGrenade:
|
|
8958
|
+
return FRAME_GRENADE_IDLE_LAST;
|
|
8959
|
+
case WeaponId.Shotgun:
|
|
8960
|
+
return FRAME_SHOTGUN_IDLE_LAST;
|
|
8961
|
+
case WeaponId.SuperShotgun:
|
|
8962
|
+
return FRAME_SSHOTGUN_IDLE_LAST;
|
|
8963
|
+
case WeaponId.Machinegun:
|
|
8964
|
+
return FRAME_MACHINEGUN_IDLE_LAST;
|
|
8965
|
+
case WeaponId.Chaingun:
|
|
8966
|
+
return FRAME_CHAINGUN_IDLE_LAST;
|
|
8967
|
+
case WeaponId.Railgun:
|
|
8968
|
+
return FRAME_RAILGUN_IDLE_LAST;
|
|
8969
|
+
case WeaponId.RocketLauncher:
|
|
8970
|
+
return FRAME_ROCKET_IDLE_LAST;
|
|
8971
|
+
case WeaponId.HyperBlaster:
|
|
8972
|
+
return FRAME_HYPERBLASTER_IDLE_LAST;
|
|
8973
|
+
case WeaponId.BFG10K:
|
|
8974
|
+
return FRAME_BFG_IDLE_LAST;
|
|
8975
|
+
case WeaponId.GrenadeLauncher:
|
|
8976
|
+
return FRAME_GRENADELAUNCHER_IDLE_LAST;
|
|
8977
|
+
case WeaponId.Blaster:
|
|
8978
|
+
return FRAME_BLASTER_IDLE_LAST;
|
|
8979
|
+
default:
|
|
8980
|
+
return 0;
|
|
8981
|
+
}
|
|
8982
|
+
}
|
|
8983
|
+
function ChangeWeapon(ent, weaponId) {
|
|
8984
|
+
if (!ent.client) return;
|
|
8985
|
+
const client = ent.client;
|
|
8986
|
+
if (weaponId) {
|
|
8987
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
8988
|
+
client.newWeapon = weaponId;
|
|
8989
|
+
return;
|
|
8990
|
+
}
|
|
8991
|
+
if (client.weaponstate === 0 /* WEAPON_READY */ || client.weaponstate === 3 /* WEAPON_FIRING */) {
|
|
8992
|
+
client.newWeapon = weaponId;
|
|
8993
|
+
client.weaponstate = 2 /* WEAPON_DROPPING */;
|
|
8994
|
+
if (client.inventory.currentWeapon) {
|
|
8995
|
+
client.gun_frame = getWeaponIdleLastFrame(client.inventory.currentWeapon) + 1;
|
|
8996
|
+
} else {
|
|
8997
|
+
client.gun_frame = 0;
|
|
8998
|
+
}
|
|
8999
|
+
if (instantSwitch) {
|
|
9000
|
+
selectWeapon(client.inventory, weaponId);
|
|
9001
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
9002
|
+
client.weapon_think_time = 0;
|
|
9003
|
+
client.newWeapon = void 0;
|
|
9004
|
+
}
|
|
9005
|
+
return;
|
|
9006
|
+
}
|
|
9007
|
+
client.newWeapon = weaponId;
|
|
9008
|
+
return;
|
|
9009
|
+
}
|
|
9010
|
+
if (client.newWeapon) {
|
|
9011
|
+
selectWeapon(client.inventory, client.newWeapon);
|
|
9012
|
+
client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
9013
|
+
client.gun_frame = 0;
|
|
9014
|
+
client.weapon_think_time = 0;
|
|
9015
|
+
client.newWeapon = void 0;
|
|
9016
|
+
}
|
|
9017
|
+
}
|
|
9018
|
+
|
|
9019
|
+
// src/combat/weapons/common.ts
|
|
9020
|
+
function applyKick2(player, pitch, yaw = 0, kickOrigin = 0) {
|
|
9021
|
+
if (player.client) {
|
|
9022
|
+
player.client.kick_angles = { x: pitch, y: yaw, z: 0 };
|
|
9023
|
+
player.client.kick_origin = { x: kickOrigin, y: 0, z: 0 };
|
|
9024
|
+
}
|
|
9025
|
+
}
|
|
9159
9026
|
function Weapon_AnimationTime(ent) {
|
|
9160
9027
|
let time = 0.1;
|
|
9161
9028
|
if (ent.client?.inventory.powerups.has(PowerupId.TechHaste)) {
|
|
@@ -9166,6 +9033,8 @@ function Weapon_AnimationTime(ent) {
|
|
|
9166
9033
|
}
|
|
9167
9034
|
return time;
|
|
9168
9035
|
}
|
|
9036
|
+
|
|
9037
|
+
// src/combat/weapons/animation.ts
|
|
9169
9038
|
function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_DEACTIVATE_LAST, pause_frames, fire_frames, fire, sys) {
|
|
9170
9039
|
if (!ent.client) return;
|
|
9171
9040
|
const client = ent.client;
|
|
@@ -9193,9 +9062,7 @@ function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LA
|
|
|
9193
9062
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
9194
9063
|
return;
|
|
9195
9064
|
}
|
|
9196
|
-
|
|
9197
|
-
ChangeWeapon2(ent);
|
|
9198
|
-
});
|
|
9065
|
+
ChangeWeapon(ent);
|
|
9199
9066
|
return;
|
|
9200
9067
|
}
|
|
9201
9068
|
if (client.weaponstate === 0 /* WEAPON_READY */) {
|
|
@@ -9204,6 +9071,10 @@ function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LA
|
|
|
9204
9071
|
client.gun_frame = FRAME_ACTIVATE_LAST + 1;
|
|
9205
9072
|
return;
|
|
9206
9073
|
}
|
|
9074
|
+
if (client.newWeapon) {
|
|
9075
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9076
|
+
return;
|
|
9077
|
+
}
|
|
9207
9078
|
if (client.gun_frame < FRAME_IDLE_LAST) {
|
|
9208
9079
|
client.gun_frame++;
|
|
9209
9080
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
@@ -9236,6 +9107,10 @@ function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LA
|
|
|
9236
9107
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
9237
9108
|
return;
|
|
9238
9109
|
}
|
|
9110
|
+
if (client.newWeapon) {
|
|
9111
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9112
|
+
return;
|
|
9113
|
+
}
|
|
9239
9114
|
client.weaponstate = 0 /* WEAPON_READY */;
|
|
9240
9115
|
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
9241
9116
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
@@ -9258,6 +9133,10 @@ function Weapon_Repeating(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_
|
|
|
9258
9133
|
if (!(client.buttons & 1)) {
|
|
9259
9134
|
client.gun_frame = FRAME_IDLE_LAST + 1;
|
|
9260
9135
|
client.weaponstate = 0 /* WEAPON_READY */;
|
|
9136
|
+
if (client.newWeapon) {
|
|
9137
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9138
|
+
return;
|
|
9139
|
+
}
|
|
9261
9140
|
}
|
|
9262
9141
|
client.weapon_think_time = sys.timeSeconds + Weapon_AnimationTime(ent);
|
|
9263
9142
|
} else {
|
|
@@ -9282,12 +9161,20 @@ function Throw_Generic(ent, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_THROW_FIRST,
|
|
|
9282
9161
|
return;
|
|
9283
9162
|
}
|
|
9284
9163
|
client.weapon_think_time = time + 0.1;
|
|
9164
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
9165
|
+
ChangeWeapon(ent);
|
|
9166
|
+
return;
|
|
9167
|
+
}
|
|
9285
9168
|
if (client.weaponstate === 0 /* WEAPON_READY */) {
|
|
9286
9169
|
if (client.buttons & 1) {
|
|
9287
9170
|
client.weaponstate = 3 /* WEAPON_FIRING */;
|
|
9288
9171
|
client.gun_frame = FRAME_THROW_FIRST;
|
|
9289
9172
|
return;
|
|
9290
9173
|
}
|
|
9174
|
+
if (client.newWeapon) {
|
|
9175
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9176
|
+
return;
|
|
9177
|
+
}
|
|
9291
9178
|
if (client.gun_frame < FRAME_IDLE_LAST) {
|
|
9292
9179
|
client.gun_frame++;
|
|
9293
9180
|
return;
|
|
@@ -9334,6 +9221,10 @@ function Throw_Generic(ent, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_THROW_FIRST,
|
|
|
9334
9221
|
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
9335
9222
|
client.grenade_time = 0;
|
|
9336
9223
|
client.grenade_blew_up = false;
|
|
9224
|
+
if (client.newWeapon) {
|
|
9225
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9226
|
+
return;
|
|
9227
|
+
}
|
|
9337
9228
|
}
|
|
9338
9229
|
}
|
|
9339
9230
|
|
|
@@ -9399,8 +9290,6 @@ function shotgunThink(player, sys) {
|
|
|
9399
9290
|
}
|
|
9400
9291
|
|
|
9401
9292
|
// src/combat/weapons/supershotgun.ts
|
|
9402
|
-
init_state();
|
|
9403
|
-
init_playerInventory();
|
|
9404
9293
|
var SSHOTGUN_PAUSE_FRAMES = [29, 42, 57];
|
|
9405
9294
|
var SSHOTGUN_FIRE_FRAMES = [22, 28];
|
|
9406
9295
|
function superShotgunThink(player, sys) {
|
|
@@ -9454,8 +9343,6 @@ function rocketLauncherThink(player, sys) {
|
|
|
9454
9343
|
}
|
|
9455
9344
|
|
|
9456
9345
|
// src/combat/weapons/hyperblaster.ts
|
|
9457
|
-
init_state();
|
|
9458
|
-
init_playerInventory();
|
|
9459
9346
|
function hyperBlasterThink(player, sys) {
|
|
9460
9347
|
const weaponState = player.client ? getWeaponState(player.client.weaponStates, WeaponId.HyperBlaster) : null;
|
|
9461
9348
|
if (weaponState && (weaponState.heat || 0) > 0) {
|
|
@@ -9625,17 +9512,6 @@ function blasterThink(player, sys) {
|
|
|
9625
9512
|
);
|
|
9626
9513
|
}
|
|
9627
9514
|
|
|
9628
|
-
// src/combat/weapons/chainfist.ts
|
|
9629
|
-
init_esm();
|
|
9630
|
-
|
|
9631
|
-
// src/combat/weapons/common.ts
|
|
9632
|
-
function applyKick2(player, pitch, yaw = 0, kickOrigin = 0) {
|
|
9633
|
-
if (player.client) {
|
|
9634
|
-
player.client.kick_angles = { x: pitch, y: yaw, z: 0 };
|
|
9635
|
-
player.client.kick_origin = { x: kickOrigin, y: 0, z: 0 };
|
|
9636
|
-
}
|
|
9637
|
-
}
|
|
9638
|
-
|
|
9639
9515
|
// src/combat/weapons/chainfist.ts
|
|
9640
9516
|
var CHAINFIST_REACH = 24;
|
|
9641
9517
|
function firePlayerMeleeBoxFilter(check, data) {
|
|
@@ -9798,8 +9674,6 @@ function Weapon_ChainFist(player, sys) {
|
|
|
9798
9674
|
}
|
|
9799
9675
|
|
|
9800
9676
|
// src/combat/weapons/trap.ts
|
|
9801
|
-
init_ammo();
|
|
9802
|
-
init_esm();
|
|
9803
9677
|
var TRAP_MINSPEED = 300;
|
|
9804
9678
|
var TRAP_MAXSPEED = 700;
|
|
9805
9679
|
function Trap_Think(player, sys) {
|
|
@@ -10182,7 +10056,6 @@ var FLAG_ITEMS = {
|
|
|
10182
10056
|
};
|
|
10183
10057
|
|
|
10184
10058
|
// src/entities/items/common.ts
|
|
10185
|
-
init_esm();
|
|
10186
10059
|
function handleItemPickup(game, self, other, respawnTime = 30) {
|
|
10187
10060
|
if (!game.deathmatch) {
|
|
10188
10061
|
game.entities.free(self);
|
|
@@ -10317,7 +10190,6 @@ function createKeyPickupEntity(game, keyItem) {
|
|
|
10317
10190
|
}
|
|
10318
10191
|
|
|
10319
10192
|
// src/entities/items/ammo.ts
|
|
10320
|
-
init_ammo();
|
|
10321
10193
|
var AMMO_DISPLAY_NAMES = {
|
|
10322
10194
|
[AmmoItemId.Shells]: "Shells",
|
|
10323
10195
|
[AmmoItemId.Bullets]: "Bullets",
|
|
@@ -10380,9 +10252,6 @@ function createPowerArmorPickupEntity(game, item) {
|
|
|
10380
10252
|
};
|
|
10381
10253
|
}
|
|
10382
10254
|
|
|
10383
|
-
// src/modes/ctf/flag.ts
|
|
10384
|
-
init_playerInventory();
|
|
10385
|
-
|
|
10386
10255
|
// src/modes/ctf/state.ts
|
|
10387
10256
|
function setFlagState(flag, newState, context) {
|
|
10388
10257
|
flag.flagState = newState;
|
|
@@ -10449,7 +10318,6 @@ function createFlagPickupEntity(game, flagItem) {
|
|
|
10449
10318
|
}
|
|
10450
10319
|
|
|
10451
10320
|
// src/entities/items.ts
|
|
10452
|
-
init_ammo();
|
|
10453
10321
|
function registerItemSpawns(game, registry) {
|
|
10454
10322
|
registry.register("item_foodcube", (entity) => {
|
|
10455
10323
|
Object.assign(entity, createFoodCubePickupEntity(game));
|
|
@@ -10496,11 +10364,7 @@ function registerItemSpawns(game, registry) {
|
|
|
10496
10364
|
}
|
|
10497
10365
|
}
|
|
10498
10366
|
|
|
10499
|
-
// src/entities/funcs.ts
|
|
10500
|
-
init_esm();
|
|
10501
|
-
|
|
10502
10367
|
// src/entities/gibs.ts
|
|
10503
|
-
init_esm();
|
|
10504
10368
|
var GIB_ORGANIC = 0;
|
|
10505
10369
|
var GIB_METALLIC = 1;
|
|
10506
10370
|
var GIB_DEBRIS = 2;
|
|
@@ -11955,14 +11819,7 @@ function registerLightSpawns(registry) {
|
|
|
11955
11819
|
});
|
|
11956
11820
|
}
|
|
11957
11821
|
|
|
11958
|
-
// src/entities/monsters/berserk.ts
|
|
11959
|
-
init_esm();
|
|
11960
|
-
|
|
11961
|
-
// src/ai/rogue.ts
|
|
11962
|
-
init_esm();
|
|
11963
|
-
|
|
11964
11822
|
// src/entities/monsters/common.ts
|
|
11965
|
-
init_esm();
|
|
11966
11823
|
var MONSTER_TICK2 = 0.1;
|
|
11967
11824
|
function generic_ai_stand(self, dist, context) {
|
|
11968
11825
|
ai_stand(self, dist, context);
|
|
@@ -12773,7 +12630,6 @@ function registerBerserkSpawns(registry) {
|
|
|
12773
12630
|
}
|
|
12774
12631
|
|
|
12775
12632
|
// src/entities/monsters/attack.ts
|
|
12776
|
-
init_esm();
|
|
12777
12633
|
function getDamageScale(skill) {
|
|
12778
12634
|
if (skill >= 3) return 1.5;
|
|
12779
12635
|
if (skill === 2) return 1.25;
|
|
@@ -12985,7 +12841,6 @@ function monster_fire_flechette(self, start, dir, damage, speed, flashtype, cont
|
|
|
12985
12841
|
}
|
|
12986
12842
|
|
|
12987
12843
|
// src/entities/monsters/boss2.ts
|
|
12988
|
-
init_esm();
|
|
12989
12844
|
var MONSTER_TICK4 = 0.1;
|
|
12990
12845
|
var BOSS2_HEALTH = 3e3;
|
|
12991
12846
|
var BOSS2_MASS = 1e3;
|
|
@@ -13190,7 +13045,6 @@ function registerBoss2Spawns(registry) {
|
|
|
13190
13045
|
}
|
|
13191
13046
|
|
|
13192
13047
|
// src/entities/monsters/brain.ts
|
|
13193
|
-
init_esm();
|
|
13194
13048
|
var MONSTER_TICK5 = 0.1;
|
|
13195
13049
|
var MELEE_DISTANCE2 = 80;
|
|
13196
13050
|
function monster_ai_stand3(self, dist, context) {
|
|
@@ -13731,7 +13585,6 @@ function registerBrainSpawns(registry) {
|
|
|
13731
13585
|
}
|
|
13732
13586
|
|
|
13733
13587
|
// src/entities/monsters/chick.ts
|
|
13734
|
-
init_esm();
|
|
13735
13588
|
var MONSTER_TICK6 = 0.1;
|
|
13736
13589
|
var MELEE_DISTANCE3 = 80;
|
|
13737
13590
|
function monster_ai_stand4(self, dist, context) {
|
|
@@ -14321,7 +14174,6 @@ function registerFlipperSpawns(registry) {
|
|
|
14321
14174
|
}
|
|
14322
14175
|
|
|
14323
14176
|
// src/entities/monsters/floater.ts
|
|
14324
|
-
init_esm();
|
|
14325
14177
|
var MONSTER_TICK8 = 0.1;
|
|
14326
14178
|
function monster_ai_stand6(self, dist, context) {
|
|
14327
14179
|
ai_stand(self, dist, context);
|
|
@@ -14482,7 +14334,6 @@ function registerFloaterSpawns(registry) {
|
|
|
14482
14334
|
}
|
|
14483
14335
|
|
|
14484
14336
|
// src/entities/monsters/flyer.ts
|
|
14485
|
-
init_esm();
|
|
14486
14337
|
var MONSTER_TICK9 = 0.1;
|
|
14487
14338
|
function monster_ai_stand7(self, dist, context) {
|
|
14488
14339
|
ai_stand(self, dist, context);
|
|
@@ -14664,7 +14515,6 @@ function registerFlyerSpawns(registry) {
|
|
|
14664
14515
|
}
|
|
14665
14516
|
|
|
14666
14517
|
// src/entities/monsters/gladiator.ts
|
|
14667
|
-
init_esm();
|
|
14668
14518
|
var MONSTER_TICK10 = 0.1;
|
|
14669
14519
|
function monster_ai_stand8(self, dist, context) {
|
|
14670
14520
|
ai_stand(self, dist, context);
|
|
@@ -14872,7 +14722,6 @@ function registerGladiatorSpawns(registry) {
|
|
|
14872
14722
|
}
|
|
14873
14723
|
|
|
14874
14724
|
// src/entities/monsters/gunner.ts
|
|
14875
|
-
init_esm();
|
|
14876
14725
|
var MONSTER_TICK11 = 0.1;
|
|
14877
14726
|
var GUNNER_HEALTH = 175;
|
|
14878
14727
|
var GUNNER_MASS = 200;
|
|
@@ -15305,7 +15154,6 @@ function registerGunnerSpawns(registry) {
|
|
|
15305
15154
|
}
|
|
15306
15155
|
|
|
15307
15156
|
// src/entities/monsters/hover.ts
|
|
15308
|
-
init_esm();
|
|
15309
15157
|
var MONSTER_TICK12 = 0.1;
|
|
15310
15158
|
function monster_ai_stand10(self, dist, context) {
|
|
15311
15159
|
ai_stand(self, dist, context);
|
|
@@ -15463,7 +15311,6 @@ function registerHoverSpawns(registry) {
|
|
|
15463
15311
|
}
|
|
15464
15312
|
|
|
15465
15313
|
// src/entities/monsters/icarus.ts
|
|
15466
|
-
init_esm();
|
|
15467
15314
|
var MONSTER_TICK13 = 0.1;
|
|
15468
15315
|
function monster_ai_stand11(self, dist, context) {
|
|
15469
15316
|
ai_stand(self, dist, context);
|
|
@@ -15621,7 +15468,6 @@ function registerIcarusSpawns(registry) {
|
|
|
15621
15468
|
}
|
|
15622
15469
|
|
|
15623
15470
|
// src/entities/monsters/infantry.ts
|
|
15624
|
-
init_esm();
|
|
15625
15471
|
var MONSTER_TICK14 = 0.1;
|
|
15626
15472
|
var INFANTRY_HEALTH = 100;
|
|
15627
15473
|
var INFANTRY_MASS = 200;
|
|
@@ -15840,7 +15686,6 @@ function registerInfantrySpawns(registry) {
|
|
|
15840
15686
|
}
|
|
15841
15687
|
|
|
15842
15688
|
// src/entities/monsters/makron.ts
|
|
15843
|
-
init_esm();
|
|
15844
15689
|
var MONSTER_TICK15 = 0.1;
|
|
15845
15690
|
var MAKRON_BFG_OFFSET = { x: 30, y: 28, z: 24 };
|
|
15846
15691
|
var MAKRON_BLASTER_OFFSET_1 = { x: 26, y: 16, z: 24 };
|
|
@@ -16090,7 +15935,6 @@ function registerMakronSpawns(registry) {
|
|
|
16090
15935
|
}
|
|
16091
15936
|
|
|
16092
15937
|
// src/entities/monsters/jorg.ts
|
|
16093
|
-
init_esm();
|
|
16094
15938
|
var MONSTER_TICK16 = 0.1;
|
|
16095
15939
|
var JORG_HEALTH = 3e3;
|
|
16096
15940
|
var JORG_MASS = 1e3;
|
|
@@ -17032,8 +16876,6 @@ function registerInsaneSpawns(registry) {
|
|
|
17032
16876
|
}
|
|
17033
16877
|
|
|
17034
16878
|
// src/entities/monsters/actor.ts
|
|
17035
|
-
init_esm();
|
|
17036
|
-
init_esm();
|
|
17037
16879
|
var MONSTER_TICK18 = 0.1;
|
|
17038
16880
|
var MZ2_ACTOR_MACHINEGUN_1 = 0;
|
|
17039
16881
|
var actor_names = [
|
|
@@ -17594,11 +17436,7 @@ function registerActorSpawns(registry) {
|
|
|
17594
17436
|
registry.register("target_actor", SP_target_actor);
|
|
17595
17437
|
}
|
|
17596
17438
|
|
|
17597
|
-
// src/entities/monsters/medic.ts
|
|
17598
|
-
init_esm();
|
|
17599
|
-
|
|
17600
17439
|
// src/ai/spawn_utils.ts
|
|
17601
|
-
init_esm();
|
|
17602
17440
|
function checkSpawnPoint(origin, mins, maxs, context) {
|
|
17603
17441
|
if (!mins || !maxs) return false;
|
|
17604
17442
|
const trace = context.trace(origin, mins, maxs, origin, null, MASK_MONSTERSOLID);
|
|
@@ -18316,7 +18154,6 @@ function registerMedicSpawns(registry) {
|
|
|
18316
18154
|
}
|
|
18317
18155
|
|
|
18318
18156
|
// src/entities/monsters/mutant.ts
|
|
18319
|
-
init_esm();
|
|
18320
18157
|
var MONSTER_TICK20 = 0.1;
|
|
18321
18158
|
function monster_ai_stand16(self, dist, context) {
|
|
18322
18159
|
ai_stand(self, dist, context);
|
|
@@ -18705,7 +18542,6 @@ function registerMutantSpawns(registry) {
|
|
|
18705
18542
|
}
|
|
18706
18543
|
|
|
18707
18544
|
// src/entities/monsters/parasite.ts
|
|
18708
|
-
init_esm();
|
|
18709
18545
|
var MONSTER_TICK21 = 0.1;
|
|
18710
18546
|
var PARASITE_HEALTH = 175;
|
|
18711
18547
|
var PARASITE_MASS = 250;
|
|
@@ -19110,7 +18946,6 @@ function registerParasiteSpawns(registry) {
|
|
|
19110
18946
|
}
|
|
19111
18947
|
|
|
19112
18948
|
// src/entities/monsters/soldier.ts
|
|
19113
|
-
init_esm();
|
|
19114
18949
|
var MONSTER_TICK22 = 0.1;
|
|
19115
18950
|
var SOLDIER_LIGHT = 1;
|
|
19116
18951
|
var SOLDIER_SSG = 2;
|
|
@@ -19458,7 +19293,6 @@ function registerMonsterSpawns(registry) {
|
|
|
19458
19293
|
}
|
|
19459
19294
|
|
|
19460
19295
|
// src/entities/monsters/supertank.ts
|
|
19461
|
-
init_esm();
|
|
19462
19296
|
var MONSTER_TICK23 = 0.1;
|
|
19463
19297
|
var SUPERTANK_MACHINEGUN_OFFSET = { x: 30, y: 30, z: 40 };
|
|
19464
19298
|
var SUPERTANK_ROCKET_OFFSET = { x: 30, y: -30, z: 40 };
|
|
@@ -19687,7 +19521,6 @@ function registerSupertankSpawns(registry) {
|
|
|
19687
19521
|
}
|
|
19688
19522
|
|
|
19689
19523
|
// src/entities/monsters/tank.ts
|
|
19690
|
-
init_esm();
|
|
19691
19524
|
var MONSTER_TICK24 = 0.1;
|
|
19692
19525
|
function tank_blind_check(self, context) {
|
|
19693
19526
|
if (self.monsterinfo.aiflags & 2048 /* ManualSteering */) {
|
|
@@ -20059,7 +19892,6 @@ function registerTankCommanderSpawns(registry) {
|
|
|
20059
19892
|
}
|
|
20060
19893
|
|
|
20061
19894
|
// src/entities/monsters/turret.ts
|
|
20062
|
-
init_esm();
|
|
20063
19895
|
var MONSTER_TICK25 = 0.1;
|
|
20064
19896
|
function monster_ai_stand21(self, dist, context) {
|
|
20065
19897
|
ai_stand(self, dist, context);
|
|
@@ -20211,7 +20043,6 @@ function registerTurretSpawns(registry) {
|
|
|
20211
20043
|
}
|
|
20212
20044
|
|
|
20213
20045
|
// src/entities/monsters/gekk.ts
|
|
20214
|
-
init_esm();
|
|
20215
20046
|
var MONSTER_TICK26 = 0.1;
|
|
20216
20047
|
function monster_ai_stand22(self, dist, context) {
|
|
20217
20048
|
ai_stand(self, dist, context);
|
|
@@ -20852,7 +20683,6 @@ function registerGekkSpawns(registry) {
|
|
|
20852
20683
|
}
|
|
20853
20684
|
|
|
20854
20685
|
// src/entities/monsters/fixbot.ts
|
|
20855
|
-
init_esm();
|
|
20856
20686
|
var MONSTER_TICK27 = 0.1;
|
|
20857
20687
|
function monster_ai_walk21(self, dist, context) {
|
|
20858
20688
|
ai_walk(self, dist, context);
|
|
@@ -21138,7 +20968,6 @@ function registerFixbotSpawns(registry) {
|
|
|
21138
20968
|
}
|
|
21139
20969
|
|
|
21140
20970
|
// src/entities/monsters/arachnid.ts
|
|
21141
|
-
init_esm();
|
|
21142
20971
|
var FRAME_rails1 = 0;
|
|
21143
20972
|
var FRAME_rails4 = 3;
|
|
21144
20973
|
var FRAME_rails8 = 7;
|
|
@@ -21520,7 +21349,6 @@ function registerArachnidSpawns(registry) {
|
|
|
21520
21349
|
}
|
|
21521
21350
|
|
|
21522
21351
|
// src/entities/monsters/gunnerCommander.ts
|
|
21523
|
-
init_esm();
|
|
21524
21352
|
var MONSTER_TICK28 = 0.1;
|
|
21525
21353
|
var MORTAR_SPEED = 850;
|
|
21526
21354
|
var GRENADE_SPEED = 600;
|
|
@@ -22383,7 +22211,6 @@ function registerGunCommanderSpawns(registry) {
|
|
|
22383
22211
|
}
|
|
22384
22212
|
|
|
22385
22213
|
// src/entities/monsters/guardian.ts
|
|
22386
|
-
init_esm();
|
|
22387
22214
|
var MONSTER_TICK29 = 0.1;
|
|
22388
22215
|
var MELEE_DISTANCE6 = 80;
|
|
22389
22216
|
var FRAME_idle12 = 76;
|
|
@@ -22829,7 +22656,6 @@ function registerGuardianSpawns(registry) {
|
|
|
22829
22656
|
}
|
|
22830
22657
|
|
|
22831
22658
|
// src/entities/monsters/rogue/stalker.ts
|
|
22832
|
-
init_esm();
|
|
22833
22659
|
function has_valid_enemy(self) {
|
|
22834
22660
|
return self.enemy !== null && self.enemy.health > 0;
|
|
22835
22661
|
}
|
|
@@ -23310,7 +23136,6 @@ function SP_monster_stalker(self, context) {
|
|
|
23310
23136
|
}
|
|
23311
23137
|
|
|
23312
23138
|
// src/entities/monsters/shambler.ts
|
|
23313
|
-
init_esm();
|
|
23314
23139
|
var MONSTER_TICK30 = 0.1;
|
|
23315
23140
|
var MODEL_SCALE2 = 1;
|
|
23316
23141
|
var MELEE_DISTANCE8 = 80;
|
|
@@ -23727,7 +23552,6 @@ function registerShamblerSpawns(registry) {
|
|
|
23727
23552
|
}
|
|
23728
23553
|
|
|
23729
23554
|
// src/entities/monsters/rogue/widow.ts
|
|
23730
|
-
init_esm();
|
|
23731
23555
|
var MODEL_SCALE3 = 1;
|
|
23732
23556
|
var RANGE_MELEE3 = 100;
|
|
23733
23557
|
var SOUND_PAIN1 = "widow/pain1.wav";
|
|
@@ -24088,7 +23912,6 @@ function registerMonsterSpawns2(registry) {
|
|
|
24088
23912
|
}
|
|
24089
23913
|
|
|
24090
23914
|
// src/entities/worldspawn.ts
|
|
24091
|
-
init_esm();
|
|
24092
23915
|
function SP_worldspawn(self, context) {
|
|
24093
23916
|
self.classname = "worldspawn";
|
|
24094
23917
|
self.movetype = 2 /* Push */;
|
|
@@ -24118,7 +23941,6 @@ function registerWorldSpawn(registry) {
|
|
|
24118
23941
|
}
|
|
24119
23942
|
|
|
24120
23943
|
// src/entities/camera.ts
|
|
24121
|
-
init_esm();
|
|
24122
23944
|
var CAMERA_TELEPORT_OUT = 2;
|
|
24123
23945
|
var CAMERA_SKIPPABLE = 64;
|
|
24124
23946
|
function camera_lookat_pathtarget(self, origin, dest, context) {
|
|
@@ -24689,9 +24511,6 @@ var LevelClock = class {
|
|
|
24689
24511
|
}
|
|
24690
24512
|
};
|
|
24691
24513
|
|
|
24692
|
-
// src/save/save.ts
|
|
24693
|
-
init_esm();
|
|
24694
|
-
|
|
24695
24514
|
// src/checksum.ts
|
|
24696
24515
|
var FNV_OFFSET_BASIS = 2166136261;
|
|
24697
24516
|
var FNV_PRIME = 16777619;
|
|
@@ -25188,7 +25007,6 @@ function applySaveFile(save, targets) {
|
|
|
25188
25007
|
}
|
|
25189
25008
|
|
|
25190
25009
|
// src/save/rerelease.ts
|
|
25191
|
-
init_esm();
|
|
25192
25010
|
function ensureObject2(value, label) {
|
|
25193
25011
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
25194
25012
|
throw new Error(`${label} must be an object`);
|
|
@@ -25611,9 +25429,6 @@ _SaveStorage.DEFAULT_STORE = "saves";
|
|
|
25611
25429
|
_SaveStorage.QUICK_SLOT = "quicksave";
|
|
25612
25430
|
var SaveStorage = _SaveStorage;
|
|
25613
25431
|
|
|
25614
|
-
// src/index.ts
|
|
25615
|
-
init_esm();
|
|
25616
|
-
|
|
25617
25432
|
// src/ai/noise.ts
|
|
25618
25433
|
var PNOISE_SELF = 0;
|
|
25619
25434
|
var PNOISE_WEAPON = 1;
|
|
@@ -25671,12 +25486,7 @@ function PlayerNoise(who, where, type, context) {
|
|
|
25671
25486
|
}
|
|
25672
25487
|
}
|
|
25673
25488
|
|
|
25674
|
-
// src/entities/player.ts
|
|
25675
|
-
init_playerInventory();
|
|
25676
|
-
|
|
25677
25489
|
// src/combat/obituary.ts
|
|
25678
|
-
init_esm();
|
|
25679
|
-
init_esm();
|
|
25680
25490
|
var random4 = createRandomGenerator();
|
|
25681
25491
|
var PRINT_MEDIUM = 1;
|
|
25682
25492
|
function getGender(ent) {
|
|
@@ -25832,9 +25642,6 @@ function ClientObituary(self, inflictor, attacker, mod, sys) {
|
|
|
25832
25642
|
}
|
|
25833
25643
|
}
|
|
25834
25644
|
|
|
25835
|
-
// src/modes/ctf/integration.ts
|
|
25836
|
-
init_playerInventory();
|
|
25837
|
-
|
|
25838
25645
|
// src/modes/ctf/drop.ts
|
|
25839
25646
|
function dropFlag(flag, origin, game, context) {
|
|
25840
25647
|
if (flag.flagState !== 1 /* CARRIED */) {
|
|
@@ -26043,8 +25850,6 @@ function player_think(self, sys) {
|
|
|
26043
25850
|
}
|
|
26044
25851
|
|
|
26045
25852
|
// src/entities/playerStats.ts
|
|
26046
|
-
init_esm();
|
|
26047
|
-
init_playerInventory();
|
|
26048
25853
|
var POWERUP_TIMERS = [
|
|
26049
25854
|
{ id: PowerupId.QuadDamage, priority: 1 },
|
|
26050
25855
|
{ id: PowerupId.Invulnerability, priority: 2 },
|
|
@@ -26110,9 +25915,6 @@ function populatePlayerStats(player, timeSeconds) {
|
|
|
26110
25915
|
return statArray;
|
|
26111
25916
|
}
|
|
26112
25917
|
|
|
26113
|
-
// src/index.ts
|
|
26114
|
-
init_esm();
|
|
26115
|
-
|
|
26116
25918
|
// src/save/adapter.ts
|
|
26117
25919
|
function createSerializedGameState(context) {
|
|
26118
25920
|
const { entitySystem, levelClock, random: random5 } = context;
|