quake2ts 0.0.577 → 0.0.579

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 (31) hide show
  1. package/package.json +3 -3
  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 +0 -1
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +0 -1
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/engine/dist/browser/index.global.js +11 -11
  10. package/packages/engine/dist/browser/index.global.js.map +1 -1
  11. package/packages/engine/dist/cjs/index.cjs +4 -167
  12. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  13. package/packages/engine/dist/esm/index.js +4 -167
  14. package/packages/engine/dist/esm/index.js.map +1 -1
  15. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  16. package/packages/engine/dist/types/assets/md2.d.ts +5 -1
  17. package/packages/engine/dist/types/assets/md2.d.ts.map +1 -1
  18. package/packages/engine/dist/types/render/renderer.d.ts +1 -0
  19. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  20. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  21. package/packages/tools/dist/browser/index.global.js +212 -2
  22. package/packages/tools/dist/browser/index.global.js.map +1 -1
  23. package/packages/tools/dist/cjs/index.cjs +971 -2
  24. package/packages/tools/dist/cjs/index.cjs.map +1 -1
  25. package/packages/tools/dist/esm/index.js +969 -1
  26. package/packages/tools/dist/esm/index.js.map +1 -1
  27. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
  28. package/packages/tools/dist/types/bspTools.d.ts +9 -0
  29. package/packages/tools/dist/types/bspTools.d.ts.map +1 -0
  30. package/packages/tools/dist/types/index.d.ts +1 -0
  31. package/packages/tools/dist/types/index.d.ts.map +1 -1
@@ -22,7 +22,8 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  describeAsset: () => describeAsset,
24
24
  exportMd2ToObj: () => exportMd2ToObj,
25
- exportMd3ToGltf: () => exportMd3ToGltf
25
+ exportMd3ToGltf: () => exportMd3ToGltf,
26
+ replaceBspEntities: () => replaceBspEntities
26
27
  });
27
28
  module.exports = __toCommonJS(index_exports);
28
29
 
@@ -193,6 +194,973 @@ function exportMd3ToGltf(model) {
193
194
  };
194
195
  }
195
196
 
