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.
Files changed (26) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +16 -16
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +79 -1
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +80 -2
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/session.d.ts +21 -1
  10. package/packages/client/dist/types/session.d.ts.map +1 -1
  11. package/packages/game/dist/browser/index.global.js +4 -4
  12. package/packages/game/dist/browser/index.global.js.map +1 -1
  13. package/packages/game/dist/cjs/index.cjs +1867 -2058
  14. package/packages/game/dist/cjs/index.cjs.map +1 -1
  15. package/packages/game/dist/esm/index.js +1547 -1745
  16. package/packages/game/dist/esm/index.js.map +1 -1
  17. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  18. package/packages/game/dist/types/combat/weapons/animation.d.ts +0 -7
  19. package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -1
  20. package/packages/game/dist/types/combat/weapons/common.d.ts +7 -0
  21. package/packages/game/dist/types/combat/weapons/common.d.ts.map +1 -1
  22. package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts.map +1 -1
  23. package/packages/game/dist/types/combat/weapons/switching.d.ts +1 -0
  24. package/packages/game/dist/types/combat/weapons/switching.d.ts.map +1 -1
  25. package/packages/game/dist/types/inventory/playerInventory.d.ts +1 -0
  26. 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
- // ../shared/dist/esm/index.js
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 __defProp2, __export2, ZERO_VEC3, STOP_EPSILON, DEG_TO_RAD, PITCH, YAW, ROLL, DEG2RAD_FACTOR, RAD2DEG_FACTOR, ANORMS, STATE_SIZE, MIDDLE_WORD, MATRIX_A, UPPER_MASK, LOWER_MASK, TWO_POW_32, MersenneTwister19937, RandomGenerator, CONTENTS_SOLID, CONTENTS_WINDOW, CONTENTS_AUX, CONTENTS_LAVA, CONTENTS_SLIME, CONTENTS_WATER, CONTENTS_MIST, CONTENTS_NO_WATERJUMP, CONTENTS_PROJECTILECLIP, CONTENTS_AREAPORTAL, CONTENTS_PLAYERCLIP, CONTENTS_MONSTERCLIP, CONTENTS_CURRENT_0, CONTENTS_CURRENT_90, CONTENTS_CURRENT_180, CONTENTS_CURRENT_270, CONTENTS_CURRENT_UP, CONTENTS_CURRENT_DOWN, CONTENTS_ORIGIN, CONTENTS_MONSTER, CONTENTS_DEADMONSTER, CONTENTS_DETAIL, CONTENTS_TRANSLUCENT, CONTENTS_LADDER, CONTENTS_PLAYER, CONTENTS_PROJECTILE, SURF_LIGHT, SURF_SLICK, SURF_SKY, SURF_WARP, SURF_TRANS33, SURF_TRANS66, SURF_FLOWING, SURF_NODRAW, SURF_ALPHATEST, SURF_N64_UV, SURF_N64_SCROLL_X, SURF_N64_SCROLL_Y, SURF_N64_SCROLL_FLIP, MASK_SOLID, MASK_PLAYERSOLID, MASK_DEADSOLID, MASK_MONSTERSOLID, MASK_WATER, MASK_OPAQUE, MASK_SHOT, MASK_CURRENT, MASK_BLOCK_SIGHT, MASK_NAV_SOLID, MASK_LADDER_NAV_SOLID, MASK_WALK_NAV_SOLID, MASK_PROJECTILE, MAX_CHECKCOUNT, CvarFlags, MAX_CLIENTS, MAX_LIGHTSTYLES, MAX_MODELS, MAX_SOUNDS, MAX_IMAGES, MAX_ITEMS, MAX_GENERAL, MAX_SHADOW_LIGHTS, MAX_WHEEL_ITEMS, ConfigStringIndex, MAX_CONFIGSTRINGS, replay_exports, WaterLevel, WATERJUMP_CLEAR, ServerCommand, TempEntity, MZ_BLASTER, MZ_MACHINEGUN, MZ_SHOTGUN, MZ_CHAINGUN1, MZ_RAILGUN, MZ_ROCKET, MZ_GRENADE, MZ_SSHOTGUN, MZ_BFG, MZ_HYPERBLASTER, PowerupId, PlayerStat, AMMO_MAX, NUM_BITS_FOR_AMMO, NUM_AMMO_STATS, POWERUP_MAX, NUM_BITS_FOR_POWERUP, NUM_POWERUP_STATS, POWERUP_STAT_MAP, RenderFx, entityFlags_exports, U_NUMBER, U_MODEL, U_SOUND, U_ORIGIN1, U_ORIGIN2, U_ORIGIN3, U_ANGLE1, U_ANGLE2, U_ANGLE3, U_FRAME, U_SKIN, U_EFFECTS, U_RENDERFX, U_SOLID, U_EVENT, U_MOREBITS, U_MODEL2, U_MODEL3, U_MODEL4, U_REMOVE, FRAMETIME2, MASK_WATER2, WaterLevel3, categorizePosition2, checkWater, applyPmove, BinaryWriter, _NetChan, WeaponId, AmmoType, AMMO_TYPE_COUNT, AmmoItemId, WEAPON_WHEEL_ORDER, SoundChannel, ATTN_NORM, ATTN_IDLE;
438
- var init_esm = __esm({
439
- "../shared/dist/esm/index.js"() {
440
- "use strict";
441
- __defProp2 = Object.defineProperty;
442
- __export2 = (target, all) => {
443
- for (var name in all)
444
- __defProp2(target, name, { get: all[name], enumerable: true });
445
- };
446
- ZERO_VEC3 = { x: 0, y: 0, z: 0 };
447
- STOP_EPSILON = 0.1;
448
- DEG_TO_RAD = Math.PI / 180;
449
- PITCH = 0;
450
- YAW = 1;
451
- ROLL = 2;
452
- DEG2RAD_FACTOR = Math.PI / 180;
453
- RAD2DEG_FACTOR = 180 / Math.PI;
454
- ANORMS = [
455
- [-0.525731, 0, 0.850651],
456
- [-0.442863, 0.238856, 0.864188],
457
- [-0.295242, 0, 0.955423],
458
- [-0.309017, 0.5, 0.809017],
459
- [-0.16246, 0.262866, 0.951056],
460
- [0, 0, 1],
461
- [0, 0.850651, 0.525731],
462
- [-0.147621, 0.716567, 0.681718],
463
- [0.147621, 0.716567, 0.681718],
464
- [0, 0.525731, 0.850651],
465
- [0.309017, 0.5, 0.809017],
466
- [0.525731, 0, 0.850651],
467
- [0.295242, 0, 0.955423],
468
- [0.442863, 0.238856, 0.864188],
469
- [0.16246, 0.262866, 0.951056],
470
- [-0.681718, 0.147621, 0.716567],
471
- [-0.809017, 0.309017, 0.5],
472
- [-0.587785, 0.425325, 0.688191],
473
- [-0.850651, 0.525731, 0],
474
- [-0.864188, 0.442863, 0.238856],
475
- [-0.716567, 0.681718, 0.147621],
476
- [-0.688191, 0.587785, 0.425325],
477
- [-0.5, 0.809017, 0.309017],
478
- [-0.238856, 0.864188, 0.442863],
479
- [-0.425325, 0.688191, 0.587785],
480
- [-0.716567, 0.681718, -0.147621],
481
- [-0.5, 0.809017, -0.309017],
482
- [-0.525731, 0.850651, 0],
483
- [0, 0.850651, -0.525731],
484
- [-0.238856, 0.864188, -0.442863],
485
- [0, 0.955423, -0.295242],
486
- [-0.262866, 0.951056, -0.16246],
487
- [0, 1, 0],
488
- [0, 0.955423, 0.295242],
489
- [-0.262866, 0.951056, 0.16246],
490
- [0.238856, 0.864188, 0.442863],
491
- [0.262866, 0.951056, 0.16246],
492
- [0.5, 0.809017, 0.309017],
493
- [0.238856, 0.864188, -0.442863],
494
- [0.262866, 0.951056, -0.16246],
495
- [0.5, 0.809017, -0.309017],
496
- [0.850651, 0.525731, 0],
497
- [0.716567, 0.681718, 0.147621],
498
- [0.716567, 0.681718, -0.147621],
499
- [0.525731, 0.850651, 0],
500
- [0.425325, 0.688191, 0.587785],
501
- [0.864188, 0.442863, 0.238856],
502
- [0.688191, 0.587785, 0.425325],
503
- [0.809017, 0.309017, 0.5],
504
- [0.681718, 0.147621, 0.716567],
505
- [0.587785, 0.425325, 0.688191],
506
- [0.955423, 0.295242, 0],
507
- [1, 0, 0],
508
- [0.951056, 0.16246, 0.262866],
509
- [0.850651, -0.525731, 0],
510
- [0.955423, -0.295242, 0],
511
- [0.864188, -0.442863, 0.238856],
512
- [0.951056, -0.16246, 0.262866],
513
- [0.809017, -0.309017, 0.5],
514
- [0.681718, -0.147621, 0.716567],
515
- [0.850651, 0, 0.525731],
516
- [0.864188, 0.442863, -0.238856],
517
- [0.809017, 0.309017, -0.5],
518
- [0.951056, 0.16246, -0.262866],
519
- [0.525731, 0, -0.850651],
520
- [0.681718, 0.147621, -0.716567],
521
- [0.681718, -0.147621, -0.716567],
522
- [0.850651, 0, -0.525731],
523
- [0.809017, -0.309017, -0.5],
524
- [0.864188, -0.442863, -0.238856],
525
- [0.951056, -0.16246, -0.262866],
526
- [0.147621, 0.716567, -0.681718],
527
- [0.309017, 0.5, -0.809017],
528
- [0.425325, 0.688191, -0.587785],
529
- [0.442863, 0.238856, -0.864188],
530
- [0.587785, 0.425325, -0.688191],
531
- [0.688191, 0.587785, -0.425325],
532
- [-0.147621, 0.716567, -0.681718],
533
- [-0.309017, 0.5, -0.809017],
534
- [0, 0.525731, -0.850651],
535
- [-0.525731, 0, -0.850651],
536
- [-0.442863, 0.238856, -0.864188],
537
- [-0.295242, 0, -0.955423],
538
- [-0.16246, 0.262866, -0.951056],
539
- [0, 0, -1],
540
- [0.295242, 0, -0.955423],
541
- [0.16246, 0.262866, -0.951056],
542
- [-0.442863, -0.238856, -0.864188],
543
- [-0.309017, -0.5, -0.809017],
544
- [-0.16246, -0.262866, -0.951056],
545
- [0, -0.850651, -0.525731],
546
- [-0.147621, -0.716567, -0.681718],
547
- [0.147621, -0.716567, -0.681718],
548
- [0, -0.525731, -0.850651],
549
- [0.309017, -0.5, -0.809017],
550
- [0.442863, -0.238856, -0.864188],
551
- [0.16246, -0.262866, -0.951056],
552
- [0.238856, -0.864188, -0.442863],
553
- [0.5, -0.809017, -0.309017],
554
- [0.425325, -0.688191, -0.587785],
555
- [0.716567, -0.681718, -0.147621],
556
- [0.688191, -0.587785, -0.425325],
557
- [0.587785, -0.425325, -0.688191],
558
- [0, -0.955423, -0.295242],
559
- [0, -1, 0],
560
- [0.262866, -0.951056, -0.16246],
561
- [0, -0.850651, 0.525731],
562
- [0, -0.955423, 0.295242],
563
- [0.238856, -0.864188, 0.442863],
564
- [0.262866, -0.951056, 0.16246],
565
- [0.5, -0.809017, 0.309017],
566
- [0.716567, -0.681718, 0.147621],
567
- [0.525731, -0.850651, 0],
568
- [-0.238856, -0.864188, -0.442863],
569
- [-0.5, -0.809017, -0.309017],
570
- [-0.262866, -0.951056, -0.16246],
571
- [-0.850651, -0.525731, 0],
572
- [-0.716567, -0.681718, -0.147621],
573
- [-0.716567, -0.681718, 0.147621],
574
- [-0.525731, -0.850651, 0],
575
- [-0.5, -0.809017, 0.309017],
576
- [-0.238856, -0.864188, 0.442863],
577
- [-0.262866, -0.951056, 0.16246],
578
- [-0.864188, -0.442863, 0.238856],
579
- [-0.809017, -0.309017, 0.5],
580
- [-0.688191, -0.587785, 0.425325],
581
- [-0.681718, -0.147621, 0.716567],
582
- [-0.442863, -0.238856, 0.864188],
583
- [-0.587785, -0.425325, 0.688191],
584
- [-0.309017, -0.5, 0.809017],
585
- [-0.147621, -0.716567, 0.681718],
586
- [-0.425325, -0.688191, 0.587785],
587
- [-0.16246, -0.262866, 0.951056],
588
- [0.442863, -0.238856, 0.864188],
589
- [0.16246, -0.262866, 0.951056],
590
- [0.309017, -0.5, 0.809017],
591
- [0.147621, -0.716567, 0.681718],
592
- [0, -0.525731, 0.850651],
593
- [0.425325, -0.688191, 0.587785],
594
- [0.587785, -0.425325, 0.688191],
595
- [0.688191, -0.587785, 0.425325],
596
- [-0.955423, 0.295242, 0],
597
- [-0.951056, 0.16246, 0.262866],
598
- [-1, 0, 0],
599
- [-0.850651, 0, 0.525731],
600
- [-0.955423, -0.295242, 0],
601
- [-0.951056, -0.16246, 0.262866],
602
- [-0.864188, 0.442863, -0.238856],
603
- [-0.951056, 0.16246, -0.262866],
604
- [-0.809017, 0.309017, -0.5],
605
- [-0.864188, -0.442863, -0.238856],
606
- [-0.951056, -0.16246, -0.262866],
607
- [-0.809017, -0.309017, -0.5],
608
- [-0.681718, 0.147621, -0.716567],
609
- [-0.681718, -0.147621, -0.716567],
610
- [-0.850651, 0, -0.525731],
611
- [-0.688191, 0.587785, -0.425325],
612
- [-0.587785, 0.425325, -0.688191],
613
- [-0.425325, 0.688191, -0.587785],
614
- [-0.425325, -0.688191, -0.587785],
615
- [-0.587785, -0.425325, -0.688191],
616
- [-0.688191, -0.587785, -0.425325]
617
- ];
618
- STATE_SIZE = 624;
619
- MIDDLE_WORD = 397;
620
- MATRIX_A = 2567483615;
621
- UPPER_MASK = 2147483648;
622
- LOWER_MASK = 2147483647;
623
- TWO_POW_32 = 4294967296;
624
- MersenneTwister19937 = class {
625
- constructor(seed = 5489) {
626
- this.state = new Uint32Array(STATE_SIZE);
627
- this.index = STATE_SIZE;
628
- this.seed(seed);
629
- }
630
- seed(seed) {
631
- this.state[0] = seed >>> 0;
632
- for (let i = 1; i < STATE_SIZE; i++) {
633
- const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
634
- const next = Math.imul(prev >>> 0, 1812433253) + i;
635
- this.state[i] = next >>> 0;
636
- }
637
- this.index = STATE_SIZE;
638
- }
639
- nextUint32() {
640
- if (this.index >= STATE_SIZE) {
641
- this.twist();
642
- }
643
- let y = this.state[this.index++];
644
- y ^= y >>> 11;
645
- y ^= y << 7 & 2636928640;
646
- y ^= y << 15 & 4022730752;
647
- y ^= y >>> 18;
648
- return y >>> 0;
649
- }
650
- twist() {
651
- for (let i = 0; i < STATE_SIZE; i++) {
652
- const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
653
- let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
654
- if ((y & 1) !== 0) {
655
- next ^= MATRIX_A;
656
- }
657
- this.state[i] = next >>> 0;
658
- }
659
- this.index = 0;
660
- }
661
- getState() {
662
- return {
663
- index: this.index,
664
- state: Array.from(this.state)
665
- };
666
- }
667
- setState(snapshot) {
668
- if (snapshot.state.length !== STATE_SIZE) {
669
- throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
670
- }
671
- this.index = snapshot.index;
672
- this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
673
- }
674
- };
675
- RandomGenerator = class {
676
- constructor(options = {}) {
677
- this.mt = new MersenneTwister19937(options.seed);
678
- }
679
- seed(seed) {
680
- this.mt.seed(seed);
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
- writeDir(dir) {
1397
- let maxDot = -1;
1398
- let bestIndex = 0;
1399
- if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
1400
- this.writeByte(0);
1401
- return;
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
- for (let i = 0; i < ANORMS.length; i++) {
1404
- const norm = ANORMS[i];
1405
- const dot = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
1406
- if (dot > maxDot) {
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.writeByte(bestIndex);
1412
- }
1413
- getData() {
1414
- return this.buffer.slice(0, this.offset);
1415
- }
1416
- getBuffer() {
1417
- return this.buffer;
1418
- }
1419
- getOffset() {
1420
- return this.offset;
1421
- }
1422
- reset() {
1423
- this.offset = 0;
1424
- }
1425
- };
1426
- _NetChan = class _NetChan2 {
1427
- constructor() {
1428
- this.qport = 0;
1429
- this.incomingSequence = 0;
1430
- this.outgoingSequence = 0;
1431
- this.incomingAcknowledged = 0;
1432
- this.incomingReliableAcknowledged = false;
1433
- this.incomingReliableSequence = 0;
1434
- this.outgoingReliableSequence = 0;
1435
- this.reliableLength = 0;
1436
- this.fragmentSendOffset = 0;
1437
- this.fragmentBuffer = null;
1438
- this.fragmentLength = 0;
1439
- this.fragmentReceived = 0;
1440
- this.lastReceived = 0;
1441
- this.lastSent = 0;
1442
- this.remoteAddress = null;
1443
- this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
1444
- const now = Date.now();
1445
- this.lastReceived = now;
1446
- this.lastSent = now;
1447
- this.qport = Math.floor(Math.random() * 65536);
1448
- }
1449
- /**
1450
- * Setup the netchan with specific settings
1451
- */
1452
- setup(qport, address = null) {
1453
- this.qport = qport;
1454
- this.remoteAddress = address;
1455
- this.reset();
1456
- }
1457
- /**
1458
- * Reset the netchan state
1459
- */
1460
- reset() {
1461
- this.incomingSequence = 0;
1462
- this.outgoingSequence = 0;
1463
- this.incomingAcknowledged = 0;
1464
- this.incomingReliableAcknowledged = false;
1465
- this.incomingReliableSequence = 0;
1466
- this.outgoingReliableSequence = 0;
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
- * Transmits a packet containing reliable and unreliable data
1478
- */
1479
- transmit(unreliableData) {
1480
- this.outgoingSequence++;
1481
- this.lastSent = Date.now();
1482
- let sendReliableLength = 0;
1483
- let isFragment = false;
1484
- let fragmentStart = 0;
1485
- if (this.reliableLength > 0) {
1486
- if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
1487
- isFragment = true;
1488
- if (this.fragmentSendOffset >= this.reliableLength) {
1489
- this.fragmentSendOffset = 0;
1490
- }
1491
- const remaining = this.reliableLength - this.fragmentSendOffset;
1492
- sendReliableLength = remaining;
1493
- if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
1494
- sendReliableLength = _NetChan2.FRAGMENT_SIZE;
1495
- }
1496
- fragmentStart = this.fragmentSendOffset;
1497
- this.fragmentSendOffset += sendReliableLength;
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
- const reliableBuffer = this.reliableMessage.getBuffer();
1541
- const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
1542
- result.set(reliableBytes, offset);
1543
- offset += sendReliableLength;
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
- const hasReliableData = (sequence & 2147483648) !== 0;
1588
- const reliableSeqBit = (sequence & 1073741824) !== 0 ? 1 : 0;
1589
- let payloadOffset = _NetChan2.PACKET_HEADER;
1590
- let reliableData = null;
1591
- if (hasReliableData) {
1592
- if (payloadOffset + 2 > packet.byteLength) return null;
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
- if (payloadOffset + reliableLen > packet.byteLength) return null;
1630
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1608
+ this.fragmentBuffer = null;
1609
+ this.fragmentLength = 0;
1610
+ this.fragmentReceived = 0;
1631
1611
  }
1632
1612
  }
1633
- payloadOffset += reliableLen;
1634
- }
1635
- const unreliableData = packet.slice(payloadOffset);
1636
- if (reliableData && reliableData.length > 0) {
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
- * Checks if we need to send a keepalive packet
1707
- */
1708
- needsKeepalive(currentTime) {
1709
- return currentTime - this.lastSent > 1e3;
1710
- }
1711
- /**
1712
- * Checks if the connection has timed out
1713
- */
1714
- isTimedOut(currentTime, timeoutMs = 3e4) {
1715
- return currentTime - this.lastReceived > timeoutMs;
1716
- }
1717
- };
1718
- _NetChan.MAX_MSGLEN = 1400;
1719
- _NetChan.FRAGMENT_SIZE = 1024;
1720
- _NetChan.PACKET_HEADER = 10;
1721
- _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
1722
- _NetChan.MAX_RELIABLE_BUFFER = 262144;
1723
- WeaponId = /* @__PURE__ */ ((WeaponId22) => {
1724
- WeaponId22["Blaster"] = "blaster";
1725
- WeaponId22["Shotgun"] = "shotgun";
1726
- WeaponId22["SuperShotgun"] = "supershotgun";
1727
- WeaponId22["Machinegun"] = "machinegun";
1728
- WeaponId22["Chaingun"] = "chaingun";
1729
- WeaponId22["HandGrenade"] = "grenades";
1730
- WeaponId22["GrenadeLauncher"] = "grenadelauncher";
1731
- WeaponId22["RocketLauncher"] = "rocketlauncher";
1732
- WeaponId22["HyperBlaster"] = "hyperblaster";
1733
- WeaponId22["Railgun"] = "railgun";
1734
- WeaponId22["BFG10K"] = "bfg10k";
1735
- WeaponId22["Grapple"] = "grapple";
1736
- WeaponId22["ChainFist"] = "chainfist";
1737
- WeaponId22["EtfRifle"] = "etf_rifle";
1738
- WeaponId22["ProxLauncher"] = "prox_launcher";
1739
- WeaponId22["IonRipper"] = "ionripper";
1740
- WeaponId22["PlasmaBeam"] = "plasmabeam";
1741
- WeaponId22["Phalanx"] = "phalanx";
1742
- WeaponId22["Disruptor"] = "disruptor";
1743
- WeaponId22["Trap"] = "trap";
1744
- return WeaponId22;
1745
- })(WeaponId || {});
1746
- AmmoType = /* @__PURE__ */ ((AmmoType22) => {
1747
- AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
1748
- AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
1749
- AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
1750
- AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
1751
- AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
1752
- AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
1753
- AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
1754
- AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
1755
- AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
1756
- AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
1757
- AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
1758
- AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
1759
- AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
1760
- AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
1761
- return AmmoType22;
1762
- })(AmmoType || {});
1763
- AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
1764
- AmmoItemId = /* @__PURE__ */ ((AmmoItemId2) => {
1765
- AmmoItemId2["Shells"] = "ammo_shells";
1766
- AmmoItemId2["Bullets"] = "ammo_bullets";
1767
- AmmoItemId2["Rockets"] = "ammo_rockets";
1768
- AmmoItemId2["Grenades"] = "ammo_grenades";
1769
- AmmoItemId2["Cells"] = "ammo_cells";
1770
- AmmoItemId2["Slugs"] = "ammo_slugs";
1771
- AmmoItemId2["MagSlugs"] = "ammo_magslug";
1772
- AmmoItemId2["Flechettes"] = "ammo_flechettes";
1773
- AmmoItemId2["Disruptor"] = "ammo_disruptor";
1774
- AmmoItemId2["Tesla"] = "ammo_tesla";
1775
- AmmoItemId2["Trap"] = "ammo_trap";
1776
- AmmoItemId2["Prox"] = "ammo_prox";
1777
- return AmmoItemId2;
1778
- })(AmmoItemId || {});
1779
- WEAPON_WHEEL_ORDER = [
1780
- "blaster",
1781
- "shotgun",
1782
- "supershotgun",
1783
- "machinegun",
1784
- "chaingun",
1785
- "grenadelauncher",
1786
- "rocketlauncher",
1787
- "grenades",
1788
- "hyperblaster",
1789
- "railgun",
1790
- "bfg10k"
1791
- /* BFG10K */
1792
- ];
1793
- SoundChannel = /* @__PURE__ */ ((SoundChannel2) => {
1794
- SoundChannel2[SoundChannel2["Auto"] = 0] = "Auto";
1795
- SoundChannel2[SoundChannel2["Weapon"] = 1] = "Weapon";
1796
- SoundChannel2[SoundChannel2["Voice"] = 2] = "Voice";
1797
- SoundChannel2[SoundChannel2["Item"] = 3] = "Item";
1798
- SoundChannel2[SoundChannel2["Body"] = 4] = "Body";
1799
- SoundChannel2[SoundChannel2["Aux"] = 5] = "Aux";
1800
- SoundChannel2[SoundChannel2["Footstep"] = 6] = "Footstep";
1801
- SoundChannel2[SoundChannel2["Aux3"] = 7] = "Aux3";
1802
- SoundChannel2[SoundChannel2["NoPhsAdd"] = 8] = "NoPhsAdd";
1803
- SoundChannel2[SoundChannel2["Reliable"] = 16] = "Reliable";
1804
- SoundChannel2[SoundChannel2["ForcePos"] = 32] = "ForcePos";
1805
- return SoundChannel2;
1806
- })(SoundChannel || {});
1807
- ATTN_NORM = 1;
1808
- ATTN_IDLE = 2;
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/inventory/items.ts
8655
- init_ammo();
8656
- init_playerInventory();
8657
-
8658
- // src/combat/weapons/chaingun.ts
8659
- init_state();
8660
- init_playerInventory();
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/animation.ts
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
- Promise.resolve().then(() => (init_switching(), switching_exports)).then(({ ChangeWeapon: ChangeWeapon2 }) => {
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;