quake2ts 0.0.288 → 0.0.290
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 +554 -2
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +554 -2
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +16 -16
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +360 -35
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +360 -35
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/audio/constants.d.ts +1 -23
- package/packages/engine/dist/types/audio/constants.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +3 -3
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +556 -19
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +556 -19
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/monsters/actor.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/arachnid.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +1 -0
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +2 -0
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/server/dist/index.cjs +54 -11
- package/packages/server/dist/index.d.cts +6 -1
- package/packages/server/dist/index.d.ts +6 -1
- package/packages/server/dist/index.js +56 -13
- 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 +562 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +549 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/audio/constants.d.ts +24 -0
- package/packages/shared/dist/types/audio/constants.d.ts.map +1 -0
- package/packages/shared/dist/types/index.d.ts +1 -0
- package/packages/shared/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/types/net/index.d.ts +1 -0
- package/packages/shared/dist/types/net/index.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/crc.d.ts +5 -0
- package/packages/shared/dist/types/protocol/crc.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/index.d.ts +1 -0
- package/packages/shared/dist/types/protocol/index.d.ts.map +1 -1
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -23,6 +23,11 @@ __export(index_exports, {
|
|
|
23
23
|
AMMO_MAX: () => AMMO_MAX,
|
|
24
24
|
AMMO_TYPE_COUNT: () => AMMO_TYPE_COUNT,
|
|
25
25
|
ANORMS: () => ANORMS,
|
|
26
|
+
ATTN_IDLE: () => ATTN_IDLE,
|
|
27
|
+
ATTN_LOOP_NONE: () => ATTN_LOOP_NONE,
|
|
28
|
+
ATTN_NONE: () => ATTN_NONE,
|
|
29
|
+
ATTN_NORM: () => ATTN_NORM,
|
|
30
|
+
ATTN_STATIC: () => ATTN_STATIC,
|
|
26
31
|
AmmoItemId: () => AmmoItemId,
|
|
27
32
|
AmmoType: () => AmmoType,
|
|
28
33
|
BinaryStream: () => BinaryStream,
|
|
@@ -111,6 +116,7 @@ __export(index_exports, {
|
|
|
111
116
|
MAX_QPATH: () => MAX_QPATH,
|
|
112
117
|
MAX_SHADOW_LIGHTS: () => MAX_SHADOW_LIGHTS,
|
|
113
118
|
MAX_SOUNDS: () => MAX_SOUNDS,
|
|
119
|
+
MAX_SOUND_CHANNELS: () => MAX_SOUND_CHANNELS,
|
|
114
120
|
MAX_STRING_CHARS: () => MAX_STRING_CHARS,
|
|
115
121
|
MAX_STRING_TOKENS: () => MAX_STRING_TOKENS,
|
|
116
122
|
MAX_TOKEN_CHARS: () => MAX_TOKEN_CHARS,
|
|
@@ -134,6 +140,7 @@ __export(index_exports, {
|
|
|
134
140
|
NUM_BITS_FOR_AMMO: () => NUM_BITS_FOR_AMMO,
|
|
135
141
|
NUM_BITS_FOR_POWERUP: () => NUM_BITS_FOR_POWERUP,
|
|
136
142
|
NUM_POWERUP_STATS: () => NUM_POWERUP_STATS,
|
|
143
|
+
NetChan: () => NetChan,
|
|
137
144
|
NetworkMessageBuilder: () => NetworkMessageBuilder,
|
|
138
145
|
PITCH: () => PITCH,
|
|
139
146
|
POWERUP_MAX: () => POWERUP_MAX,
|
|
@@ -150,6 +157,8 @@ __export(index_exports, {
|
|
|
150
157
|
Replay: () => replay_exports,
|
|
151
158
|
SLIDEMOVE_BLOCKED_FLOOR: () => SLIDEMOVE_BLOCKED_FLOOR,
|
|
152
159
|
SLIDEMOVE_BLOCKED_WALL: () => SLIDEMOVE_BLOCKED_WALL,
|
|
160
|
+
SOUND_FULLVOLUME: () => SOUND_FULLVOLUME,
|
|
161
|
+
SOUND_LOOP_ATTENUATE: () => SOUND_LOOP_ATTENUATE,
|
|
153
162
|
STOP_EPSILON: () => STOP_EPSILON,
|
|
154
163
|
SURF_ALPHATEST: () => SURF_ALPHATEST,
|
|
155
164
|
SURF_FLOWING: () => SURF_FLOWING,
|
|
@@ -166,6 +175,7 @@ __export(index_exports, {
|
|
|
166
175
|
SURF_TRANS66: () => SURF_TRANS66,
|
|
167
176
|
SURF_WARP: () => SURF_WARP,
|
|
168
177
|
ServerCommand: () => ServerCommand,
|
|
178
|
+
SoundChannel: () => SoundChannel,
|
|
169
179
|
TempEntity: () => TempEntity,
|
|
170
180
|
UPDATE_BACKUP: () => UPDATE_BACKUP,
|
|
171
181
|
WEAPON_AMMO_MAP: () => WEAPON_AMMO_MAP,
|
|
@@ -191,12 +201,14 @@ __export(index_exports, {
|
|
|
191
201
|
applyPmoveFriction: () => applyPmoveFriction,
|
|
192
202
|
applyPmoveWaterMove: () => applyPmoveWaterMove,
|
|
193
203
|
assertContract: () => assertContract,
|
|
204
|
+
attenuationToDistanceMultiplier: () => attenuationToDistanceMultiplier,
|
|
194
205
|
boxContents: () => boxContents,
|
|
195
206
|
boxOnPlaneSide: () => boxOnPlaneSide,
|
|
196
207
|
boxesIntersect: () => boxesIntersect,
|
|
197
208
|
buildAirGroundWish: () => buildAirGroundWish,
|
|
198
209
|
buildCollisionModel: () => buildCollisionModel,
|
|
199
210
|
buildWaterWish: () => buildWaterWish,
|
|
211
|
+
calculateMaxAudibleDistance: () => calculateMaxAudibleDistance,
|
|
200
212
|
categorizePosition: () => categorizePosition,
|
|
201
213
|
checkDuckState: () => checkDuckState,
|
|
202
214
|
checkJump: () => checkJump,
|
|
@@ -212,6 +224,7 @@ __export(index_exports, {
|
|
|
212
224
|
concatRotationMatrices: () => concatRotationMatrices,
|
|
213
225
|
configStringSize: () => configStringSize,
|
|
214
226
|
copyVec3: () => copyVec3,
|
|
227
|
+
crc8: () => crc8,
|
|
215
228
|
createDefaultTrace: () => createDefaultTrace,
|
|
216
229
|
createEmptyBounds3: () => createEmptyBounds3,
|
|
217
230
|
createMat4Identity: () => createMat4Identity,
|
|
@@ -4094,6 +4107,273 @@ var RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
|
4094
4107
|
return RenderFx2;
|
|
4095
4108
|
})(RenderFx || {});
|
|
4096
4109
|
|
|
4110
|
+
// src/protocol/crc.ts
|
|
4111
|
+
var crc_table = [
|
|
4112
|
+
0,
|
|
4113
|
+
145,
|
|
4114
|
+
227,
|
|
4115
|
+
114,
|
|
4116
|
+
7,
|
|
4117
|
+
150,
|
|
4118
|
+
228,
|
|
4119
|
+
117,
|
|
4120
|
+
14,
|
|
4121
|
+
159,
|
|
4122
|
+
237,
|
|
4123
|
+
124,
|
|
4124
|
+
9,
|
|
4125
|
+
152,
|
|
4126
|
+
234,
|
|
4127
|
+
123,
|
|
4128
|
+
28,
|
|
4129
|
+
141,
|
|
4130
|
+
255,
|
|
4131
|
+
110,
|
|
4132
|
+
27,
|
|
4133
|
+
138,
|
|
4134
|
+
248,
|
|
4135
|
+
105,
|
|
4136
|
+
18,
|
|
4137
|
+
131,
|
|
4138
|
+
241,
|
|
4139
|
+
96,
|
|
4140
|
+
21,
|
|
4141
|
+
132,
|
|
4142
|
+
246,
|
|
4143
|
+
103,
|
|
4144
|
+
56,
|
|
4145
|
+
169,
|
|
4146
|
+
219,
|
|
4147
|
+
74,
|
|
4148
|
+
63,
|
|
4149
|
+
174,
|
|
4150
|
+
220,
|
|
4151
|
+
77,
|
|
4152
|
+
54,
|
|
4153
|
+
167,
|
|
4154
|
+
213,
|
|
4155
|
+
68,
|
|
4156
|
+
49,
|
|
4157
|
+
160,
|
|
4158
|
+
210,
|
|
4159
|
+
67,
|
|
4160
|
+
36,
|
|
4161
|
+
181,
|
|
4162
|
+
199,
|
|
4163
|
+
86,
|
|
4164
|
+
35,
|
|
4165
|
+
178,
|
|
4166
|
+
192,
|
|
4167
|
+
81,
|
|
4168
|
+
42,
|
|
4169
|
+
187,
|
|
4170
|
+
201,
|
|
4171
|
+
88,
|
|
4172
|
+
45,
|
|
4173
|
+
188,
|
|
4174
|
+
206,
|
|
4175
|
+
95,
|
|
4176
|
+
112,
|
|
4177
|
+
225,
|
|
4178
|
+
147,
|
|
4179
|
+
2,
|
|
4180
|
+
119,
|
|
4181
|
+
230,
|
|
4182
|
+
148,
|
|
4183
|
+
5,
|
|
4184
|
+
126,
|
|
4185
|
+
239,
|
|
4186
|
+
157,
|
|
4187
|
+
12,
|
|
4188
|
+
121,
|
|
4189
|
+
232,
|
|
4190
|
+
154,
|
|
4191
|
+
11,
|
|
4192
|
+
108,
|
|
4193
|
+
253,
|
|
4194
|
+
143,
|
|
4195
|
+
30,
|
|
4196
|
+
107,
|
|
4197
|
+
250,
|
|
4198
|
+
136,
|
|
4199
|
+
25,
|
|
4200
|
+
98,
|
|
4201
|
+
243,
|
|
4202
|
+
129,
|
|
4203
|
+
16,
|
|
4204
|
+
101,
|
|
4205
|
+
244,
|
|
4206
|
+
134,
|
|
4207
|
+
23,
|
|
4208
|
+
72,
|
|
4209
|
+
217,
|
|
4210
|
+
171,
|
|
4211
|
+
58,
|
|
4212
|
+
79,
|
|
4213
|
+
222,
|
|
4214
|
+
172,
|
|
4215
|
+
61,
|
|
4216
|
+
70,
|
|
4217
|
+
215,
|
|
4218
|
+
165,
|
|
4219
|
+
52,
|
|
4220
|
+
65,
|
|
4221
|
+
208,
|
|
4222
|
+
162,
|
|
4223
|
+
51,
|
|
4224
|
+
84,
|
|
4225
|
+
197,
|
|
4226
|
+
183,
|
|
4227
|
+
38,
|
|
4228
|
+
83,
|
|
4229
|
+
194,
|
|
4230
|
+
176,
|
|
4231
|
+
33,
|
|
4232
|
+
90,
|
|
4233
|
+
203,
|
|
4234
|
+
185,
|
|
4235
|
+
40,
|
|
4236
|
+
93,
|
|
4237
|
+
204,
|
|
4238
|
+
190,
|
|
4239
|
+
47,
|
|
4240
|
+
224,
|
|
4241
|
+
113,
|
|
4242
|
+
3,
|
|
4243
|
+
146,
|
|
4244
|
+
231,
|
|
4245
|
+
118,
|
|
4246
|
+
4,
|
|
4247
|
+
149,
|
|
4248
|
+
238,
|
|
4249
|
+
127,
|
|
4250
|
+
13,
|
|
4251
|
+
156,
|
|
4252
|
+
233,
|
|
4253
|
+
120,
|
|
4254
|
+
10,
|
|
4255
|
+
155,
|
|
4256
|
+
252,
|
|
4257
|
+
109,
|
|
4258
|
+
31,
|
|
4259
|
+
142,
|
|
4260
|
+
251,
|
|
4261
|
+
106,
|
|
4262
|
+
24,
|
|
4263
|
+
137,
|
|
4264
|
+
242,
|
|
4265
|
+
99,
|
|
4266
|
+
17,
|
|
4267
|
+
128,
|
|
4268
|
+
245,
|
|
4269
|
+
100,
|
|
4270
|
+
22,
|
|
4271
|
+
135,
|
|
4272
|
+
216,
|
|
4273
|
+
73,
|
|
4274
|
+
59,
|
|
4275
|
+
170,
|
|
4276
|
+
223,
|
|
4277
|
+
78,
|
|
4278
|
+
60,
|
|
4279
|
+
173,
|
|
4280
|
+
214,
|
|
4281
|
+
71,
|
|
4282
|
+
53,
|
|
4283
|
+
164,
|
|
4284
|
+
209,
|
|
4285
|
+
64,
|
|
4286
|
+
50,
|
|
4287
|
+
163,
|
|
4288
|
+
196,
|
|
4289
|
+
85,
|
|
4290
|
+
39,
|
|
4291
|
+
182,
|
|
4292
|
+
195,
|
|
4293
|
+
82,
|
|
4294
|
+
32,
|
|
4295
|
+
177,
|
|
4296
|
+
202,
|
|
4297
|
+
91,
|
|
4298
|
+
41,
|
|
4299
|
+
184,
|
|
4300
|
+
205,
|
|
4301
|
+
92,
|
|
4302
|
+
46,
|
|
4303
|
+
191,
|
|
4304
|
+
144,
|
|
4305
|
+
1,
|
|
4306
|
+
115,
|
|
4307
|
+
226,
|
|
4308
|
+
151,
|
|
4309
|
+
6,
|
|
4310
|
+
116,
|
|
4311
|
+
229,
|
|
4312
|
+
158,
|
|
4313
|
+
15,
|
|
4314
|
+
125,
|
|
4315
|
+
236,
|
|
4316
|
+
153,
|
|
4317
|
+
8,
|
|
4318
|
+
122,
|
|
4319
|
+
235,
|
|
4320
|
+
140,
|
|
4321
|
+
29,
|
|
4322
|
+
111,
|
|
4323
|
+
254,
|
|
4324
|
+
139,
|
|
4325
|
+
26,
|
|
4326
|
+
104,
|
|
4327
|
+
249,
|
|
4328
|
+
130,
|
|
4329
|
+
19,
|
|
4330
|
+
97,
|
|
4331
|
+
240,
|
|
4332
|
+
133,
|
|
4333
|
+
20,
|
|
4334
|
+
102,
|
|
4335
|
+
247,
|
|
4336
|
+
168,
|
|
4337
|
+
57,
|
|
4338
|
+
75,
|
|
4339
|
+
218,
|
|
4340
|
+
175,
|
|
4341
|
+
62,
|
|
4342
|
+
76,
|
|
4343
|
+
221,
|
|
4344
|
+
166,
|
|
4345
|
+
55,
|
|
4346
|
+
69,
|
|
4347
|
+
212,
|
|
4348
|
+
161,
|
|
4349
|
+
48,
|
|
4350
|
+
66,
|
|
4351
|
+
211,
|
|
4352
|
+
180,
|
|
4353
|
+
37,
|
|
4354
|
+
86,
|
|
4355
|
+
199,
|
|
4356
|
+
179,
|
|
4357
|
+
34,
|
|
4358
|
+
80,
|
|
4359
|
+
193,
|
|
4360
|
+
186,
|
|
4361
|
+
43,
|
|
4362
|
+
89,
|
|
4363
|
+
200,
|
|
4364
|
+
189,
|
|
4365
|
+
44,
|
|
4366
|
+
94,
|
|
4367
|
+
207
|
|
4368
|
+
];
|
|
4369
|
+
function crc8(data) {
|
|
4370
|
+
let crc = 0;
|
|
4371
|
+
for (let i = 0; i < data.length; i++) {
|
|
4372
|
+
crc = crc_table[(crc ^ data[i]) & 255];
|
|
4373
|
+
}
|
|
4374
|
+
return crc;
|
|
4375
|
+
}
|
|
4376
|
+
|
|
4097
4377
|
// src/protocol/entityFlags.ts
|
|
4098
4378
|
var entityFlags_exports = {};
|
|
4099
4379
|
__export(entityFlags_exports, {
|
|
@@ -4547,6 +4827,244 @@ var NetworkMessageBuilder = class {
|
|
|
4547
4827
|
}
|
|
4548
4828
|
};
|
|
4549
4829
|
|
|
4830
|
+
// src/net/netchan.ts
|
|
4831
|
+
var _NetChan = class _NetChan {
|
|
4832
|
+
constructor() {
|
|
4833
|
+
// +2 for reliable length prefix
|
|
4834
|
+
// Public state
|
|
4835
|
+
this.qport = 0;
|
|
4836
|
+
// qport value to distinguish multiple clients from same IP
|
|
4837
|
+
// Sequencing
|
|
4838
|
+
this.incomingSequence = 0;
|
|
4839
|
+
this.outgoingSequence = 0;
|
|
4840
|
+
this.incomingAcknowledged = 0;
|
|
4841
|
+
// Reliable messaging
|
|
4842
|
+
this.incomingReliableAcknowledged = false;
|
|
4843
|
+
// single bit
|
|
4844
|
+
this.incomingReliableSequence = 0;
|
|
4845
|
+
// last reliable message sequence received
|
|
4846
|
+
this.outgoingReliableSequence = 0;
|
|
4847
|
+
this.reliableLength = 0;
|
|
4848
|
+
// Timing
|
|
4849
|
+
this.lastReceived = 0;
|
|
4850
|
+
this.lastSent = 0;
|
|
4851
|
+
this.remoteAddress = null;
|
|
4852
|
+
this.reliableMessage = new BinaryWriter(_NetChan.MAX_MSGLEN);
|
|
4853
|
+
const now = Date.now();
|
|
4854
|
+
this.lastReceived = now;
|
|
4855
|
+
this.lastSent = now;
|
|
4856
|
+
this.qport = Math.floor(Math.random() * 65536);
|
|
4857
|
+
}
|
|
4858
|
+
/**
|
|
4859
|
+
* Setup the netchan with specific settings
|
|
4860
|
+
*/
|
|
4861
|
+
setup(qport, address = null) {
|
|
4862
|
+
this.qport = qport;
|
|
4863
|
+
this.remoteAddress = address;
|
|
4864
|
+
this.reset();
|
|
4865
|
+
}
|
|
4866
|
+
/**
|
|
4867
|
+
* Reset the netchan state
|
|
4868
|
+
*/
|
|
4869
|
+
reset() {
|
|
4870
|
+
this.incomingSequence = 0;
|
|
4871
|
+
this.outgoingSequence = 0;
|
|
4872
|
+
this.incomingAcknowledged = 0;
|
|
4873
|
+
this.incomingReliableAcknowledged = false;
|
|
4874
|
+
this.incomingReliableSequence = 0;
|
|
4875
|
+
this.outgoingReliableSequence = 0;
|
|
4876
|
+
this.reliableLength = 0;
|
|
4877
|
+
this.reliableMessage.reset();
|
|
4878
|
+
this.lastReceived = Date.now();
|
|
4879
|
+
this.lastSent = Date.now();
|
|
4880
|
+
}
|
|
4881
|
+
/**
|
|
4882
|
+
* Transmits a packet containing reliable and unreliable data
|
|
4883
|
+
*/
|
|
4884
|
+
transmit(unreliableData) {
|
|
4885
|
+
this.outgoingSequence++;
|
|
4886
|
+
this.lastSent = Date.now();
|
|
4887
|
+
const headerSize = _NetChan.PACKET_HEADER;
|
|
4888
|
+
const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
|
|
4889
|
+
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
4890
|
+
if (headerSize + reliableSize + unreliableSize > _NetChan.MAX_MSGLEN) {
|
|
4891
|
+
unreliableSize = _NetChan.MAX_MSGLEN - headerSize - reliableSize;
|
|
4892
|
+
if (unreliableSize < 0) unreliableSize = 0;
|
|
4893
|
+
}
|
|
4894
|
+
const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
|
|
4895
|
+
const view = new DataView(buffer);
|
|
4896
|
+
const result = new Uint8Array(buffer);
|
|
4897
|
+
let sequence = this.outgoingSequence;
|
|
4898
|
+
if (this.reliableLength > 0) {
|
|
4899
|
+
sequence |= 2147483648;
|
|
4900
|
+
if ((this.outgoingReliableSequence & 1) !== 0) {
|
|
4901
|
+
sequence |= 1073741824;
|
|
4902
|
+
}
|
|
4903
|
+
}
|
|
4904
|
+
view.setUint32(0, sequence, true);
|
|
4905
|
+
let ack = this.incomingSequence;
|
|
4906
|
+
if ((this.incomingReliableSequence & 1) !== 0) {
|
|
4907
|
+
ack |= 2147483648;
|
|
4908
|
+
}
|
|
4909
|
+
view.setUint32(4, ack, true);
|
|
4910
|
+
view.setUint16(8, this.qport, true);
|
|
4911
|
+
let offset = headerSize;
|
|
4912
|
+
if (this.reliableLength > 0) {
|
|
4913
|
+
view.setUint16(offset, this.reliableLength, true);
|
|
4914
|
+
offset += 2;
|
|
4915
|
+
const reliableBuffer = this.reliableMessage.getBuffer();
|
|
4916
|
+
const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
|
|
4917
|
+
result.set(reliableBytes, offset);
|
|
4918
|
+
offset += this.reliableLength;
|
|
4919
|
+
}
|
|
4920
|
+
if (unreliableData && unreliableSize > 0) {
|
|
4921
|
+
const chunk = unreliableData.slice(0, unreliableSize);
|
|
4922
|
+
result.set(chunk, offset);
|
|
4923
|
+
}
|
|
4924
|
+
return result;
|
|
4925
|
+
}
|
|
4926
|
+
/**
|
|
4927
|
+
* Processes a received packet
|
|
4928
|
+
* Returns the payload data (reliable + unreliable) to be processed, or null if discarded
|
|
4929
|
+
*/
|
|
4930
|
+
process(packet) {
|
|
4931
|
+
if (packet.length < _NetChan.PACKET_HEADER) {
|
|
4932
|
+
return null;
|
|
4933
|
+
}
|
|
4934
|
+
this.lastReceived = Date.now();
|
|
4935
|
+
const view = new DataView(packet.buffer, packet.byteOffset, packet.byteLength);
|
|
4936
|
+
const sequence = view.getUint32(0, true);
|
|
4937
|
+
const ack = view.getUint32(4, true);
|
|
4938
|
+
const qport = view.getUint16(8, true);
|
|
4939
|
+
if (this.qport !== qport) {
|
|
4940
|
+
return null;
|
|
4941
|
+
}
|
|
4942
|
+
const seqNumberClean = sequence & ~(2147483648 | 1073741824);
|
|
4943
|
+
if ((seqNumberClean - this.incomingSequence | 0) <= 0) {
|
|
4944
|
+
return null;
|
|
4945
|
+
}
|
|
4946
|
+
this.incomingSequence = seqNumberClean;
|
|
4947
|
+
const ackNumber = ack & ~2147483648;
|
|
4948
|
+
const ackReliable = (ack & 2147483648) !== 0;
|
|
4949
|
+
if (ackNumber > this.incomingAcknowledged) {
|
|
4950
|
+
this.incomingAcknowledged = ackNumber;
|
|
4951
|
+
}
|
|
4952
|
+
if (this.reliableLength > 0) {
|
|
4953
|
+
const receivedAckBit = ackReliable ? 1 : 0;
|
|
4954
|
+
const currentReliableBit = this.outgoingReliableSequence & 1;
|
|
4955
|
+
if (receivedAckBit !== currentReliableBit) {
|
|
4956
|
+
this.reliableLength = 0;
|
|
4957
|
+
this.reliableMessage.reset();
|
|
4958
|
+
this.outgoingReliableSequence ^= 1;
|
|
4959
|
+
}
|
|
4960
|
+
}
|
|
4961
|
+
const hasReliableData = (sequence & 2147483648) !== 0;
|
|
4962
|
+
const reliableSeqBit = (sequence & 1073741824) !== 0 ? 1 : 0;
|
|
4963
|
+
let payloadOffset = _NetChan.PACKET_HEADER;
|
|
4964
|
+
let reliableData = null;
|
|
4965
|
+
if (hasReliableData) {
|
|
4966
|
+
if (payloadOffset + 2 > packet.byteLength) return null;
|
|
4967
|
+
const reliableLen = view.getUint16(payloadOffset, true);
|
|
4968
|
+
payloadOffset += 2;
|
|
4969
|
+
const expectedBit = this.incomingReliableSequence & 1;
|
|
4970
|
+
if (reliableSeqBit === expectedBit) {
|
|
4971
|
+
this.incomingReliableSequence++;
|
|
4972
|
+
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
4973
|
+
reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
|
|
4974
|
+
}
|
|
4975
|
+
payloadOffset += reliableLen;
|
|
4976
|
+
}
|
|
4977
|
+
const unreliableData = packet.slice(payloadOffset);
|
|
4978
|
+
if (reliableData && reliableData.length > 0) {
|
|
4979
|
+
const totalLen = reliableData.length + unreliableData.length;
|
|
4980
|
+
const result = new Uint8Array(totalLen);
|
|
4981
|
+
result.set(reliableData, 0);
|
|
4982
|
+
result.set(unreliableData, reliableData.length);
|
|
4983
|
+
return result;
|
|
4984
|
+
}
|
|
4985
|
+
if (unreliableData) {
|
|
4986
|
+
return unreliableData;
|
|
4987
|
+
}
|
|
4988
|
+
return new Uint8Array(0);
|
|
4989
|
+
}
|
|
4990
|
+
/**
|
|
4991
|
+
* Checks if reliable message buffer is empty and ready for new data
|
|
4992
|
+
*/
|
|
4993
|
+
canSendReliable() {
|
|
4994
|
+
return this.reliableLength === 0;
|
|
4995
|
+
}
|
|
4996
|
+
/**
|
|
4997
|
+
* Writes a byte to the reliable message buffer
|
|
4998
|
+
*/
|
|
4999
|
+
writeReliableByte(value) {
|
|
5000
|
+
if (this.reliableLength + 1 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
|
|
5001
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
5002
|
+
}
|
|
5003
|
+
this.reliableMessage.writeByte(value);
|
|
5004
|
+
this.reliableLength++;
|
|
5005
|
+
}
|
|
5006
|
+
/**
|
|
5007
|
+
* Writes a short to the reliable message buffer
|
|
5008
|
+
*/
|
|
5009
|
+
writeReliableShort(value) {
|
|
5010
|
+
if (this.reliableLength + 2 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
|
|
5011
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
5012
|
+
}
|
|
5013
|
+
this.reliableMessage.writeShort(value);
|
|
5014
|
+
this.reliableLength += 2;
|
|
5015
|
+
}
|
|
5016
|
+
/**
|
|
5017
|
+
* Writes a long to the reliable message buffer
|
|
5018
|
+
*/
|
|
5019
|
+
writeReliableLong(value) {
|
|
5020
|
+
if (this.reliableLength + 4 > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
|
|
5021
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
5022
|
+
}
|
|
5023
|
+
this.reliableMessage.writeLong(value);
|
|
5024
|
+
this.reliableLength += 4;
|
|
5025
|
+
}
|
|
5026
|
+
/**
|
|
5027
|
+
* Writes a string to the reliable message buffer
|
|
5028
|
+
*/
|
|
5029
|
+
writeReliableString(value) {
|
|
5030
|
+
const len = value.length + 1;
|
|
5031
|
+
if (this.reliableLength + len > _NetChan.MAX_MSGLEN - _NetChan.HEADER_OVERHEAD) {
|
|
5032
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
5033
|
+
}
|
|
5034
|
+
this.reliableMessage.writeString(value);
|
|
5035
|
+
this.reliableLength += len;
|
|
5036
|
+
}
|
|
5037
|
+
/**
|
|
5038
|
+
* Returns the current reliable data buffer
|
|
5039
|
+
*/
|
|
5040
|
+
getReliableData() {
|
|
5041
|
+
if (this.reliableLength === 0) {
|
|
5042
|
+
return new Uint8Array(0);
|
|
5043
|
+
}
|
|
5044
|
+
const buffer = this.reliableMessage.getBuffer();
|
|
5045
|
+
return buffer.subarray(0, this.reliableLength);
|
|
5046
|
+
}
|
|
5047
|
+
/**
|
|
5048
|
+
* Checks if we need to send a keepalive packet
|
|
5049
|
+
*/
|
|
5050
|
+
needsKeepalive(currentTime) {
|
|
5051
|
+
return currentTime - this.lastSent > 1e3;
|
|
5052
|
+
}
|
|
5053
|
+
/**
|
|
5054
|
+
* Checks if the connection has timed out
|
|
5055
|
+
*/
|
|
5056
|
+
isTimedOut(currentTime, timeoutMs = 3e4) {
|
|
5057
|
+
return currentTime - this.lastReceived > timeoutMs;
|
|
5058
|
+
}
|
|
5059
|
+
};
|
|
5060
|
+
// Constants from net_chan.c
|
|
5061
|
+
_NetChan.MAX_MSGLEN = 1400;
|
|
5062
|
+
_NetChan.FRAGMENT_SIZE = 1024;
|
|
5063
|
+
_NetChan.PACKET_HEADER = 10;
|
|
5064
|
+
// sequence(4) + ack(4) + qport(2)
|
|
5065
|
+
_NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
|
|
5066
|
+
var NetChan = _NetChan;
|
|
5067
|
+
|
|
4550
5068
|
// src/items/weapons.ts
|
|
4551
5069
|
var WeaponId = /* @__PURE__ */ ((WeaponId2) => {
|
|
4552
5070
|
WeaponId2["Blaster"] = "blaster";
|
|
@@ -4644,11 +5162,47 @@ var WEAPON_AMMO_MAP = {
|
|
|
4644
5162
|
["disruptor" /* Disruptor */]: 10 /* Disruptor */,
|
|
4645
5163
|
["trap" /* Trap */]: 7 /* Trap */
|
|
4646
5164
|
};
|
|
5165
|
+
|
|
5166
|
+
// src/audio/constants.ts
|
|
5167
|
+
var MAX_SOUND_CHANNELS = 32;
|
|
5168
|
+
var SoundChannel = /* @__PURE__ */ ((SoundChannel2) => {
|
|
5169
|
+
SoundChannel2[SoundChannel2["Auto"] = 0] = "Auto";
|
|
5170
|
+
SoundChannel2[SoundChannel2["Weapon"] = 1] = "Weapon";
|
|
5171
|
+
SoundChannel2[SoundChannel2["Voice"] = 2] = "Voice";
|
|
5172
|
+
SoundChannel2[SoundChannel2["Item"] = 3] = "Item";
|
|
5173
|
+
SoundChannel2[SoundChannel2["Body"] = 4] = "Body";
|
|
5174
|
+
SoundChannel2[SoundChannel2["Aux"] = 5] = "Aux";
|
|
5175
|
+
SoundChannel2[SoundChannel2["Footstep"] = 6] = "Footstep";
|
|
5176
|
+
SoundChannel2[SoundChannel2["Aux3"] = 7] = "Aux3";
|
|
5177
|
+
SoundChannel2[SoundChannel2["NoPhsAdd"] = 8] = "NoPhsAdd";
|
|
5178
|
+
SoundChannel2[SoundChannel2["Reliable"] = 16] = "Reliable";
|
|
5179
|
+
SoundChannel2[SoundChannel2["ForcePos"] = 32] = "ForcePos";
|
|
5180
|
+
return SoundChannel2;
|
|
5181
|
+
})(SoundChannel || {});
|
|
5182
|
+
var ATTN_LOOP_NONE = -1;
|
|
5183
|
+
var ATTN_NONE = 0;
|
|
5184
|
+
var ATTN_NORM = 1;
|
|
5185
|
+
var ATTN_IDLE = 2;
|
|
5186
|
+
var ATTN_STATIC = 3;
|
|
5187
|
+
var SOUND_FULLVOLUME = 80;
|
|
5188
|
+
var SOUND_LOOP_ATTENUATE = 3e-3;
|
|
5189
|
+
function attenuationToDistanceMultiplier(attenuation) {
|
|
5190
|
+
return attenuation === ATTN_STATIC ? attenuation * 1e-3 : attenuation * 5e-4;
|
|
5191
|
+
}
|
|
5192
|
+
function calculateMaxAudibleDistance(attenuation) {
|
|
5193
|
+
const distMult = attenuationToDistanceMultiplier(attenuation);
|
|
5194
|
+
return distMult <= 0 ? Number.POSITIVE_INFINITY : SOUND_FULLVOLUME + 1 / distMult;
|
|
5195
|
+
}
|
|
4647
5196
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4648
5197
|
0 && (module.exports = {
|
|
4649
5198
|
AMMO_MAX,
|
|
4650
5199
|
AMMO_TYPE_COUNT,
|
|
4651
5200
|
ANORMS,
|
|
5201
|
+
ATTN_IDLE,
|
|
5202
|
+
ATTN_LOOP_NONE,
|
|
5203
|
+
ATTN_NONE,
|
|
5204
|
+
ATTN_NORM,
|
|
5205
|
+
ATTN_STATIC,
|
|
4652
5206
|
AmmoItemId,
|
|
4653
5207
|
AmmoType,
|
|
4654
5208
|
BinaryStream,
|
|
@@ -4737,6 +5291,7 @@ var WEAPON_AMMO_MAP = {
|
|
|
4737
5291
|
MAX_QPATH,
|
|
4738
5292
|
MAX_SHADOW_LIGHTS,
|
|
4739
5293
|
MAX_SOUNDS,
|
|
5294
|
+
MAX_SOUND_CHANNELS,
|
|
4740
5295
|
MAX_STRING_CHARS,
|
|
4741
5296
|
MAX_STRING_TOKENS,
|
|
4742
5297
|
MAX_TOKEN_CHARS,
|
|
@@ -4760,6 +5315,7 @@ var WEAPON_AMMO_MAP = {
|
|
|
4760
5315
|
NUM_BITS_FOR_AMMO,
|
|
4761
5316
|
NUM_BITS_FOR_POWERUP,
|
|
4762
5317
|
NUM_POWERUP_STATS,
|
|
5318
|
+
NetChan,
|
|
4763
5319
|
NetworkMessageBuilder,
|
|
4764
5320
|
PITCH,
|
|
4765
5321
|
POWERUP_MAX,
|
|
@@ -4776,6 +5332,8 @@ var WEAPON_AMMO_MAP = {
|
|
|
4776
5332
|
Replay,
|
|
4777
5333
|
SLIDEMOVE_BLOCKED_FLOOR,
|
|
4778
5334
|
SLIDEMOVE_BLOCKED_WALL,
|
|
5335
|
+
SOUND_FULLVOLUME,
|
|
5336
|
+
SOUND_LOOP_ATTENUATE,
|
|
4779
5337
|
STOP_EPSILON,
|
|
4780
5338
|
SURF_ALPHATEST,
|
|
4781
5339
|
SURF_FLOWING,
|
|
@@ -4792,6 +5350,7 @@ var WEAPON_AMMO_MAP = {
|
|
|
4792
5350
|
SURF_TRANS66,
|
|
4793
5351
|
SURF_WARP,
|
|
4794
5352
|
ServerCommand,
|
|
5353
|
+
SoundChannel,
|
|
4795
5354
|
TempEntity,
|
|
4796
5355
|
UPDATE_BACKUP,
|
|
4797
5356
|
WEAPON_AMMO_MAP,
|
|
@@ -4817,12 +5376,14 @@ var WEAPON_AMMO_MAP = {
|
|
|
4817
5376
|
applyPmoveFriction,
|
|
4818
5377
|
applyPmoveWaterMove,
|
|
4819
5378
|
assertContract,
|
|
5379
|
+
attenuationToDistanceMultiplier,
|
|
4820
5380
|
boxContents,
|
|
4821
5381
|
boxOnPlaneSide,
|
|
4822
5382
|
boxesIntersect,
|
|
4823
5383
|
buildAirGroundWish,
|
|
4824
5384
|
buildCollisionModel,
|
|
4825
5385
|
buildWaterWish,
|
|
5386
|
+
calculateMaxAudibleDistance,
|
|
4826
5387
|
categorizePosition,
|
|
4827
5388
|
checkDuckState,
|
|
4828
5389
|
checkJump,
|
|
@@ -4838,6 +5399,7 @@ var WEAPON_AMMO_MAP = {
|
|
|
4838
5399
|
concatRotationMatrices,
|
|
4839
5400
|
configStringSize,
|
|
4840
5401
|
copyVec3,
|
|
5402
|
+
crc8,
|
|
4841
5403
|
createDefaultTrace,
|
|
4842
5404
|
createEmptyBounds3,
|
|
4843
5405
|
createMat4Identity,
|