quake2ts 0.0.257 → 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 (63) 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 +139 -4
  9. package/packages/client/dist/cjs/index.cjs.map +1 -1
  10. package/packages/client/dist/esm/index.js +139 -4
  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/net/connection.d.ts +2 -0
  14. package/packages/client/dist/types/net/connection.d.ts.map +1 -1
  15. package/packages/engine/dist/browser/index.global.js.map +1 -1
  16. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  17. package/packages/engine/dist/esm/index.js.map +1 -1
  18. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  19. package/packages/game/dist/browser/index.global.js +2 -2
  20. package/packages/game/dist/browser/index.global.js.map +1 -1
  21. package/packages/game/dist/cjs/index.cjs +3910 -2757
  22. package/packages/game/dist/cjs/index.cjs.map +1 -1
  23. package/packages/game/dist/esm/index.js +3910 -2757
  24. package/packages/game/dist/esm/index.js.map +1 -1
  25. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  26. package/packages/game/dist/types/combat/weapons/animation.d.ts +20 -0
  27. package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -0
  28. package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
  29. package/packages/game/dist/types/combat/weapons/frames.d.ts +8 -0
  30. package/packages/game/dist/types/combat/weapons/frames.d.ts.map +1 -0
  31. package/packages/game/dist/types/combat/weapons/projectSource.d.ts +16 -27
  32. package/packages/game/dist/types/combat/weapons/projectSource.d.ts.map +1 -1
  33. package/packages/game/dist/types/combat/weapons/switching.d.ts +11 -0
  34. package/packages/game/dist/types/combat/weapons/switching.d.ts.map +1 -1
  35. package/packages/game/dist/types/entities/entity.d.ts +1 -0
  36. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  37. package/packages/game/dist/types/entities/funcs.d.ts +2 -1
  38. package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
  39. package/packages/game/dist/types/entities/misc.d.ts.map +1 -1
  40. package/packages/game/dist/types/entities/monsters/index.d.ts.map +1 -1
  41. package/packages/game/dist/types/entities/monsters/insane.d.ts +5 -0
  42. package/packages/game/dist/types/entities/monsters/insane.d.ts.map +1 -0
  43. package/packages/game/dist/types/entities/projectiles.d.ts +1 -1
  44. package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
  45. package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
  46. package/packages/server/dist/index.cjs +15 -0
  47. package/packages/server/dist/index.d.cts +1 -0
  48. package/packages/server/dist/index.d.ts +1 -0
  49. package/packages/server/dist/index.js +15 -0
  50. package/packages/shared/dist/browser/index.global.js +1 -1
  51. package/packages/shared/dist/browser/index.global.js.map +1 -1
  52. package/packages/shared/dist/cjs/index.cjs +21 -2
  53. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  54. package/packages/shared/dist/esm/index.js +18 -1
  55. package/packages/shared/dist/esm/index.js.map +1 -1
  56. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  57. package/packages/shared/dist/types/protocol/constants.d.ts +1 -0
  58. package/packages/shared/dist/types/protocol/constants.d.ts.map +1 -1
  59. package/packages/shared/dist/types/protocol/index.d.ts +1 -0
  60. package/packages/shared/dist/types/protocol/index.d.ts.map +1 -1
  61. package/packages/shared/dist/types/protocol/writeUserCmd.d.ts +4 -0
  62. package/packages/shared/dist/types/protocol/writeUserCmd.d.ts.map +1 -0
  63. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -8418,6 +8418,7 @@ var ClientCommand = /* @__PURE__ */ ((ClientCommand2) => {
8418
8418
  ClientCommand2[ClientCommand2["stringcmd"] = 4] = "stringcmd";
8419
8419
  return ClientCommand2;
8420
8420
  })(ClientCommand || {});
8421
+ var CMD_BACKUP = 64;
8421
8422
  var MZ_BLASTER = 0;
8422
8423
  var MZ_MACHINEGUN = 1;
8423
8424
  var MZ_SHOTGUN = 2;
