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.
- 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 +221 -38
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +221 -38
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/entities.d.ts +1 -0
- package/packages/client/dist/types/entities.d.ts.map +1 -1
- 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/engine/dist/types/render/renderer.d.ts.map +1 -1
- package/packages/engine/dist/types/render/scene.d.ts +2 -0
- package/packages/engine/dist/types/render/scene.d.ts.map +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 +104 -19
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +104 -19
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/ai/monster.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
|
@@ -4841,7 +4841,7 @@ var NetworkMessageBuilder = class {
|
|
|
4841
4841
|
// src/net/netchan.ts
|
|
4842
4842
|
var _NetChan = class _NetChan {
|
|
4843
4843
|
constructor() {
|
|
4844
|
-
//
|
|
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.
|
|
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
|
|
4929
|
+
const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
|
|
4900
4930
|
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
4901
|
-
if (headerSize +
|
|
4902
|
-
unreliableSize = _NetChan.MAX_MSGLEN - headerSize -
|
|
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 +
|
|
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 (
|
|
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 (
|
|
4924
|
-
|
|
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(
|
|
4967
|
+
const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
|
|
4928
4968
|
result.set(reliableBytes, offset);
|
|
4929
|
-
offset +=
|
|
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
|
-
|
|
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
|
-
|
|
4983
|
-
|
|
4984
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|