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
@@ -457,6 +457,9 @@ var ConfigStringIndex = ((ConfigStringIndex2) => {
457
457
  ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
458
458
  ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
459
459
  ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
460
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
461
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
462
+ ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
460
463
  ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
461
464
  ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
462
465
  ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
@@ -9014,9 +9017,11 @@ function registerMakronSpawns(registry) {
9014
9017
  // src/entities/monsters/medic.ts
9015
9018
  var MONSTER_TICK15 = 0.1;
9016
9019
  function monster_ai_stand15(self, dist, context) {
9017
- if (medic_find_dead(self, context)) {
9018
- self.monsterinfo.current_move = run_move13;
9019
- return;
9020
+ if (self.classname === "monster_medic") {
9021
+ if (medic_find_dead(self, context)) {
9022
+ self.monsterinfo.current_move = run_move13;
9023
+ return;
9024
+ }
9020
9025
  }
9021
9026
  ai_stand(self, MONSTER_TICK15, context);
9022
9027
  }
@@ -9024,8 +9029,12 @@ function monster_ai_walk15(self, dist, context) {
9024
9029
  ai_walk(self, dist, MONSTER_TICK15, context);
9025
9030
  }
9026
9031
  function monster_ai_run14(self, dist, context) {
9027
- if (medic_find_dead(self, context)) {
9028
- self.monsterinfo.current_move = run_move13;
9032
+ if (self.classname === "monster_medic") {
9033
+ if (medic_find_dead(self, context)) {
9034
+ self.monsterinfo.current_move = run_move13;
9035
+ } else {
9036
+ ai_run(self, dist, MONSTER_TICK15, context);
9037
+ }
9029
9038
  } else {
9030
9039
  ai_run(self, dist, MONSTER_TICK15, context);
9031
9040
  }
@@ -9041,6 +9050,7 @@ var walk_move13;
9041
9050
  var run_move13;
9042
9051
  var attack_hyper_move;
9043
9052
  var attack_cable_move;
9053
+ var spawn_move;
9044
9054
  var pain_move8;
9045
9055
  var death_move12;
9046
9056
  function medic_stand(self) {
@@ -9050,11 +9060,13 @@ function medic_walk(self) {
9050
9060
  self.monsterinfo.current_move = walk_move13;
9051
9061
  }
9052
9062
  function medic_run(self) {
9053
- if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9054
- const dist = rangeTo(self, self.enemy);
9055
- if (dist < 80) {
9056
- self.monsterinfo.current_move = attack_cable_move;
9057
- return;
9063
+ if (self.classname === "monster_medic") {
9064
+ if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9065
+ const dist = rangeTo(self, self.enemy);
9066
+ if (dist < 80) {
9067
+ self.monsterinfo.current_move = attack_cable_move;
9068
+ return;
9069
+ }
9058
9070
  }
9059
9071
  }
9060
9072
  if (self.enemy && self.enemy.health > 0) {
@@ -9064,10 +9076,16 @@ function medic_run(self) {
9064
9076
  }
9065
9077
  }
9066
9078
  function medic_attack(self) {
9067
- if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9079
+ if (self.classname === "monster_medic" && self.enemy && self.enemy.deadflag === 2 /* Dead */) {
9068
9080
  self.monsterinfo.current_move = attack_cable_move;
9069
9081
  return;
9070
9082
  }
9083
+ if (self.classname === "monster_medic_commander") {
9084
+ if (Math.random() < 0.2) {
9085
+ self.monsterinfo.current_move = spawn_move;
9086
+ return;
9087
+ }
9088
+ }
9071
9089
  self.monsterinfo.current_move = attack_hyper_move;
9072
9090
  }
9073
9091
  function medic_fire_blaster(self, context) {
@@ -9106,7 +9124,6 @@ function medic_cable_attack(self, context) {
9106
9124
  te: TempEntity.MEDIC_CABLE_ATTACK,
9107
9125
  entId: self.index,
9108
9126
  targetId: self.enemy.index,
9109
- // Assuming targetId for the beam target
9110
9127
  start,
9111
9128
  end
9112
9129
  });
@@ -9134,14 +9151,13 @@ function medic_hook_retract(self, context) {
9134
9151
  if (ent.monsterinfo && ent.monsterinfo.stand) {
9135
9152
  ent.monsterinfo.stand(ent, context);
9136
9153
  }
9154
+ ent.bad_medic = self;
9137
9155
  } else {
9138
9156
  const spawnContext = {
9139
9157
  entities: context,
9140
9158
  keyValues: { classname: ent.classname },
9141
- // Minimal keyvalues
9142
9159
  warn: (msg) => {
9143
9160
  },
9144
- // Suppress warnings
9145
9161
  free: (e) => context.free(e)
9146
9162
  };
9147
9163
  const origin = { ...ent.origin };
@@ -9189,6 +9205,44 @@ function medic_find_dead(self, context) {
9189
9205
  }
9190
9206
  return false;
9191
9207
  }
9208
+ function medic_call_reinforcements(self, context) {
9209
+ const r = Math.random();
9210
+ let chosenClass = "monster_soldier_light";
9211
+ if (r > 0.8) {
9212
+ chosenClass = "monster_soldier_ssg";
9213
+ } else if (r > 0.5) {
9214
+ chosenClass = "monster_soldier";
9215
+ }
9216
+ const spawnFunc = context.getSpawnFunction(chosenClass);
9217
+ if (spawnFunc) {
9218
+ const vectors = angleVectors(self.angles);
9219
+ const forwardDist = scaleVec3(vectors.forward, 64);
9220
+ const spawnOrigin = addVec3(self.origin, forwardDist);
9221
+ const adjustedOrigin = { ...spawnOrigin, z: spawnOrigin.z + 8 };
9222
+ 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);
9223
+ if (tr.fraction < 1 || tr.startsolid || tr.allsolid) {
9224
+ return;
9225
+ }
9226
+ const ent = context.spawn();
9227
+ ent.origin = adjustedOrigin;
9228
+ ent.angles = { ...self.angles };
9229
+ const spawnContext = {
9230
+ entities: context,
9231
+ keyValues: { classname: chosenClass },
9232
+ warn: () => {
9233
+ },
9234
+ free: (e) => context.free(e)
9235
+ };
9236
+ spawnFunc(ent, spawnContext);
9237
+ ent.enemy = self.enemy;
9238
+ context.multicast(adjustedOrigin, 1 /* Pvs */, ServerCommand.muzzleflash, {
9239
+ entId: ent.index,
9240
+ flash_number: 0
9241
+ // generic flash
9242
+ });
9243
+ context.engine.sound?.(self, 0, "medic/medatck2.wav", 1, 1, 0);
9244
+ }
9245
+ }
9192
9246
  function medic_die(self) {
9193
9247
  self.monsterinfo.current_move = death_move12;
9194
9248
  }
@@ -9250,8 +9304,6 @@ var attack_cable_frames = [
9250
9304
  ];
9251
9305
  attack_cable_move = {
9252
9306
  firstframe: 106,
9253
- // FRAME_attack42 (starts at 0+30+40+20+16 = 106) ... wait, check original counts.
9254
- // stand=30, walk=40, run=20, hyper=16. 30+40+20+16 = 106. Correct.
9255
9307
  lastframe: 114,
9256
9308
  frames: attack_cable_frames,
9257
9309
  endfunc: medic_run
@@ -9266,13 +9318,25 @@ pain_move8 = {
9266
9318
  frames: pain_frames8,
9267
9319
  endfunc: medic_run
9268
9320
  };
9269
- var death_frames12 = Array.from({ length: 10 }, () => ({
9321
+ var spawn_frames = Array.from({ length: 23 }, (_, i) => ({
9322
+ ai: monster_ai_move15,
9323
+ dist: 0,
9324
+ think: i === 11 ? medic_call_reinforcements : null
9325
+ // Trigger halfway
9326
+ }));
9327
+ spawn_move = {
9328
+ firstframe: 122,
9329
+ lastframe: 144,
9330
+ frames: spawn_frames,
9331
+ endfunc: medic_run
9332
+ };
9333
+ var death_frames12 = Array.from({ length: 30 }, () => ({
9270
9334
  ai: monster_ai_move15,
9271
9335
  dist: 0
9272
9336
  }));
9273
9337
  death_move12 = {
9274
- firstframe: 122,
9275
- lastframe: 131,
9338
+ firstframe: 161,
9339
+ lastframe: 190,
9276
9340
  frames: death_frames12,
9277
9341
  endfunc: medic_dead
9278
9342
  };
@@ -9290,6 +9354,10 @@ function SP_monster_medic(self, context) {
9290
9354
  self.pain = (self2, other, kick, damage) => {
9291
9355
  if (self2.health < self2.max_health / 2) {
9292
9356
  self2.monsterinfo.current_move = pain_move8;
9357
+ if (Math.random() < 0.5) {
9358
+ const sound = self2.classname === "monster_medic_commander" ? "medic/medpain2.wav" : "medic/medpain1.wav";
9359
+ context.entities.sound?.(self2, 0, sound, 1, 1, 0);
9360
+ }
9293
9361
  }
9294
9362
  };
9295
9363
  self.die = (self2, inflictor, attacker, damage, point) => {
@@ -9310,8 +9378,16 @@ function SP_monster_medic(self, context) {
9310
9378
  medic_stand(self);
9311
9379
  self.nextthink = self.timestamp + MONSTER_TICK15;
9312
9380
  }
9381
+ function SP_monster_medic_commander(self, context) {
9382
+ SP_monster_medic(self, context);
9383
+ self.classname = "monster_medic_commander";
9384
+ self.health = 600;
9385
+ self.max_health = 600;
9386
+ self.skin = 1;
9387
+ }
9313
9388
  function registerMedicSpawns(registry) {
9314
9389
  registry.register("monster_medic", SP_monster_medic);
9390
+ registry.register("monster_medic_commander", SP_monster_medic_commander);
9315
9391
  }
9316
9392
 
9317
9393
  // src/entities/monsters/mutant.ts