quake2ts 0.0.301 → 0.0.302

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 (32) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +8 -8
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +180 -36
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +180 -36
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/engine/dist/browser/index.global.js +9 -9
  10. package/packages/engine/dist/browser/index.global.js.map +1 -1
  11. package/packages/engine/dist/cjs/index.cjs +90 -18
  12. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  13. package/packages/engine/dist/esm/index.js +90 -18
  14. package/packages/engine/dist/esm/index.js.map +1 -1
  15. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  16. package/packages/game/dist/browser/index.global.js +4 -4
  17. package/packages/game/dist/browser/index.global.js.map +1 -1
  18. package/packages/game/dist/cjs/index.cjs +90 -18
  19. package/packages/game/dist/cjs/index.cjs.map +1 -1
  20. package/packages/game/dist/esm/index.js +90 -18
  21. package/packages/game/dist/esm/index.js.map +1 -1
  22. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  23. package/packages/shared/dist/browser/index.global.js +1 -1
  24. package/packages/shared/dist/browser/index.global.js.map +1 -1
  25. package/packages/shared/dist/cjs/index.cjs +97 -19
  26. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  27. package/packages/shared/dist/esm/index.js +97 -19
  28. package/packages/shared/dist/esm/index.js.map +1 -1
  29. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  30. package/packages/shared/dist/types/net/netchan.d.ts +5 -0
  31. package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
  32. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -5133,7 +5133,7 @@ var NetworkMessageBuilder = class {
5133
5133
  // src/net/netchan.ts
5134
5134
  var _NetChan = class _NetChan {
5135
5135
  constructor() {
5136
- // +2 for reliable length prefix
5136
+ // 256KB
5137
5137
  // Public state
5138
5138
  this.qport = 0;
5139
5139
  // qport value to distinguish multiple clients from same IP
@@ -5148,11 +5148,17 @@ var _NetChan = class _NetChan {
5148
5148
  // last reliable message sequence received
5149
5149
  this.outgoingReliableSequence = 0;
5150
5150
  this.reliableLength = 0;
5151
+ // Fragmentation State (Sending)
5152
+ this.fragmentSendOffset = 0;
5153
+ // Fragmentation State (Receiving)
5154
+ this.fragmentBuffer = null;
5155
+ this.fragmentLength = 0;
5156
+ this.fragmentReceived = 0;
5151
5157
  // Timing
5152
5158
  this.lastReceived = 0;
5153
5159
  this.lastSent = 0;
5154
5160
  this.remoteAddress = null;
5155
- this.reliableMessage = new BinaryWriter(_NetChan.MAX_MSGLEN);
5161
+ this.reliableMessage = new BinaryWriter(_NetChan.MAX_RELIABLE_BUFFER);
5156
5162
  const now = Date.now();
5157
5163
  this.lastReceived = now;
5158
5164
  this.lastSent = now;
@@ -5178,6 +5184,10 @@ var _NetChan = class _NetChan {
5178
5184
  this.outgoingReliableSequence = 0;
5179
5185
  this.reliableLength = 0;
5180
5186
  this.reliableMessage.reset();
5187
+ this.fragmentSendOffset = 0;
5188
+ this.fragmentBuffer = null;
5189
+ this.fragmentLength = 0;
5190
+ this.fragmentReceived = 0;
5181
5191
  this.lastReceived = Date.now();
5182
5192
  this.lastSent = Date.now();
5183
5193
  }
@@ -5187,18 +5197,38 @@ var _NetChan = class _NetChan {
5187
5197
  transmit(unreliableData) {
5188
5198
  this.outgoingSequence++;
5189
5199
  this.lastSent = Date.now();
5200
+ let sendReliableLength = 0;
5201
+ let isFragment = false;
5202
+ let fragmentStart = 0;
5203
+ if (this.reliableLength > 0) {
5204
+ if (this.reliableLength > _NetChan.FRAGMENT_SIZE) {
5205
+ isFragment = true;
5206
+ if (this.fragmentSendOffset >= this.reliableLength) {
5207
+ this.fragmentSendOffset = 0;
5208
+ }
5209
+ const remaining = this.reliableLength - this.fragmentSendOffset;
5210
+ sendReliableLength = remaining;
5211
+ if (sendReliableLength > _NetChan.FRAGMENT_SIZE) {
5212
+ sendReliableLength = _NetChan.FRAGMENT_SIZE;
5213
+ }
5214
+ fragmentStart = this.fragmentSendOffset;
5215
+ this.fragmentSendOffset += sendReliableLength;
5216
+ } else {
5217
+ sendReliableLength = this.reliableLength;
5218
+ }
5219
+ }
5190
5220
  const headerSize = _NetChan.PACKET_HEADER;
5191
- const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
5221
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
5192
5222
  let unreliableSize = unreliableData ? unreliableData.length : 0;
5193
- if (headerSize + reliableSize + unreliableSize > _NetChan.MAX_MSGLEN) {
5194
- unreliableSize = _NetChan.MAX_MSGLEN - headerSize - reliableSize;
5223
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan.MAX_MSGLEN) {
5224
+ unreliableSize = _NetChan.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
5195
5225
  if (unreliableSize < 0) unreliableSize = 0;
5196
5226
  }
5197
- const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
5227
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
5198
5228
  const view = new DataView(buffer);
5199
5229
  const result = new Uint8Array(buffer);
5200
5230
  let sequence = this.outgoingSequence;
5201
- if (this.reliableLength > 0) {
5231
+ if (sendReliableLength > 0) {
5202
5232
  sequence |= 2147483648;
5203
5233
  if ((this.outgoingReliableSequence & 1) !== 0) {
5204
5234
  sequence |= 1073741824;
@@ -5212,13 +5242,23 @@ var _NetChan = class _NetChan {
5212
5242
  view.setUint32(4, ack, true);
5213
5243
  view.setUint16(8, this.qport, true);
5214
5244
  let offset = headerSize;
5215
- if (this.reliableLength > 0) {
5216
- view.setUint16(offset, this.reliableLength, true);
5245
+ if (sendReliableLength > 0) {
5246
+ let lengthField = sendReliableLength;
5247
+ if (isFragment) {
5248
+ lengthField |= 32768;
5249
+ }
5250
+ view.setUint16(offset, lengthField, true);
5217
5251
  offset += 2;
5252
+ if (isFragment) {
5253
+ view.setUint32(offset, fragmentStart, true);
5254
+ offset += 4;
5255
+ view.setUint32(offset, this.reliableLength, true);
5256
+ offset += 4;
5257
+ }
5218
5258
  const reliableBuffer = this.reliableMessage.getBuffer();
5219
- const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
5259
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
5220
5260
  result.set(reliableBytes, offset);
5221
- offset += this.reliableLength;
5261
+ offset += sendReliableLength;
5222
5262
  }
5223
5263
  if (unreliableData && unreliableSize > 0) {
5224
5264
  const chunk = unreliableData.slice(0, unreliableSize);
@@ -5259,6 +5299,7 @@ var _NetChan = class _NetChan {
5259
5299
  this.reliableLength = 0;
5260
5300
  this.reliableMessage.reset();
5261
5301
  this.outgoingReliableSequence ^= 1;
5302
+ this.fragmentSendOffset = 0;
5262
5303
  }
5263
5304
  }
5264
5305
  const hasReliableData = (sequence & 2147483648) !== 0;
@@ -5267,13 +5308,45 @@ var _NetChan = class _NetChan {
5267
5308
  let reliableData = null;
5268
5309
  if (hasReliableData) {
5269
5310
  if (payloadOffset + 2 > packet.byteLength) return null;
5270
- const reliableLen = view.getUint16(payloadOffset, true);
5311
+ let reliableLen = view.getUint16(payloadOffset, true);
5271
5312
  payloadOffset += 2;
5313
+ const isFragment = (reliableLen & 32768) !== 0;
5314
+ reliableLen &= 32767;
5272
5315
  const expectedBit = this.incomingReliableSequence & 1;
5273
5316
  if (reliableSeqBit === expectedBit) {
5274
- this.incomingReliableSequence++;
5275
- if (payloadOffset + reliableLen > packet.byteLength) return null;
5276
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
5317
+ if (isFragment) {
5318
+ if (payloadOffset + 8 > packet.byteLength) return null;
5319
+ const fragStart = view.getUint32(payloadOffset, true);
5320
+ payloadOffset += 4;
5321
+ const fragTotal = view.getUint32(payloadOffset, true);
5322
+ payloadOffset += 4;
5323
+ if (fragTotal > _NetChan.MAX_RELIABLE_BUFFER) {
5324
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan.MAX_RELIABLE_BUFFER}`);
5325
+ return null;
5326
+ }
5327
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
5328
+ this.fragmentBuffer = new Uint8Array(fragTotal);
5329
+ this.fragmentLength = fragTotal;
5330
+ this.fragmentReceived = 0;
5331
+ }
5332
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
5333
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
5334
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
5335
+ this.fragmentBuffer.set(data, fragStart);
5336
+ this.fragmentReceived += reliableLen;
5337
+ if (this.fragmentReceived >= fragTotal) {
5338
+ reliableData = this.fragmentBuffer;
5339
+ this.incomingReliableSequence++;
5340
+ this.fragmentBuffer = null;
5341
+ this.fragmentLength = 0;
5342
+ this.fragmentReceived = 0;
5343
+ }
5344
+ }
5345
+ } else {
5346
+ this.incomingReliableSequence++;
5347
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
5348
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
5349
+ }
5277
5350
  }
5278
5351
  payloadOffset += reliableLen;
5279
5352
  }
@@ -5300,7 +5373,7 @@ var _NetChan = class _NetChan {
5300
5373
  * Writes a byte to the reliable message buffer
5301
5374
  */
5302
5375
  writeReliableByte(value) {
5303
- if (this.reliableLength + 1 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5376
+ if (this.reliableLength + 1 > _NetChan.MAX_RELIABLE_BUFFER) {
5304
5377
  throw new Error("NetChan reliable buffer overflow");
5305
5378
  }
5306
5379
  this.reliableMessage.writeByte(value);
@@ -5310,7 +5383,7 @@ var _NetChan = class _NetChan {
5310
5383
  * Writes a short to the reliable message buffer
5311
5384
  */
5312
5385
  writeReliableShort(value) {
5313
- if (this.reliableLength + 2 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5386
+ if (this.reliableLength + 2 > _NetChan.MAX_RELIABLE_BUFFER) {
5314
5387
  throw new Error("NetChan reliable buffer overflow");
5315
5388
  }
5316
5389
  this.reliableMessage.writeShort(value);
@@ -5320,7 +5393,7 @@ var _NetChan = class _NetChan {
5320
5393
  * Writes a long to the reliable message buffer
5321
5394
  */
5322
5395
  writeReliableLong(value) {
5323
- if (this.reliableLength + 4 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5396
+ if (this.reliableLength + 4 > _NetChan.MAX_RELIABLE_BUFFER) {
5324
5397
  throw new Error("NetChan reliable buffer overflow");
5325
5398
  }
5326
5399
  this.reliableMessage.writeLong(value);
@@ -5331,7 +5404,7 @@ var _NetChan = class _NetChan {
5331
5404
  */
5332
5405
  writeReliableString(value) {
5333
5406
  const len = value.length + 1;
5334
- if (this.reliableLength + len > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
5407
+ if (this.reliableLength + len > _NetChan.MAX_RELIABLE_BUFFER) {
5335
5408
  throw new Error("NetChan reliable buffer overflow");
5336
5409
  }
5337
5410
  this.reliableMessage.writeString(value);
@@ -5366,6 +5439,11 @@ _NetChan.FRAGMENT_SIZE = 1024;
5366
5439
  _NetChan.PACKET_HEADER = 10;
5367
5440
  // sequence(4) + ack(4) + qport(2)
5368
5441
  _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
5442
+ // +2 for reliable length prefix
5443
+ // Increase internal reliable buffer to support large messages (fragmentation)
5444
+ // Quake 2 uses MAX_MSGLEN for the reliable buffer, limiting single messages to ~1400 bytes.
5445
+ // We expand this to allow larger messages (e.g. snapshots, downloads) which are then fragmented.
5446
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
5369
5447
  var NetChan = _NetChan;
5370
5448
 
5371
5449
  // src/items/weapons.ts