quake2ts 0.0.256 → 0.0.261

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 (74) hide show
  1. package/package.json +1 -1
  2. package/packages/cgame/dist/index.cjs +23 -0
  3. package/packages/cgame/dist/index.cjs.map +1 -1
  4. package/packages/cgame/dist/index.js +24 -1
  5. package/packages/cgame/dist/index.js.map +1 -1
  6. package/packages/client/dist/browser/index.global.js +13 -13
  7. package/packages/client/dist/browser/index.global.js.map +1 -1
  8. package/packages/client/dist/cjs/index.cjs +155 -6
  9. package/packages/client/dist/cjs/index.cjs.map +1 -1
  10. package/packages/client/dist/esm/index.js +174 -25
  11. package/packages/client/dist/esm/index.js.map +1 -1
  12. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  13. package/packages/client/dist/types/hud/icons.d.ts.map +1 -1
  14. package/packages/client/dist/types/hud/statusbar.d.ts.map +1 -1
  15. package/packages/client/dist/types/net/connection.d.ts +2 -0
  16. package/packages/client/dist/types/net/connection.d.ts.map +1 -1
  17. package/packages/engine/dist/browser/index.global.js.map +1 -1
  18. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  19. package/packages/engine/dist/esm/index.js.map +1 -1
  20. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  21. package/packages/game/dist/browser/index.global.js +2 -2
  22. package/packages/game/dist/browser/index.global.js.map +1 -1
  23. package/packages/game/dist/cjs/index.cjs +4118 -2942
  24. package/packages/game/dist/cjs/index.cjs.map +1 -1
  25. package/packages/game/dist/esm/index.js +4117 -2940
  26. package/packages/game/dist/esm/index.js.map +1 -1
  27. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  28. package/packages/game/dist/types/combat/weapons/animation.d.ts +20 -0
  29. package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -0
  30. package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
  31. package/packages/game/dist/types/combat/weapons/frames.d.ts +8 -0
  32. package/packages/game/dist/types/combat/weapons/frames.d.ts.map +1 -0
  33. package/packages/game/dist/types/combat/weapons/projectSource.d.ts +17 -0
  34. package/packages/game/dist/types/combat/weapons/projectSource.d.ts.map +1 -0
  35. package/packages/game/dist/types/combat/weapons/rogue.d.ts +4 -4
  36. package/packages/game/dist/types/combat/weapons/rogue.d.ts.map +1 -1
  37. package/packages/game/dist/types/combat/weapons/state.d.ts +6 -0
  38. package/packages/game/dist/types/combat/weapons/state.d.ts.map +1 -1
  39. package/packages/game/dist/types/combat/weapons/switching.d.ts +11 -0
  40. package/packages/game/dist/types/combat/weapons/switching.d.ts.map +1 -1
  41. package/packages/game/dist/types/entities/entity.d.ts +1 -0
  42. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  43. package/packages/game/dist/types/entities/funcs.d.ts +2 -1
  44. package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
  45. package/packages/game/dist/types/entities/misc.d.ts.map +1 -1
  46. package/packages/game/dist/types/entities/monsters/index.d.ts.map +1 -1
  47. package/packages/game/dist/types/entities/monsters/insane.d.ts +5 -0
  48. package/packages/game/dist/types/entities/monsters/insane.d.ts.map +1 -0
  49. package/packages/game/dist/types/entities/playerStats.d.ts.map +1 -1
  50. package/packages/game/dist/types/entities/projectiles.d.ts +1 -1
  51. package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
  52. package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
  53. package/packages/game/dist/types/inventory/ammo.d.ts.map +1 -1
  54. package/packages/game/dist/types/inventory/playerInventory.d.ts +91 -38
  55. package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
  56. package/packages/server/dist/index.cjs +15 -0
  57. package/packages/server/dist/index.d.cts +1 -0
  58. package/packages/server/dist/index.d.ts +1 -0
  59. package/packages/server/dist/index.js +15 -0
  60. package/packages/shared/dist/browser/index.global.js +1 -1
  61. package/packages/shared/dist/browser/index.global.js.map +1 -1
  62. package/packages/shared/dist/cjs/index.cjs +28 -4
  63. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  64. package/packages/shared/dist/esm/index.js +25 -3
  65. package/packages/shared/dist/esm/index.js.map +1 -1
  66. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  67. package/packages/shared/dist/types/protocol/constants.d.ts +1 -0
  68. package/packages/shared/dist/types/protocol/constants.d.ts.map +1 -1
  69. package/packages/shared/dist/types/protocol/index.d.ts +1 -0
  70. package/packages/shared/dist/types/protocol/index.d.ts.map +1 -1
  71. package/packages/shared/dist/types/protocol/stats.d.ts.map +1 -1
  72. package/packages/shared/dist/types/protocol/writeUserCmd.d.ts +4 -0
  73. package/packages/shared/dist/types/protocol/writeUserCmd.d.ts.map +1 -0
  74. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -8449,6 +8449,7 @@ var ClientCommand = /* @__PURE__ */ ((ClientCommand2) => {
8449
8449
  ClientCommand2[ClientCommand2["stringcmd"] = 4] = "stringcmd";
8450
8450
  return ClientCommand2;
8451
8451
  })(ClientCommand || {});