@@ -8647,6 +8648,18 @@ function G_GetPowerupStat(stats, powerupId) {
8647
8648
  if (index === void 0 || index < 0 || index >= POWERUP_MAX2) return 0;
8648
8649
  return getCompressedInteger(stats, 41, index, NUM_BITS_FOR_POWERUP2);
8649
8650
  }
8651
+ function writeUserCommand(writer, cmd) {
8652
+ writer.writeByte(cmd.msec);
8653
+ writer.writeByte(cmd.buttons);
8654
+ writer.writeAngle16(cmd.angles.x);
8655
+ writer.writeAngle16(cmd.angles.y);
8656
+ writer.writeAngle16(cmd.angles.z);
8657
+ writer.writeShort(cmd.forwardmove);
8658
+ writer.writeShort(cmd.sidemove);
8659
+ writer.writeShort(cmd.upmove);
8660
+ writer.writeByte(0);
8661
+ writer.writeByte(0);
8662
+ }
8650
8663
  var entityFlags_exports2 = {};
8651
8664
  __export3(entityFlags_exports2, {
8652
8665
  U_ANGLE1: () => U_ANGLE13,
@@ -8805,6 +8818,108 @@ var BinaryStream2 = class {
8805
8818
  out.z = norm[2];
8806
8819
  }
8807
8820
  };
8821
+ var BinaryWriter = class {
8822
+ constructor(sizeOrBuffer = 1400) {
8823
+ if (typeof sizeOrBuffer === "number") {
8824
+ this.buffer = new Uint8Array(sizeOrBuffer);
8825
+ this.fixed = false;
8826
+ } else {
8827
+ this.buffer = sizeOrBuffer;
8828
+ this.fixed = true;
8829
+ }
8830
+ this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
8831
+ this.offset = 0;
8832
+ }
8833
+ ensureSpace(bytes) {
8834
+ if (this.offset + bytes > this.buffer.byteLength) {
8835
+ if (this.fixed) {
8836
+ throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
8837
+ }
8838
+ const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
8839
+ const newBuffer = new Uint8Array(newSize);
8840
+ newBuffer.set(this.buffer);
8841
+ this.buffer = newBuffer;
8842
+ this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
8843
+ }
8844
+ }
8845
+ writeByte(value) {
8846
+ this.ensureSpace(1);
8847
+ this.view.setUint8(this.offset, value);
8848
+ this.offset += 1;
8849
+ }
8850
+ writeChar(value) {
8851
+ this.ensureSpace(1);
8852
+ this.view.setInt8(this.offset, value);
8853
+ this.offset += 1;
8854
+ }
8855
+ writeShort(value) {
8856
+ this.ensureSpace(2);
8857
+ this.view.setInt16(this.offset, value, true);
8858
+ this.offset += 2;
8859
+ }
8860
+ writeLong(value) {
8861
+ this.ensureSpace(4);
8862
+ this.view.setInt32(this.offset, value, true);
8863
+ this.offset += 4;
8864
+ }
8865
+ writeFloat(value) {
8866
+ this.ensureSpace(4);
8867
+ this.view.setFloat32(this.offset, value, true);
8868
+ this.offset += 4;
8869
+ }
8870
+ writeString(value) {
8871
+ const len2 = value.length;
8872
+ this.ensureSpace(len2 + 1);
8873
+ for (let i = 0; i < len2; i++) {
8874
+ this.view.setUint8(this.offset + i, value.charCodeAt(i));
8875
+ }
8876
+ this.view.setUint8(this.offset + len2, 0);
8877
+ this.offset += len2 + 1;
8878
+ }
8879
+ writeCoord(value) {
8880
+ this.writeShort(Math.trunc(value * 8));
8881
+ }
8882
+ writeAngle(value) {
8883
+ this.writeByte(Math.trunc(value * 256 / 360) & 255);
8884
+ }
8885
+ writeAngle16(value) {
8886
+ this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
8887
+ }
8888
+ writePos(pos) {
8889
+ this.writeCoord(pos.x);
8890
+ this.writeCoord(pos.y);
8891
+ this.writeCoord(pos.z);
8892
+ }
8893
+ writeDir(dir) {
8894
+ let maxDot = -1;
8895
+ let bestIndex = 0;
8896
+ if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
8897
+ this.writeByte(0);
8898
+ return;
8899
+ }
8900
+ for (let i = 0; i < ANORMS2.length; i++) {
8901
+ const norm = ANORMS2[i];
8902
+ const dot2 = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
8903
+ if (dot2 > maxDot) {
8904
+ maxDot = dot2;
8905
+ bestIndex = i;
8906
+ }
8907
+ }
8908
+ this.writeByte(bestIndex);
8909
+ }
8910
+ getData() {
8911
+ return this.buffer.slice(0, this.offset);
8912
+ }
8913
+ getBuffer() {
8914
+ return this.buffer;
8915
+ }
8916
+ getOffset() {
8917
+ return this.offset;
8918
+ }
8919
+ reset() {
8920
+ this.offset = 0;
8921
+ }
8922
+ };
8808
8923
  var NetworkMessageBuilder = class {
8809
8924
  constructor(initialSize = 1024) {
8810
8925
  this.buffer = new Uint8Array(initialSize);
@@ -10880,6 +10995,8 @@ var MultiplayerConnection = class {
10880
10995
  this.challenge = 0;
10881
10996
  this.connectPacketCount = 0;
10882
10997
  this.connectPacketTime = 0;
10998
+ this.latestServerFrame = 0;
10999
+ this.commandHistory = [];
10883
11000
  this.driver = new BrowserWebSocketNetDriver();
10884
11001
  this.options = options;
10885
11002
  this.driver.onMessage((data) => this.handleMessage(data));
@@ -10909,12 +11026,27 @@ var MultiplayerConnection = class {
10909
11026
  this.state = 0 /* Disconnected */;
10910
11027
  this.configStrings.clear();
10911
11028
  this.baselines.clear();
11029
+ this.commandHistory = [];
11030
+ this.latestServerFrame = 0;
10912
11031
  }
10913
11032
  sendCommand(cmd) {
10914
11033
  if (this.state !== 5 /* Active */) return;
10915
- const builder = new NetworkMessageBuilder();
10916
- builder.writeByte(ClientCommand.nop);
10917
- this.driver.send(builder.getData());
11034
+ const commandWithFrame = {
11035
+ ...cmd,
11036
+ serverFrame: cmd.serverFrame ?? this.latestServerFrame
11037
+ };
11038
+ this.commandHistory.push(commandWithFrame);
11039
+ if (this.commandHistory.length > CMD_BACKUP) {
11040
+ this.commandHistory.shift();
11041
+ }
11042
+ const writer = new BinaryWriter();
11043
+ writer.writeLong(0);
11044
+ writer.writeLong(0);
11045
+ writer.writeByte(ClientCommand.move);
11046
+ writer.writeByte(0);
11047
+ writer.writeLong(this.latestServerFrame);
11048
+ writeUserCommand(writer, commandWithFrame);
11049
+ this.driver.send(writer.getData());
10918
11050
  }
10919
11051
  handleMessage(data) {
10920
11052
  let buffer = data.buffer;
@@ -10993,9 +11125,12 @@ var MultiplayerConnection = class {
10993
11125
  this.driver.send(builder.getData());
10994
11126
  this.state = 5 /* Active */;
10995
11127
  }
10996
- // Stubs for other handlers
10997
11128
  onFrame(frame) {
11129
+ if (frame.serverFrame > this.latestServerFrame) {
11130
+ this.latestServerFrame = frame.serverFrame;
11131
+ }
10998
11132
  }
11133
+ // Stubs for other handlers
10999
11134
  onCenterPrint(msg) {
11000
11135
  }
11001
11136
  onPrint(level, msg) {