quake2ts 0.0.175 → 0.0.177
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 +3 -3
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +8 -8
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +64 -3
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +64 -3
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/bsp.d.ts +18 -0
- package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -1
- package/packages/engine/dist/types/render/bsp/geometry.d.ts +4 -1
- package/packages/engine/dist/types/render/bsp/geometry.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +2 -2
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +77 -35
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +77 -35
- 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 +2 -2
- package/packages/game/dist/types/combat/damage.d.ts.map +1 -1
- package/packages/game/dist/types/combat/specialDamage.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/attack.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/berserk.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/mutant.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/parasite.d.ts.map +1 -1
- package/packages/game/dist/types/entities/projectiles/rocket.d.ts.map +1 -1
- package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts +3 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
|
@@ -1201,7 +1201,8 @@ function pickupArmor(inventory, item, time) {
|
|
|
1201
1201
|
}
|
|
1202
1202
|
return false;
|
|
1203
1203
|
}
|
|
1204
|
-
function pickupPowerup(
|
|
1204
|
+
function pickupPowerup(client, item, time) {
|
|
1205
|
+
const inventory = client.inventory;
|
|
1205
1206
|
let powerupId = null;
|
|
1206
1207
|
let icon = "";
|
|
1207
1208
|
switch (item.id) {
|
|
@@ -1225,13 +1226,19 @@ function pickupPowerup(inventory, item, time) {
|
|
|
1225
1226
|
powerupId = "enviro_suit" /* EnviroSuit */;
|
|
1226
1227
|
icon = "p_envirosuit";
|
|
1227
1228
|
break;
|
|
1229
|
+
case "item_double":
|
|
1230
|
+
powerupId = "double_damage" /* DoubleDamage */;
|
|
1231
|
+
icon = "p_double";
|
|
1232
|
+
break;
|
|
1228
1233
|
}
|
|
1229
1234
|
if (powerupId) {
|
|
1230
1235
|
const expiresAt = inventory.powerups.get(powerupId);
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1236
|
+
const newExpiresAt = expiresAt && expiresAt > time ? expiresAt + item.timer * 1e3 : time + item.timer * 1e3;
|
|
1237
|
+
inventory.powerups.set(powerupId, newExpiresAt);
|
|
1238
|
+
if (powerupId === "quad" /* QuadDamage */) {
|
|
1239
|
+
client.quad_time = newExpiresAt / 1e3;
|
|
1240
|
+
} else if (powerupId === "double_damage" /* DoubleDamage */) {
|
|
1241
|
+
client.double_time = newExpiresAt / 1e3;
|
|
1235
1242
|
}
|
|
1236
1243
|
setPickup(inventory, icon, time);
|
|
1237
1244
|
return true;
|
|
@@ -4226,7 +4233,7 @@ function createPowerupPickupEntity(game, powerupItem) {
|
|
|
4226
4233
|
if (!other || !other.client) {
|
|
4227
4234
|
return;
|
|
4228
4235
|
}
|
|
4229
|
-
if (pickupPowerup(other.client
|
|
4236
|
+
if (pickupPowerup(other.client, powerupItem, game.time * 1e3)) {
|
|
4230
4237
|
game.sound?.(other, 0, "items/pkup.wav", 1, 1, 0);
|
|
4231
4238
|
game.centerprintf?.(other, `You got the ${powerupItem.name}`);
|
|
4232
4239
|
self.solid = 0 /* Not */;
|
|
@@ -4728,6 +4735,23 @@ var EntityDamageFlags = /* @__PURE__ */ ((EntityDamageFlags2) => {
|
|
|
4728
4735
|
EntityDamageFlags2[EntityDamageFlags2["NO_DAMAGE_EFFECTS"] = 8] = "NO_DAMAGE_EFFECTS";
|
|
4729
4736
|
return EntityDamageFlags2;
|
|
4730
4737
|
})(EntityDamageFlags || {});
|
|
4738
|
+
function getDamageModifier(attacker, time) {
|
|
4739
|
+
if (!attacker) {
|
|
4740
|
+
return 1;
|
|
4741
|
+
}
|
|
4742
|
+
const client = attacker.client;
|
|
4743
|
+
if (!client) {
|
|
4744
|
+
return 1;
|
|
4745
|
+
}
|
|
4746
|
+
let modifier = 1;
|
|
4747
|
+
if (client.quad_time && client.quad_time > time) {
|
|
4748
|
+
modifier *= 4;
|
|
4749
|
+
}
|
|
4750
|
+
if (client.double_time && client.double_time > time) {
|
|
4751
|
+
modifier *= 2;
|
|
4752
|
+
}
|
|
4753
|
+
return modifier;
|
|
4754
|
+
}
|
|
4731
4755
|
function applyKnockback(targ, attacker, dir, knockback, dflags) {
|
|
4732
4756
|
const hasNoKnockback = hasAnyDamageFlag(dflags, 8 /* NO_KNOCKBACK */) || ((targ.flags ?? 0) & 4 /* NO_KNOCKBACK */) !== 0;
|
|
4733
4757
|
if (hasNoKnockback || knockback === 0) {
|
|
@@ -4770,22 +4794,25 @@ function targetCenter(ent) {
|
|
|
4770
4794
|
}
|
|
4771
4795
|
return ent.origin;
|
|
4772
4796
|
}
|
|
4773
|
-
function T_Damage(targ, inflictor, attacker, dir, point, normal, damage, knockback, dflags, mod, multicast) {
|
|
4774
|
-
if (!targ.takedamage
|
|
4797
|
+
function T_Damage(targ, inflictor, attacker, dir, point, normal, damage, knockback, dflags, mod, time, multicast) {
|
|
4798
|
+
if (!targ.takedamage) {
|
|
4775
4799
|
return null;
|
|
4776
4800
|
}
|
|
4777
|
-
const
|
|
4801
|
+
const modifier = getDamageModifier(attacker, time);
|
|
4802
|
+
const modifiedDamage = damage * modifier;
|
|
4803
|
+
const modifiedKnockback = knockback * modifier;
|
|
4804
|
+
const protectedByGod = !hasAnyDamageFlag(dflags, 32 /* NO_PROTECTION */) && ((targ.flags ?? 0) & 1 /* GODMODE */) !== 0 && modifiedDamage > 0;
|
|
4778
4805
|
if (protectedByGod) {
|
|
4779
4806
|
return {
|
|
4780
4807
|
take: 0,
|
|
4781
4808
|
psave: 0,
|
|
4782
|
-
asave:
|
|
4809
|
+
asave: modifiedDamage,
|
|
4783
4810
|
knocked: { x: 0, y: 0, z: 0 },
|
|
4784
4811
|
killed: false
|
|
4785
4812
|
};
|
|
4786
4813
|
}
|
|
4787
|
-
const knocked = applyKnockback(targ, attacker, dir,
|
|
4788
|
-
const [take, psave, asave, remainingCells, remainingArmor] = applyProtection(targ, point, normal,
|
|
4814
|
+
const knocked = applyKnockback(targ, attacker, dir, modifiedKnockback, dflags);
|
|
4815
|
+
const [take, psave, asave, remainingCells, remainingArmor] = applyProtection(targ, point, normal, modifiedDamage, dflags);
|
|
4789
4816
|
if (targ.powerArmor && remainingCells !== void 0) {
|
|
4790
4817
|
targ.powerArmor.cellCount = remainingCells;
|
|
4791
4818
|
}
|
|
@@ -4814,7 +4841,7 @@ function T_Damage(targ, inflictor, attacker, dir, point, normal, damage, knockba
|
|
|
4814
4841
|
}
|
|
4815
4842
|
return { take: actualTake, psave, asave, knocked, killed, remainingCells, remainingArmor };
|
|
4816
4843
|
}
|
|
4817
|
-
function T_RadiusDamage(entities, inflictor, attacker, damage, ignore, radius, dflags, mod, options = {}, multicast) {
|
|
4844
|
+
function T_RadiusDamage(entities, inflictor, attacker, damage, ignore, radius, dflags, mod, time, options = {}, multicast) {
|
|
4818
4845
|
const hits = [];
|
|
4819
4846
|
const inflictorCenter = targetCenter(inflictor);
|
|
4820
4847
|
const canDamage = options.canDamage ?? (() => true);
|
|
@@ -4834,7 +4861,7 @@ function T_RadiusDamage(entities, inflictor, attacker, damage, ignore, radius, d
|
|
|
4834
4861
|
}
|
|
4835
4862
|
const adjustedDamage = ent === attacker ? points * 0.5 : points;
|
|
4836
4863
|
const dir = normalizeVec3(subtractVec3(ent.origin, inflictorCenter));
|
|
4837
|
-
const result = T_Damage(ent, inflictor, attacker, dir, entCenter, dir, adjustedDamage, adjustedDamage, dflags | 1 /* RADIUS */, mod, multicast);
|
|
4864
|
+
const result = T_Damage(ent, inflictor, attacker, dir, entCenter, dir, adjustedDamage, adjustedDamage, dflags | 1 /* RADIUS */, mod, time, multicast);
|
|
4838
4865
|
hits.push({ target: ent, result, appliedDamage: adjustedDamage });
|
|
4839
4866
|
}
|
|
4840
4867
|
return hits;
|
|
@@ -5183,6 +5210,7 @@ function fire_hit(self, aim, damage, kick, context) {
|
|
|
5183
5210
|
kick,
|
|
5184
5211
|
0 /* NONE */,
|
|
5185
5212
|
0 /* UNKNOWN */,
|
|
5213
|
+
context.timeSeconds,
|
|
5186
5214
|
context.multicast.bind(context)
|
|
5187
5215
|
);
|
|
5188
5216
|
return true;
|
|
@@ -5265,7 +5293,7 @@ function berserk_attack_slam(self, context) {
|
|
|
5265
5293
|
const points = Math.max(1, damage * amount * amount);
|
|
5266
5294
|
const k = kick * amount * amount;
|
|
5267
5295
|
const dir = normalizeVec3(subtractVec3(ent.origin, tr.endpos));
|
|
5268
|
-
T_Damage(ent, self, self, dir, ent.origin, dir, points, k, 1 /* RADIUS */, 0 /* UNKNOWN */, context.multicast.bind(context));
|
|
5296
|
+
T_Damage(ent, self, self, dir, ent.origin, dir, points, k, 1 /* RADIUS */, 0 /* UNKNOWN */, context.timeSeconds, context.multicast.bind(context));
|
|
5269
5297
|
if (ent.client) {
|
|
5270
5298
|
const currentVel = { ...ent.velocity };
|
|
5271
5299
|
currentVel.z = Math.max(270, currentVel.z);
|
|
@@ -5542,11 +5570,12 @@ function createRocket(sys, owner, start, dir, damage, radiusDamage, speed, flash
|
|
|
5542
5570
|
0,
|
|
5543
5571
|
0 /* NONE */,
|
|
5544
5572
|
8 /* ROCKET */,
|
|
5573
|
+
sys.timeSeconds,
|
|
5545
5574
|
sys.multicast.bind(sys)
|
|
5546
5575
|
);
|
|
5547
5576
|
}
|
|
5548
5577
|
const entities = sys.findByRadius(self.origin, 120);
|
|
5549
|
-
T_RadiusDamage(entities, self, self.owner, radiusDamage, self.owner, 120, 0 /* NONE */, 9 /* R_SPLASH */, {}, sys.multicast.bind(sys));
|
|
5578
|
+
T_RadiusDamage(entities, self, self.owner, radiusDamage, self.owner, 120, 0 /* NONE */, 9 /* R_SPLASH */, sys.timeSeconds, {}, sys.multicast.bind(sys));
|
|
5550
5579
|
sys.multicast(self.origin, 2 /* Phs */, ServerCommand.temp_entity, TempEntity.ROCKET_EXPLOSION, self.origin);
|
|
5551
5580
|
sys.free(self);
|
|
5552
5581
|
};
|
|
@@ -5566,7 +5595,7 @@ function createGrenade(sys, owner, start, dir, damage, speed) {
|
|
|
5566
5595
|
grenade.maxs = { x: 4, y: 4, z: 4 };
|
|
5567
5596
|
const explode = (self) => {
|
|
5568
5597
|
const entities = sys.findByRadius(self.origin, 120);
|
|
5569
|
-
T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */, {}, sys.multicast.bind(sys));
|
|
5598
|
+
T_RadiusDamage(entities, self, self.owner, damage, self.owner, 120, 0 /* NONE */, 6 /* GRENADE */, sys.timeSeconds, {}, sys.multicast.bind(sys));
|
|
5570
5599
|
sys.multicast(self.origin, 2 /* Phs */, ServerCommand.temp_entity, TempEntity.GRENADE_EXPLOSION, self.origin);
|
|
5571
5600
|
sys.free(self);
|
|
5572
5601
|
};
|
|
@@ -5612,6 +5641,7 @@ function createBlasterBolt(sys, owner, start, dir, damage, speed, mod) {
|
|
|
5612
5641
|
// Kick
|
|
5613
5642
|
0 /* NONE */,
|
|
5614
5643
|
mod,
|
|
5644
|
+
sys.timeSeconds,
|
|
5615
5645
|
sys.multicast.bind(sys)
|
|
5616
5646
|
);
|
|
5617
5647
|
} else {
|
|
@@ -5666,6 +5696,7 @@ function fireBfgPiercingLaser(sys, bfg, target, damage) {
|
|
|
5666
5696
|
// kick
|
|
5667
5697
|
4 /* ENERGY */,
|
|
5668
5698
|
12 /* BFG_LASER */,
|
|
5699
|
+
sys.timeSeconds,
|
|
5669
5700
|
sys.multicast.bind(sys)
|
|
5670
5701
|
);
|
|
5671
5702
|
}
|
|
@@ -5751,6 +5782,7 @@ function bfgExplode(self, sys) {
|
|
|
5751
5782
|
0,
|
|
5752
5783
|
4 /* ENERGY */,
|
|
5753
5784
|
14 /* BFG_EFFECT */,
|
|
5785
|
+
sys.timeSeconds,
|
|
5754
5786
|
sys.multicast.bind(sys)
|
|
5755
5787
|
);
|
|
5756
5788
|
}
|
|
@@ -5794,6 +5826,7 @@ function createBfgBall(sys, owner, start, dir, damage, speed, damageRadius) {
|
|
|
5794
5826
|
0,
|
|
5795
5827
|
4 /* ENERGY */,
|
|
5796
5828
|
13 /* BFG_BLAST */,
|
|
5829
|
+
sys.timeSeconds,
|
|
5797
5830
|
sys.multicast.bind(sys)
|
|
5798
5831
|
);
|
|
5799
5832
|
}
|
|
@@ -5807,6 +5840,7 @@ function createBfgBall(sys, owner, start, dir, damage, speed, damageRadius) {
|
|
|
5807
5840
|
100,
|
|
5808
5841
|
4 /* ENERGY */,
|
|
5809
5842
|
13 /* BFG_BLAST */,
|
|
5843
|
+
sys.timeSeconds,
|
|
5810
5844
|
{},
|
|
5811
5845
|
sys.multicast.bind(sys)
|
|
5812
5846
|
);
|
|
@@ -5864,7 +5898,8 @@ function monster_fire_bullet_v2(self, start, dir, damage, kick, hspread, vspread
|
|
|
5864
5898
|
damage,
|
|
5865
5899
|
kick,
|
|
5866
5900
|
16 /* BULLET */ | 2 /* NO_ARMOR */,
|
|
5867
|
-
mod
|
|
5901
|
+
mod,
|
|
5902
|
+
context.timeSeconds
|
|
5868
5903
|
);
|
|
5869
5904
|
}
|
|
5870
5905
|
var monster_fire_bullet = monster_fire_bullet_v2;
|
|
@@ -5900,7 +5935,8 @@ function monster_fire_railgun(self, start, aim, damage, kick, flashtype, context
|
|
|
5900
5935
|
damage,
|
|
5901
5936
|
kick,
|
|
5902
5937
|
4 /* ENERGY */ | 2 /* NO_ARMOR */,
|
|
5903
|
-
11 /* RAILGUN
|
|
5938
|
+
11 /* RAILGUN */,
|
|
5939
|
+
context.timeSeconds
|
|
5904
5940
|
);
|
|
5905
5941
|
}
|
|
5906
5942
|
}
|
|
@@ -5924,7 +5960,8 @@ function monster_fire_hit(self, aim, damage, kick, context) {
|
|
|
5924
5960
|
damage,
|
|
5925
5961
|
kick,
|
|
5926
5962
|
0,
|
|
5927
|
-
0 /* UNKNOWN
|
|
5963
|
+
0 /* UNKNOWN */,
|
|
5964
|
+
context.timeSeconds
|
|
5928
5965
|
);
|
|
5929
5966
|
return true;
|
|
5930
5967
|
}
|
|
@@ -5938,7 +5975,7 @@ function dabeam_update(self, context) {
|
|
|
5938
5975
|
const end = addVec3(start, scaleVec3(self.movedir, 2048));
|
|
5939
5976
|
const tr = context.trace(start, end, ZERO_VEC3, ZERO_VEC3, self, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_DEADMONSTER);
|
|
5940
5977
|
if (self.dmg > 0 && tr.ent && tr.ent.takedamage && tr.ent !== self.owner) {
|
|
5941
|
-
T_Damage(tr.ent, self, self.owner, self.movedir, tr.endpos, ZERO_VEC3, self.dmg, 0, 4 /* ENERGY */, 31 /* TARGET_LASER
|
|
5978
|
+
T_Damage(tr.ent, self, self.owner, self.movedir, tr.endpos, ZERO_VEC3, self.dmg, 0, 4 /* ENERGY */, 31 /* TARGET_LASER */, context.timeSeconds);
|
|
5942
5979
|
}
|
|
5943
5980
|
if (tr.ent && tr.ent.solid === 3 /* Bsp */) {
|
|
5944
5981
|
context.multicast(tr.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.LASER_SPARKS, 10, tr.endpos, tr.plane?.normal || ZERO_VEC3, self.skin);
|
|
@@ -6291,7 +6328,7 @@ function brain_tounge_attack(self, context) {
|
|
|
6291
6328
|
context.engine.sound?.(self, 0, "brain/brnatck3.wav", 1, 1, 0);
|
|
6292
6329
|
context.multicast(self.origin, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.PARASITE_ATTACK, self, start, end);
|
|
6293
6330
|
const dir = subtractVec3(start, end);
|
|
6294
|
-
T_Damage(self.enemy, self, self, dir, self.enemy.origin, ZERO_VEC3, 5, 0, 0, 37 /* BRAINTENTACLE
|
|
6331
|
+
T_Damage(self.enemy, self, self, dir, self.enemy.origin, ZERO_VEC3, 5, 0, 0, 37 /* BRAINTENTACLE */, context.timeSeconds);
|
|
6295
6332
|
self.origin = { ...self.origin, z: self.origin.z + 1 };
|
|
6296
6333
|
const forward = angleVectors(self.angles).forward;
|
|
6297
6334
|
self.enemy.velocity = scaleVec3(forward, -1200);
|
|
@@ -7522,7 +7559,8 @@ function flyer_slash(self, context) {
|
|
|
7522
7559
|
damage,
|
|
7523
7560
|
5,
|
|
7524
7561
|
2 /* NO_ARMOR */,
|
|
7525
|
-
0 /* UNKNOWN
|
|
7562
|
+
0 /* UNKNOWN */,
|
|
7563
|
+
context.timeSeconds
|
|
7526
7564
|
);
|
|
7527
7565
|
}
|
|
7528
7566
|
}
|
|
@@ -7702,7 +7740,7 @@ function gladiator_melee(self, context) {
|
|
|
7702
7740
|
z: self.origin.z + (self.viewheight || 0)
|
|
7703
7741
|
};
|
|
7704
7742
|
const dir = normalizeVec3(subtractVec3(self.enemy.origin, start));
|
|
7705
|
-
T_Damage(self.enemy, self, self, dir, self.origin, { x: 0, y: 0, z: 0 }, 20, 10, 0, 0 /* UNKNOWN
|
|
7743
|
+
T_Damage(self.enemy, self, self, dir, self.origin, { x: 0, y: 0, z: 0 }, 20, 10, 0, 0 /* UNKNOWN */, context.timeSeconds);
|
|
7706
7744
|
}
|
|
7707
7745
|
function gladiator_fire_railgun(self, context) {
|
|
7708
7746
|
if (!self.enemy) return;
|
|
@@ -9227,7 +9265,8 @@ function mutant_swing(self, damage, context) {
|
|
|
9227
9265
|
damage,
|
|
9228
9266
|
0,
|
|
9229
9267
|
0,
|
|
9230
|
-
0 /* UNKNOWN
|
|
9268
|
+
0 /* UNKNOWN */,
|
|
9269
|
+
context.timeSeconds
|
|
9231
9270
|
);
|
|
9232
9271
|
}
|
|
9233
9272
|
function mutant_hit_right(self, context) {
|
|
@@ -9264,7 +9303,8 @@ function mutant_jump_touch(self, other, plane, surf) {
|
|
|
9264
9303
|
50,
|
|
9265
9304
|
0,
|
|
9266
9305
|
0,
|
|
9267
|
-
0 /* UNKNOWN
|
|
9306
|
+
0 /* UNKNOWN */,
|
|
9307
|
+
0
|
|
9268
9308
|
);
|
|
9269
9309
|
}
|
|
9270
9310
|
if (!other || !other.takedamage && other.solid !== 0 /* Not */) {
|
|
@@ -9699,7 +9739,8 @@ function parasite_drain_attack(self, context) {
|
|
|
9699
9739
|
damage,
|
|
9700
9740
|
0,
|
|
9701
9741
|
8 /* NO_KNOCKBACK */,
|
|
9702
|
-
0 /* UNKNOWN
|
|
9742
|
+
0 /* UNKNOWN */,
|
|
9743
|
+
context.timeSeconds
|
|
9703
9744
|
);
|
|
9704
9745
|
if (self.health < self.max_health) {
|
|
9705
9746
|
self.health += damage;
|
|
@@ -12360,8 +12401,8 @@ var EnvironmentalFlags = /* @__PURE__ */ ((EnvironmentalFlags2) => {
|
|
|
12360
12401
|
EnvironmentalFlags2[EnvironmentalFlags2["IMMUNE_SLIME"] = 4] = "IMMUNE_SLIME";
|
|
12361
12402
|
return EnvironmentalFlags2;
|
|
12362
12403
|
})(EnvironmentalFlags || {});
|
|
12363
|
-
function applyDamageEvent(target, amount, mod) {
|
|
12364
|
-
return T_Damage(target, null, null, ZERO2, target.origin, ZERO2, amount, 0, 2 /* NO_ARMOR */, mod);
|
|
12404
|
+
function applyDamageEvent(target, amount, mod, time) {
|
|
12405
|
+
return T_Damage(target, null, null, ZERO2, target.origin, ZERO2, amount, 0, 2 /* NO_ARMOR */, mod, time);
|
|
12365
12406
|
}
|
|
12366
12407
|
function applyEnvironmentalDamage(target, nowMs) {
|
|
12367
12408
|
const events = [];
|
|
@@ -12376,7 +12417,7 @@ function applyEnvironmentalDamage(target, nowMs) {
|
|
|
12376
12417
|
if (target.airFinished < nowMs && target.painDebounceTime <= nowMs) {
|
|
12377
12418
|
const elapsedSeconds = Math.floor((nowMs - target.airFinished) / 1e3);
|
|
12378
12419
|
const amount = Math.min(15, 2 + 2 * elapsedSeconds);
|
|
12379
|
-
const result = applyDamageEvent(target, amount, 17 /* WATER
|
|
12420
|
+
const result = applyDamageEvent(target, amount, 17 /* WATER */, nowMs / 1e3);
|
|
12380
12421
|
target.painDebounceTime = nowMs + 1e3;
|
|
12381
12422
|
events.push({ mod: 17 /* WATER */, amount, result });
|
|
12382
12423
|
}
|
|
@@ -12390,12 +12431,12 @@ function applyEnvironmentalDamage(target, nowMs) {
|
|
|
12390
12431
|
if (target.damageDebounceTime <= nowMs) {
|
|
12391
12432
|
if ((target.watertype & CONTENTS_LAVA) !== 0 && (flags & 2 /* IMMUNE_LAVA */) === 0) {
|
|
12392
12433
|
const amount = 10 * target.waterlevel;
|
|
12393
|
-
const result = applyDamageEvent(target, amount, 19 /* LAVA
|
|
12434
|
+
const result = applyDamageEvent(target, amount, 19 /* LAVA */, nowMs / 1e3);
|
|
12394
12435
|
target.damageDebounceTime = nowMs + 100;
|
|
12395
12436
|
events.push({ mod: 19 /* LAVA */, amount, result });
|
|
12396
12437
|
} else if ((target.watertype & CONTENTS_SLIME) !== 0 && (flags & 4 /* IMMUNE_SLIME */) === 0) {
|
|
12397
12438
|
const amount = 4 * target.waterlevel;
|
|
12398
|
-
const result = applyDamageEvent(target, amount, 18 /* SLIME
|
|
12439
|
+
const result = applyDamageEvent(target, amount, 18 /* SLIME */, nowMs / 1e3);
|
|
12399
12440
|
target.damageDebounceTime = nowMs + 100;
|
|
12400
12441
|
events.push({ mod: 18 /* SLIME */, amount, result });
|
|
12401
12442
|
}
|
|
@@ -12463,7 +12504,8 @@ function applyFallingDamage(target, context) {
|
|
|
12463
12504
|
result.damage,
|
|
12464
12505
|
0,
|
|
12465
12506
|
2 /* NO_ARMOR */,
|
|
12466
|
-
23 /* FALLING
|
|
12507
|
+
23 /* FALLING */,
|
|
12508
|
+
0
|
|
12467
12509
|
);
|
|
12468
12510
|
}
|
|
12469
12511
|
return result;
|
|
@@ -12473,7 +12515,7 @@ function applyCrushDamage(crusher, target, options = {}) {
|
|
|
12473
12515
|
const gibDamage = options.gibDamage ?? 100;
|
|
12474
12516
|
const baseDamage = options.baseDamage ?? crusher.dmg ?? 10;
|
|
12475
12517
|
const amount = !target.isMonster && !target.isClient ? nonLivingDamage : target.health < 1 ? gibDamage : baseDamage;
|
|
12476
|
-
const result = T_Damage(target, crusher, crusher, ZERO2, target.origin, ZERO2, amount, 1, 0 /* NONE */, 20 /* CRUSH
|
|
12518
|
+
const result = T_Damage(target, crusher, crusher, ZERO2, target.origin, ZERO2, amount, 1, 0 /* NONE */, 20 /* CRUSH */, 0);
|
|
12477
12519
|
return { amount, result };
|
|
12478
12520
|
}
|
|
12479
12521
|
function absoluteBounds(ent) {
|
|
@@ -12503,7 +12545,7 @@ function killBox(teleporter, targets, options = {}) {
|
|
|
12503
12545
|
if (!boxesIntersect(teleBounds, absoluteBounds(target))) {
|
|
12504
12546
|
continue;
|
|
12505
12547
|
}
|
|
12506
|
-
const result = T_Damage(target, teleporter, teleporter, ZERO2, target.origin, ZERO2, 1e5, 0, 32 /* NO_PROTECTION */, mod);
|
|
12548
|
+
const result = T_Damage(target, teleporter, teleporter, ZERO2, target.origin, ZERO2, 1e5, 0, 32 /* NO_PROTECTION */, mod, 0);
|
|
12507
12549
|
events.push({ target, result });
|
|
12508
12550
|
if (!result || !result.killed || target.health > 0) {
|
|
12509
12551
|
cleared = false;
|