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
@@ -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;
@@ -8678,6 +8679,18 @@ function G_GetPowerupStat(stats, powerupId) {
8678
8679
  if (index === void 0 || index < 0 || index >= POWERUP_MAX2) return 0;
8679
8680
  return getCompressedInteger(stats, 41, index, NUM_BITS_FOR_POWERUP2);
8680
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
+ }
8681
8694
  var entityFlags_exports2 = {};
8682
8695
  __export3(entityFlags_exports2, {
8683
8696
  U_ANGLE1: () => U_ANGLE13,
@@ -8836,6 +8849,108 @@ var BinaryStream2 = class {
8836
8849
  out.z = norm[2];
8837
8850
  }
8838
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
+ };
8839
8954
  var NetworkMessageBuilder = class {
8840
8955
  constructor(initialSize = 1024) {
8841
8956
  this.buffer = new Uint8Array(initialSize);
@@ -10911,6 +11026,8 @@ var MultiplayerConnection = class {
10911
11026
  this.challenge = 0;
10912
11027
  this.connectPacketCount = 0;
10913
11028
  this.connectPacketTime = 0;
11029
+ this.latestServerFrame = 0;
11030
+ this.commandHistory = [];
10914
11031
  this.driver = new BrowserWebSocketNetDriver();
10915
11032
  this.options = options;
10916
11033
  this.driver.onMessage((data) => this.handleMessage(data));
@@ -10940,12 +11057,27 @@ var MultiplayerConnection = class {
10940
11057
  this.state = 0 /* Disconnected */;
10941
11058
  this.configStrings.clear();
10942
11059
  this.baselines.clear();
11060
+ this.commandHistory = [];
11061
+ this.latestServerFrame = 0;
10943
11062
  }
10944
11063
  sendCommand(cmd) {
10945
11064
  if (this.state !== 5 /* Active */) return;
10946
- const builder = new NetworkMessageBuilder();
10947
- builder.writeByte(ClientCommand.nop);
10948
- 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());
10949
11081
  }
10950
11082
  handleMessage(data) {
10951
11083
  let buffer = data.buffer;
@@ -11024,9 +11156,12 @@ var MultiplayerConnection = class {
11024
11156
  this.driver.send(builder.getData());
11025
11157
  this.state = 5 /* Active */;
11026
11158
  }
11027
- // Stubs for other handlers
11028
11159
  onFrame(frame) {
11160
+ if (frame.serverFrame > this.latestServerFrame) {
11161
+ this.latestServerFrame = frame.serverFrame;
11162
+ }
11029
11163
  }
11164
+ // Stubs for other handlers
11030
11165
  onCenterPrint(msg) {
11031
11166
  }
11032
11167
  onPrint(level, msg) {