quake2ts 0.0.269 → 0.0.271
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/cgame/dist/index.cjs +13 -56
- package/packages/cgame/dist/index.cjs.map +1 -1
- package/packages/cgame/dist/index.d.cts +2 -1
- package/packages/cgame/dist/index.d.ts +2 -1
- package/packages/cgame/dist/index.js +14 -57
- package/packages/cgame/dist/index.js.map +1 -1
- package/packages/client/dist/browser/index.global.js +13 -13
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +6 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +6 -1
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +3 -3
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +112 -1
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +112 -1
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/entity.d.ts +2 -0
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts +1 -0
- package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
|
@@ -1916,6 +1916,8 @@ var Entity = class {
|
|
|
1916
1916
|
this.attenuation = 0;
|
|
1917
1917
|
this.volume = 0;
|
|
1918
1918
|
this.fly_sound_debounce_time = 0;
|
|
1919
|
+
this.last_move_time = 0;
|
|
1920
|
+
this.damage_debounce_time = 0;
|
|
1919
1921
|
this.enemy = null;
|
|
1920
1922
|
this.movetarget = null;
|
|
1921
1923
|
this.target_ent = null;
|
|
@@ -2055,6 +2057,8 @@ var Entity = class {
|
|
|
2055
2057
|
this.sounds = 0;
|
|
2056
2058
|
this.noise_index = 0;
|
|
2057
2059
|
this.fly_sound_debounce_time = 0;
|
|
2060
|
+
this.last_move_time = 0;
|
|
2061
|
+
this.damage_debounce_time = 0;
|
|
2058
2062
|
this.enemy = null;
|
|
2059
2063
|
this.movetarget = null;
|
|
2060
2064
|
this.target_ent = null;
|
|
@@ -2150,6 +2154,8 @@ var ENTITY_FIELD_METADATA = [
|
|
|
2150
2154
|
{ name: "attenuation", type: "float", save: true },
|
|
2151
2155
|
{ name: "volume", type: "float", save: true },
|
|
2152
2156
|
{ name: "fly_sound_debounce_time", type: "float", save: true },
|
|
2157
|
+
{ name: "last_move_time", type: "float", save: true },
|
|
2158
|
+
{ name: "damage_debounce_time", type: "float", save: true },
|
|
2153
2159
|
{ name: "enemy", type: "entity", save: true },
|
|
2154
2160
|
{ name: "movetarget", type: "entity", save: true },
|
|
2155
2161
|
{ name: "target_ent", type: "entity", save: true },
|
|
@@ -3388,7 +3394,9 @@ var EntitySystem = class {
|
|
|
3388
3394
|
}
|
|
3389
3395
|
forEachEntity(callback) {
|
|
3390
3396
|
for (const entity of this.pool) {
|
|
3391
|
-
|
|
3397
|
+
if (entity.inUse && !entity.freePending) {
|
|
3398
|
+
callback(entity);
|
|
3399
|
+
}
|
|
3392
3400
|
}
|
|
3393
3401
|
}
|
|
3394
3402
|
find(predicate) {
|
|
@@ -4539,6 +4547,7 @@ function createBfgBall(sys, owner, start, dir, damage, speed, damageRadius) {
|
|
|
4539
4547
|
}
|
|
4540
4548
|
|
|
4541
4549
|
// src/entities/targets.ts
|
|
4550
|
+
var ATTN_NONE = 0;
|
|
4542
4551
|
var ATTN_NORM = 1;
|
|
4543
4552
|
var SPEAKER_SPAWNFLAGS = {
|
|
4544
4553
|
LoopedOn: 1 << 0,
|
|
@@ -4631,6 +4640,88 @@ function useTargetBlaster(self, other, activator, context) {
|
|
|
4631
4640
|
}
|
|
4632
4641
|
context.entities.sound(self, 2, "weapons/laser2.wav", 1, ATTN_NORM, 0);
|
|
4633
4642
|
}
|
|
4643
|
+
var SPAWNFLAG_EARTHQUAKE_SILENT = 1;
|
|
4644
|
+
var SPAWNFLAG_EARTHQUAKE_TOGGLE = 2;
|
|
4645
|
+
var SPAWNFLAG_EARTHQUAKE_ONE_SHOT = 8;
|
|
4646
|
+
function target_earthquake_think(self, context) {
|
|
4647
|
+
if (!(self.spawnflags & SPAWNFLAG_EARTHQUAKE_SILENT)) {
|
|
4648
|
+
if (self.last_move_time < context.entities.timeSeconds) {
|
|
4649
|
+
context.entities.sound(self, 2, "world/quake.wav", 1, ATTN_NONE, 0);
|
|
4650
|
+
self.last_move_time = context.entities.timeSeconds + 0.5;
|
|
4651
|
+
}
|
|
4652
|
+
}
|
|
4653
|
+
context.entities.forEachEntity((ent) => {
|
|
4654
|
+
if (!ent.client) return;
|
|
4655
|
+
ent.client.quake_time = context.entities.timeSeconds + 0.2;
|
|
4656
|
+
});
|
|
4657
|
+
if (context.entities.timeSeconds < self.timestamp) {
|
|
4658
|
+
self.nextthink = context.entities.timeSeconds + 0.1;
|
|
4659
|
+
}
|
|
4660
|
+
}
|
|
4661
|
+
function useTargetEarthquake(self, other, activator, context) {
|
|
4662
|
+
if (self.spawnflags & SPAWNFLAG_EARTHQUAKE_ONE_SHOT) {
|
|
4663
|
+
context.entities.forEachEntity((ent) => {
|
|
4664
|
+
if (!ent.client) return;
|
|
4665
|
+
if (ent.client) {
|
|
4666
|
+
if (!ent.client.kick_angles) ent.client.kick_angles = { x: 0, y: 0, z: 0 };
|
|
4667
|
+
ent.client.kick_angles = { ...ent.client.kick_angles, x: -self.speed * 0.1 };
|
|
4668
|
+
}
|
|
4669
|
+
});
|
|
4670
|
+
return;
|
|
4671
|
+
}
|
|
4672
|
+
self.timestamp = context.entities.timeSeconds + self.count;
|
|
4673
|
+
if (self.spawnflags & SPAWNFLAG_EARTHQUAKE_TOGGLE) {
|
|
4674
|
+
if (self.style) {
|
|
4675
|
+
self.nextthink = 0;
|
|
4676
|
+
} else {
|
|
4677
|
+
self.nextthink = context.entities.timeSeconds + 0.1;
|
|
4678
|
+
}
|
|
4679
|
+
self.style = !self.style ? 1 : 0;
|
|
4680
|
+
} else {
|
|
4681
|
+
self.nextthink = context.entities.timeSeconds + 0.1;
|
|
4682
|
+
self.last_move_time = 0;
|
|
4683
|
+
}
|
|
4684
|
+
self.activator = activator;
|
|
4685
|
+
}
|
|
4686
|
+
var SPAWNFLAG_LIGHTRAMP_TOGGLE = 1;
|
|
4687
|
+
function target_lightramp_think(self, context) {
|
|
4688
|
+
const timeDelta = context.entities.timeSeconds - self.timestamp;
|
|
4689
|
+
const val = self.movedir.x + timeDelta / 0.1 * self.movedir.z;
|
|
4690
|
+
let charCode = Math.floor("a".charCodeAt(0) + val);
|
|
4691
|
+
const styleStr = String.fromCharCode(charCode);
|
|
4692
|
+
const CS_LIGHTS = 32;
|
|
4693
|
+
if (self.enemy && self.enemy.style !== void 0) {
|
|
4694
|
+
context.entities.configstring(CS_LIGHTS + self.enemy.style, styleStr);
|
|
4695
|
+
}
|
|
4696
|
+
if (timeDelta < self.speed) {
|
|
4697
|
+
self.nextthink = context.entities.timeSeconds + 0.1;
|
|
4698
|
+
} else if (self.spawnflags & SPAWNFLAG_LIGHTRAMP_TOGGLE) {
|
|
4699
|
+
const temp = self.movedir.x;
|
|
4700
|
+
self.movedir = { ...self.movedir, x: self.movedir.y, y: temp, z: self.movedir.z * -1 };
|
|
4701
|
+
}
|
|
4702
|
+
}
|
|
4703
|
+
function useTargetLightramp(self, other, activator, context) {
|
|
4704
|
+
if (!self.enemy) {
|
|
4705
|
+
let e = null;
|
|
4706
|
+
let found = false;
|
|
4707
|
+
context.entities.forEachEntity((ent) => {
|
|
4708
|
+
if (ent.targetname === self.target) {
|
|
4709
|
+
if (ent.classname === "light") {
|
|
4710
|
+
self.enemy = ent;
|
|
4711
|
+
found = true;
|
|
4712
|
+
} else {
|
|
4713
|
+
context.warn(`${self.classname} target ${self.target} is not a light`);
|
|
4714
|
+
}
|
|
4715
|
+
}
|
|
4716
|
+
});
|
|
4717
|
+
if (!found) {
|
|
4718
|
+
context.warn(`${self.classname} target ${self.target} not found`);
|
|
4719
|
+
return;
|
|
4720
|
+
}
|
|
4721
|
+
}
|
|
4722
|
+
self.timestamp = context.entities.timeSeconds;
|
|
4723
|
+
target_lightramp_think(self, context);
|
|
4724
|
+
}
|
|
4634
4725
|
var TARGET_LASER_START_ON = 1;
|
|
4635
4726
|
var TARGET_LASER_RED = 2;
|
|
4636
4727
|
var TARGET_LASER_GREEN = 4;
|
|
@@ -4887,6 +4978,26 @@ function registerTargetSpawns(registry) {
|
|
|
4887
4978
|
};
|
|
4888
4979
|
context.entities.scheduleThink(entity, context.entities.timeSeconds + entity.delay);
|
|
4889
4980
|
});
|
|
4981
|
+
registry.register("target_earthquake", (entity, context) => {
|
|
4982
|
+
if (!entity.count) entity.count = 5;
|
|
4983
|
+
if (!entity.speed) entity.speed = 200;
|
|
4984
|
+
entity.svflags |= 1 /* NoClient */;
|
|
4985
|
+
entity.think = (self) => target_earthquake_think(self, context);
|
|
4986
|
+
entity.use = (self, other, activator) => useTargetEarthquake(self, other, activator ?? null, context);
|
|
4987
|
+
if (!(entity.spawnflags & SPAWNFLAG_EARTHQUAKE_SILENT)) {
|
|
4988
|
+
}
|
|
4989
|
+
});
|
|
4990
|
+
registry.register("target_lightramp", (entity, context) => {
|
|
4991
|
+
entity.svflags |= 1 /* NoClient */;
|
|
4992
|
+
entity.use = (self, other, activator) => useTargetLightramp(self, other, activator ?? null, context);
|
|
4993
|
+
entity.think = (self) => target_lightramp_think(self, context);
|
|
4994
|
+
if (entity.message && entity.message.length === 2 && entity.speed) {
|
|
4995
|
+
const start = entity.message.charCodeAt(0) - "a".charCodeAt(0);
|
|
4996
|
+
const end = entity.message.charCodeAt(1) - "a".charCodeAt(0);
|
|
4997
|
+
const slope = (end - start) / (entity.speed / 0.1);
|
|
4998
|
+
entity.movedir = { x: start, y: end, z: slope };
|
|
4999
|
+
}
|
|
5000
|
+
});
|
|
4890
5001
|
}
|
|
4891
5002
|
|
|
4892
5003
|
// src/entities/triggers.ts
|