quake2ts 0.0.299 → 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.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +13 -13
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +279 -36
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +279 -36
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/client/dist/types/ui/demo-controls.d.ts +11 -0
- package/packages/client/dist/types/ui/demo-controls.d.ts.map +1 -0
- package/packages/engine/dist/browser/index.global.js +9 -9
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +90 -18
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +90 -18
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/browser/index.global.js +4 -4
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +107 -28
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +107 -28
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/gibs.d.ts +1 -1
- package/packages/game/dist/types/entities/gibs.d.ts.map +1 -1
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +97 -19
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +97 -19
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/net/netchan.d.ts +5 -0
- package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
- 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
|
-
//
|
|
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.
|
|
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
|
|
5221
|
+
const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
|
|
5192
5222
|
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
5193
|
-
if (headerSize +
|
|
5194
|
-
unreliableSize = _NetChan.MAX_MSGLEN - headerSize -
|
|
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 +
|
|
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 (
|
|
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 (
|
|
5216
|
-
|
|
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(
|
|
5259
|
+
const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
|
|
5220
5260
|
result.set(reliableBytes, offset);
|
|
5221
|
-
offset +=
|
|
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
|
-
|
|
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
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|