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
|
@@ -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__ */ ((
|
|
4134
|
-
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
|
|
4167
|
-
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
|
|
4171
|
-
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|