quake2ts 0.0.98 → 0.0.99

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 (29) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +1 -1
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  5. package/packages/game/dist/browser/index.global.js +1 -1
  6. package/packages/game/dist/browser/index.global.js.map +1 -1
  7. package/packages/game/dist/cjs/index.cjs +257 -85
  8. package/packages/game/dist/cjs/index.cjs.map +1 -1
  9. package/packages/game/dist/esm/index.js +257 -85
  10. package/packages/game/dist/esm/index.js.map +1 -1
  11. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  12. package/packages/game/dist/types/combat/damage.d.ts.map +1 -1
  13. package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
  14. package/packages/game/dist/types/combat/weapons/state.d.ts +1 -0
  15. package/packages/game/dist/types/combat/weapons/state.d.ts.map +1 -1
  16. package/packages/game/dist/types/entities/entity.d.ts +2 -1
  17. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  18. package/packages/game/dist/types/entities/gibs.d.ts +5 -0
  19. package/packages/game/dist/types/entities/gibs.d.ts.map +1 -0
  20. package/packages/game/dist/types/entities/monsters/soldier.d.ts.map +1 -1
  21. package/packages/game/dist/types/entities/player.d.ts +5 -0
  22. package/packages/game/dist/types/entities/player.d.ts.map +1 -0
  23. package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
  24. package/packages/game/dist/types/entities/system.d.ts +5 -2
  25. package/packages/game/dist/types/entities/system.d.ts.map +1 -1
  26. package/packages/game/dist/types/imports.d.ts +8 -0
  27. package/packages/game/dist/types/imports.d.ts.map +1 -1
  28. package/packages/game/dist/types/index.d.ts +7 -1
  29. package/packages/game/dist/types/index.d.ts.map +1 -1
@@ -585,6 +585,89 @@ function buildWaterWish(params) {
585
585
  };
586
586
  }
587
587
  var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
588
+ var ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
589
+ ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
590
+ ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
591
+ ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
592
+ ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
593
+ ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
594
+ ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
595
+ ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
596
+ ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
597
+ ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
598
+ ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
599
+ ServerCommand22[ServerCommand22["print"] = 10] = "print";
600
+ ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
601
+ ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
602
+ ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
603
+ ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
604
+ ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
605
+ ServerCommand22[ServerCommand22["download"] = 16] = "download";
606
+ ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
607
+ ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
608
+ ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
609
+ ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
610
+ return ServerCommand22;
611
+ })(ServerCommand || {});
612
+ var TempEntity = /* @__PURE__ */ ((TempEntity2) => {
613
+ TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
614
+ TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
615
+ TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
616
+ TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
617
+ TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
618
+ TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
619
+ TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
620
+ TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
621
+ TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
622
+ TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
623
+ TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
624
+ TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
625
+ TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
626
+ TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
627
+ TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
628
+ TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
629
+ TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
630
+ TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
631
+ TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
632
+ TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
633
+ TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
634
+ TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
635
+ TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
636
+ TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
637
+ TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
638
+ TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
639
+ TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
640
+ TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
641
+ TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
642
+ TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
643
+ TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
644
+ TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
645
+ TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
646
+ TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
647
+ TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
648
+ TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
649
+ TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
650
+ TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
651
+ TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
652
+ TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
653
+ TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
654
+ TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
655
+ TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
656
+ TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
657
+ TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
658
+ TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
659
+ TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
660
+ TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
661
+ TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
662
+ TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
663
+ TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
664
+ TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
665
+ TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
666
+ TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
667
+ TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
668
+ TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
669
+ return TempEntity2;
670
+ })(TempEntity || {});
588
671
  var FRAMETIME = 0.025;
589
672
  var categorizePosition2 = (state, trace) => {
590
673
  const point = { ...state.origin };
@@ -1855,6 +1938,10 @@ var EntitySystem = class {
1855
1938
  y: ent.origin.y + ent.maxs.y,
1856
1939
  z: ent.origin.z + ent.maxs.z
1857
1940
  };
1941
+ },
1942
+ multicast: () => {
1943
+ },
1944
+ unicast: () => {
1858
1945
  }