8452
+ var CMD_BACKUP = 64;
8452
8453
  var MZ_BLASTER = 0;
8453
8454
  var MZ_MACHINEGUN = 1;
8454
8455
  var MZ_SHOTGUN = 2;
@@ -8604,7 +8605,16 @@ var POWERUP_STAT_MAP = {
8604
8605
  "enviro_suit"
8605
8606
  /* EnviroSuit */
8606
8607
  ]: 9,
8607
- // 10 is POWERUP_ADRENALINE (not in PowerupId?)
8608
+ [
8609
+ "bandolier"
8610
+ /* Bandolier */
8611
+ ]: 10,
8612
+ // Placeholder/Map mismatch handling?
8613
+ [
8614
+ "ammo_pack"
8615
+ /* AmmoPack */
8616
+ ]: 10,
8617
+ // Original reused indices or had gaps?
8608
8618
  [
8609
8619
  "ir_goggles"
8610
8620
  /* IRGoggles */
@@ -8652,7 +8662,12 @@ var POWERUP_STAT_MAP = {
8652
8662
  [
8653
8663
  "tech_regeneration"
8654
8664
  /* TechRegeneration */
8655
- ]: 22
8665
+ ]: 22,
8666
+ // Add missing mappings to avoid runtime lookups failing for new types
8667
+ [
8668
+ "tag_token"
8669
+ /* TagToken */
8670
+ ]: -1
8656
8671
  };
