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.
Files changed (28) hide show
  1. package/package.json +1 -1
  2. package/packages/cgame/dist/index.cjs +13 -56
  3. package/packages/cgame/dist/index.cjs.map +1 -1
  4. package/packages/cgame/dist/index.d.cts +2 -1
  5. package/packages/cgame/dist/index.d.ts +2 -1
  6. package/packages/cgame/dist/index.js +14 -57
  7. package/packages/cgame/dist/index.js.map +1 -1
  8. package/packages/client/dist/browser/index.global.js +13 -13
  9. package/packages/client/dist/browser/index.global.js.map +1 -1
  10. package/packages/client/dist/cjs/index.cjs +6 -1
  11. package/packages/client/dist/cjs/index.cjs.map +1 -1
  12. package/packages/client/dist/esm/index.js +6 -1
  13. package/packages/client/dist/esm/index.js.map +1 -1
  14. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  15. package/packages/client/dist/types/index.d.ts.map +1 -1
  16. package/packages/game/dist/browser/index.global.js +3 -3
  17. package/packages/game/dist/browser/index.global.js.map +1 -1
  18. package/packages/game/dist/cjs/index.cjs +112 -1
  19. package/packages/game/dist/cjs/index.cjs.map +1 -1
  20. package/packages/game/dist/esm/index.js +112 -1
  21. package/packages/game/dist/esm/index.js.map +1 -1
  22. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  23. package/packages/game/dist/types/entities/entity.d.ts +2 -0
  24. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  25. package/packages/game/dist/types/entities/system.d.ts.map +1 -1
  26. package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
  27. package/packages/game/dist/types/inventory/playerInventory.d.ts +1 -0
  28. 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
- callback(entity);
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