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.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +257 -85
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +257 -85
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/combat/damage.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/state.d.ts +1 -0
- package/packages/game/dist/types/combat/weapons/state.d.ts.map +1 -1
- package/packages/game/dist/types/entities/entity.d.ts +2 -1
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/gibs.d.ts +5 -0
- package/packages/game/dist/types/entities/gibs.d.ts.map +1 -0
- package/packages/game/dist/types/entities/monsters/soldier.d.ts.map +1 -1
- package/packages/game/dist/types/entities/player.d.ts +5 -0
- package/packages/game/dist/types/entities/player.d.ts.map +1 -0
- package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +5 -2
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/imports.d.ts +8 -0
- package/packages/game/dist/types/imports.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +7 -1
- package/packages/game/dist/types/index.d.ts.map +1 -1
|
@@ -739,6 +739,89 @@ function buildWaterWish(params) {
|
|
|
739
739
|
};
|
|
740
740
|
}
|
|
741
741
|
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
742
|
+
var ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
743
|
+
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
744
|
+
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
745
|
+
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
746
|
+
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
747
|
+
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
748
|
+
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
749
|
+
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
750
|
+
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
751
|
+
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
752
|
+
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
753
|
+
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
754
|
+
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
755
|
+
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
756
|
+
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
757
|
+
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
758
|
+
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
759
|
+
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
760
|
+
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
761
|
+
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
762
|
+
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
763
|
+
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
764
|
+
return ServerCommand22;
|
|
765
|
+
})(ServerCommand || {});
|
|
766
|
+
var TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
767
|
+
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
768
|
+
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
769
|
+
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
770
|
+
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
771
|
+
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
772
|
+
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
773
|
+
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
774
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
775
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
776
|
+
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
777
|
+
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
778
|
+
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
779
|
+
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
780
|
+
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
781
|
+
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
782
|
+
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
783
|
+
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
784
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
785
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
786
|
+
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
787
|
+
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
788
|
+
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
789
|
+
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
790
|
+
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
791
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
792
|
+
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
793
|
+
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
794
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
795
|
+
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
796
|
+
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
797
|
+
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
798
|
+
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
799
|
+
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
800
|
+
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
801
|
+
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
802
|
+
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
803
|
+
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
804
|
+
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
805
|
+
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
806
|
+
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
807
|
+
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
808
|
+
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
809
|
+
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
810
|
+
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
811
|
+
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
812
|
+
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
813
|
+
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
814
|
+
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
815
|
+
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
816
|
+
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
817
|
+
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
818
|
+
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
819
|
+
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
820
|
+
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
821
|
+
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
822
|
+
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
823
|
+
return TempEntity2;
|
|
824
|
+
})(TempEntity || {});
|
|
742
825
|
var FRAMETIME = 0.025;
|
|
743
826
|
var categorizePosition2 = (state, trace) => {
|
|
744
827
|
const point = { ...state.origin };
|
|
@@ -2009,6 +2092,10 @@ var EntitySystem = class {
|
|
|
2009
2092
|
y: ent.origin.y + ent.maxs.y,
|
|
2010
2093
|
z: ent.origin.z + ent.maxs.z
|
|
2011
2094
|
};
|
|
2095
|
+
},
|
|
2096
|
+
multicast: () => {
|
|
2097
|
+
},
|
|
2098
|
+
unicast: () => {
|
|
2012
2099
|
}
|
|
2013
2100
|
};
|
|
2014
2101
|
this.gravity = gravity || { x: 0, y: 0, z: 0 };
|
|
@@ -2068,6 +2155,12 @@ var EntitySystem = class {
|
|
|
2068
2155
|
modelIndex(model) {
|
|
2069
2156
|
return this.engine.modelIndex?.(model) || 0;
|
|
2070
2157
|
}
|
|
2158
|
+
multicast(origin, type, event, ...args) {
|
|
2159
|
+
this.imports.multicast(origin, type, event, ...args);
|
|
2160
|
+
}
|
|
2161
|
+
unicast(ent, reliable, event, ...args) {
|
|
2162
|
+
this.imports.unicast(ent, reliable, event, ...args);
|
|
2163
|
+
}
|
|
2071
2164
|
scheduleThink(entity, nextThinkSeconds) {
|
|
2072
2165
|
this.thinkScheduler.schedule(entity, nextThinkSeconds);
|
|
2073
2166
|
}
|
|
@@ -4284,67 +4377,67 @@ function monster_think(self, context) {
|
|
|
4284
4377
|
}
|
|
4285
4378
|
|
|
4286
4379
|
// src/combat/damageMods.ts
|
|
4287
|
-
var DamageMod = /* @__PURE__ */ ((
|
|
4288
|
-
|
|
4289
|
-
|
|
4290
|
-
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
4295
|
-
|
|
4296
|
-
|
|
4297
|
-
|
|
4298
|
-
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4312
|
-
|
|
4313
|
-
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
return
|
|
4380
|
+
var DamageMod = /* @__PURE__ */ ((DamageMod3) => {
|
|
4381
|
+
DamageMod3[DamageMod3["UNKNOWN"] = 0] = "UNKNOWN";
|
|
4382
|
+
DamageMod3[DamageMod3["BLASTER"] = 1] = "BLASTER";
|
|
4383
|
+
DamageMod3[DamageMod3["SHOTGUN"] = 2] = "SHOTGUN";
|
|
4384
|
+
DamageMod3[DamageMod3["SSHOTGUN"] = 3] = "SSHOTGUN";
|
|
4385
|
+
DamageMod3[DamageMod3["MACHINEGUN"] = 4] = "MACHINEGUN";
|
|
4386
|
+
DamageMod3[DamageMod3["CHAINGUN"] = 5] = "CHAINGUN";
|
|
4387
|
+
DamageMod3[DamageMod3["GRENADE"] = 6] = "GRENADE";
|
|
4388
|
+
DamageMod3[DamageMod3["G_SPLASH"] = 7] = "G_SPLASH";
|
|
4389
|
+
DamageMod3[DamageMod3["ROCKET"] = 8] = "ROCKET";
|
|
4390
|
+
DamageMod3[DamageMod3["R_SPLASH"] = 9] = "R_SPLASH";
|
|
4391
|
+
DamageMod3[DamageMod3["HYPERBLASTER"] = 10] = "HYPERBLASTER";
|
|
4392
|
+
DamageMod3[DamageMod3["RAILGUN"] = 11] = "RAILGUN";
|
|
4393
|
+
DamageMod3[DamageMod3["BFG_LASER"] = 12] = "BFG_LASER";
|
|
4394
|
+
DamageMod3[DamageMod3["BFG_BLAST"] = 13] = "BFG_BLAST";
|
|
4395
|
+
DamageMod3[DamageMod3["BFG_EFFECT"] = 14] = "BFG_EFFECT";
|
|
4396
|
+
DamageMod3[DamageMod3["HANDGRENADE"] = 15] = "HANDGRENADE";
|
|
4397
|
+
DamageMod3[DamageMod3["HG_SPLASH"] = 16] = "HG_SPLASH";
|
|
4398
|
+
DamageMod3[DamageMod3["WATER"] = 17] = "WATER";
|
|
4399
|
+
DamageMod3[DamageMod3["SLIME"] = 18] = "SLIME";
|
|
4400
|
+
DamageMod3[DamageMod3["LAVA"] = 19] = "LAVA";
|
|
4401
|
+
DamageMod3[DamageMod3["CRUSH"] = 20] = "CRUSH";
|
|
4402
|
+
DamageMod3[DamageMod3["TELEFRAG"] = 21] = "TELEFRAG";
|
|
4403
|
+
DamageMod3[DamageMod3["TELEFRAG_SPAWN"] = 22] = "TELEFRAG_SPAWN";
|
|
4404
|
+
DamageMod3[DamageMod3["FALLING"] = 23] = "FALLING";
|
|
4405
|
+
DamageMod3[DamageMod3["SUICIDE"] = 24] = "SUICIDE";
|
|
4406
|
+
DamageMod3[DamageMod3["HELD_GRENADE"] = 25] = "HELD_GRENADE";
|
|
4407
|
+
DamageMod3[DamageMod3["EXPLOSIVE"] = 26] = "EXPLOSIVE";
|
|
4408
|
+
DamageMod3[DamageMod3["BARREL"] = 27] = "BARREL";
|
|
4409
|
+
DamageMod3[DamageMod3["BOMB"] = 28] = "BOMB";
|
|
4410
|
+
DamageMod3[DamageMod3["EXIT"] = 29] = "EXIT";
|
|
4411
|
+
DamageMod3[DamageMod3["SPLASH"] = 30] = "SPLASH";
|
|
4412
|
+
DamageMod3[DamageMod3["TARGET_LASER"] = 31] = "TARGET_LASER";
|
|
4413
|
+
DamageMod3[DamageMod3["TRIGGER_HURT"] = 32] = "TRIGGER_HURT";
|
|
4414
|
+
DamageMod3[DamageMod3["HIT"] = 33] = "HIT";
|
|
4415
|
+
DamageMod3[DamageMod3["TARGET_BLASTER"] = 34] = "TARGET_BLASTER";
|
|
4416
|
+
DamageMod3[DamageMod3["RIPPER"] = 35] = "RIPPER";
|
|
4417
|
+
DamageMod3[DamageMod3["PHALANX"] = 36] = "PHALANX";
|
|
4418
|
+
DamageMod3[DamageMod3["BRAINTENTACLE"] = 37] = "BRAINTENTACLE";
|
|
4419
|
+
DamageMod3[DamageMod3["BLASTOFF"] = 38] = "BLASTOFF";
|
|
4420
|
+
DamageMod3[DamageMod3["GEKK"] = 39] = "GEKK";
|
|
4421
|
+
DamageMod3[DamageMod3["TRAP"] = 40] = "TRAP";
|
|
4422
|
+
DamageMod3[DamageMod3["CHAINFIST"] = 41] = "CHAINFIST";
|
|
4423
|
+
DamageMod3[DamageMod3["DISINTEGRATOR"] = 42] = "DISINTEGRATOR";
|
|
4424
|
+
DamageMod3[DamageMod3["ETF_RIFLE"] = 43] = "ETF_RIFLE";
|
|
4425
|
+
DamageMod3[DamageMod3["BLASTER2"] = 44] = "BLASTER2";
|
|
4426
|
+
DamageMod3[DamageMod3["HEATBEAM"] = 45] = "HEATBEAM";
|
|
4427
|
+
DamageMod3[DamageMod3["TESLA"] = 46] = "TESLA";
|
|
4428
|
+
DamageMod3[DamageMod3["PROX"] = 47] = "PROX";
|
|
4429
|
+
DamageMod3[DamageMod3["NUKE"] = 48] = "NUKE";
|
|
4430
|
+
DamageMod3[DamageMod3["VENGEANCE_SPHERE"] = 49] = "VENGEANCE_SPHERE";
|
|
4431
|
+
DamageMod3[DamageMod3["HUNTER_SPHERE"] = 50] = "HUNTER_SPHERE";
|
|
4432
|
+
DamageMod3[DamageMod3["DEFENDER_SPHERE"] = 51] = "DEFENDER_SPHERE";
|
|
4433
|
+
DamageMod3[DamageMod3["TRACKER"] = 52] = "TRACKER";
|
|
4434
|
+
DamageMod3[DamageMod3["DBALL_CRUSH"] = 53] = "DBALL_CRUSH";
|
|
4435
|
+
DamageMod3[DamageMod3["DOPPLE_EXPLODE"] = 54] = "DOPPLE_EXPLODE";
|
|
4436
|
+
DamageMod3[DamageMod3["DOPPLE_VENGEANCE"] = 55] = "DOPPLE_VENGEANCE";
|
|
4437
|
+
DamageMod3[DamageMod3["DOPPLE_HUNTER"] = 56] = "DOPPLE_HUNTER";
|
|
4438
|
+
DamageMod3[DamageMod3["GRAPPLE"] = 57] = "GRAPPLE";
|
|
4439
|
+
DamageMod3[DamageMod3["BLUEBLASTER"] = 58] = "BLUEBLASTER";
|
|
4440
|
+
return DamageMod3;
|
|
4348
4441
|
})(DamageMod || {});
|
|
4349
4442
|
var ORDERED_DAMAGE_MODS = [
|
|
4350
4443
|
0 /* UNKNOWN */,
|
|
@@ -4560,37 +4653,23 @@ function createGrenade(sys, owner, start, dir, damage, speed) {
|
|
|
4560
4653
|
grenade.modelindex = sys.modelIndex("models/objects/grenade/tris.md2");
|
|
4561
4654
|
grenade.mins = { x: -4, y: -4, z: -4 };
|
|
4562
4655
|
grenade.maxs = { x: 4, y: 4, z: 4 };
|
|
4656
|
+
const explode = (self) => {
|
|
4657
|
+
const entities = sys.findByRadius(self.origin, 120);
|
|
4658
|
+
T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */);
|
|
4659
|
+
sys.multicast(self.origin, 2 /* Phs */, ServerCommand.temp_entity, TempEntity.GRENADE_EXPLOSION, self.origin);
|
|
4660
|
+
sys.free(self);
|
|
4661
|
+
};
|
|
4563
4662
|
grenade.touch = (self, other, plane, surf) => {
|
|
4564
4663
|
if (other === self.owner) {
|
|
4565
4664
|
return;
|
|
4566
4665
|
}
|
|
4567
4666
|
if (other && other.takedamage) {
|
|
4568
|
-
|
|
4569
|
-
other,
|
|
4570
|
-
self,
|
|
4571
|
-
self.owner,
|
|
4572
|
-
self.velocity,
|
|
4573
|
-
self.origin,
|
|
4574
|
-
plane ? plane.normal : ZERO_VEC3,
|
|
4575
|
-
damage,
|
|
4576
|
-
// Direct impact damage? Usually separate but let's assume it's part of it or handled by radius.
|
|
4577
|
-
// Actually G_Weapon.c Grenade_Touch calls Grenade_Explode which calls T_RadiusDamage.
|
|
4578
|
-
// It doesn't seem to do T_Damage separately?
|
|
4579
|
-
// Wait, if it hits a monster, it stops and explodes.
|
|
4580
|
-
0,
|
|
4581
|
-
0 /* NONE */,
|
|
4582
|
-
6 /* GRENADE */
|
|
4583
|
-
);
|
|
4584
|
-
const entities = sys.findByRadius(self.origin, 120);
|
|
4585
|
-
T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */);
|
|
4586
|
-
sys.free(self);
|
|
4667
|
+
explode(self);
|
|
4587
4668
|
return;
|
|
4588
4669
|
}
|
|
4589
4670
|
};
|
|
4590
4671
|
grenade.think = (self) => {
|
|
4591
|
-
|
|
4592
|
-
T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */);
|
|
4593
|
-
sys.free(self);
|
|
4672
|
+
explode(self);
|
|
4594
4673
|
};
|
|
4595
4674
|
sys.scheduleThink(grenade, sys.timeSeconds + 2.5);
|
|
4596
4675
|
sys.finalizeSpawn(grenade);
|
|
@@ -4738,6 +4817,54 @@ function registerGunnerSpawns(registry) {
|
|
|
4738
4817
|
registry.register("monster_gunner", SP_monster_gunner);
|
|
4739
4818
|
}
|
|
4740
4819
|
|
|
4820
|
+
// src/entities/gibs.ts
|
|
4821
|
+
var random = createRandomGenerator();
|
|
4822
|
+
function spawnGib(sys, origin, damage) {
|
|
4823
|
+
const gib = sys.spawn();
|
|
4824
|
+
gib.classname = "gib";
|
|
4825
|
+
gib.origin = {
|
|
4826
|
+
x: origin.x + (random.frandom() - 0.5) * 20,
|
|
4827
|
+
y: origin.y + (random.frandom() - 0.5) * 20,
|
|
4828
|
+
z: origin.z + (random.frandom() - 0.5) * 20
|
|
4829
|
+
};
|
|
4830
|
+
gib.velocity = {
|
|
4831
|
+
x: (random.frandom() - 0.5) * 300,
|
|
4832
|
+
// Velocity based on damage?
|
|
4833
|
+
y: (random.frandom() - 0.5) * 300,
|
|
4834
|
+
z: 200 + random.frandom() * 100
|
|
4835
|
+
};
|
|
4836
|
+
gib.movetype = 9 /* Bounce */;
|
|
4837
|
+
gib.solid = 0 /* Not */;
|
|
4838
|
+
gib.clipmask = 1;
|
|
4839
|
+
gib.avelocity = {
|
|
4840
|
+
x: random.crandom() * 600,
|
|
4841
|
+
y: random.crandom() * 600,
|
|
4842
|
+
z: random.crandom() * 600
|
|
4843
|
+
};
|
|
4844
|
+
const models = [
|
|
4845
|
+
"models/objects/gibs/bone/tris.md2",
|
|
4846
|
+
"models/objects/gibs/meat/tris.md2",
|
|
4847
|
+
"models/objects/gibs/sm_meat/tris.md2",
|
|
4848
|
+
"models/objects/gibs/arm/tris.md2"
|
|
4849
|
+
// larger parts?
|
|
4850
|
+
];
|
|
4851
|
+
const modelName = models[Math.floor(random.frandom() * models.length)];
|
|
4852
|
+
gib.modelindex = sys.modelIndex(modelName);
|
|
4853
|
+
gib.mins = { x: -2, y: -2, z: -2 };
|
|
4854
|
+
gib.maxs = { x: 2, y: 2, z: 2 };
|
|
4855
|
+
gib.think = (self) => {
|
|
4856
|
+
sys.free(self);
|
|
4857
|
+
};
|
|
4858
|
+
sys.scheduleThink(gib, sys.timeSeconds + 10 + random.frandom() * 10);
|
|
4859
|
+
sys.finalizeSpawn(gib);
|
|
4860
|
+
}
|
|
4861
|
+
function throwGibs(sys, origin, damage) {
|
|
4862
|
+
const count = 4 + Math.floor(random.frandom() * 4);
|
|
4863
|
+
for (let i = 0; i < count; i++) {
|
|
4864
|
+
spawnGib(sys, origin, damage);
|
|
4865
|
+
}
|
|
4866
|
+
}
|
|
4867
|
+
|
|
4741
4868
|
// src/entities/monsters/soldier.ts
|
|
4742
4869
|
var MONSTER_TICK2 = 0.1;
|
|
4743
4870
|
function monster_ai_stand2(self, dist, context) {
|
|
@@ -4834,11 +4961,21 @@ function SP_monster_soldier(self, context) {
|
|
|
4834
4961
|
self.health = 20;
|
|
4835
4962
|
self.max_health = 20;
|
|
4836
4963
|
self.mass = 100;
|
|
4964
|
+
self.takedamage = true;
|
|
4837
4965
|
self.pain = (self2, other, kick, damage) => {
|
|
4838
4966
|
};
|
|
4839
4967
|
self.die = (self2, inflictor, attacker, damage, point) => {
|
|
4840
4968
|
self2.deadflag = 2 /* Dead */;
|
|
4841
4969
|
self2.solid = 0 /* Not */;
|
|
4970
|
+
if (self2.health < -40) {
|
|
4971
|
+
throwGibs(context.entities, self2.origin, damage);
|
|
4972
|
+
context.entities.free(self2);
|
|
4973
|
+
return;
|
|
4974
|
+
}
|
|
4975
|
+
self2.think = (self3) => {
|
|
4976
|
+
context.entities.free(self3);
|
|
4977
|
+
};
|
|
4978
|
+
self2.nextthink = context.entities.timeSeconds + 5;
|
|
4842
4979
|
};
|
|
4843
4980
|
self.monsterinfo.stand = soldier_stand;
|
|
4844
4981
|
self.monsterinfo.walk = soldier_walk;
|
|
@@ -5226,6 +5363,31 @@ var LevelClock = class {
|
|
|
5226
5363
|
}
|
|
5227
5364
|
};
|
|
5228
5365
|
|
|
5366
|
+
// src/entities/player.ts
|
|
5367
|
+
function player_die(self, inflictor, attacker, damage, point, mod, sys) {
|
|
5368
|
+
self.deadflag = 2 /* Dead */;
|
|
5369
|
+
self.solid = 0 /* Not */;
|
|
5370
|
+
self.movetype = 7 /* Toss */;
|
|
5371
|
+
self.takedamage = false;
|
|
5372
|
+
if (self.health < -40 && sys) {
|
|
5373
|
+
throwGibs(sys, self.origin, damage);
|
|
5374
|
+
}
|
|
5375
|
+
self.frame = 0;
|
|
5376
|
+
if (sys) {
|
|
5377
|
+
let message = "You died.";
|
|
5378
|
+
if (attacker) {
|
|
5379
|
+
if (attacker === self) {
|
|
5380
|
+
message = "You killed yourself.";
|
|
5381
|
+
} else {
|
|
5382
|
+
message = `You were killed by ${attacker.classname} (${damageModName(mod)})`;
|
|
5383
|
+
}
|
|
5384
|
+
} else {
|
|
5385
|
+
message = `You died (${damageModName(mod)})`;
|
|
5386
|
+
}
|
|
5387
|
+
sys.engine.centerprintf?.(self, message);
|
|
5388
|
+
}
|
|
5389
|
+
}
|
|
5390
|
+
|
|
5229
5391
|
// src/checksum.ts
|
|
5230
5392
|
var FNV_OFFSET_BASIS = 2166136261;
|
|
5231
5393
|
var FNV_PRIME = 16777619;
|
|
@@ -6279,7 +6441,7 @@ function getWeaponState(playerStates, weaponId) {
|
|
|
6279
6441
|
|
|
6280
6442
|
// src/index.ts
|
|
6281
6443
|
var ZERO_VEC32 = { x: 0, y: 0, z: 0 };
|
|
6282
|
-
function createGame({ trace, pointcontents }, engine, options) {
|
|
6444
|
+
function createGame({ trace, pointcontents, multicast, unicast }, engine, options) {
|
|
6283
6445
|
const gravity = options.gravity;
|
|
6284
6446
|
const levelClock = new LevelClock();
|
|
6285
6447
|
const frameLoop = new GameFrameLoop();
|
|
@@ -6295,7 +6457,7 @@ function createGame({ trace, pointcontents }, engine, options) {
|
|
|
6295
6457
|
z: ent.origin.z + ent.maxs.z
|
|
6296
6458
|
};
|
|
6297
6459
|
};
|
|
6298
|
-
const entities = new EntitySystem(engine, { trace, pointcontents, linkentity }, gravity);
|
|
6460
|
+
const entities = new EntitySystem(engine, { trace, pointcontents, linkentity, multicast, unicast }, gravity);
|
|
6299
6461
|
frameLoop.addStage("prep", (context) => {
|
|
6300
6462
|
levelClock.tick(context);
|
|
6301
6463
|
entities.beginFrame(levelClock.current.timeSeconds);
|
|
@@ -6351,6 +6513,7 @@ function createGame({ trace, pointcontents }, engine, options) {
|
|
|
6351
6513
|
player.origin = playerStart ? { ...playerStart.origin } : { x: 0, y: 0, z: 0 };
|
|
6352
6514
|
player.angles = playerStart ? { ...playerStart.angles } : { x: 0, y: 0, z: 0 };
|
|
6353
6515
|
player.health = 100;
|
|
6516
|
+
player.takedamage = true;
|
|
6354
6517
|
player.movetype = 7 /* Toss */;
|
|
6355
6518
|
player.mins = { x: -16, y: -16, z: -24 };
|
|
6356
6519
|
player.maxs = { x: 16, y: 16, z: 32 };
|
|
@@ -6358,6 +6521,9 @@ function createGame({ trace, pointcontents }, engine, options) {
|
|
|
6358
6521
|
inventory: createPlayerInventory(),
|
|
6359
6522
|
weaponStates: createPlayerWeaponStates()
|
|
6360
6523
|
};
|
|
6524
|
+
player.die = (self, inflictor, attacker, damage, point, mod) => {
|
|
6525
|
+
player_die(self, inflictor, attacker, damage, point, mod, entities);
|
|
6526
|
+
};
|
|
6361
6527
|
entities.finalizeSpawn(player);
|
|
6362
6528
|
origin = { ...player.origin };
|
|
6363
6529
|
},
|
|
@@ -6397,6 +6563,12 @@ function createGame({ trace, pointcontents }, engine, options) {
|
|
|
6397
6563
|
engine.centerprintf?.(entity, message);
|
|
6398
6564
|
},
|
|
6399
6565
|
trace,
|
|
6566
|
+
multicast(origin2, type, event, ...args) {
|
|
6567
|
+
multicast(origin2, type, event, ...args);
|
|
6568
|
+
},
|
|
6569
|
+
unicast(ent, reliable, event, ...args) {
|
|
6570
|
+
unicast(ent, reliable, event, ...args);
|
|
6571
|
+
},
|
|
6400
6572
|
get time() {
|
|
6401
6573
|
return levelClock.current.timeSeconds;
|
|
6402
6574
|
}
|