quake2ts 0.0.292 → 0.0.294

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.
@@ -7643,40 +7643,80 @@ init_esm();
7643
7643
  // src/entities/gibs.ts
7644
7644
  init_esm();
7645
7645
  var random3 = createRandomGenerator();
7646
+ var GIB_ORGANIC = 0;
7646
7647
  var GIB_METALLIC = 1;
7647
7648
  var GIB_DEBRIS = 2;
7648
- function spawnGib(sys, origin, damage, model, type) {
7649
+ function velocityForDamage(damage) {
7650
+ let x = 100 * random3.crandom();
7651
+ let y = 100 * random3.crandom();
7652
+ let z = 200 + 100 * random3.frandom();
7653
+ if (damage < 50) {
7654
+ x *= 0.7;
7655
+ y *= 0.7;
7656
+ z *= 0.7;
7657
+ } else {
7658
+ x *= 1.2;
7659
+ y *= 1.2;
7660
+ z *= 1.2;
7661
+ }
7662
+ return { x, y, z };
7663
+ }
7664
+ function clipGibVelocity(ent) {
7665
+ let { x, y, z } = ent.velocity;
7666
+ if (x < -300) x = -300;
7667
+ else if (x > 300) x = 300;
7668
+ if (y < -300) y = -300;
7669
+ else if (y > 300) y = 300;
7670
+ if (z < 200) z = 200;
7671
+ else if (z > 500) z = 500;
7672
+ ent.velocity = { x, y, z };
7673
+ }
7674
+ function gib_touch(self, other, plane, surf, sys) {
7675
+ if (!self.groundentity) return;
7676
+ self.touch = void 0;
7677
+ if (plane) {
7678
+ sys.sound(self, 0, "misc/fhit3.wav", 1, 1, 0);
7679
+ }
7680
+ }
7681
+ function spawnGib(sys, origin, damage, model, type = GIB_ORGANIC) {
7649
7682
  const gib = sys.spawn();
7650
7683
  gib.classname = "gib";
7651
7684
  gib.origin = {
7652
- x: origin.x + (random3.frandom() - 0.5) * 20,
7653
- y: origin.y + (random3.frandom() - 0.5) * 20,
7654
- z: origin.z + (random3.frandom() - 0.5) * 20
7685
+ x: origin.x + random3.crandom() * 20,
7686
+ y: origin.y + random3.crandom() * 20,
7687
+ z: origin.z + random3.crandom() * 20
7655
7688
  };
7656
- gib.velocity = {
7657
- x: (random3.frandom() - 0.5) * 300,
7658
- y: (random3.frandom() - 0.5) * 300,
7659
- z: 200 + random3.frandom() * 100
7660
- };
7661
- gib.movetype = 9 /* Bounce */;
7662
- gib.solid = 0 /* Not */;
7663
- gib.clipmask = 1;
7664
- gib.avelocity = {
7665
- x: random3.crandom() * 600,
7666
- y: random3.crandom() * 600,
7667
- z: random3.crandom() * 600
7668
- };
7669
- const defaultModels = [
7670
- "models/objects/gibs/bone/tris.md2",
7671
- "models/objects/gibs/meat/tris.md2",
7672
- "models/objects/gibs/sm_meat/tris.md2"
7673
- ];
7674
- const modelName = model || defaultModels[Math.floor(random3.frandom() * defaultModels.length)];
7689
+ const modelName = model || "models/objects/gibs/sm_meat/tris.md2";
7675
7690
  gib.modelindex = sys.modelIndex(modelName);
7676
7691
  gib.mins = { x: -2, y: -2, z: -2 };
7677
7692
  gib.maxs = { x: 2, y: 2, z: 2 };
7678
- if (type && type & GIB_METALLIC) {
7693
+ gib.solid = 0 /* Not */;
7694
+ gib.takedamage = true;
7695
+ gib.die = (self, inflictor, attacker, dmg, point, mod) => {
7696
+ sys.free(self);
7697
+ };
7698
+ gib.clipmask = 1;
7699
+ let vscale = 1;
7700
+ if (type === GIB_ORGANIC) {
7701
+ gib.movetype = 7 /* Toss */;
7702
+ gib.touch = (self, other, plane, surf) => gib_touch(self, other, plane, surf, sys);
7703
+ vscale = 0.5;
7704
+ } else {
7705
+ gib.movetype = 9 /* Bounce */;
7706
+ vscale = 1;
7679
7707
  }
7708
+ const vd = velocityForDamage(damage);
7709
+ gib.velocity = {
7710
+ x: vd.x * vscale,
7711
+ y: vd.y * vscale,
7712
+ z: vd.z * vscale
7713
+ };
7714
+ clipGibVelocity(gib);
7715
+ gib.avelocity = {
7716
+ x: random3.frandom() * 600,
7717
+ y: random3.frandom() * 600,
7718
+ z: random3.frandom() * 600
7719
+ };
7680
7720
  gib.think = (self) => {
7681
7721
  sys.free(self);
7682
7722
  };
@@ -7684,13 +7724,58 @@ function spawnGib(sys, origin, damage, model, type) {
7684
7724
  sys.finalizeSpawn(gib);
7685
7725
  return gib;
7686
7726
  }
7727
+ function spawnHead(sys, origin, damage) {
7728
+ const head = sys.spawn();
7729
+ let gibname;
7730
+ if (random3.irandom(2) === 1) {
7731
+ gibname = "models/objects/gibs/head2/tris.md2";
7732
+ head.skin = 1;
7733
+ } else {
7734
+ gibname = "models/objects/gibs/skull/tris.md2";
7735
+ head.skin = 0;
7736
+ }
7737
+ head.frame = 0;
7738
+ head.modelindex = sys.modelIndex(gibname);
7739
+ head.mins = { x: -16, y: -16, z: 0 };
7740
+ head.maxs = { x: 16, y: 16, z: 16 };
7741
+ head.origin = {
7742
+ x: origin.x,
7743
+ y: origin.y,
7744
+ z: origin.z + 32
7745
+ };
7746
+ head.solid = 0 /* Not */;
7747
+ head.takedamage = true;
7748
+ head.die = (self, inflictor, attacker, dmg, point, mod) => {
7749
+ sys.free(self);
7750
+ };
7751
+ let vscale = 0.5;
7752
+ head.movetype = 7 /* Toss */;
7753
+ head.touch = (self, other, plane, surf) => gib_touch(self, other, plane, surf, sys);
7754
+ const vd = velocityForDamage(damage);
7755
+ head.velocity = {
7756
+ x: vd.x * vscale,
7757
+ y: vd.y * vscale,
7758
+ z: vd.z * vscale
7759
+ };
7760
+ clipGibVelocity(head);
7761
+ head.avelocity = { x: 0, y: random3.crandom() * 600, z: 0 };
7762
+ head.think = (self) => {
7763
+ sys.free(self);
7764
+ };
7765
+ sys.scheduleThink(head, sys.timeSeconds + 10 + random3.frandom() * 10);
7766
+ sys.finalizeSpawn(head);
7767
+ return head;
7768
+ }
7687
7769
  function throwGibs(sys, origin, damageOrDefs) {
7688
7770
  if (typeof damageOrDefs === "number") {
7689
7771
  const damage = damageOrDefs;
7690
- const count = 4 + Math.floor(random3.frandom() * 4);
7691
- for (let i = 0; i < count; i++) {
7692
- spawnGib(sys, origin, damage);
7693
- }
7772
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7773
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7774
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7775
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7776
+ spawnGib(sys, origin, damage, "models/objects/gibs/meat/tris.md2", GIB_ORGANIC);
7777
+ spawnGib(sys, origin, damage, "models/objects/gibs/bone/tris.md2", GIB_ORGANIC);
7778
+ spawnHead(sys, origin, damage);
7694
7779
  } else {
7695
7780
  const defs = damageOrDefs;
7696
7781
  for (const def of defs) {