quake2ts 0.0.185 → 0.0.187

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 (44) hide show
  1. package/package.json +1 -1
  2. package/packages/cgame/dist/index.d.mts +3 -0
  3. package/packages/cgame/dist/index.d.ts +3 -0
  4. package/packages/cgame/dist/index.js +32 -0
  5. package/packages/cgame/dist/index.mjs +7 -0
  6. package/packages/client/dist/browser/index.global.js +5 -5
  7. package/packages/client/dist/browser/index.global.js.map +1 -1
  8. package/packages/client/dist/cjs/index.cjs +6 -0
  9. package/packages/client/dist/cjs/index.cjs.map +1 -1
  10. package/packages/client/dist/esm/index.js +6 -0
  11. package/packages/client/dist/esm/index.js.map +1 -1
  12. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  13. package/packages/engine/dist/browser/index.global.js +1 -1
  14. package/packages/engine/dist/browser/index.global.js.map +1 -1
  15. package/packages/engine/dist/cjs/index.cjs +3 -0
  16. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  17. package/packages/engine/dist/esm/index.js +3 -0
  18. package/packages/engine/dist/esm/index.js.map +1 -1
  19. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  20. package/packages/game/dist/browser/index.global.js +2 -2
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +95 -19
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +95 -19
  25. package/packages/game/dist/esm/index.js.map +1 -1
  26. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  27. package/packages/game/dist/types/entities/monsters/medic.d.ts +1 -0
  28. package/packages/game/dist/types/entities/monsters/medic.d.ts.map +1 -1
  29. package/packages/shared/dist/browser/index.global.js +1 -1
  30. package/packages/shared/dist/browser/index.global.js.map +1 -1
  31. package/packages/shared/dist/cjs/index.cjs +3 -0
  32. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  33. package/packages/shared/dist/esm/index.js +3 -0
  34. package/packages/shared/dist/esm/index.js.map +1 -1
  35. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  36. package/packages/shared/dist/types/pmove/config.d.ts +5 -0
  37. package/packages/shared/dist/types/pmove/config.d.ts.map +1 -0
  38. package/packages/shared/dist/types/protocol/configstrings.d.ts +3 -0
  39. package/packages/shared/dist/types/protocol/configstrings.d.ts.map +1 -1
  40. package/packages/shared/dist/types/protocol/layout.d.ts +9 -0
  41. package/packages/shared/dist/types/protocol/layout.d.ts.map +1 -0
  42. package/packages/shared/dist/types/protocol/stats.d.ts +28 -0
  43. package/packages/shared/dist/types/protocol/stats.d.ts.map +1 -0
  44. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -623,6 +623,9 @@ var ConfigStringIndex = ((ConfigStringIndex2) => {
623
623
  ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
624
624
  ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
625
625
  ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
626
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
627
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
628
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
626
629
  ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
627
630
  ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
628
631
  ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
@@ -9180,9 +9183,11 @@ function registerMakronSpawns(registry) {
9180
9183
  // src/entities/monsters/medic.ts
9181
9184
  var MONSTER_TICK15 = 0.1;
9182
9185
  function monster_ai_stand15(self, dist, context) {
9183
- if (medic_find_dead(self, context)) {
9184
- self.monsterinfo.current_move = run_move13;
9185
- return;
9186
+ if (self.classname === "monster_medic") {
9187
+ if (medic_find_dead(self, context)) {
9188
+ self.monsterinfo.current_move = run_move13;
9189
+ return;
9190
+ }
9186
9191
  }
9187
9192
  ai_stand(self, MONSTER_TICK15, context);
9188
9193
  }
@@ -9190,8 +9195,12 @@ function monster_ai_walk15(self, dist, context) {
9190
9195
  ai_walk(self, dist, MONSTER_TICK15, context);
9191
9196
  }
9192
9197
  function monster_ai_run14(self, dist, context) {
9193
- if (medic_find_dead(self, context)) {
9194
- self.monsterinfo.current_move = run_move13;
9198
+ if (self.classname === "monster_medic") {
9199
+ if (medic_find_dead(self, context)) {
9200
+ self.monsterinfo.current_move = run_move13;
9201
+ } else {
9202
+ ai_run(self, dist, MONSTER_TICK15, context);
9203
+ }
9195
9204
  } else {
9196
9205
  ai_run(self, dist, MONSTER_TICK15, context);
9197
9206
  }
@@ -9207,6 +9216,7 @@ var walk_move13;
9207
9216
  var run_move13;
9208
9217
  var attack_hyper_move;
9209
9218
  var attack_cable_move;
9219
+ var spawn_move;
9210
9220
  var pain_move8;
9211
9221
  var death_move12;
9212
9222
  function medic_stand(self) {
@@ -9216,11 +9226,13 @@ function medic_walk(self) {
9216
9226
  self.monsterinfo.current_move = walk_move13;
9217
9227
  }
9218
9228
  function medic_run(self) {
9219
- if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9220
- const dist = rangeTo(self, self.enemy);
9221
- if (dist < 80) {
9222
- self.monsterinfo.current_move = attack_cable_move;
9223
- return;
9229
+ if (self.classname === "monster_medic") {
9230
+ if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9231
+ const dist = rangeTo(self, self.enemy);
9232
+ if (dist < 80) {
9233
+ self.monsterinfo.current_move = attack_cable_move;
9234
+ return;
9235
+ }
9224
9236
  }
9225
9237
  }
9226
9238
  if (self.enemy && self.enemy.health > 0) {
@@ -9230,10 +9242,16 @@ function medic_run(self) {
9230
9242
  }
9231
9243
  }
9232
9244
  function medic_attack(self) {
9233
- if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9245
+ if (self.classname === "monster_medic" && self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9234
9246
  self.monsterinfo.current_move = attack_cable_move;
9235
9247
  return;
9236
9248
  }
9249
+ if (self.classname === "monster_medic_commander") {
9250
+ if (Math.random() < 0.2) {
9251
+ self.monsterinfo.current_move = spawn_move;
9252
+ return;
9253
+ }
9254
+ }
9237
9255
  self.monsterinfo.current_move = attack_hyper_move;
9238
9256
  }
9239
9257
  function medic_fire_blaster(self, context) {
@@ -9272,7 +9290,6 @@ function medic_cable_attack(self, context) {
9272
9290
  te: TempEntity.MEDIC_CABLE_ATTACK,
9273
9291
  entId: self.index,
9274
9292
  targetId: self.enemy.index,
9275
- // Assuming targetId for the beam target
9276
9293
  start,
9277
9294
  end
9278
9295
  });
@@ -9300,14 +9317,13 @@ function medic_hook_retract(self, context) {
9300
9317
  if (ent.monsterinfo && ent.monsterinfo.stand) {
9301
9318
  ent.monsterinfo.stand(ent, context);
9302
9319
  }
9320
+ ent.bad_medic = self;
9303
9321
  } else {
9304
9322
  const spawnContext = {
9305
9323
  entities: context,
9306
9324
  keyValues: { classname: ent.classname },
9307
- // Minimal keyvalues
9308
9325
  warn: (msg) => {
9309
9326
  },
9310
- // Suppress warnings
9311
9327
  free: (e) => context.free(e)
9312
9328
  };
9313
9329
  const origin = { ...ent.origin };
@@ -9355,6 +9371,44 @@ function medic_find_dead(self, context) {
9355
9371
  }
9356
9372
  return false;
9357
9373
  }
9374
+ function medic_call_reinforcements(self, context) {
9375
+ const r = Math.random();
9376
+ let chosenClass = "monster_soldier_light";
9377
+ if (r > 0.8) {
9378
+ chosenClass = "monster_soldier_ssg";
9379
+ } else if (r > 0.5) {
9380
+ chosenClass = "monster_soldier";
9381
+ }
9382
+ const spawnFunc = context.getSpawnFunction(chosenClass);
9383
+ if (spawnFunc) {
9384
+ const vectors = angleVectors(self.angles);
9385
+ const forwardDist = scaleVec3(vectors.forward, 64);
9386
+ const spawnOrigin = addVec3(self.origin, forwardDist);
9387
+ const adjustedOrigin = { ...spawnOrigin, z: spawnOrigin.z + 8 };
9388
+ const tr = context.trace(self.origin, { x: -16, y: -16, z: -24 }, { x: 16, y: 16, z: 32 }, adjustedOrigin, self, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_DEADMONSTER);
9389
+ if (tr.fraction < 1 || tr.startsolid || tr.allsolid) {
9390
+ return;
9391
+ }
9392
+ const ent = context.spawn();
9393
+ ent.origin = adjustedOrigin;
9394
+ ent.angles = { ...self.angles };
9395
+ const spawnContext = {
9396
+ entities: context,
9397
+ keyValues: { classname: chosenClass },
9398
+ warn: () => {
9399
+ },
9400
+ free: (e) => context.free(e)
9401
+ };
9402
+ spawnFunc(ent, spawnContext);
9403
+ ent.enemy = self.enemy;
9404
+ context.multicast(adjustedOrigin, 1 /* Pvs */, ServerCommand.muzzleflash, {
9405
+ entId: ent.index,
9406
+ flash_number: 0
9407
+ // generic flash
9408
+ });
9409
+ context.engine.sound?.(self, 0, "medic/medatck2.wav", 1, 1, 0);
9410
+ }
9411
+ }
9358
9412
  function medic_die(self) {
9359
9413
  self.monsterinfo.current_move = death_move12;
9360
9414
  }
@@ -9416,8 +9470,6 @@ var attack_cable_frames = [
9416
9470
  ];
9417
9471
  attack_cable_move = {
9418
9472
  firstframe: 106,
9419
- // FRAME_attack42 (starts at 0+30+40+20+16 = 106) ... wait, check original counts.
9420
- // stand=30, walk=40, run=20, hyper=16. 30+40+20+16 = 106. Correct.
9421
9473
  lastframe: 114,
9422
9474
  frames: attack_cable_frames,
9423
9475
  endfunc: medic_run
@@ -9432,13 +9484,25 @@ pain_move8 = {
9432
9484
  frames: pain_frames8,
9433
9485
  endfunc: medic_run
9434
9486
  };
9435
- var death_frames12 = Array.from({ length: 10 }, () => ({
9487
+ var spawn_frames = Array.from({ length: 23 }, (_, i) => ({
9488
+ ai: monster_ai_move15,
9489
+ dist: 0,
9490
+ think: i === 11 ? medic_call_reinforcements : null
9491
+ // Trigger halfway
9492
+ }));
9493
+ spawn_move = {
9494
+ firstframe: 122,
9495
+ lastframe: 144,
9496
+ frames: spawn_frames,
9497
+ endfunc: medic_run
9498
+ };
9499
+ var death_frames12 = Array.from({ length: 30 }, () => ({
9436
9500
  ai: monster_ai_move15,
9437
9501
  dist: 0
9438
9502
  }));
9439
9503
  death_move12 = {
9440
- firstframe: 122,
9441
- lastframe: 131,
9504
+ firstframe: 161,
9505
+ lastframe: 190,
9442
9506
  frames: death_frames12,
9443
9507
  endfunc: medic_dead
9444
9508
  };
@@ -9456,6 +9520,10 @@ function SP_monster_medic(self, context) {
9456
9520
  self.pain = (self2, other, kick, damage) => {
9457
9521
  if (self2.health < self2.max_health / 2) {
9458
9522
  self2.monsterinfo.current_move = pain_move8;
9523
+ if (Math.random() < 0.5) {
9524
+ const sound = self2.classname === "monster_medic_commander" ? "medic/medpain2.wav" : "medic/medpain1.wav";
9525
+ context.entities.sound?.(self2, 0, sound, 1, 1, 0);
9526
+ }
9459
9527
  }
9460
9528
  };
9461
9529
  self.die = (self2, inflictor, attacker, damage, point) => {
@@ -9476,8 +9544,16 @@ function SP_monster_medic(self, context) {
9476
9544
  medic_stand(self);
9477
9545
  self.nextthink = self.timestamp + MONSTER_TICK15;
9478
9546
  }
9547
+ function SP_monster_medic_commander(self, context) {
9548
+ SP_monster_medic(self, context);
9549
+ self.classname = "monster_medic_commander";
9550
+ self.health = 600;
9551
+ self.max_health = 600;
9552
+ self.skin = 1;
9553
+ }
9479
9554
  function registerMedicSpawns(registry) {
9480
9555
  registry.register("monster_medic", SP_monster_medic);
9556
+ registry.register("monster_medic_commander", SP_monster_medic_commander);
9481
9557
  }
9482
9558
 
9483
9559
  // src/entities/monsters/mutant.ts