197
+ // ../shared/dist/esm/index.js
198
+ var __defProp2 = Object.defineProperty;
199
+ var __export2 = (target, all) => {
200
+ for (var name in all)
201
+ __defProp2(target, name, { get: all[name], enumerable: true });
202
+ };
203
+ var DEG_TO_RAD = Math.PI / 180;
204
+ var DEG2RAD_FACTOR = Math.PI / 180;
205
+ var RAD2DEG_FACTOR = 180 / Math.PI;
206
+ var ANORMS = [
207
+ [-0.525731, 0, 0.850651],
208
+ [-0.442863, 0.238856, 0.864188],
209
+ [-0.295242, 0, 0.955423],
210
+ [-0.309017, 0.5, 0.809017],
211
+ [-0.16246, 0.262866, 0.951056],
212
+ [0, 0, 1],
213
+ [0, 0.850651, 0.525731],
214
+ [-0.147621, 0.716567, 0.681718],
215
+ [0.147621, 0.716567, 0.681718],
216
+ [0, 0.525731, 0.850651],
217
+ [0.309017, 0.5, 0.809017],
218
+ [0.525731, 0, 0.850651],
219
+ [0.295242, 0, 0.955423],
220
+ [0.442863, 0.238856, 0.864188],
221
+ [0.16246, 0.262866, 0.951056],
222
+ [-0.681718, 0.147621, 0.716567],
223
+ [-0.809017, 0.309017, 0.5],
224
+ [-0.587785, 0.425325, 0.688191],
225
+ [-0.850651, 0.525731, 0],
226
+ [-0.864188, 0.442863, 0.238856],
227
+ [-0.716567, 0.681718, 0.147621],
228
+ [-0.688191, 0.587785, 0.425325],
229
+ [-0.5, 0.809017, 0.309017],
230
+ [-0.238856, 0.864188, 0.442863],
231
+ [-0.425325, 0.688191, 0.587785],
232
+ [-0.716567, 0.681718, -0.147621],
233
+ [-0.5, 0.809017, -0.309017],
234
+ [-0.525731, 0.850651, 0],
235
+ [0, 0.850651, -0.525731],
236
+ [-0.238856, 0.864188, -0.442863],
237
+ [0, 0.955423, -0.295242],
238
+ [-0.262866, 0.951056, -0.16246],
239
+ [0, 1, 0],
240
+ [0, 0.955423, 0.295242],
241
+ [-0.262866, 0.951056, 0.16246],
242
+ [0.238856, 0.864188, 0.442863],
243
+ [0.262866, 0.951056, 0.16246],
244
+ [0.5, 0.809017, 0.309017],
245
+ [0.238856, 0.864188, -0.442863],
246
+ [0.262866, 0.951056, -0.16246],
247
+ [0.5, 0.809017, -0.309017],
248
+ [0.850651, 0.525731, 0],
249
+ [0.716567, 0.681718, 0.147621],
250
+ [0.716567, 0.681718, -0.147621],
251
+ [0.525731, 0.850651, 0],
252
+ [0.425325, 0.688191, 0.587785],
253
+ [0.864188, 0.442863, 0.238856],
254
+ [0.688191, 0.587785, 0.425325],
255
+ [0.809017, 0.309017, 0.5],
256
+ [0.681718, 0.147621, 0.716567],
257
+ [0.587785, 0.425325, 0.688191],
258
+ [0.955423, 0.295242, 0],
259
+ [1, 0, 0],
260
+ [0.951056, 0.16246, 0.262866],
261
+ [0.850651, -0.525731, 0],
262
+ [0.955423, -0.295242, 0],
263
+ [0.864188, -0.442863, 0.238856],
264
+ [0.951056, -0.16246, 0.262866],
265
+ [0.809017, -0.309017, 0.5],
266
+ [0.681718, -0.147621, 0.716567],
267
+ [0.850651, 0, 0.525731],
268
+ [0.864188, 0.442863, -0.238856],
269
+ [0.809017, 0.309017, -0.5],
270
+ [0.951056, 0.16246, -0.262866],
271
+ [0.525731, 0, -0.850651],
272
+ [0.681718, 0.147621, -0.716567],
273
+ [0.681718, -0.147621, -0.716567],
274
+ [0.850651, 0, -0.525731],
275
+ [0.809017, -0.309017, -0.5],
276
+ [0.864188, -0.442863, -0.238856],
277
+ [0.951056, -0.16246, -0.262866],
278
+ [0.147621, 0.716567, -0.681718],
279
+ [0.309017, 0.5, -0.809017],
280
+ [0.425325, 0.688191, -0.587785],
281
+ [0.442863, 0.238856, -0.864188],
282
+ [0.587785, 0.425325, -0.688191],
283
+ [0.688191, 0.587785, -0.425325],
284
+ [-0.147621, 0.716567, -0.681718],
285
+ [-0.309017, 0.5, -0.809017],
286
+ [0, 0.525731, -0.850651],
287
+ [-0.525731, 0, -0.850651],
288
+ [-0.442863, 0.238856, -0.864188],
289
+ [-0.295242, 0, -0.955423],
290
+ [-0.16246, 0.262866, -0.951056],
291
+ [0, 0, -1],
292
+ [0.295242, 0, -0.955423],
293
+ [0.16246, 0.262866, -0.951056],
294
+ [-0.442863, -0.238856, -0.864188],
295
+ [-0.309017, -0.5, -0.809017],
296
+ [-0.16246, -0.262866, -0.951056],
297
+ [0, -0.850651, -0.525731],
298
+ [-0.147621, -0.716567, -0.681718],
299
+ [0.147621, -0.716567, -0.681718],
300
+ [0, -0.525731, -0.850651],
301
+ [0.309017, -0.5, -0.809017],
302
+ [0.442863, -0.238856, -0.864188],
303
+ [0.16246, -0.262866, -0.951056],
304
+ [0.238856, -0.864188, -0.442863],
305
+ [0.5, -0.809017, -0.309017],
306
+ [0.425325, -0.688191, -0.587785],
307
+ [0.716567, -0.681718, -0.147621],
308
+ [0.688191, -0.587785, -0.425325],
309
+ [0.587785, -0.425325, -0.688191],
310
+ [0, -0.955423, -0.295242],
311
+ [0, -1, 0],
312
+ [0.262866, -0.951056, -0.16246],
313
+ [0, -0.850651, 0.525731],
314
+ [0, -0.955423, 0.295242],
315
+ [0.238856, -0.864188, 0.442863],
316
+ [0.262866, -0.951056, 0.16246],
317
+ [0.5, -0.809017, 0.309017],
318
+ [0.716567, -0.681718, 0.147621],
319
+ [0.525731, -0.850651, 0],
320
+ [-0.238856, -0.864188, -0.442863],
321
+ [-0.5, -0.809017, -0.309017],
322
+ [-0.262866, -0.951056, -0.16246],
323
+ [-0.850651, -0.525731, 0],
324
+ [-0.716567, -0.681718, -0.147621],
325
+ [-0.716567, -0.681718, 0.147621],
326
+ [-0.525731, -0.850651, 0],
327
+ [-0.5, -0.809017, 0.309017],
328
+ [-0.238856, -0.864188, 0.442863],
329
+ [-0.262866, -0.951056, 0.16246],
330
+ [-0.864188, -0.442863, 0.238856],
331
+ [-0.809017, -0.309017, 0.5],
332
+ [-0.688191, -0.587785, 0.425325],
333
+ [-0.681718, -0.147621, 0.716567],
334
+ [-0.442863, -0.238856, 0.864188],
335
+ [-0.587785, -0.425325, 0.688191],
336
+ [-0.309017, -0.5, 0.809017],
337
+ [-0.147621, -0.716567, 0.681718],
338
+ [-0.425325, -0.688191, 0.587785],
339
+ [-0.16246, -0.262866, 0.951056],
340
+ [0.442863, -0.238856, 0.864188],
341
+ [0.16246, -0.262866, 0.951056],
342
+ [0.309017, -0.5, 0.809017],
343
+ [0.147621, -0.716567, 0.681718],
344
+ [0, -0.525731, 0.850651],
345
+ [0.425325, -0.688191, 0.587785],
346
+ [0.587785, -0.425325, 0.688191],
347
+ [0.688191, -0.587785, 0.425325],
348
+ [-0.955423, 0.295242, 0],
349
+ [-0.951056, 0.16246, 0.262866],
350
+ [-1, 0, 0],
351
+ [-0.850651, 0, 0.525731],
352
+ [-0.955423, -0.295242, 0],
353
+ [-0.951056, -0.16246, 0.262866],
354
+ [-0.864188, 0.442863, -0.238856],
355
+ [-0.951056, 0.16246, -0.262866],
356
+ [-0.809017, 0.309017, -0.5],
357
+ [-0.864188, -0.442863, -0.238856],
358
+ [-0.951056, -0.16246, -0.262866],
359
+ [-0.809017, -0.309017, -0.5],
360
+ [-0.681718, 0.147621, -0.716567],
361
+ [-0.681718, -0.147621, -0.716567],
362
+ [-0.850651, 0, -0.525731],
363
+ [-0.688191, 0.587785, -0.425325],
364
+ [-0.587785, 0.425325, -0.688191],
365
+ [-0.425325, 0.688191, -0.587785],
366
+ [-0.425325, -0.688191, -0.587785],
367
+ [-0.587785, -0.425325, -0.688191],
368
+ [-0.688191, -0.587785, -0.425325]
369
+ ];
370
+ var CONTENTS_SOLID = 1 << 0;
371
+ var CONTENTS_WINDOW = 1 << 1;
372
+ var CONTENTS_AUX = 1 << 2;
373
+ var CONTENTS_LAVA = 1 << 3;
374
+ var CONTENTS_SLIME = 1 << 4;
375
+ var CONTENTS_WATER = 1 << 5;
376
+ var CONTENTS_MIST = 1 << 6;
377
+ var CONTENTS_NO_WATERJUMP = 1 << 13;
378
+ var CONTENTS_PROJECTILECLIP = 1 << 14;
379
+ var CONTENTS_AREAPORTAL = 1 << 15;
380
+ var CONTENTS_PLAYERCLIP = 1 << 16;
381
+ var CONTENTS_MONSTERCLIP = 1 << 17;
382
+ var CONTENTS_CURRENT_0 = 1 << 18;
383
+ var CONTENTS_CURRENT_90 = 1 << 19;
384
+ var CONTENTS_CURRENT_180 = 1 << 20;
385
+ var CONTENTS_CURRENT_270 = 1 << 21;
386
+ var CONTENTS_CURRENT_UP = 1 << 22;
387
+ var CONTENTS_CURRENT_DOWN = 1 << 23;
388
+ var CONTENTS_ORIGIN = 1 << 24;
389
+ var CONTENTS_MONSTER = 1 << 25;
390
+ var CONTENTS_DEADMONSTER = 1 << 26;
391
+ var CONTENTS_DETAIL = 1 << 27;
392
+ var CONTENTS_TRANSLUCENT = 1 << 28;
393
+ var CONTENTS_LADDER = 1 << 29;
394
+ var CONTENTS_PLAYER = 1 << 30;
395
+ var CONTENTS_PROJECTILE = 1 << 31;
396
+ var SURF_LIGHT = 1 << 0;
397
+ var SURF_SLICK = 1 << 1;
398
+ var SURF_SKY = 1 << 2;
399
+ var SURF_WARP = 1 << 3;
400
+ var SURF_TRANS33 = 1 << 4;
401
+ var SURF_TRANS66 = 1 << 5;
402
+ var SURF_FLOWING = 1 << 6;
403
+ var SURF_NODRAW = 1 << 7;
404
+ var SURF_ALPHATEST = 1 << 25;
405
+ var SURF_N64_UV = 1 << 28;
406
+ var SURF_N64_SCROLL_X = 1 << 29;
407
+ var SURF_N64_SCROLL_Y = 1 << 30;
408
+ var SURF_N64_SCROLL_FLIP = 1 << 31;
409
+ var MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
410
+ var MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
411
+ var MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
412
+ var MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
413
+ var MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
414
+ var MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
415
+ var MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
416
+ var MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
417
+ var MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
418
+ var MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
419
+ var MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
420
+ var MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
421
+ var MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
422
+ var MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
423
+ var MAX_CLIENTS = 256;
424
+ var MAX_LIGHTSTYLES = 256;
425
+ var MAX_MODELS = 8192;
426
+ var MAX_SOUNDS = 2048;
427
+ var MAX_IMAGES = 512;
428
+ var MAX_ITEMS = 256;
429
+ var MAX_GENERAL = MAX_CLIENTS * 2;
430
+ var MAX_SHADOW_LIGHTS = 256;
431
+ var MAX_WHEEL_ITEMS = 32;
432
+ var ConfigStringIndex = ((ConfigStringIndex2) => {
433
+ ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
434
+ ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
435
+ ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
436
+ ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
437
+ ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
438
+ ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
439
+ ConfigStringIndex2[ConfigStringIndex2["HealthBarName"] = 55] = "HealthBarName";
440
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
441
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
442
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
443
+ ConfigStringIndex2[ConfigStringIndex2["Story"] = 54] = "Story";
444
+ ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
445
+ ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
446
+ ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
447
+ ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
448
+ ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
449
+ ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
450
+ ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
451
+ ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
452
+ ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
453
+ ConfigStringIndex2[ConfigStringIndex2["Players"] = ConfigStringIndex2.Items + MAX_ITEMS] = "Players";
454
+ ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Players] = "PlayerSkins";
455
+ ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.Players + MAX_CLIENTS] = "General";
456
+ ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
457
+ ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
458
+ ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
459
+ ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
460
+ ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
461
+ ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
462
+ return ConfigStringIndex2;
463
+ })(ConfigStringIndex || {});
464
+ var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
465
+ var CS_SOUNDS = ConfigStringIndex.Sounds;
466
+ var CS_IMAGES = ConfigStringIndex.Images;
467
+ var CS_LIGHTS = ConfigStringIndex.Lights;
468
+ var CS_ITEMS = ConfigStringIndex.Items;
469
+ var CS_PLAYERS = ConfigStringIndex.Players;
470
+ var CS_GENERAL = ConfigStringIndex.General;
471
+ var replay_exports = {};
472
+ __export2(replay_exports, {
473
+ addReplayFrame: () => addReplayFrame,
474
+ createReplaySession: () => createReplaySession,
475
+ deserializeReplay: () => deserializeReplay,
476
+ serializeReplay: () => serializeReplay
477
+ });
478
+ function serializeReplay(session) {
479
+ return JSON.stringify(session, null, 2);
480
+ }
481
+ function deserializeReplay(json) {
482
+ const session = JSON.parse(json);
483
+ if (!session.metadata || !Array.isArray(session.frames)) {
484
+ throw new Error("Invalid replay format: missing metadata or frames");
485
+ }
486
+ return session;
487
+ }
488
+ function createReplaySession(map, seed) {
489
+ return {
490
+ metadata: {
491
+ map,
492
+ date: (/* @__PURE__ */ new Date()).toISOString(),
493
+ version: "1.0",
494
+ seed
495
+ },
496
+ frames: []
497
+ };
498
+ }
499
+ function addReplayFrame(session, cmd, serverFrame, startTime) {
500
+ session.frames.push({
501
+ serverFrame,
502
+ cmd,
503
+ timestamp: Date.now() - startTime
504
+ });
505
+ }
506
+ var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
507
+ var AMMO_MAX = 12;
508
+ var NUM_BITS_FOR_AMMO = 9;
509
+ var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
510
+ var POWERUP_MAX = 23;
511
+ var NUM_BITS_FOR_POWERUP = 2;
512
+ var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
513
+ var U_ORIGIN1 = 1 << 0;
514
+ var U_ORIGIN2 = 1 << 1;
515
+ var U_ANGLE2 = 1 << 2;
516
+ var U_ANGLE3 = 1 << 3;
517
+ var U_FRAME8 = 1 << 4;
518
+ var U_EVENT = 1 << 5;
519
+ var U_REMOVE = 1 << 6;
520
+ var U_MOREBITS1 = 1 << 7;
521
+ var U_NUMBER16 = 1 << 8;
522
+ var U_ORIGIN3 = 1 << 9;
523
+ var U_ANGLE1 = 1 << 10;
524
+ var U_MODEL = 1 << 11;
525
+ var U_RENDERFX8 = 1 << 12;
526
+ var U_ALPHA = 1 << 13;
527
+ var U_EFFECTS8 = 1 << 14;
528
+ var U_MOREBITS2 = 1 << 15;
529
+ var U_SKIN8 = 1 << 16;
530
+ var U_FRAME16 = 1 << 17;
531
+ var U_RENDERFX16 = 1 << 18;
532
+ var U_EFFECTS16 = 1 << 19;
533
+ var U_MODEL2 = 1 << 20;
534
+ var U_MODEL3 = 1 << 21;
535
+ var U_MODEL4 = 1 << 22;
536
+ var U_MOREBITS3 = 1 << 23;
537
+ var U_OLDORIGIN = 1 << 24;
538
+ var U_SKIN16 = 1 << 25;
539
+ var U_SOUND = 1 << 26;
540
+ var U_SOLID = 1 << 27;
541
+ var U_SCALE = 1 << 28;
542
+ var U_INSTANCE_BITS = 1 << 29;
543
+ var U_LOOP_VOLUME = 1 << 30;
544
+ var U_MOREBITS4 = 2147483648 | 0;
545
+ var U_LOOP_ATTENUATION_HIGH = 1 << 0;
546
+ var U_OWNER_HIGH = 1 << 1;
547
+ var U_OLD_FRAME_HIGH = 1 << 2;
548
+ var PS_M_TYPE = 1 << 0;
549
+ var PS_M_ORIGIN = 1 << 1;
550
+ var PS_M_VELOCITY = 1 << 2;
551
+ var PS_M_TIME = 1 << 3;
552
+ var PS_M_FLAGS = 1 << 4;
553
+ var PS_M_GRAVITY = 1 << 5;
554
+ var PS_M_DELTA_ANGLES = 1 << 6;
555
+ var PS_VIEWOFFSET = 1 << 7;
556
+ var PS_VIEWANGLES = 1 << 8;
557
+ var PS_KICKANGLES = 1 << 9;
558
+ var PS_BLEND = 1 << 10;
559
+ var PS_FOV = 1 << 11;
560
+ var PS_WEAPONINDEX = 1 << 12;
561
+ var PS_WEAPONFRAME = 1 << 13;
562
+ var PS_RDFLAGS = 1 << 14;
563
+ var BinaryStream = class {
564
+ constructor(buffer) {
565
+ if (buffer instanceof Uint8Array) {
566
+ this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
567
+ } else {
568
+ this.view = new DataView(buffer);
569
+ }
570
+ this.offset = 0;
571
+ this.length = this.view.byteLength;
572
+ }
573
+ getPosition() {
574
+ return this.offset;
575
+ }
576
+ getReadPosition() {
577
+ return this.offset;
578
+ }
579
+ getLength() {
580
+ return this.length;
581
+ }
582
+ getRemaining() {
583
+ return this.length - this.offset;
584
+ }
585
+ seek(position) {
586
+ if (position < 0 || position > this.length) {
587
+ throw new Error(`Seek out of bounds: ${position} (length: ${this.length})`);
588
+ }
589
+ this.offset = position;
590
+ }
591
+ setReadPosition(position) {
592
+ this.seek(position);
593
+ }
594
+ hasMore() {
595
+ return this.offset < this.length;
596
+ }
597
+ hasBytes(count) {
598
+ return this.offset + count <= this.length;
599
+ }
600
+ readChar() {
601
+ const value = this.view.getInt8(this.offset);
602
+ this.offset += 1;
603
+ return value;
604
+ }
605
+ readByte() {
606
+ const value = this.view.getUint8(this.offset);
607
+ this.offset += 1;
608
+ return value;
609
+ }
610
+ readShort() {
611
+ const value = this.view.getInt16(this.offset, true);
612
+ this.offset += 2;
613
+ return value;
614
+ }
615
+ readUShort() {
616
+ const value = this.view.getUint16(this.offset, true);
617
+ this.offset += 2;
618
+ return value;
619
+ }
620
+ readLong() {
621
+ const value = this.view.getInt32(this.offset, true);
622
+ this.offset += 4;
623
+ return value;
624
+ }
625
+ readULong() {
626
+ const value = this.view.getUint32(this.offset, true);
627
+ this.offset += 4;
628
+ return value;
629
+ }
630
+ readFloat() {
631
+ const value = this.view.getFloat32(this.offset, true);
632
+ this.offset += 4;
633
+ return value;
634
+ }
635
+ readString() {
636
+ let str = "";
637
+ while (this.offset < this.length) {
638
+ const charCode = this.readChar();
639
+ if (charCode === -1 || charCode === 0) {
640
+ break;
641
+ }
642
+ str += String.fromCharCode(charCode);
643
+ }
644
+ return str;
645
+ }
646
+ readStringLine() {
647
+ let str = "";
648
+ while (this.offset < this.length) {
649
+ const charCode = this.readChar();
650
+ if (charCode === -1 || charCode === 0 || charCode === 10) {
651
+ break;
652
+ }
653
+ str += String.fromCharCode(charCode);
654
+ }
655
+ return str;
656
+ }
657
+ readCoord() {
658
+ return this.readShort() * (1 / 8);
659
+ }
660
+ readAngle() {
661
+ return this.readChar() * (360 / 256);
662
+ }
663
+ readAngle16() {
664
+ return this.readShort() * 360 / 65536;
665
+ }
666
+ readData(length) {
667
+ if (this.offset + length > this.length) {
668
+ throw new Error(`Read out of bounds: ${this.offset + length} (length: ${this.length})`);
669
+ }
670
+ const data = new Uint8Array(this.view.buffer, this.view.byteOffset + this.offset, length);
671
+ this.offset += length;
672
+ return new Uint8Array(data);
673
+ }
674
+ readPos(out) {
675
+ out.x = this.readCoord();
676
+ out.y = this.readCoord();
677
+ out.z = this.readCoord();
678
+ }
679
+ readDir(out) {
680
+ const b = this.readByte();
681
+ if (b >= 162) {
682
+ out.x = 0;
683
+ out.y = 0;
684
+ out.z = 0;
685
+ return;
686
+ }
687
+ const norm = ANORMS[b];
688
+ out.x = norm[0];
689
+ out.y = norm[1];
690
+ out.z = norm[2];
691
+ }
692
+ };
693
+ var BinaryWriter = class {
694
+ constructor(sizeOrBuffer = 1400) {
695
+ if (typeof sizeOrBuffer === "number") {
696
+ this.buffer = new Uint8Array(sizeOrBuffer);
697
+ this.fixed = false;
698
+ } else {
699
+ this.buffer = sizeOrBuffer;
700
+ this.fixed = true;
701
+ }
702
+ this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
703
+ this.offset = 0;
704
+ }
705
+ ensureSpace(bytes) {
706
+ if (this.offset + bytes > this.buffer.byteLength) {
707
+ if (this.fixed) {
708
+ throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
709
+ }
710
+ const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
711
+ const newBuffer = new Uint8Array(newSize);
712
+ newBuffer.set(this.buffer);
713
+ this.buffer = newBuffer;
714
+ this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
715
+ }
716
+ }
717
+ writeByte(value) {
718
+ this.ensureSpace(1);
719
+ this.view.setUint8(this.offset, value);
720
+ this.offset += 1;
721
+ }
722
+ writeBytes(data) {
723
+ this.ensureSpace(data.byteLength);
724
+ this.buffer.set(data, this.offset);
725
+ this.offset += data.byteLength;
726
+ }
727
+ writeChar(value) {
728
+ this.ensureSpace(1);
729
+ this.view.setInt8(this.offset, value);
730
+ this.offset += 1;
731
+ }
732
+ writeShort(value) {
733
+ this.ensureSpace(2);
734
+ this.view.setInt16(this.offset, value, true);
735
+ this.offset += 2;
736
+ }
737
+ writeLong(value) {
738
+ this.ensureSpace(4);
739
+ this.view.setInt32(this.offset, value, true);
740
+ this.offset += 4;
741
+ }
742
+ writeFloat(value) {
743
+ this.ensureSpace(4);
744
+ this.view.setFloat32(this.offset, value, true);
745
+ this.offset += 4;
746
+ }
747
+ writeString(value) {
748
+ const len = value.length;
749
+ this.ensureSpace(len + 1);
750
+ for (let i = 0; i < len; i++) {
751
+ this.view.setUint8(this.offset + i, value.charCodeAt(i));
752
+ }
753
+ this.view.setUint8(this.offset + len, 0);
754
+ this.offset += len + 1;
755
+ }
756
+ writeCoord(value) {
757
+ this.writeShort(Math.trunc(value * 8));
758
+ }
759
+ writeAngle(value) {
760
+ this.writeByte(Math.trunc(value * 256 / 360) & 255);
761
+ }
762
+ writeAngle16(value) {
763
+ this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
764
+ }
765
+ writePos(pos) {
766
+ this.writeCoord(pos.x);
767
+ this.writeCoord(pos.y);
768
+ this.writeCoord(pos.z);
769
+ }
770
+ writeDir(dir) {
771
+ let maxDot = -1;
772
+ let bestIndex = 0;
773
+ if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
774
+ this.writeByte(0);
775
+ return;
776
+ }
777
+ for (let i = 0; i < ANORMS.length; i++) {
778
+ const norm = ANORMS[i];
779
+ const dot = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
780
+ if (dot > maxDot) {
781
+ maxDot = dot;
782
+ bestIndex = i;
783
+ }
784
+ }
785
+ this.writeByte(bestIndex);
786
+ }
787
+ getData() {
788
+ return this.buffer.slice(0, this.offset);
789
+ }
790
+ getBuffer() {
791
+ return this.buffer;
792
+ }
793
+ getOffset() {
794
+ return this.offset;
795
+ }
796
+ reset() {
797
+ this.offset = 0;
798
+ }
799
+ };
800
+ var _NetChan = class _NetChan2 {
801
+ constructor() {
802
+ this.qport = 0;
803
+ this.incomingSequence = 0;
804
+ this.outgoingSequence = 0;
805
+ this.incomingAcknowledged = 0;
806
+ this.incomingReliableAcknowledged = false;
807
+ this.incomingReliableSequence = 0;
808
+ this.outgoingReliableSequence = 0;
809
+ this.reliableLength = 0;
810
+ this.fragmentSendOffset = 0;
811
+ this.fragmentBuffer = null;
812
+ this.fragmentLength = 0;
813
+ this.fragmentReceived = 0;
814
+ this.lastReceived = 0;
815
+ this.lastSent = 0;
816
+ this.remoteAddress = null;
817
+ this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
818
+ const now = Date.now();
819
+ this.lastReceived = now;
820
+ this.lastSent = now;
821
+ this.qport = Math.floor(Math.random() * 65536);
822
+ }
823
+ /**
824
+ * Setup the netchan with specific settings
825
+ */
826
+ setup(qport, address = null) {
827
+ this.qport = qport;
828
+ this.remoteAddress = address;
829
+ this.reset();
830
+ }
831
+ /**
832
+ * Reset the netchan state
833
+ */
834
+ reset() {
835
+ this.incomingSequence = 0;
836
+ this.outgoingSequence = 0;
837
+ this.incomingAcknowledged = 0;
838
+ this.incomingReliableAcknowledged = false;
839
+ this.incomingReliableSequence = 0;
840
+ this.outgoingReliableSequence = 0;
841
+ this.reliableLength = 0;
842
+ this.reliableMessage.reset();
843
+ this.fragmentSendOffset = 0;
844
+ this.fragmentBuffer = null;
845
+ this.fragmentLength = 0;
846
+ this.fragmentReceived = 0;
847
+ this.lastReceived = Date.now();
848
+ this.lastSent = Date.now();
849
+ }
850
+ /**
851
+ * Transmits a packet containing reliable and unreliable data
852
+ */
853
+ transmit(unreliableData) {
854
+ this.outgoingSequence++;
855
+ this.lastSent = Date.now();
856
+ let sendReliableLength = 0;
857
+ let isFragment = false;
858
+ let fragmentStart = 0;
859
+ if (this.reliableLength > 0) {
860
+ if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
861
+ isFragment = true;
862
+ if (this.fragmentSendOffset >= this.reliableLength) {
863
+ this.fragmentSendOffset = 0;
864
+ }
865
+ const remaining = this.reliableLength - this.fragmentSendOffset;
866
+ sendReliableLength = remaining;
867
+ if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
868
+ sendReliableLength = _NetChan2.FRAGMENT_SIZE;
869
+ }
870
+ fragmentStart = this.fragmentSendOffset;
871
+ this.fragmentSendOffset += sendReliableLength;
872
+ } else {
873
+ sendReliableLength = this.reliableLength;
874
+ }
875
+ }
876
+ const headerSize = _NetChan2.PACKET_HEADER;
877
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
878
+ let unreliableSize = unreliableData ? unreliableData.length : 0;
879
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
880
+ unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
881
+ if (unreliableSize < 0) unreliableSize = 0;
882
+ }
883
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
884
+ const view = new DataView(buffer);
885
+ const result = new Uint8Array(buffer);
886
+ let sequence = this.outgoingSequence;
887
+ if (sendReliableLength > 0) {
888
+ sequence |= 2147483648;
889
+ if ((this.outgoingReliableSequence & 1) !== 0) {
890
+ sequence |= 1073741824;
891
+ }
892
+ }
893
+ view.setUint32(0, sequence, true);
894
+ let ack = this.incomingSequence;
895
+ if ((this.incomingReliableSequence & 1) !== 0) {
896
+ ack |= 2147483648;
897
+ }
898
+ view.setUint32(4, ack, true);
899
+ view.setUint16(8, this.qport, true);
900
+ let offset = headerSize;
901
+ if (sendReliableLength > 0) {
902
+ let lengthField = sendReliableLength;
903
+ if (isFragment) {
904
+ lengthField |= 32768;
905
+ }
906
+ view.setUint16(offset, lengthField, true);
907
+ offset += 2;
908
+ if (isFragment) {
909
+ view.setUint32(offset, fragmentStart, true);
910
+ offset += 4;
911
+ view.setUint32(offset, this.reliableLength, true);
912
+ offset += 4;
913
+ }
914
+ const reliableBuffer = this.reliableMessage.getBuffer();
915
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
916
+ result.set(reliableBytes, offset);
917
+ offset += sendReliableLength;
918
+ }
919
+ if (unreliableData && unreliableSize > 0) {
920
+ const chunk = unreliableData.slice(0, unreliableSize);
921
+ result.set(chunk, offset);
922
+ }
923
+ return result;
924
+ }
925
+ /**
926
+ * Processes a received packet
927
+ * Returns the payload data (reliable + unreliable) to be processed, or null if discarded
928
+ */
929
+ process(packet) {
930
+ if (packet.length < _NetChan2.PACKET_HEADER) {
931
+ return null;
932
+ }
933
+ this.lastReceived = Date.now();
934
+ const view = new DataView(packet.buffer, packet.byteOffset, packet.byteLength);
935
+ const sequence = view.getUint32(0, true);
936
+ const ack = view.getUint32(4, true);
937
+ const qport = view.getUint16(8, true);
938
+ if (this.qport !== qport) {
939
+ return null;
940
+ }
941
+ const seqNumberClean = sequence & ~(2147483648 | 1073741824);
942
+ if ((seqNumberClean - this.incomingSequence | 0) <= 0) {
943
+ return null;
944
+ }
945
+ this.incomingSequence = seqNumberClean;
946
+ const ackNumber = ack & ~2147483648;
947
+ const ackReliable = (ack & 2147483648) !== 0;
948
+ if (ackNumber > this.incomingAcknowledged) {
949
+ this.incomingAcknowledged = ackNumber;
950
+ }
951
+ if (this.reliableLength > 0) {
952
+ const receivedAckBit = ackReliable ? 1 : 0;
953
+ const currentReliableBit = this.outgoingReliableSequence & 1;
954
+ if (receivedAckBit !== currentReliableBit) {
955
+ this.reliableLength = 0;
956
+ this.reliableMessage.reset();
957
+ this.outgoingReliableSequence ^= 1;
958
+ this.fragmentSendOffset = 0;
959
+ }
960
+ }
961
+ const hasReliableData = (sequence & 2147483648) !== 0;
962
+ const reliableSeqBit = (sequence & 1073741824) !== 0 ? 1 : 0;
963
+ let payloadOffset = _NetChan2.PACKET_HEADER;
964
+ let reliableData = null;
965
+ if (hasReliableData) {
966
+ if (payloadOffset + 2 > packet.byteLength) return null;
967
+ let reliableLen = view.getUint16(payloadOffset, true);
968
+ payloadOffset += 2;
969
+ const isFragment = (reliableLen & 32768) !== 0;
970
+ reliableLen &= 32767;
971
+ const expectedBit = this.incomingReliableSequence & 1;
972
+ if (reliableSeqBit === expectedBit) {
973
+ if (isFragment) {
974
+ if (payloadOffset + 8 > packet.byteLength) return null;
975
+ const fragStart = view.getUint32(payloadOffset, true);
976
+ payloadOffset += 4;
977
+ const fragTotal = view.getUint32(payloadOffset, true);
978
+ payloadOffset += 4;
979
+ if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
980
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
981
+ return null;
982
+ }
983
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
984
+ this.fragmentBuffer = new Uint8Array(fragTotal);
985
+ this.fragmentLength = fragTotal;
986
+ this.fragmentReceived = 0;
987
+ }
988
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
989
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
990
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
991
+ this.fragmentBuffer.set(data, fragStart);
992
+ this.fragmentReceived += reliableLen;
993
+ if (this.fragmentReceived >= fragTotal) {
994
+ reliableData = this.fragmentBuffer;
995
+ this.incomingReliableSequence++;
996
+ this.fragmentBuffer = null;
997
+ this.fragmentLength = 0;
998
+ this.fragmentReceived = 0;
999
+ }
1000
+ }
1001
+ } else {
1002
+ this.incomingReliableSequence++;
1003
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1004
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1005
+ }
1006
+ }
1007
+ payloadOffset += reliableLen;
1008
+ }
1009
+ const unreliableData = packet.slice(payloadOffset);
1010
+ if (reliableData && reliableData.length > 0) {
1011
+ const totalLen = reliableData.length + unreliableData.length;
1012
+ const result = new Uint8Array(totalLen);
1013
+ result.set(reliableData, 0);
1014
+ result.set(unreliableData, reliableData.length);
1015
+ return result;
1016
+ }
1017
+ if (unreliableData) {
1018
+ return unreliableData;
1019
+ }
1020
+ return new Uint8Array(0);
1021
+ }
1022
+ /**
1023
+ * Checks if reliable message buffer is empty and ready for new data
1024
+ */
1025
+ canSendReliable() {
1026
+ return this.reliableLength === 0;
1027
+ }
1028
+ /**
1029
+ * Writes a byte to the reliable message buffer
1030
+ */
1031
+ writeReliableByte(value) {
1032
+ if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
1033
+ throw new Error("NetChan reliable buffer overflow");
1034
+ }
1035
+ this.reliableMessage.writeByte(value);
1036
+ this.reliableLength++;
1037
+ }
1038
+ /**
1039
+ * Writes a short to the reliable message buffer
1040
+ */
1041
+ writeReliableShort(value) {
1042
+ if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
1043
+ throw new Error("NetChan reliable buffer overflow");
1044
+ }
1045
+ this.reliableMessage.writeShort(value);
1046
+ this.reliableLength += 2;
1047
+ }
1048
+ /**
1049
+ * Writes a long to the reliable message buffer
1050
+ */
1051
+ writeReliableLong(value) {
1052
+ if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
1053
+ throw new Error("NetChan reliable buffer overflow");
1054
+ }
1055
+ this.reliableMessage.writeLong(value);
1056
+ this.reliableLength += 4;
1057
+ }
1058
+ /**
1059
+ * Writes a string to the reliable message buffer
1060
+ */
1061
+ writeReliableString(value) {
1062
+ const len = value.length + 1;
1063
+ if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
1064
+ throw new Error("NetChan reliable buffer overflow");
1065
+ }
1066
+ this.reliableMessage.writeString(value);
1067
+ this.reliableLength += len;
1068
+ }
1069
+ /**
1070
+ * Returns the current reliable data buffer
1071
+ */
1072
+ getReliableData() {
1073
+ if (this.reliableLength === 0) {
1074
+ return new Uint8Array(0);
1075
+ }
1076
+ const buffer = this.reliableMessage.getBuffer();
1077
+ return buffer.subarray(0, this.reliableLength);
1078
+ }
1079
+ /**
1080
+ * Checks if we need to send a keepalive packet
1081
+ */
1082
+ needsKeepalive(currentTime) {
1083
+ return currentTime - this.lastSent > 1e3;
1084
+ }
1085
+ /**
1086
+ * Checks if the connection has timed out
1087
+ */
1088
+ isTimedOut(currentTime, timeoutMs = 3e4) {
1089
+ return currentTime - this.lastReceived > timeoutMs;
1090
+ }
1091
+ };
1092
+ _NetChan.MAX_MSGLEN = 1400;
1093
+ _NetChan.FRAGMENT_SIZE = 1024;
1094
+ _NetChan.PACKET_HEADER = 10;
1095
+ _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
1096
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
1097
+ var AmmoType = /* @__PURE__ */ ((AmmoType2) => {
1098
+ AmmoType2[AmmoType2["Bullets"] = 0] = "Bullets";
1099
+ AmmoType2[AmmoType2["Shells"] = 1] = "Shells";
1100
+ AmmoType2[AmmoType2["Rockets"] = 2] = "Rockets";
1101
+ AmmoType2[AmmoType2["Grenades"] = 3] = "Grenades";
1102
+ AmmoType2[AmmoType2["Cells"] = 4] = "Cells";
1103
+ AmmoType2[AmmoType2["Slugs"] = 5] = "Slugs";
1104
+ AmmoType2[AmmoType2["MagSlugs"] = 6] = "MagSlugs";
1105
+ AmmoType2[AmmoType2["Trap"] = 7] = "Trap";
1106
+ AmmoType2[AmmoType2["Flechettes"] = 8] = "Flechettes";
1107
+ AmmoType2[AmmoType2["Tesla"] = 9] = "Tesla";
1108
+ AmmoType2[AmmoType2["Disruptor"] = 10] = "Disruptor";
1109
+ AmmoType2[AmmoType2["Prox"] = 11] = "Prox";
1110
+ AmmoType2[AmmoType2["Nuke"] = 12] = "Nuke";
1111
+ AmmoType2[AmmoType2["Rounds"] = 13] = "Rounds";
1112
+ return AmmoType2;
1113
+ })(AmmoType || {});
1114
+ var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
1115
+
1116
+ // src/bspTools.ts
1117
+ var import_engine = require("@quake2ts/engine");
1118
+ function replaceBspEntities(bspData, entities) {
1119
+ const reader = new BinaryStream(bspData);
1120
+ const magic = reader.readLong();
1121
+ const version = reader.readLong();
1122
+ if (magic !== 1347633737 || version !== 38) {
1123
+ throw new Error("Invalid BSP file");
1124
+ }
1125
+ const LUMP_ENTITIES = 0;
1126
+ const lumps = [];
1127
+ for (let i = 0; i < 19; i++) {
1128
+ lumps.push({
1129
+ offset: reader.readLong(),
1130
+ length: reader.readLong()
1131
+ });
1132
+ }
1133
+ const entitiesLump = lumps[LUMP_ENTITIES];
1134
+ const newEntitiesText = (0, import_engine.serializeEntLump)(entities);
1135
+ const encoder = new TextEncoder();
1136
+ const newEntitiesData = encoder.encode(newEntitiesText);
1137
+ const newEntitiesBuffer = new Uint8Array(newEntitiesData.length + 1);
1138
+ newEntitiesBuffer.set(newEntitiesData);
1139
+ newEntitiesBuffer[newEntitiesData.length] = 0;
1140
+ const lengthDiff = newEntitiesBuffer.length - entitiesLump.length;
1141
+ const newBspLength = bspData.length + lengthDiff;
1142
+ const newBsp = new Uint8Array(newBspLength);
1143
+ const entOffset = entitiesLump.offset;
1144
+ const entEnd = entOffset + entitiesLump.length;
1145
+ newBsp.set(bspData.subarray(0, entOffset), 0);
1146
+ newBsp.set(newEntitiesBuffer, entOffset);
1147
+ if (entEnd < bspData.length) {
1148
+ newBsp.set(bspData.subarray(entEnd), entOffset + newEntitiesBuffer.length);
1149
+ }
1150
+ const view = new DataView(newBsp.buffer);
1151
+ view.setInt32(8, entOffset, true);
1152
+ view.setInt32(12, newEntitiesBuffer.length, true);
1153
+ for (let i = 0; i < 19; i++) {
1154
+ if (i === LUMP_ENTITIES) continue;
1155
+ const originalOffset = lumps[i].offset;
1156
+ if (originalOffset >= entEnd) {
1157
+ const newOffset = originalOffset + lengthDiff;
1158
+ view.setInt32(4 + 4 + i * 8, newOffset, true);
1159
+ }
1160
+ }
1161
+ return newBsp;
1162
+ }
1163
+
196
1164
  // src/index.ts
197
1165
  function describeAsset(name, origin) {
198
1166
  return { name, origin };
@@ -201,6 +1169,7 @@ function describeAsset(name, origin) {
201
1169
  0 && (module.exports = {
202
1170
  describeAsset,
203
1171
  exportMd2ToObj,
204
- exportMd3ToGltf
1172
+ exportMd3ToGltf,
1173
+ replaceBspEntities
205
1174
  });
206
1175
  //# sourceMappingURL=index.cjs.map