1859
1946
  };
1860
1947
  this.gravity = gravity || { x: 0, y: 0, z: 0 };
@@ -1914,6 +2001,12 @@ var EntitySystem = class {
1914
2001
  modelIndex(model) {
1915
2002
  return this.engine.modelIndex?.(model) || 0;
1916
2003
  }
2004
+ multicast(origin, type, event, ...args) {
2005
+ this.imports.multicast(origin, type, event, ...args);
2006
+ }
2007
+ unicast(ent, reliable, event, ...args) {
2008
+ this.imports.unicast(ent, reliable, event, ...args);
2009
+ }
1917
2010
  scheduleThink(entity, nextThinkSeconds) {
1918
2011
  this.thinkScheduler.schedule(entity, nextThinkSeconds);
1919
2012
  }
@@ -4130,67 +4223,67 @@ function monster_think(self, context) {
4130
4223
  }
4131
4224
 
4132
4225
  // src/combat/damageMods.ts
4133
- var DamageMod = /* @__PURE__ */ ((DamageMod2) => {
4134
- DamageMod2[DamageMod2["UNKNOWN"] = 0] = "UNKNOWN";
4135
- DamageMod2[DamageMod2["BLASTER"] = 1] = "BLASTER";
4136
- DamageMod2[DamageMod2["SHOTGUN"] = 2] = "SHOTGUN";
4137
- DamageMod2[DamageMod2["SSHOTGUN"] = 3] = "SSHOTGUN";
4138
- DamageMod2[DamageMod2["MACHINEGUN"] = 4] = "MACHINEGUN";
4139
- DamageMod2[DamageMod2["CHAINGUN"] = 5] = "CHAINGUN";
4140
- DamageMod2[DamageMod2["GRENADE"] = 6] = "GRENADE";
4141
- DamageMod2[DamageMod2["G_SPLASH"] = 7] = "G_SPLASH";
4142
- DamageMod2[DamageMod2["ROCKET"] = 8] = "ROCKET";
4143
- DamageMod2[DamageMod2["R_SPLASH"] = 9] = "R_SPLASH";
4144
- DamageMod2[DamageMod2["HYPERBLASTER"] = 10] = "HYPERBLASTER";
4145
- DamageMod2[DamageMod2["RAILGUN"] = 11] = "RAILGUN";
4146
- DamageMod2[DamageMod2["BFG_LASER"] = 12] = "BFG_LASER";
4147
- DamageMod2[DamageMod2["BFG_BLAST"] = 13] = "BFG_BLAST";
4148
- DamageMod2[DamageMod2["BFG_EFFECT"] = 14] = "BFG_EFFECT";
4149
- DamageMod2[DamageMod2["HANDGRENADE"] = 15] = "HANDGRENADE";
4150
- DamageMod2[DamageMod2["HG_SPLASH"] = 16] = "HG_SPLASH";
4151
- DamageMod2[DamageMod2["WATER"] = 17] = "WATER";
4152
- DamageMod2[DamageMod2["SLIME"] = 18] = "SLIME";
4153
- DamageMod2[DamageMod2["LAVA"] = 19] = "LAVA";
4154
- DamageMod2[DamageMod2["CRUSH"] = 20] = "CRUSH";
4155
- DamageMod2[DamageMod2["TELEFRAG"] = 21] = "TELEFRAG";
4156
- DamageMod2[DamageMod2["TELEFRAG_SPAWN"] = 22] = "TELEFRAG_SPAWN";
4157
- DamageMod2[DamageMod2["FALLING"] = 23] = "FALLING";
4158
- DamageMod2[DamageMod2["SUICIDE"] = 24] = "SUICIDE";
4159
- DamageMod2[DamageMod2["HELD_GRENADE"] = 25] = "HELD_GRENADE";
4160
- DamageMod2[DamageMod2["EXPLOSIVE"] = 26] = "EXPLOSIVE";
4161
- DamageMod2[DamageMod2["BARREL"] = 27] = "BARREL";
4162
- DamageMod2[DamageMod2["BOMB"] = 28] = "BOMB";
4163
- DamageMod2[DamageMod2["EXIT"] = 29] = "EXIT";
4164
- DamageMod2[DamageMod2["SPLASH"] = 30] = "SPLASH";
4165
- DamageMod2[DamageMod2["TARGET_LASER"] = 31] = "TARGET_LASER";
4166
- DamageMod2[DamageMod2["TRIGGER_HURT"] = 32] = "TRIGGER_HURT";
4167
- DamageMod2[DamageMod2["HIT"] = 33] = "HIT";
4168
- DamageMod2[DamageMod2["TARGET_BLASTER"] = 34] = "TARGET_BLASTER";
4169
- DamageMod2[DamageMod2["RIPPER"] = 35] = "RIPPER";
4170
- DamageMod2[DamageMod2["PHALANX"] = 36] = "PHALANX";
4171
- DamageMod2[DamageMod2["BRAINTENTACLE"] = 37] = "BRAINTENTACLE";
4172
- DamageMod2[DamageMod2["BLASTOFF"] = 38] = "BLASTOFF";
4173
- DamageMod2[DamageMod2["GEKK"] = 39] = "GEKK";
4174
- DamageMod2[DamageMod2["TRAP"] = 40] = "TRAP";
4175
- DamageMod2[DamageMod2["CHAINFIST"] = 41] = "CHAINFIST";
4176
- DamageMod2[DamageMod2["DISINTEGRATOR"] = 42] = "DISINTEGRATOR";
4177
- DamageMod2[DamageMod2["ETF_RIFLE"] = 43] = "ETF_RIFLE";
4178
- DamageMod2[DamageMod2["BLASTER2"] = 44] = "BLASTER2";
4179
- DamageMod2[DamageMod2["HEATBEAM"] = 45] = "HEATBEAM";
4180
- DamageMod2[DamageMod2["TESLA"] = 46] = "TESLA";
4181
- DamageMod2[DamageMod2["PROX"] = 47] = "PROX";
4182
- DamageMod2[DamageMod2["NUKE"] = 48] = "NUKE";
4183
- DamageMod2[DamageMod2["VENGEANCE_SPHERE"] = 49] = "VENGEANCE_SPHERE";
4184
- DamageMod2[DamageMod2["HUNTER_SPHERE"] = 50] = "HUNTER_SPHERE";
4185
- DamageMod2[DamageMod2["DEFENDER_SPHERE"] = 51] = "DEFENDER_SPHERE";
4186
- DamageMod2[DamageMod2["TRACKER"] = 52] = "TRACKER";
4187
- DamageMod2[DamageMod2["DBALL_CRUSH"] = 53] = "DBALL_CRUSH";
4188
- DamageMod2[DamageMod2["DOPPLE_EXPLODE"] = 54] = "DOPPLE_EXPLODE";
4189
- DamageMod2[DamageMod2["DOPPLE_VENGEANCE"] = 55] = "DOPPLE_VENGEANCE";
4190
- DamageMod2[DamageMod2["DOPPLE_HUNTER"] = 56] = "DOPPLE_HUNTER";
4191
- DamageMod2[DamageMod2["GRAPPLE"] = 57] = "GRAPPLE";
4192
- DamageMod2[DamageMod2["BLUEBLASTER"] = 58] = "BLUEBLASTER";
4193
- return DamageMod2;
4226
+ var DamageMod = /* @__PURE__ */ ((DamageMod3) => {
4227
+ DamageMod3[DamageMod3["UNKNOWN"] = 0] = "UNKNOWN";
4228
+ DamageMod3[DamageMod3["BLASTER"] = 1] = "BLASTER";
4229
+ DamageMod3[DamageMod3["SHOTGUN"] = 2] = "SHOTGUN";
4230
+ DamageMod3[DamageMod3["SSHOTGUN"] = 3] = "SSHOTGUN";
4231
+ DamageMod3[DamageMod3["MACHINEGUN"] = 4] = "MACHINEGUN";
4232
+ DamageMod3[DamageMod3["CHAINGUN"] = 5] = "CHAINGUN";
4233
+ DamageMod3[DamageMod3["GRENADE"] = 6] = "GRENADE";
4234
+ DamageMod3[DamageMod3["G_SPLASH"] = 7] = "G_SPLASH";
4235
+ DamageMod3[DamageMod3["ROCKET"] = 8] = "ROCKET";
4236
+ DamageMod3[DamageMod3["R_SPLASH"] = 9] = "R_SPLASH";
4237
+ DamageMod3[DamageMod3["HYPERBLASTER"] = 10] = "HYPERBLASTER";
4238
+ DamageMod3[DamageMod3["RAILGUN"] = 11] = "RAILGUN";
4239
+ DamageMod3[DamageMod3["BFG_LASER"] = 12] = "BFG_LASER";
4240
+ DamageMod3[DamageMod3["BFG_BLAST"] = 13] = "BFG_BLAST";
4241
+ DamageMod3[DamageMod3["BFG_EFFECT"] = 14] = "BFG_EFFECT";
4242
+ DamageMod3[DamageMod3["HANDGRENADE"] = 15] = "HANDGRENADE";
4243
+ DamageMod3[DamageMod3["HG_SPLASH"] = 16] = "HG_SPLASH";
4244
+ DamageMod3[DamageMod3["WATER"] = 17] = "WATER";
4245
+ DamageMod3[DamageMod3["SLIME"] = 18] = "SLIME";
4246
+ DamageMod3[DamageMod3["LAVA"] = 19] = "LAVA";
4247
+ DamageMod3[DamageMod3["CRUSH"] = 20] = "CRUSH";
4248
+ DamageMod3[DamageMod3["TELEFRAG"] = 21] = "TELEFRAG";
4249
+ DamageMod3[DamageMod3["TELEFRAG_SPAWN"] = 22] = "TELEFRAG_SPAWN";
4250
+ DamageMod3[DamageMod3["FALLING"] = 23] = "FALLING";
4251
+ DamageMod3[DamageMod3["SUICIDE"] = 24] = "SUICIDE";
4252
+ DamageMod3[DamageMod3["HELD_GRENADE"] = 25] = "HELD_GRENADE";
4253
+ DamageMod3[DamageMod3["EXPLOSIVE"] = 26] = "EXPLOSIVE";
4254
+ DamageMod3[DamageMod3["BARREL"] = 27] = "BARREL";
4255
+ DamageMod3[DamageMod3["BOMB"] = 28] = "BOMB";
4256
+ DamageMod3[DamageMod3["EXIT"] = 29] = "EXIT";
4257
+ DamageMod3[DamageMod3["SPLASH"] = 30] = "SPLASH";
4258
+ DamageMod3[DamageMod3["TARGET_LASER"] = 31] = "TARGET_LASER";
4259
+ DamageMod3[DamageMod3["TRIGGER_HURT"] = 32] = "TRIGGER_HURT";
4260
+ DamageMod3[DamageMod3["HIT"] = 33] = "HIT";
4261
+ DamageMod3[DamageMod3["TARGET_BLASTER"] = 34] = "TARGET_BLASTER";
4262
+ DamageMod3[DamageMod3["RIPPER"] = 35] = "RIPPER";
4263
+ DamageMod3[DamageMod3["PHALANX"] = 36] = "PHALANX";
4264
+ DamageMod3[DamageMod3["BRAINTENTACLE"] = 37] = "BRAINTENTACLE";
4265
+ DamageMod3[DamageMod3["BLASTOFF"] = 38] = "BLASTOFF";
4266
+ DamageMod3[DamageMod3["GEKK"] = 39] = "GEKK";
4267
+ DamageMod3[DamageMod3["TRAP"] = 40] = "TRAP";
4268
+ DamageMod3[DamageMod3["CHAINFIST"] = 41] = "CHAINFIST";
4269
+ DamageMod3[DamageMod3["DISINTEGRATOR"] = 42] = "DISINTEGRATOR";
4270
+ DamageMod3[DamageMod3["ETF_RIFLE"] = 43] = "ETF_RIFLE";
4271
+ DamageMod3[DamageMod3["BLASTER2"] = 44] = "BLASTER2";
4272
+ DamageMod3[DamageMod3["HEATBEAM"] = 45] = "HEATBEAM";
4273
+ DamageMod3[DamageMod3["TESLA"] = 46] = "TESLA";
4274
+ DamageMod3[DamageMod3["PROX"] = 47] = "PROX";
4275
+ DamageMod3[DamageMod3["NUKE"] = 48] = "NUKE";
4276
+ DamageMod3[DamageMod3["VENGEANCE_SPHERE"] = 49] = "VENGEANCE_SPHERE";
4277
+ DamageMod3[DamageMod3["HUNTER_SPHERE"] = 50] = "HUNTER_SPHERE";
4278
+ DamageMod3[DamageMod3["DEFENDER_SPHERE"] = 51] = "DEFENDER_SPHERE";
4279
+ DamageMod3[DamageMod3["TRACKER"] = 52] = "TRACKER";
4280
+ DamageMod3[DamageMod3["DBALL_CRUSH"] = 53] = "DBALL_CRUSH";
4281
+ DamageMod3[DamageMod3["DOPPLE_EXPLODE"] = 54] = "DOPPLE_EXPLODE";
4282
+ DamageMod3[DamageMod3["DOPPLE_VENGEANCE"] = 55] = "DOPPLE_VENGEANCE";
4283
+ DamageMod3[DamageMod3["DOPPLE_HUNTER"] = 56] = "DOPPLE_HUNTER";
4284
+ DamageMod3[DamageMod3["GRAPPLE"] = 57] = "GRAPPLE";
4285
+ DamageMod3[DamageMod3["BLUEBLASTER"] = 58] = "BLUEBLASTER";
4286
+ return DamageMod3;
4194
4287
  })(DamageMod || {});
4195
4288
  var ORDERED_DAMAGE_MODS = [
4196
4289
  0 /* UNKNOWN */,
@@ -4406,37 +4499,23 @@ function createGrenade(sys, owner, start, dir, damage, speed) {
4406
4499
  grenade.modelindex = sys.modelIndex("models/objects/grenade/tris.md2");
4407
4500
  grenade.mins = { x: -4, y: -4, z: -4 };
4408
4501
  grenade.maxs = { x: 4, y: 4, z: 4 };
4502
+ const explode = (self) => {
4503
+ const entities = sys.findByRadius(self.origin, 120);
4504
+ T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */);
4505
+ sys.multicast(self.origin, 2 /* Phs */, ServerCommand.temp_entity, TempEntity.GRENADE_EXPLOSION, self.origin);
4506
+ sys.free(self);
4507
+ };
4409
4508
  grenade.touch = (self, other, plane, surf) => {
4410
4509
  if (other === self.owner) {
4411
4510
  return;
4412
4511
  }
4413
4512
  if (other && other.takedamage) {
4414
- T_Damage(
4415
- other,
4416
- self,
4417
- self.owner,
4418
- self.velocity,
4419
- self.origin,
4420
- plane ? plane.normal : ZERO_VEC3,
4421
- damage,
4422
- // Direct impact damage? Usually separate but let's assume it's part of it or handled by radius.
4423
- // Actually G_Weapon.c Grenade_Touch calls Grenade_Explode which calls T_RadiusDamage.
4424
- // It doesn't seem to do T_Damage separately?
4425
- // Wait, if it hits a monster, it stops and explodes.
4426
- 0,
4427
- 0 /* NONE */,
4428
- 6 /* GRENADE */
4429
- );
4430
- const entities = sys.findByRadius(self.origin, 120);
4431
- T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */);
4432
- sys.free(self);
4513
+ explode(self);
4433
4514
  return;
4434
4515
  }
4435
4516
  };
4436
4517
  grenade.think = (self) => {
4437
- const entities = sys.findByRadius(self.origin, 120);
4438
- T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */);
4439
- sys.free(self);
4518
+ explode(self);
4440
4519
  };
4441
4520
  sys.scheduleThink(grenade, sys.timeSeconds + 2.5);
4442
4521
  sys.finalizeSpawn(grenade);
@@ -4584,6 +4663,54 @@ function registerGunnerSpawns(registry) {
4584
4663
  registry.register("monster_gunner", SP_monster_gunner);
4585
4664
  }
4586
4665
 
4666
+ // src/entities/gibs.ts
4667
+ var random = createRandomGenerator();
4668
+ function spawnGib(sys, origin, damage) {
4669
+ const gib = sys.spawn();
4670
+ gib.classname = "gib";
4671
+ gib.origin = {
4672
+ x: origin.x + (random.frandom() - 0.5) * 20,
4673
+ y: origin.y + (random.frandom() - 0.5) * 20,
4674
+ z: origin.z + (random.frandom() - 0.5) * 20
4675
+ };
4676
+ gib.velocity = {
4677
+ x: (random.frandom() - 0.5) * 300,
4678
+ // Velocity based on damage?
4679
+ y: (random.frandom() - 0.5) * 300,
4680
+ z: 200 + random.frandom() * 100
4681
+ };
4682
+ gib.movetype = 9 /* Bounce */;
4683
+ gib.solid = 0 /* Not */;
4684
+ gib.clipmask = 1;
4685
+ gib.avelocity = {
4686
+ x: random.crandom() * 600,
4687
+ y: random.crandom() * 600,
4688
+ z: random.crandom() * 600
4689
+ };
4690
+ const models = [
4691
+ "models/objects/gibs/bone/tris.md2",
4692
+ "models/objects/gibs/meat/tris.md2",
4693
+ "models/objects/gibs/sm_meat/tris.md2",
4694
+ "models/objects/gibs/arm/tris.md2"
4695
+ // larger parts?
4696
+ ];
4697
+ const modelName = models[Math.floor(random.frandom() * models.length)];
4698
+ gib.modelindex = sys.modelIndex(modelName);
4699
+ gib.mins = { x: -2, y: -2, z: -2 };
4700
+ gib.maxs = { x: 2, y: 2, z: 2 };
4701
+ gib.think = (self) => {
4702
+ sys.free(self);
4703
+ };
4704
+ sys.scheduleThink(gib, sys.timeSeconds + 10 + random.frandom() * 10);
4705
+ sys.finalizeSpawn(gib);
4706
+ }
4707
+ function throwGibs(sys, origin, damage) {
4708
+ const count = 4 + Math.floor(random.frandom() * 4);
4709
+ for (let i = 0; i < count; i++) {
4710
+ spawnGib(sys, origin, damage);
4711
+ }
4712
+ }
4713
+
4587
4714
  // src/entities/monsters/soldier.ts
4588
4715
  var MONSTER_TICK2 = 0.1;
4589
4716
  function monster_ai_stand2(self, dist, context) {
@@ -4680,11 +4807,21 @@ function SP_monster_soldier(self, context) {
4680
4807
  self.health = 20;
4681
4808
  self.max_health = 20;
4682
4809
  self.mass = 100;
4810
+ self.takedamage = true;
4683
4811
  self.pain = (self2, other, kick, damage) => {
4684
4812
  };
4685
4813
  self.die = (self2, inflictor, attacker, damage, point) => {
4686
4814
  self2.deadflag = 2 /* Dead */;
4687
4815
  self2.solid = 0 /* Not */;
4816
+ if (self2.health < -40) {
4817
+ throwGibs(context.entities, self2.origin, damage);
4818
+ context.entities.free(self2);
4819
+ return;
4820
+ }
4821
+ self2.think = (self3) => {
4822
+ context.entities.free(self3);
4823
+ };
4824
+ self2.nextthink = context.entities.timeSeconds + 5;
4688
4825
  };
4689
4826
  self.monsterinfo.stand = soldier_stand;
4690
4827
  self.monsterinfo.walk = soldier_walk;
@@ -5072,6 +5209,31 @@ var LevelClock = class {
5072
5209
  }
5073
5210
  };
5074
5211
 
5212
+ // src/entities/player.ts
5213
+ function player_die(self, inflictor, attacker, damage, point, mod, sys) {
5214
+ self.deadflag = 2 /* Dead */;
5215
+ self.solid = 0 /* Not */;
5216
+ self.movetype = 7 /* Toss */;
5217
+ self.takedamage = false;
5218
+ if (self.health < -40 && sys) {
5219
+ throwGibs(sys, self.origin, damage);
5220
+ }
5221
+ self.frame = 0;
5222
+ if (sys) {
5223
+ let message = "You died.";
5224
+ if (attacker) {
5225
+ if (attacker === self) {
5226
+ message = "You killed yourself.";
5227
+ } else {
5228
+ message = `You were killed by ${attacker.classname} (${damageModName(mod)})`;
5229
+ }
5230
+ } else {
5231
+ message = `You died (${damageModName(mod)})`;
5232
+ }
5233
+ sys.engine.centerprintf?.(self, message);
5234
+ }
5235
+ }
5236
+
5075
5237
  // src/checksum.ts
5076
5238
  var FNV_OFFSET_BASIS = 2166136261;
5077
5239
  var FNV_PRIME = 16777619;
@@ -6125,7 +6287,7 @@ function getWeaponState(playerStates, weaponId) {
6125
6287
 
6126
6288
  // src/index.ts
6127
6289
  var ZERO_VEC32 = { x: 0, y: 0, z: 0 };
6128
- function createGame({ trace, pointcontents }, engine, options) {
6290
+ function createGame({ trace, pointcontents, multicast, unicast }, engine, options) {
6129
6291
  const gravity = options.gravity;
6130
6292
  const levelClock = new LevelClock();
6131
6293
  const frameLoop = new GameFrameLoop();
@@ -6141,7 +6303,7 @@ function createGame({ trace, pointcontents }, engine, options) {
6141
6303
  z: ent.origin.z + ent.maxs.z
6142
6304
  };
6143
6305
  };
6144
- const entities = new EntitySystem(engine, { trace, pointcontents, linkentity }, gravity);
6306
+ const entities = new EntitySystem(engine, { trace, pointcontents, linkentity, multicast, unicast }, gravity);
6145
6307
  frameLoop.addStage("prep", (context) => {
6146
6308
  levelClock.tick(context);
6147
6309
  entities.beginFrame(levelClock.current.timeSeconds);
@@ -6197,6 +6359,7 @@ function createGame({ trace, pointcontents }, engine, options) {
6197
6359
  player.origin = playerStart ? { ...playerStart.origin } : { x: 0, y: 0, z: 0 };
6198
6360
  player.angles = playerStart ? { ...playerStart.angles } : { x: 0, y: 0, z: 0 };
6199
6361
  player.health = 100;
6362
+ player.takedamage = true;
6200
6363
  player.movetype = 7 /* Toss */;
6201
6364
  player.mins = { x: -16, y: -16, z: -24 };
6202
6365
  player.maxs = { x: 16, y: 16, z: 32 };
@@ -6204,6 +6367,9 @@ function createGame({ trace, pointcontents }, engine, options) {
6204
6367
  inventory: createPlayerInventory(),
6205
6368
  weaponStates: createPlayerWeaponStates()
6206
6369
  };
6370
+ player.die = (self, inflictor, attacker, damage, point, mod) => {
6371
+ player_die(self, inflictor, attacker, damage, point, mod, entities);
6372
+ };
6207
6373
  entities.finalizeSpawn(player);
6208
6374
  origin = { ...player.origin };
6209
6375
  },
@@ -6243,6 +6409,12 @@ function createGame({ trace, pointcontents }, engine, options) {
6243
6409
  engine.centerprintf?.(entity, message);
6244
6410
  },
6245
6411
  trace,
6412
+ multicast(origin2, type, event, ...args) {
6413
+ multicast(origin2, type, event, ...args);
6414
+ },
6415
+ unicast(ent, reliable, event, ...args) {
6416
+ unicast(ent, reliable, event, ...args);
6417
+ },
6246
6418
  get time() {
6247
6419
  return levelClock.current.timeSeconds;
6248
6420
  }