quake2ts 0.0.292 → 0.0.293

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.
@@ -7484,40 +7484,80 @@ init_esm();
7484
7484
  // src/entities/gibs.ts
7485
7485
  init_esm();
7486
7486
  var random3 = createRandomGenerator();
7487
+ var GIB_ORGANIC = 0;
7487
7488
  var GIB_METALLIC = 1;
7488
7489
  var GIB_DEBRIS = 2;
7489
- function spawnGib(sys, origin, damage, model, type) {
7490
+ function velocityForDamage(damage) {
7491
+ let x = 100 * random3.crandom();
7492
+ let y = 100 * random3.crandom();
7493
+ let z = 200 + 100 * random3.frandom();
7494
+ if (damage < 50) {
7495
+ x *= 0.7;
7496
+ y *= 0.7;
7497
+ z *= 0.7;
7498
+ } else {
7499
+ x *= 1.2;
7500
+ y *= 1.2;
7501
+ z *= 1.2;
7502
+ }
7503
+ return { x, y, z };
7504
+ }
7505
+ function clipGibVelocity(ent) {
7506
+ let { x, y, z } = ent.velocity;
7507
+ if (x < -300) x = -300;
7508
+ else if (x > 300) x = 300;
7509
+ if (y < -300) y = -300;
7510
+ else if (y > 300) y = 300;
7511
+ if (z < 200) z = 200;
7512
+ else if (z > 500) z = 500;
7513
+ ent.velocity = { x, y, z };
7514
+ }
7515
+ function gib_touch(self, other, plane, surf, sys) {
7516
+ if (!self.groundentity) return;
7517
+ self.touch = void 0;
7518
+ if (plane) {
7519
+ sys.sound(self, 0, "misc/fhit3.wav", 1, 1, 0);
7520
+ }
7521
+ }
7522
+ function spawnGib(sys, origin, damage, model, type = GIB_ORGANIC) {
7490
7523
  const gib = sys.spawn();
7491
7524
  gib.classname = "gib";
7492
7525
  gib.origin = {
7493
- x: origin.x + (random3.frandom() - 0.5) * 20,
7494
- y: origin.y + (random3.frandom() - 0.5) * 20,
7495
- z: origin.z + (random3.frandom() - 0.5) * 20
7526
+ x: origin.x + random3.crandom() * 20,
7527
+ y: origin.y + random3.crandom() * 20,
7528
+ z: origin.z + random3.crandom() * 20
7496
7529
  };
7497
- gib.velocity = {
7498
- x: (random3.frandom() - 0.5) * 300,
7499
- y: (random3.frandom() - 0.5) * 300,
7500
- z: 200 + random3.frandom() * 100
7501
- };
7502
- gib.movetype = 9 /* Bounce */;
7503
- gib.solid = 0 /* Not */;
7504
- gib.clipmask = 1;
7505
- gib.avelocity = {
7506
- x: random3.crandom() * 600,
7507
- y: random3.crandom() * 600,
7508
- z: random3.crandom() * 600
7509
- };
7510
- const defaultModels = [
7511
- "models/objects/gibs/bone/tris.md2",
7512
- "models/objects/gibs/meat/tris.md2",
7513
- "models/objects/gibs/sm_meat/tris.md2"
7514
- ];
7515
- const modelName = model || defaultModels[Math.floor(random3.frandom() * defaultModels.length)];
7530
+ const modelName = model || "models/objects/gibs/sm_meat/tris.md2";
7516
7531
  gib.modelindex = sys.modelIndex(modelName);
7517
7532
  gib.mins = { x: -2, y: -2, z: -2 };
7518
7533
  gib.maxs = { x: 2, y: 2, z: 2 };
7519
- if (type && type & GIB_METALLIC) {
7534
+ gib.solid = 0 /* Not */;
7535
+ gib.takedamage = true;
7536
+ gib.die = (self, inflictor, attacker, dmg, point, mod) => {
7537
+ sys.free(self);
7538
+ };
7539
+ gib.clipmask = 1;
7540
+ let vscale = 1;
7541
+ if (type === GIB_ORGANIC) {
7542
+ gib.movetype = 7 /* Toss */;
7543
+ gib.touch = (self, other, plane, surf) => gib_touch(self, other, plane, surf, sys);
7544
+ vscale = 0.5;
7545
+ } else {
7546
+ gib.movetype = 9 /* Bounce */;
7547
+ vscale = 1;
7520
7548
  }
7549
+ const vd = velocityForDamage(damage);
7550
+ gib.velocity = {
7551
+ x: vd.x * vscale,
7552
+ y: vd.y * vscale,
7553
+ z: vd.z * vscale
7554
+ };
7555
+ clipGibVelocity(gib);
7556
+ gib.avelocity = {
7557
+ x: random3.frandom() * 600,
7558
+ y: random3.frandom() * 600,
7559
+ z: random3.frandom() * 600
7560
+ };
7521
7561
  gib.think = (self) => {
7522
7562
  sys.free(self);
7523
7563
  };
@@ -7525,13 +7565,58 @@ function spawnGib(sys, origin, damage, model, type) {
7525
7565
  sys.finalizeSpawn(gib);
7526
7566
  return gib;
7527
7567
  }
7568
+ function spawnHead(sys, origin, damage) {
7569
+ const head = sys.spawn();
7570
+ let gibname;
7571
+ if (random3.irandom(2) === 1) {
7572
+ gibname = "models/objects/gibs/head2/tris.md2";
7573
+ head.skin = 1;
7574
+ } else {
7575
+ gibname = "models/objects/gibs/skull/tris.md2";
7576
+ head.skin = 0;
7577
+ }
7578
+ head.frame = 0;
7579
+ head.modelindex = sys.modelIndex(gibname);
7580
+ head.mins = { x: -16, y: -16, z: 0 };
7581
+ head.maxs = { x: 16, y: 16, z: 16 };
7582
+ head.origin = {
7583
+ x: origin.x,
7584
+ y: origin.y,
7585
+ z: origin.z + 32
7586
+ };
7587
+ head.solid = 0 /* Not */;
7588
+ head.takedamage = true;
7589
+ head.die = (self, inflictor, attacker, dmg, point, mod) => {
7590
+ sys.free(self);
7591
+ };
7592
+ let vscale = 0.5;
7593
+ head.movetype = 7 /* Toss */;
7594
+ head.touch = (self, other, plane, surf) => gib_touch(self, other, plane, surf, sys);
7595
+ const vd = velocityForDamage(damage);
7596
+ head.velocity = {
7597
+ x: vd.x * vscale,
7598
+ y: vd.y * vscale,
7599
+ z: vd.z * vscale
7600
+ };
7601
+ clipGibVelocity(head);
7602
+ head.avelocity = { x: 0, y: random3.crandom() * 600, z: 0 };
7603
+ head.think = (self) => {
7604
+ sys.free(self);
7605
+ };
7606
+ sys.scheduleThink(head, sys.timeSeconds + 10 + random3.frandom() * 10);
7607
+ sys.finalizeSpawn(head);
7608
+ return head;
7609
+ }
7528
7610
  function throwGibs(sys, origin, damageOrDefs) {
7529
7611
  if (typeof damageOrDefs === "number") {
7530
7612
  const damage = damageOrDefs;
7531
- const count = 4 + Math.floor(random3.frandom() * 4);
7532
- for (let i = 0; i < count; i++) {
7533
- spawnGib(sys, origin, damage);
7534
- }
7613
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7614
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7615
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7616
+ spawnGib(sys, origin, damage, "models/objects/gibs/sm_meat/tris.md2", GIB_ORGANIC);
7617
+ spawnGib(sys, origin, damage, "models/objects/gibs/meat/tris.md2", GIB_ORGANIC);
7618
+ spawnGib(sys, origin, damage, "models/objects/gibs/bone/tris.md2", GIB_ORGANIC);
7619
+ spawnHead(sys, origin, damage);
7535
7620
  } else {
7536
7621
  const defs = damageOrDefs;
7537
7622
  for (const def of defs) {