8657
8672
  function G_GetPowerupStat(stats, powerupId) {
8658
8673
  let index;
@@ -8664,6 +8679,18 @@ function G_GetPowerupStat(stats, powerupId) {
8664
8679
  if (index === void 0 || index < 0 || index >= POWERUP_MAX2) return 0;
8665
8680
  return getCompressedInteger(stats, 41, index, NUM_BITS_FOR_POWERUP2);
8666
8681
  }
8682
+ function writeUserCommand(writer, cmd) {
8683
+ writer.writeByte(cmd.msec);
8684
+ writer.writeByte(cmd.buttons);
8685
+ writer.writeAngle16(cmd.angles.x);
8686
+ writer.writeAngle16(cmd.angles.y);
8687
+ writer.writeAngle16(cmd.angles.z);
8688
+ writer.writeShort(cmd.forwardmove);
8689
+ writer.writeShort(cmd.sidemove);
8690
+ writer.writeShort(cmd.upmove);
8691
+ writer.writeByte(0);
8692
+ writer.writeByte(0);
8693
+ }
8667
8694
  var entityFlags_exports2 = {};
8668
8695
  __export3(entityFlags_exports2, {
8669
8696
  U_ANGLE1: () => U_ANGLE13,
@@ -8822,6 +8849,108 @@ var BinaryStream2 = class {
8822
8849
  out.z = norm[2];
8823
8850
  }
8824
8851
  };
8852
+ var BinaryWriter = class {
8853
+ constructor(sizeOrBuffer = 1400) {
8854
+ if (typeof sizeOrBuffer === "number") {
8855
+ this.buffer = new Uint8Array(sizeOrBuffer);
8856
+ this.fixed = false;
8857
+ } else {
8858
+ this.buffer = sizeOrBuffer;
8859
+ this.fixed = true;
8860
+ }
8861
+ this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
8862
+ this.offset = 0;
8863
+ }
8864
+ ensureSpace(bytes) {
8865
+ if (this.offset + bytes > this.buffer.byteLength) {
8866
+ if (this.fixed) {
8867
+ throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
8868
+ }
8869
+ const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
8870
+ const newBuffer = new Uint8Array(newSize);
8871
+ newBuffer.set(this.buffer);
8872
+ this.buffer = newBuffer;
8873
+ this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
8874
+ }
8875
+ }
8876
+ writeByte(value) {
8877
+ this.ensureSpace(1);
8878
+ this.view.setUint8(this.offset, value);
8879
+ this.offset += 1;
8880
+ }
8881
+ writeChar(value) {
8882
+ this.ensureSpace(1);
8883
+ this.view.setInt8(this.offset, value);
8884
+ this.offset += 1;
8885
+ }
8886
+ writeShort(value) {
8887
+ this.ensureSpace(2);
8888
+ this.view.setInt16(this.offset, value, true);
8889
+ this.offset += 2;
8890
+ }
8891
+ writeLong(value) {
8892
+ this.ensureSpace(4);
8893
+ this.view.setInt32(this.offset, value, true);
8894
+ this.offset += 4;
8895
+ }
8896
+ writeFloat(value) {
8897
+ this.ensureSpace(4);
8898
+ this.view.setFloat32(this.offset, value, true);
8899
+ this.offset += 4;
8900
+ }
8901
+ writeString(value) {
8902
+ const len2 = value.length;
8903
+ this.ensureSpace(len2 + 1);
8904
+ for (let i = 0; i < len2; i++) {
8905
+ this.view.setUint8(this.offset + i, value.charCodeAt(i));
8906
+ }
8907
+ this.view.setUint8(this.offset + len2, 0);
8908
+ this.offset += len2 + 1;
8909
+ }
8910
+ writeCoord(value) {
8911
+ this.writeShort(Math.trunc(value * 8));
8912
+ }
8913
+ writeAngle(value) {
8914
+ this.writeByte(Math.trunc(value * 256 / 360) & 255);
8915
+ }
8916
+ writeAngle16(value) {
8917
+ this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
8918
+ }
8919
+ writePos(pos) {
8920
+ this.writeCoord(pos.x);
8921
+ this.writeCoord(pos.y);
8922
+ this.writeCoord(pos.z);
8923
+ }
8924
+ writeDir(dir) {
8925
+ let maxDot = -1;
8926
+ let bestIndex = 0;
8927
+ if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
8928
+ this.writeByte(0);
8929
+ return;
8930
+ }
8931
+ for (let i = 0; i < ANORMS2.length; i++) {
8932
+ const norm = ANORMS2[i];
8933
+ const dot2 = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
8934
+ if (dot2 > maxDot) {
8935
+ maxDot = dot2;
8936
+ bestIndex = i;
8937
+ }
8938
+ }
8939
+ this.writeByte(bestIndex);
8940
+ }
8941
+ getData() {
8942
+ return this.buffer.slice(0, this.offset);
8943
+ }
8944
+ getBuffer() {
8945
+ return this.buffer;
8946
+ }
8947
+ getOffset() {
8948
+ return this.offset;
8949
+ }
8950
+ reset() {
8951
+ this.offset = 0;
8952
+ }
8953
+ };
8825
8954
  var NetworkMessageBuilder = class {
8826
8955
  constructor(initialSize = 1024) {
8827
8956
  this.buffer = new Uint8Array(initialSize);
@@ -10897,6 +11026,8 @@ var MultiplayerConnection = class {
10897
11026
  this.challenge = 0;
10898
11027
  this.connectPacketCount = 0;
10899
11028
  this.connectPacketTime = 0;
11029
+ this.latestServerFrame = 0;
11030
+ this.commandHistory = [];
10900
11031
  this.driver = new BrowserWebSocketNetDriver();
10901
11032
  this.options = options;
10902
11033
  this.driver.onMessage((data) => this.handleMessage(data));
@@ -10926,12 +11057,27 @@ var MultiplayerConnection = class {
10926
11057
  this.state = 0 /* Disconnected */;
10927
11058
  this.configStrings.clear();
10928
11059
  this.baselines.clear();
11060
+ this.commandHistory = [];
11061
+ this.latestServerFrame = 0;
10929
11062
  }
10930
11063
  sendCommand(cmd) {
10931
11064
  if (this.state !== 5 /* Active */) return;
10932
- const builder = new NetworkMessageBuilder();
10933
- builder.writeByte(ClientCommand.nop);
10934
- this.driver.send(builder.getData());
11065
+ const commandWithFrame = {
11066
+ ...cmd,
11067
+ serverFrame: cmd.serverFrame ?? this.latestServerFrame
11068
+ };
11069
+ this.commandHistory.push(commandWithFrame);
11070
+ if (this.commandHistory.length > CMD_BACKUP) {
11071
+ this.commandHistory.shift();
11072
+ }
11073
+ const writer = new BinaryWriter();
11074
+ writer.writeLong(0);
11075
+ writer.writeLong(0);
11076
+ writer.writeByte(ClientCommand.move);
11077
+ writer.writeByte(0);
11078
+ writer.writeLong(this.latestServerFrame);
11079
+ writeUserCommand(writer, commandWithFrame);
11080
+ this.driver.send(writer.getData());
10935
11081
  }
10936
11082
  handleMessage(data) {
10937
11083
  let buffer = data.buffer;
@@ -11010,9 +11156,12 @@ var MultiplayerConnection = class {
11010
11156
  this.driver.send(builder.getData());
11011
11157
  this.state = 5 /* Active */;
11012
11158
  }
11013
- // Stubs for other handlers
11014
11159
  onFrame(frame) {
11160
+ if (frame.serverFrame > this.latestServerFrame) {
11161
+ this.latestServerFrame = frame.serverFrame;
11162
+ }
11015
11163
  }
11164
+ // Stubs for other handlers
11016
11165
  onCenterPrint(msg) {
11017
11166
  }
11018
11167
  onPrint(level, msg) {