quake2ts 0.0.301 → 0.0.303

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 (38) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +13 -13
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +221 -38
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +221 -38
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/entities.d.ts +1 -0
  10. package/packages/client/dist/types/entities.d.ts.map +1 -1
  11. package/packages/engine/dist/browser/index.global.js +9 -9
  12. package/packages/engine/dist/browser/index.global.js.map +1 -1
  13. package/packages/engine/dist/cjs/index.cjs +90 -18
  14. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  15. package/packages/engine/dist/esm/index.js +90 -18
  16. package/packages/engine/dist/esm/index.js.map +1 -1
  17. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  18. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  19. package/packages/engine/dist/types/render/scene.d.ts +2 -0
  20. package/packages/engine/dist/types/render/scene.d.ts.map +1 -1
  21. package/packages/game/dist/browser/index.global.js +4 -4
  22. package/packages/game/dist/browser/index.global.js.map +1 -1
  23. package/packages/game/dist/cjs/index.cjs +104 -19
  24. package/packages/game/dist/cjs/index.cjs.map +1 -1
  25. package/packages/game/dist/esm/index.js +104 -19
  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/ai/monster.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 +97 -19
  32. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  33. package/packages/shared/dist/esm/index.js +97 -19
  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/net/netchan.d.ts +5 -0
  37. package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
  38. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -4841,7 +4841,7 @@ var NetworkMessageBuilder = class {
4841
4841
  // src/net/netchan.ts
4842
4842
  var _NetChan = class _NetChan {
4843
4843
  constructor() {
4844
- // +2 for reliable length prefix
4844
+ // 256KB
4845
4845
  // Public state
4846
4846
  this.qport = 0;
4847
4847
  // qport value to distinguish multiple clients from same IP
@@ -4856,11 +4856,17 @@ var _NetChan = class _NetChan {
4856
4856
  // last reliable message sequence received
4857
4857
  this.outgoingReliableSequence = 0;
4858
4858
  this.reliableLength = 0;
4859
+ // Fragmentation State (Sending)
4860
+ this.fragmentSendOffset = 0;
4861
+ // Fragmentation State (Receiving)
4862
+ this.fragmentBuffer = null;
4863
+ this.fragmentLength = 0;
4864
+ this.fragmentReceived = 0;
4859
4865
  // Timing
4860
4866
  this.lastReceived = 0;
4861
4867
  this.lastSent = 0;
4862
4868
  this.remoteAddress = null;
4863
- this.reliableMessage = new BinaryWriter(_NetChan.MAX_MSGLEN);
4869
+ this.reliableMessage = new BinaryWriter(_NetChan.MAX_RELIABLE_BUFFER);
4864
4870
  const now = Date.now();
4865
4871
  this.lastReceived = now;
4866
4872
  this.lastSent = now;
@@ -4886,6 +4892,10 @@ var _NetChan = class _NetChan {
4886
4892
  this.outgoingReliableSequence = 0;
4887
4893
  this.reliableLength = 0;
4888
4894
  this.reliableMessage.reset();
4895
+ this.fragmentSendOffset = 0;
4896
+ this.fragmentBuffer = null;
4897
+ this.fragmentLength = 0;
4898
+ this.fragmentReceived = 0;
4889
4899
  this.lastReceived = Date.now();
4890
4900
  this.lastSent = Date.now();
4891
4901
  }
@@ -4895,18 +4905,38 @@ var _NetChan = class _NetChan {
4895
4905
  transmit(unreliableData) {
4896
4906
  this.outgoingSequence++;
4897
4907
  this.lastSent = Date.now();
4908
+ let sendReliableLength = 0;
4909
+ let isFragment = false;
4910
+ let fragmentStart = 0;
4911
+ if (this.reliableLength > 0) {
4912
+ if (this.reliableLength > _NetChan.FRAGMENT_SIZE) {
4913
+ isFragment = true;
4914
+ if (this.fragmentSendOffset >= this.reliableLength) {
4915
+ this.fragmentSendOffset = 0;
4916
+ }
4917
+ const remaining = this.reliableLength - this.fragmentSendOffset;
4918
+ sendReliableLength = remaining;
4919
+ if (sendReliableLength > _NetChan.FRAGMENT_SIZE) {
4920
+ sendReliableLength = _NetChan.FRAGMENT_SIZE;
4921
+ }
4922
+ fragmentStart = this.fragmentSendOffset;
4923
+ this.fragmentSendOffset += sendReliableLength;
4924
+ } else {
4925
+ sendReliableLength = this.reliableLength;
4926
+ }
4927
+ }
4898
4928
  const headerSize = _NetChan.PACKET_HEADER;
4899
- const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
4929
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
4900
4930
  let unreliableSize = unreliableData ? unreliableData.length : 0;
4901
- if (headerSize + reliableSize + unreliableSize > _NetChan.MAX_MSGLEN) {
4902
- unreliableSize = _NetChan.MAX_MSGLEN - headerSize - reliableSize;
4931
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan.MAX_MSGLEN) {
4932
+ unreliableSize = _NetChan.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
4903
4933
  if (unreliableSize < 0) unreliableSize = 0;
4904
4934
  }
4905
- const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
4935
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
4906
4936
  const view = new DataView(buffer);
4907
4937
  const result = new Uint8Array(buffer);
4908
4938
  let sequence = this.outgoingSequence;
4909
- if (this.reliableLength > 0) {
4939
+ if (sendReliableLength > 0) {
4910
4940
  sequence |= 2147483648;
4911
4941
  if ((this.outgoingReliableSequence & 1) !== 0) {
4912
4942
  sequence |= 1073741824;
@@ -4920,13 +4950,23 @@ var _NetChan = class _NetChan {
4920
4950
  view.setUint32(4, ack, true);
4921
4951
  view.setUint16(8, this.qport, true);
4922
4952
  let offset = headerSize;
4923
- if (this.reliableLength > 0) {
4924
- view.setUint16(offset, this.reliableLength, true);
4953
+ if (sendReliableLength > 0) {
4954
+ let lengthField = sendReliableLength;
4955
+ if (isFragment) {
4956
+ lengthField |= 32768;
4957
+ }
4958
+ view.setUint16(offset, lengthField, true);
4925
4959
  offset += 2;
4960
+ if (isFragment) {
4961
+ view.setUint32(offset, fragmentStart, true);
4962
+ offset += 4;
4963
+ view.setUint32(offset, this.reliableLength, true);
4964
+ offset += 4;
4965
+ }
4926
4966
  const reliableBuffer = this.reliableMessage.getBuffer();
4927
- const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
4967
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
4928
4968
  result.set(reliableBytes, offset);
4929
- offset += this.reliableLength;
4969
+ offset += sendReliableLength;
4930
4970
  }
4931
4971
  if (unreliableData && unreliableSize > 0) {
4932
4972
  const chunk = unreliableData.slice(0, unreliableSize);
@@ -4967,6 +5007,7 @@ var _NetChan = class _NetChan {
4967
5007
  this.reliableLength = 0;
4968
5008
  this.reliableMessage.reset();
4969
5009
  this.outgoingReliableSequence ^= 1;
5010
+ this.fragmentSendOffset = 0;
4970
5011
  }
4971
5012
  }
4972
5013
  const hasReliableData = (sequence & 2147483648) !== 0;
@@ -4975,13 +5016,45 @@ var _NetChan = class _NetChan {
4975
5016
  let reliableData = null;
4976
5017
  if (hasReliableData) {
4977
5018
  if (payloadOffset + 2 > packet.byteLength) return null;
4978
- const reliableLen = view.getUint16(payloadOffset, true);
5019
+ let reliableLen = view.getUint16(payloadOffset, true);
4979
5020
  payloadOffset += 2;
5021
+ const isFragment = (reliableLen & 32768) !== 0;
5022
+ reliableLen &= 32767;
4980
5023
  const expectedBit = this.incomingReliableSequence & 1;
4981
5024
  if (reliableSeqBit === expectedBit) {
4982
- this.incomingReliableSequence++;
4983
- if (payloadOffset + reliableLen > packet.byteLength) return null;
4984
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
5025
+ if (isFragment) {
5026
+ if (payloadOffset + 8 > packet.byteLength) return null;
5027
+ const fragStart = view.getUint32(payloadOffset, true);
5028
+ payloadOffset += 4;
5029
+ const fragTotal = view.getUint32(payloadOffset, true);
5030
+ payloadOffset += 4;
5031
+ if (fragTotal > _NetChan.MAX_RELIABLE_BUFFER) {
5032
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan.MAX_RELIABLE_BUFFER}`);
5033
+ return null;
5034
+ }
5035
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
5036
+ this.fragmentBuffer = new Uint8Array(fragTotal);
5037
+ this.fragmentLength = fragTotal;
5038
+ this.fragmentReceived = 0;
5039
+ }
5040
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
5041
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
5042
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
5043
+ this.fragmentBuffer.set(data, fragStart);
5044
+ this.fragmentReceived += reliableLen;
5045
+ if (this.fragmentReceived >= fragTotal) {
5046
+ reliableData = this.fragmentBuffer;
5047
+ this.incomingReliableSequence++;
5048
+ this.fragmentBuffer = null;
5049
+ this.fragmentLength = 0;
5050
+ this.fragmentReceived = 0;
5051
+ }
5052
+ }
5053
+ } else {
5054
+ this.incomingReliableSequence++;
5055
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
5056
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
5057
+ }
4985
5058
  }
4986
5059
  payloadOffset += reliableLen;
4987
5060
  }
@@ -5008,7 +5081,7 @@ var _NetChan = class _NetChan {
5008
5081
  * Writes a byte to the reliable message buffer
5009
5082
  */
5010
5083
  writeReliableByte(value) {
5011
- if (this.reliableLength + 1 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5084
+ if (this.reliableLength + 1 > _NetChan.MAX_RELIABLE_BUFFER) {
5012
5085
  throw new Error("NetChan reliable buffer overflow");
5013
5086
  }
5014
5087
  this.reliableMessage.writeByte(value);
@@ -5018,7 +5091,7 @@ var _NetChan = class _NetChan {
5018
5091
  * Writes a short to the reliable message buffer
5019
5092
  */
5020
5093
  writeReliableShort(value) {
5021
- if (this.reliableLength + 2 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5094
+ if (this.reliableLength + 2 > _NetChan.MAX_RELIABLE_BUFFER) {
5022
5095
  throw new Error("NetChan reliable buffer overflow");
5023
5096
  }
5024
5097
  this.reliableMessage.writeShort(value);
@@ -5028,7 +5101,7 @@ var _NetChan = class _NetChan {
5028
5101
  * Writes a long to the reliable message buffer
5029
5102
  */
5030
5103
  writeReliableLong(value) {
5031
- if (this.reliableLength + 4 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5104
+ if (this.reliableLength + 4 > _NetChan.MAX_RELIABLE_BUFFER) {
5032
5105
  throw new Error("NetChan reliable buffer overflow");
5033
5106
  }
5034
5107
  this.reliableMessage.writeLong(value);
@@ -5039,7 +5112,7 @@ var _NetChan = class _NetChan {
5039
5112
  */
5040
5113
  writeReliableString(value) {
5041
5114
  const len = value.length + 1;
5042
- if (this.reliableLength + len > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5115
+ if (this.reliableLength + len > _NetChan.MAX_RELIABLE_BUFFER) {
5043
5116
  throw new Error("NetChan reliable buffer overflow");
5044
5117
  }
5045
5118
  this.reliableMessage.writeString(value);
@@ -5074,6 +5147,11 @@ _NetChan.FRAGMENT_SIZE = 1024;
5074
5147
  _NetChan.PACKET_HEADER = 10;
5075
5148
  // sequence(4) + ack(4) + qport(2)
5076
5149
  _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
5150
+ // +2 for reliable length prefix
5151
+ // Increase internal reliable buffer to support large messages (fragmentation)
5152
+ // Quake 2 uses MAX_MSGLEN for the reliable buffer, limiting single messages to ~1400 bytes.
5153
+ // We expand this to allow larger messages (e.g. snapshots, downloads) which are then fragmented.
5154
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
5077
5155
  var NetChan = _NetChan;
5078
5156
 
5079
5157
  // src/items/weapons.ts