quake2ts 0.0.276 → 0.0.281
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.map +1 -1
- 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 +9 -9
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- 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 +3 -3
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +2237 -1199
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +2093 -1048
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/combat/weapons/animation.d.ts +3 -2
- package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/bfg.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/bfg.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/blaster.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/blaster.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/chaingun.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/firing.d.ts +10 -0
- package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/frames.d.ts +43 -0
- package/packages/game/dist/types/combat/weapons/frames.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/hyperblaster.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/hyperblaster.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/machinegun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/machinegun.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/railgun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/railgun.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/rocket.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/rocket.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/shotgun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/shotgun.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/supershotgun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/supershotgun.d.ts.map +1 -0
- package/packages/game/dist/types/entities/entity.d.ts +17 -0
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
- package/packages/game/dist/types/entities/gibs.d.ts +10 -2
- package/packages/game/dist/types/entities/gibs.d.ts.map +1 -1
- package/packages/game/dist/types/entities/misc.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +2 -1
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/items.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 +26 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +25 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- 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/shared/dist/types/protocol/renderFx.d.ts +22 -0
- package/packages/shared/dist/types/protocol/renderFx.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
// ../shared/dist/esm/index.js
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __esm = (fn, res) => function __init() {
|
|
4
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
5
|
+
};
|
|
3
6
|
var __export = (target, all) => {
|
|
4
7
|
for (var name in all)
|
|
5
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
6
9
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var DEG_TO_RAD = Math.PI / 180;
|
|
10
|
+
|
|
11
|
+
// ../shared/dist/esm/index.js
|
|
10
12
|
function copyVec3(a) {
|
|
11
13
|
return { x: a.x, y: a.y, z: a.z };
|
|
12
14
|
}
|
|
@@ -153,11 +155,6 @@ function rotatePointAroundVector(dir, point, degrees) {
|
|
|
153
155
|
z: rot[2][0] * point.x + rot[2][1] * point.y + rot[2][2] * point.z
|
|
154
156
|
};
|
|
155
157
|
}
|
|
156
|
-
var PITCH = 0;
|
|
157
|
-
var YAW = 1;
|
|
158
|
-
var ROLL = 2;
|
|
159
|
-
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
160
|
-
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
161
158
|
function axisComponent(vec, axis) {
|
|
162
159
|
switch (axis) {
|
|
163
160
|
case PITCH:
|
|
@@ -243,247 +240,9 @@ function vectorToAngles(vec) {
|
|
|
243
240
|
}
|
|
244
241
|
return { x: -pitch, y: yaw, z: 0 };
|
|
245
242
|
}
|
|
246
|
-
var STATE_SIZE = 624;
|
|
247
|
-
var MIDDLE_WORD = 397;
|
|
248
|
-
var MATRIX_A = 2567483615;
|
|
249
|
-
var UPPER_MASK = 2147483648;
|
|
250
|
-
var LOWER_MASK = 2147483647;
|
|
251
|
-
var TWO_POW_32 = 4294967296;
|
|
252
|
-
var MersenneTwister19937 = class {
|
|
253
|
-
constructor(seed = 5489) {
|
|
254
|
-
this.state = new Uint32Array(STATE_SIZE);
|
|
255
|
-
this.index = STATE_SIZE;
|
|
256
|
-
this.seed(seed);
|
|
257
|
-
}
|
|
258
|
-
seed(seed) {
|
|
259
|
-
this.state[0] = seed >>> 0;
|
|
260
|
-
for (let i = 1; i < STATE_SIZE; i++) {
|
|
261
|
-
const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
|
|
262
|
-
const next = Math.imul(prev >>> 0, 1812433253) + i;
|
|
263
|
-
this.state[i] = next >>> 0;
|
|
264
|
-
}
|
|
265
|
-
this.index = STATE_SIZE;
|
|
266
|
-
}
|
|
267
|
-
nextUint32() {
|
|
268
|
-
if (this.index >= STATE_SIZE) {
|
|
269
|
-
this.twist();
|
|
270
|
-
}
|
|
271
|
-
let y = this.state[this.index++];
|
|
272
|
-
y ^= y >>> 11;
|
|
273
|
-
y ^= y << 7 & 2636928640;
|
|
274
|
-
y ^= y << 15 & 4022730752;
|
|
275
|
-
y ^= y >>> 18;
|
|
276
|
-
return y >>> 0;
|
|
277
|
-
}
|
|
278
|
-
twist() {
|
|
279
|
-
for (let i = 0; i < STATE_SIZE; i++) {
|
|
280
|
-
const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
|
|
281
|
-
let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
|
|
282
|
-
if ((y & 1) !== 0) {
|
|
283
|
-
next ^= MATRIX_A;
|
|
284
|
-
}
|
|
285
|
-
this.state[i] = next >>> 0;
|
|
286
|
-
}
|
|
287
|
-
this.index = 0;
|
|
288
|
-
}
|
|
289
|
-
getState() {
|
|
290
|
-
return {
|
|
291
|
-
index: this.index,
|
|
292
|
-
state: Array.from(this.state)
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
setState(snapshot) {
|
|
296
|
-
if (snapshot.state.length !== STATE_SIZE) {
|
|
297
|
-
throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
|
|
298
|
-
}
|
|
299
|
-
this.index = snapshot.index;
|
|
300
|
-
this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
var RandomGenerator = class {
|
|
304
|
-
constructor(options = {}) {
|
|
305
|
-
this.mt = new MersenneTwister19937(options.seed);
|
|
306
|
-
}
|
|
307
|
-
seed(seed) {
|
|
308
|
-
this.mt.seed(seed);
|
|
309
|
-
}
|
|
310
|
-
/** Uniform float in [0, 1). */
|
|
311
|
-
frandom() {
|
|
312
|
-
return this.mt.nextUint32() / TWO_POW_32;
|
|
313
|
-
}
|
|
314
|
-
/** Uniform float in [min, max). */
|
|
315
|
-
frandomRange(minInclusive, maxExclusive) {
|
|
316
|
-
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
317
|
-
}
|
|
318
|
-
/** Uniform float in [0, max). */
|
|
319
|
-
frandomMax(maxExclusive) {
|
|
320
|
-
return this.frandomRange(0, maxExclusive);
|
|
321
|
-
}
|
|
322
|
-
/** Uniform float in [-1, 1). */
|
|
323
|
-
crandom() {
|
|
324
|
-
return this.frandomRange(-1, 1);
|
|
325
|
-
}
|
|
326
|
-
/** Uniform float in (-1, 1). */
|
|
327
|
-
crandomOpen() {
|
|
328
|
-
const epsilon = Number.EPSILON;
|
|
329
|
-
return this.frandomRange(-1 + epsilon, 1);
|
|
330
|
-
}
|
|
331
|
-
/** Raw uint32 sample. */
|
|
332
|
-
irandomUint32() {
|
|
333
|
-
return this.mt.nextUint32();
|
|
334
|
-
}
|
|
335
|
-
/** Uniform integer in [min, max). */
|
|
336
|
-
irandomRange(minInclusive, maxExclusive) {
|
|
337
|
-
if (maxExclusive - minInclusive <= 1) {
|
|
338
|
-
return minInclusive;
|
|
339
|
-
}
|
|
340
|
-
const span = maxExclusive - minInclusive;
|
|
341
|
-
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
342
|
-
let sample;
|
|
343
|
-
do {
|
|
344
|
-
sample = this.mt.nextUint32();
|
|
345
|
-
} while (sample >= limit);
|
|
346
|
-
return minInclusive + sample % span;
|
|
347
|
-
}
|
|
348
|
-
/** Uniform integer in [0, max). */
|
|
349
|
-
irandom(maxExclusive) {
|
|
350
|
-
if (maxExclusive <= 0) {
|
|
351
|
-
return 0;
|
|
352
|
-
}
|
|
353
|
-
return this.irandomRange(0, maxExclusive);
|
|
354
|
-
}
|
|
355
|
-
/** Uniform time in milliseconds [min, max). */
|
|
356
|
-
randomTimeRange(minMs, maxMs) {
|
|
357
|
-
if (maxMs <= minMs) {
|
|
358
|
-
return minMs;
|
|
359
|
-
}
|
|
360
|
-
return this.irandomRange(minMs, maxMs);
|
|
361
|
-
}
|
|
362
|
-
/** Uniform time in milliseconds [0, max). */
|
|
363
|
-
randomTime(maxMs) {
|
|
364
|
-
return this.irandom(maxMs);
|
|
365
|
-
}
|
|
366
|
-
randomIndex(container) {
|
|
367
|
-
return this.irandom(container.length);
|
|
368
|
-
}
|
|
369
|
-
getState() {
|
|
370
|
-
return { mt: this.mt.getState() };
|
|
371
|
-
}
|
|
372
|
-
setState(snapshot) {
|
|
373
|
-
this.mt.setState(snapshot.mt);
|
|
374
|
-
}
|
|
375
|
-
};
|
|
376
243
|
function createRandomGenerator(options) {
|
|
377
244
|
return new RandomGenerator(options);
|
|
378
245
|
}
|
|
379
|
-
var CONTENTS_SOLID = 1 << 0;
|
|
380
|
-
var CONTENTS_WINDOW = 1 << 1;
|
|
381
|
-
var CONTENTS_AUX = 1 << 2;
|
|
382
|
-
var CONTENTS_LAVA = 1 << 3;
|
|
383
|
-
var CONTENTS_SLIME = 1 << 4;
|
|
384
|
-
var CONTENTS_WATER = 1 << 5;
|
|
385
|
-
var CONTENTS_MIST = 1 << 6;
|
|
386
|
-
var CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
387
|
-
var CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
388
|
-
var CONTENTS_AREAPORTAL = 1 << 15;
|
|
389
|
-
var CONTENTS_PLAYERCLIP = 1 << 16;
|
|
390
|
-
var CONTENTS_MONSTERCLIP = 1 << 17;
|
|
391
|
-
var CONTENTS_CURRENT_0 = 1 << 18;
|
|
392
|
-
var CONTENTS_CURRENT_90 = 1 << 19;
|
|
393
|
-
var CONTENTS_CURRENT_180 = 1 << 20;
|
|
394
|
-
var CONTENTS_CURRENT_270 = 1 << 21;
|
|
395
|
-
var CONTENTS_CURRENT_UP = 1 << 22;
|
|
396
|
-
var CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
397
|
-
var CONTENTS_ORIGIN = 1 << 24;
|
|
398
|
-
var CONTENTS_MONSTER = 1 << 25;
|
|
399
|
-
var CONTENTS_DEADMONSTER = 1 << 26;
|
|
400
|
-
var CONTENTS_DETAIL = 1 << 27;
|
|
401
|
-
var CONTENTS_TRANSLUCENT = 1 << 28;
|
|
402
|
-
var CONTENTS_LADDER = 1 << 29;
|
|
403
|
-
var CONTENTS_PLAYER = 1 << 30;
|
|
404
|
-
var CONTENTS_PROJECTILE = 1 << 31;
|
|
405
|
-
var SURF_LIGHT = 1 << 0;
|
|
406
|
-
var SURF_SLICK = 1 << 1;
|
|
407
|
-
var SURF_SKY = 1 << 2;
|
|
408
|
-
var SURF_WARP = 1 << 3;
|
|
409
|
-
var SURF_TRANS33 = 1 << 4;
|
|
410
|
-
var SURF_TRANS66 = 1 << 5;
|
|
411
|
-
var SURF_FLOWING = 1 << 6;
|
|
412
|
-
var SURF_NODRAW = 1 << 7;
|
|
413
|
-
var SURF_ALPHATEST = 1 << 25;
|
|
414
|
-
var SURF_N64_UV = 1 << 28;
|
|
415
|
-
var SURF_N64_SCROLL_X = 1 << 29;
|
|
416
|
-
var SURF_N64_SCROLL_Y = 1 << 30;
|
|
417
|
-
var SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
418
|
-
var MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
419
|
-
var MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
420
|
-
var MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
421
|
-
var MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
422
|
-
var MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
423
|
-
var MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
424
|
-
var MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
425
|
-
var MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
426
|
-
var MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
427
|
-
var MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
428
|
-
var MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
429
|
-
var MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
430
|
-
var MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
431
|
-
var MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
432
|
-
var CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
433
|
-
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
434
|
-
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
435
|
-
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
436
|
-
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
437
|
-
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
438
|
-
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
439
|
-
return CvarFlags2;
|
|
440
|
-
})(CvarFlags || {});
|
|
441
|
-
var MAX_CLIENTS = 256;
|
|
442
|
-
var MAX_LIGHTSTYLES = 256;
|
|
443
|
-
var MAX_MODELS = 8192;
|
|
444
|
-
var MAX_SOUNDS = 2048;
|
|
445
|
-
var MAX_IMAGES = 512;
|
|
446
|
-
var MAX_ITEMS = 256;
|
|
447
|
-
var MAX_GENERAL = MAX_CLIENTS * 2;
|
|
448
|
-
var MAX_SHADOW_LIGHTS = 256;
|
|
449
|
-
var MAX_WHEEL_ITEMS = 32;
|
|
450
|
-
var ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
451
|
-
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
452
|
-
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
453
|
-
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
454
|
-
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
455
|
-
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
456
|
-
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
457
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
458
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
459
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
460
|
-
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
461
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
462
|
-
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
463
|
-
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
464
|
-
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
465
|
-
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
466
|
-
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
467
|
-
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
468
|
-
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
469
|
-
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
470
|
-
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
471
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
472
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
473
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
474
|
-
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
475
|
-
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
476
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
477
|
-
return ConfigStringIndex2;
|
|
478
|
-
})(ConfigStringIndex || {});
|
|
479
|
-
var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
480
|
-
var replay_exports = {};
|
|
481
|
-
__export(replay_exports, {
|
|
482
|
-
addReplayFrame: () => addReplayFrame,
|
|
483
|
-
createReplaySession: () => createReplaySession,
|
|
484
|
-
deserializeReplay: () => deserializeReplay,
|
|
485
|
-
serializeReplay: () => serializeReplay
|
|
486
|
-
});
|
|
487
246
|
function serializeReplay(session) {
|
|
488
247
|
return JSON.stringify(session, null, 2);
|
|
489
248
|
}
|
|
@@ -512,13 +271,6 @@ function addReplayFrame(session, cmd, serverFrame, startTime) {
|
|
|
512
271
|
timestamp: Date.now() - startTime
|
|
513
272
|
});
|
|
514
273
|
}
|
|
515
|
-
var WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
516
|
-
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
517
|
-
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
518
|
-
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
519
|
-
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
520
|
-
return WaterLevel4;
|
|
521
|
-
})(WaterLevel || {});
|
|
522
274
|
function applyPmoveFriction(params) {
|
|
523
275
|
const {
|
|
524
276
|
velocity,
|
|
@@ -617,111 +369,6 @@ function buildWaterWish(params) {
|
|
|
617
369
|
wishspeed
|
|
618
370
|
};
|
|
619
371
|
}
|
|
620
|
-
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
621
|
-
var ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
622
|
-
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
623
|
-
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
624
|
-
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
625
|
-
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
626
|
-
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
627
|
-
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
628
|
-
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
629
|
-
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
630
|
-
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
631
|
-
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
632
|
-
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
633
|
-
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
634
|
-
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
635
|
-
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
636
|
-
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
637
|
-
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
638
|
-
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
639
|
-
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
640
|
-
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
641
|
-
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
642
|
-
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
643
|
-
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
644
|
-
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
645
|
-
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
646
|
-
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
647
|
-
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
648
|
-
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
649
|
-
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
650
|
-
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
651
|
-
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
652
|
-
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
653
|
-
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
654
|
-
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
655
|
-
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
656
|
-
return ServerCommand22;
|
|
657
|
-
})(ServerCommand || {});
|
|
658
|
-
var TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
659
|
-
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
660
|
-
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
661
|
-
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
662
|
-
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
663
|
-
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
664
|
-
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
665
|
-
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
666
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
667
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
668
|
-
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
669
|
-
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
670
|
-
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
671
|
-
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
672
|
-
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
673
|
-
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
674
|
-
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
675
|
-
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
676
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
677
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
678
|
-
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
679
|
-
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
680
|
-
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
681
|
-
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
682
|
-
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
683
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
684
|
-
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
685
|
-
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
686
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
687
|
-
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
688
|
-
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
689
|
-
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
690
|
-
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
691
|
-
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
692
|
-
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
693
|
-
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
694
|
-
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
695
|
-
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
696
|
-
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
697
|
-
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
698
|
-
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
699
|
-
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
700
|
-
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
701
|
-
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
702
|
-
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
703
|
-
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
704
|
-
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
705
|
-
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
706
|
-
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
707
|
-
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
708
|
-
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
709
|
-
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
710
|
-
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
711
|
-
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
712
|
-
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
713
|
-
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
714
|
-
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
715
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
716
|
-
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
717
|
-
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
718
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
719
|
-
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
720
|
-
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
721
|
-
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
722
|
-
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
723
|
-
return TempEntity2;
|
|
724
|
-
})(TempEntity || {});
|
|
725
372
|
function toSigned16(val) {
|
|
726
373
|
return val << 16 >> 16;
|
|
727
374
|
}
|
|
@@ -767,191 +414,6 @@ function setCompressedInteger(stats, startIndex, id, count, bitsPerValue) {
|
|
|
767
414
|
const valueToWrite = base & ~mask | count << bitShift & mask;
|
|
768
415
|
writeUint16LE(stats, startIndex, byteOffset, valueToWrite & 65535);
|
|
769
416
|
}
|
|
770
|
-
var PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
771
|
-
PowerupId22["QuadDamage"] = "quad";
|
|
772
|
-
PowerupId22["Invulnerability"] = "invulnerability";
|
|
773
|
-
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
774
|
-
PowerupId22["Rebreather"] = "rebreather";
|
|
775
|
-
PowerupId22["Silencer"] = "silencer";
|
|
776
|
-
PowerupId22["PowerScreen"] = "power_screen";
|
|
777
|
-
PowerupId22["PowerShield"] = "power_shield";
|
|
778
|
-
PowerupId22["QuadFire"] = "quad_fire";
|
|
779
|
-
PowerupId22["Invisibility"] = "invisibility";
|
|
780
|
-
PowerupId22["Bandolier"] = "bandolier";
|
|
781
|
-
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
782
|
-
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
783
|
-
PowerupId22["DoubleDamage"] = "double_damage";
|
|
784
|
-
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
785
|
-
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
786
|
-
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
787
|
-
PowerupId22["Doppelganger"] = "doppelganger";
|
|
788
|
-
PowerupId22["TagToken"] = "tag_token";
|
|
789
|
-
PowerupId22["TechResistance"] = "tech_resistance";
|
|
790
|
-
PowerupId22["TechStrength"] = "tech_strength";
|
|
791
|
-
PowerupId22["TechHaste"] = "tech_haste";
|
|
792
|
-
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
793
|
-
PowerupId22["Flashlight"] = "flashlight";
|
|
794
|
-
PowerupId22["Compass"] = "compass";
|
|
795
|
-
return PowerupId22;
|
|
796
|
-
})(PowerupId || {});
|
|
797
|
-
var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
798
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
799
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
800
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
801
|
-
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
802
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
803
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
804
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
805
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
806
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
807
|
-
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
808
|
-
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
809
|
-
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
810
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
811
|
-
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
812
|
-
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
813
|
-
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
814
|
-
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
815
|
-
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
816
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
817
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
818
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
819
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
820
|
-
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
821
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
822
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
823
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
824
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
825
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
826
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
827
|
-
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
828
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
829
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
830
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
831
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
832
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
833
|
-
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
834
|
-
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
835
|
-
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
836
|
-
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
837
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
838
|
-
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
839
|
-
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
840
|
-
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
841
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
842
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
843
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
844
|
-
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
845
|
-
return PlayerStat2;
|
|
846
|
-
})(PlayerStat || {});
|
|
847
|
-
var AMMO_MAX = 12;
|
|
848
|
-
var NUM_BITS_FOR_AMMO = 9;
|
|
849
|
-
var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
850
|
-
var POWERUP_MAX = 23;
|
|
851
|
-
var NUM_BITS_FOR_POWERUP = 2;
|
|
852
|
-
var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
853
|
-
var POWERUP_STAT_MAP = {
|
|
854
|
-
[
|
|
855
|
-
"power_screen"
|
|
856
|
-
/* PowerScreen */
|
|
857
|
-
]: 0,
|
|
858
|
-
[
|
|
859
|
-
"power_shield"
|
|
860
|
-
/* PowerShield */
|
|
861
|
-
]: 1,
|
|
862
|
-
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
863
|
-
[
|
|
864
|
-
"quad"
|
|
865
|
-
/* QuadDamage */
|
|
866
|
-
]: 3,
|
|
867
|
-
[
|
|
868
|
-
"quad_fire"
|
|
869
|
-
/* QuadFire */
|
|
870
|
-
]: 4,
|
|
871
|
-
[
|
|
872
|
-
"invulnerability"
|
|
873
|
-
/* Invulnerability */
|
|
874
|
-
]: 5,
|
|
875
|
-
[
|
|
876
|
-
"invisibility"
|
|
877
|
-
/* Invisibility */
|
|
878
|
-
]: 6,
|
|
879
|
-
[
|
|
880
|
-
"silencer"
|
|
881
|
-
/* Silencer */
|
|
882
|
-
]: 7,
|
|
883
|
-
[
|
|
884
|
-
"rebreather"
|
|
885
|
-
/* Rebreather */
|
|
886
|
-
]: 8,
|
|
887
|
-
[
|
|
888
|
-
"enviro_suit"
|
|
889
|
-
/* EnviroSuit */
|
|
890
|
-
]: 9,
|
|
891
|
-
[
|
|
892
|
-
"bandolier"
|
|
893
|
-
/* Bandolier */
|
|
894
|
-
]: 10,
|
|
895
|
-
// Placeholder/Map mismatch handling?
|
|
896
|
-
[
|
|
897
|
-
"ammo_pack"
|
|
898
|
-
/* AmmoPack */
|
|
899
|
-
]: 10,
|
|
900
|
-
// Original reused indices or had gaps?
|
|
901
|
-
[
|
|
902
|
-
"ir_goggles"
|
|
903
|
-
/* IRGoggles */
|
|
904
|
-
]: 11,
|
|
905
|
-
[
|
|
906
|
-
"double_damage"
|
|
907
|
-
/* DoubleDamage */
|
|
908
|
-
]: 12,
|
|
909
|
-
[
|
|
910
|
-
"sphere_vengeance"
|
|
911
|
-
/* SphereVengeance */
|
|
912
|
-
]: 13,
|
|
913
|
-
[
|
|
914
|
-
"sphere_hunter"
|
|
915
|
-
/* SphereHunter */
|
|
916
|
-
]: 14,
|
|
917
|
-
[
|
|
918
|
-
"sphere_defender"
|
|
919
|
-
/* SphereDefender */
|
|
920
|
-
]: 15,
|
|
921
|
-
[
|
|
922
|
-
"doppelganger"
|
|
923
|
-
/* Doppelganger */
|
|
924
|
-
]: 16,
|
|
925
|
-
[
|
|
926
|
-
"flashlight"
|
|
927
|
-
/* Flashlight */
|
|
928
|
-
]: 17,
|
|
929
|
-
[
|
|
930
|
-
"compass"
|
|
931
|
-
/* Compass */
|
|
932
|
-
]: 18,
|
|
933
|
-
[
|
|
934
|
-
"tech_resistance"
|
|
935
|
-
/* TechResistance */
|
|
936
|
-
]: 19,
|
|
937
|
-
[
|
|
938
|
-
"tech_strength"
|
|
939
|
-
/* TechStrength */
|
|
940
|
-
]: 20,
|
|
941
|
-
[
|
|
942
|
-
"tech_haste"
|
|
943
|
-
/* TechHaste */
|
|
944
|
-
]: 21,
|
|
945
|
-
[
|
|
946
|
-
"tech_regeneration"
|
|
947
|
-
/* TechRegeneration */
|
|
948
|
-
]: 22,
|
|
949
|
-
// Add missing mappings to avoid runtime lookups failing for new types
|
|
950
|
-
[
|
|
951
|
-
"tag_token"
|
|
952
|
-
/* TagToken */
|
|
953
|
-
]: -1
|
|
954
|
-
};
|
|
955
417
|
function G_SetAmmoStat(stats, ammoId, count) {
|
|
956
418
|
if (ammoId < 0 || ammoId >= AMMO_MAX) return;
|
|
957
419
|
let val = count;
|
|
@@ -972,228 +434,800 @@ function G_SetPowerupStat(stats, powerupId, val) {
|
|
|
972
434
|
if (safeVal < 0) safeVal = 0;
|
|
973
435
|
setCompressedInteger(stats, 41, index, safeVal, NUM_BITS_FOR_POWERUP);
|
|
974
436
|
}
|
|
975
|
-
var entityFlags_exports
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
437
|
+
var __defProp2, __export2, ZERO_VEC3, STOP_EPSILON, DEG_TO_RAD, PITCH, YAW, ROLL, DEG2RAD_FACTOR, RAD2DEG_FACTOR, STATE_SIZE, MIDDLE_WORD, MATRIX_A, UPPER_MASK, LOWER_MASK, TWO_POW_32, MersenneTwister19937, RandomGenerator, CONTENTS_SOLID, CONTENTS_WINDOW, CONTENTS_AUX, CONTENTS_LAVA, CONTENTS_SLIME, CONTENTS_WATER, CONTENTS_MIST, CONTENTS_NO_WATERJUMP, CONTENTS_PROJECTILECLIP, CONTENTS_AREAPORTAL, CONTENTS_PLAYERCLIP, CONTENTS_MONSTERCLIP, CONTENTS_CURRENT_0, CONTENTS_CURRENT_90, CONTENTS_CURRENT_180, CONTENTS_CURRENT_270, CONTENTS_CURRENT_UP, CONTENTS_CURRENT_DOWN, CONTENTS_ORIGIN, CONTENTS_MONSTER, CONTENTS_DEADMONSTER, CONTENTS_DETAIL, CONTENTS_TRANSLUCENT, CONTENTS_LADDER, CONTENTS_PLAYER, CONTENTS_PROJECTILE, SURF_LIGHT, SURF_SLICK, SURF_SKY, SURF_WARP, SURF_TRANS33, SURF_TRANS66, SURF_FLOWING, SURF_NODRAW, SURF_ALPHATEST, SURF_N64_UV, SURF_N64_SCROLL_X, SURF_N64_SCROLL_Y, SURF_N64_SCROLL_FLIP, MASK_SOLID, MASK_PLAYERSOLID, MASK_DEADSOLID, MASK_MONSTERSOLID, MASK_WATER, MASK_OPAQUE, MASK_SHOT, MASK_CURRENT, MASK_BLOCK_SIGHT, MASK_NAV_SOLID, MASK_LADDER_NAV_SOLID, MASK_WALK_NAV_SOLID, MASK_PROJECTILE, MAX_CHECKCOUNT, CvarFlags, MAX_CLIENTS, MAX_LIGHTSTYLES, MAX_MODELS, MAX_SOUNDS, MAX_IMAGES, MAX_ITEMS, MAX_GENERAL, MAX_SHADOW_LIGHTS, MAX_WHEEL_ITEMS, ConfigStringIndex, MAX_CONFIGSTRINGS, replay_exports, WaterLevel, WATERJUMP_CLEAR, ServerCommand, TempEntity, MZ_BLASTER, MZ_MACHINEGUN, MZ_SHOTGUN, MZ_CHAINGUN1, MZ_RAILGUN, MZ_ROCKET, MZ_GRENADE, MZ_SSHOTGUN, MZ_BFG, MZ_HYPERBLASTER, PowerupId, PlayerStat, AMMO_MAX, NUM_BITS_FOR_AMMO, NUM_AMMO_STATS, POWERUP_MAX, NUM_BITS_FOR_POWERUP, NUM_POWERUP_STATS, POWERUP_STAT_MAP, RenderFx, entityFlags_exports, U_NUMBER, U_MODEL, U_SOUND, U_ORIGIN1, U_ORIGIN2, U_ORIGIN3, U_ANGLE1, U_ANGLE2, U_ANGLE3, U_FRAME, U_SKIN, U_EFFECTS, U_RENDERFX, U_SOLID, U_EVENT, U_MOREBITS, U_MODEL2, U_MODEL3, U_MODEL4, U_REMOVE, FRAMETIME, MASK_WATER2, WaterLevel3, categorizePosition2, checkWater, applyPmove, WeaponId, AmmoType, AMMO_TYPE_COUNT, AmmoItemId, WEAPON_WHEEL_ORDER;
|
|
438
|
+
var init_esm = __esm({
|
|
439
|
+
"../shared/dist/esm/index.js"() {
|
|
440
|
+
"use strict";
|
|
441
|
+
__defProp2 = Object.defineProperty;
|
|
442
|
+
__export2 = (target, all) => {
|
|
443
|
+
for (var name in all)
|
|
444
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
445
|
+
};
|
|
446
|
+
ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
447
|
+
STOP_EPSILON = 0.1;
|
|
448
|
+
DEG_TO_RAD = Math.PI / 180;
|
|
449
|
+
PITCH = 0;
|
|
450
|
+
YAW = 1;
|
|
451
|
+
ROLL = 2;
|
|
452
|
+
DEG2RAD_FACTOR = Math.PI / 180;
|
|
453
|
+
RAD2DEG_FACTOR = 180 / Math.PI;
|
|
454
|
+
STATE_SIZE = 624;
|
|
455
|
+
MIDDLE_WORD = 397;
|
|
456
|
+
MATRIX_A = 2567483615;
|
|
457
|
+
UPPER_MASK = 2147483648;
|
|
458
|
+
LOWER_MASK = 2147483647;
|
|
459
|
+
TWO_POW_32 = 4294967296;
|
|
460
|
+
MersenneTwister19937 = class {
|
|
461
|
+
constructor(seed = 5489) {
|
|
462
|
+
this.state = new Uint32Array(STATE_SIZE);
|
|
463
|
+
this.index = STATE_SIZE;
|
|
464
|
+
this.seed(seed);
|
|
465
|
+
}
|
|
466
|
+
seed(seed) {
|
|
467
|
+
this.state[0] = seed >>> 0;
|
|
468
|
+
for (let i = 1; i < STATE_SIZE; i++) {
|
|
469
|
+
const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
|
|
470
|
+
const next = Math.imul(prev >>> 0, 1812433253) + i;
|
|
471
|
+
this.state[i] = next >>> 0;
|
|
472
|
+
}
|
|
473
|
+
this.index = STATE_SIZE;
|
|
474
|
+
}
|
|
475
|
+
nextUint32() {
|
|
476
|
+
if (this.index >= STATE_SIZE) {
|
|
477
|
+
this.twist();
|
|
478
|
+
}
|
|
479
|
+
let y = this.state[this.index++];
|
|
480
|
+
y ^= y >>> 11;
|
|
481
|
+
y ^= y << 7 & 2636928640;
|
|
482
|
+
y ^= y << 15 & 4022730752;
|
|
483
|
+
y ^= y >>> 18;
|
|
484
|
+
return y >>> 0;
|
|
485
|
+
}
|
|
486
|
+
twist() {
|
|
487
|
+
for (let i = 0; i < STATE_SIZE; i++) {
|
|
488
|
+
const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
|
|
489
|
+
let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
|
|
490
|
+
if ((y & 1) !== 0) {
|
|
491
|
+
next ^= MATRIX_A;
|
|
492
|
+
}
|
|
493
|
+
this.state[i] = next >>> 0;
|
|
494
|
+
}
|
|
495
|
+
this.index = 0;
|
|
496
|
+
}
|
|
497
|
+
getState() {
|
|
498
|
+
return {
|
|
499
|
+
index: this.index,
|
|
500
|
+
state: Array.from(this.state)
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
setState(snapshot) {
|
|
504
|
+
if (snapshot.state.length !== STATE_SIZE) {
|
|
505
|
+
throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
|
|
506
|
+
}
|
|
507
|
+
this.index = snapshot.index;
|
|
508
|
+
this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
RandomGenerator = class {
|
|
512
|
+
constructor(options = {}) {
|
|
513
|
+
this.mt = new MersenneTwister19937(options.seed);
|
|
514
|
+
}
|
|
515
|
+
seed(seed) {
|
|
516
|
+
this.mt.seed(seed);
|
|
517
|
+
}
|
|
518
|
+
/** Uniform float in [0, 1). */
|
|
519
|
+
frandom() {
|
|
520
|
+
return this.mt.nextUint32() / TWO_POW_32;
|
|
521
|
+
}
|
|
522
|
+
/** Uniform float in [min, max). */
|
|
523
|
+
frandomRange(minInclusive, maxExclusive) {
|
|
524
|
+
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
525
|
+
}
|
|
526
|
+
/** Uniform float in [0, max). */
|
|
527
|
+
frandomMax(maxExclusive) {
|
|
528
|
+
return this.frandomRange(0, maxExclusive);
|
|
529
|
+
}
|
|
530
|
+
/** Uniform float in [-1, 1). */
|
|
531
|
+
crandom() {
|
|
532
|
+
return this.frandomRange(-1, 1);
|
|
533
|
+
}
|
|
534
|
+
/** Uniform float in (-1, 1). */
|
|
535
|
+
crandomOpen() {
|
|
536
|
+
const epsilon = Number.EPSILON;
|
|
537
|
+
return this.frandomRange(-1 + epsilon, 1);
|
|
538
|
+
}
|
|
539
|
+
/** Raw uint32 sample. */
|
|
540
|
+
irandomUint32() {
|
|
541
|
+
return this.mt.nextUint32();
|
|
542
|
+
}
|
|
543
|
+
/** Uniform integer in [min, max). */
|
|
544
|
+
irandomRange(minInclusive, maxExclusive) {
|
|
545
|
+
if (maxExclusive - minInclusive <= 1) {
|
|
546
|
+
return minInclusive;
|
|
547
|
+
}
|
|
548
|
+
const span = maxExclusive - minInclusive;
|
|
549
|
+
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
550
|
+
let sample;
|
|
551
|
+
do {
|
|
552
|
+
sample = this.mt.nextUint32();
|
|
553
|
+
} while (sample >= limit);
|
|
554
|
+
return minInclusive + sample % span;
|
|
555
|
+
}
|
|
556
|
+
/** Uniform integer in [0, max). */
|
|
557
|
+
irandom(maxExclusive) {
|
|
558
|
+
if (maxExclusive <= 0) {
|
|
559
|
+
return 0;
|
|
560
|
+
}
|
|
561
|
+
return this.irandomRange(0, maxExclusive);
|
|
562
|
+
}
|
|
563
|
+
/** Uniform time in milliseconds [min, max). */
|
|
564
|
+
randomTimeRange(minMs, maxMs) {
|
|
565
|
+
if (maxMs <= minMs) {
|
|
566
|
+
return minMs;
|
|
567
|
+
}
|
|
568
|
+
return this.irandomRange(minMs, maxMs);
|
|
569
|
+
}
|
|
570
|
+
/** Uniform time in milliseconds [0, max). */
|
|
571
|
+
randomTime(maxMs) {
|
|
572
|
+
return this.irandom(maxMs);
|
|
573
|
+
}
|
|
574
|
+
randomIndex(container) {
|
|
575
|
+
return this.irandom(container.length);
|
|
576
|
+
}
|
|
577
|
+
getState() {
|
|
578
|
+
return { mt: this.mt.getState() };
|
|
579
|
+
}
|
|
580
|
+
setState(snapshot) {
|
|
581
|
+
this.mt.setState(snapshot.mt);
|
|
582
|
+
}
|
|
583
|
+
};
|
|
584
|
+
CONTENTS_SOLID = 1 << 0;
|
|
585
|
+
CONTENTS_WINDOW = 1 << 1;
|
|
586
|
+
CONTENTS_AUX = 1 << 2;
|
|
587
|
+
CONTENTS_LAVA = 1 << 3;
|
|
588
|
+
CONTENTS_SLIME = 1 << 4;
|
|
589
|
+
CONTENTS_WATER = 1 << 5;
|
|
590
|
+
CONTENTS_MIST = 1 << 6;
|
|
591
|
+
CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
592
|
+
CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
593
|
+
CONTENTS_AREAPORTAL = 1 << 15;
|
|
594
|
+
CONTENTS_PLAYERCLIP = 1 << 16;
|
|
595
|
+
CONTENTS_MONSTERCLIP = 1 << 17;
|
|
596
|
+
CONTENTS_CURRENT_0 = 1 << 18;
|
|
597
|
+
CONTENTS_CURRENT_90 = 1 << 19;
|
|
598
|
+
CONTENTS_CURRENT_180 = 1 << 20;
|
|
599
|
+
CONTENTS_CURRENT_270 = 1 << 21;
|
|
600
|
+
CONTENTS_CURRENT_UP = 1 << 22;
|
|
601
|
+
CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
602
|
+
CONTENTS_ORIGIN = 1 << 24;
|
|
603
|
+
CONTENTS_MONSTER = 1 << 25;
|
|
604
|
+
CONTENTS_DEADMONSTER = 1 << 26;
|
|
605
|
+
CONTENTS_DETAIL = 1 << 27;
|
|
606
|
+
CONTENTS_TRANSLUCENT = 1 << 28;
|
|
607
|
+
CONTENTS_LADDER = 1 << 29;
|
|
608
|
+
CONTENTS_PLAYER = 1 << 30;
|
|
609
|
+
CONTENTS_PROJECTILE = 1 << 31;
|
|
610
|
+
SURF_LIGHT = 1 << 0;
|
|
611
|
+
SURF_SLICK = 1 << 1;
|
|
612
|
+
SURF_SKY = 1 << 2;
|
|
613
|
+
SURF_WARP = 1 << 3;
|
|
614
|
+
SURF_TRANS33 = 1 << 4;
|
|
615
|
+
SURF_TRANS66 = 1 << 5;
|
|
616
|
+
SURF_FLOWING = 1 << 6;
|
|
617
|
+
SURF_NODRAW = 1 << 7;
|
|
618
|
+
SURF_ALPHATEST = 1 << 25;
|
|
619
|
+
SURF_N64_UV = 1 << 28;
|
|
620
|
+
SURF_N64_SCROLL_X = 1 << 29;
|
|
621
|
+
SURF_N64_SCROLL_Y = 1 << 30;
|
|
622
|
+
SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
623
|
+
MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
624
|
+
MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
625
|
+
MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
626
|
+
MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
627
|
+
MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
628
|
+
MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
629
|
+
MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
630
|
+
MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
631
|
+
MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
632
|
+
MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
633
|
+
MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
634
|
+
MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
635
|
+
MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
636
|
+
MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
637
|
+
CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
638
|
+
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
639
|
+
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
640
|
+
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
641
|
+
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
642
|
+
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
643
|
+
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
644
|
+
return CvarFlags2;
|
|
645
|
+
})(CvarFlags || {});
|
|
646
|
+
MAX_CLIENTS = 256;
|
|
647
|
+
MAX_LIGHTSTYLES = 256;
|
|
648
|
+
MAX_MODELS = 8192;
|
|
649
|
+
MAX_SOUNDS = 2048;
|
|
650
|
+
MAX_IMAGES = 512;
|
|
651
|
+
MAX_ITEMS = 256;
|
|
652
|
+
MAX_GENERAL = MAX_CLIENTS * 2;
|
|
653
|
+
MAX_SHADOW_LIGHTS = 256;
|
|
654
|
+
MAX_WHEEL_ITEMS = 32;
|
|
655
|
+
ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
656
|
+
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
657
|
+
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
658
|
+
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
659
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
660
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
661
|
+
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
662
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
663
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
664
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
665
|
+
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
666
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
667
|
+
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
668
|
+
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
669
|
+
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
670
|
+
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
671
|
+
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
672
|
+
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
673
|
+
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
674
|
+
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
675
|
+
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
676
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
677
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
678
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
679
|
+
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
680
|
+
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
681
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
682
|
+
return ConfigStringIndex2;
|
|
683
|
+
})(ConfigStringIndex || {});
|
|
684
|
+
MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
685
|
+
replay_exports = {};
|
|
686
|
+
__export2(replay_exports, {
|
|
687
|
+
addReplayFrame: () => addReplayFrame,
|
|
688
|
+
createReplaySession: () => createReplaySession,
|
|
689
|
+
deserializeReplay: () => deserializeReplay,
|
|
690
|
+
serializeReplay: () => serializeReplay
|
|
691
|
+
});
|
|
692
|
+
WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
693
|
+
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
694
|
+
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
695
|
+
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
696
|
+
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
697
|
+
return WaterLevel4;
|
|
698
|
+
})(WaterLevel || {});
|
|
699
|
+
WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
700
|
+
ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
701
|
+
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
702
|
+
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
703
|
+
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
704
|
+
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
705
|
+
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
706
|
+
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
707
|
+
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
708
|
+
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
709
|
+
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
710
|
+
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
711
|
+
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
712
|
+
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
713
|
+
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
714
|
+
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
715
|
+
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
716
|
+
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
717
|
+
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
718
|
+
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
719
|
+
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
720
|
+
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
721
|
+
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
722
|
+
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
723
|
+
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
724
|
+
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
725
|
+
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
726
|
+
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
727
|
+
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
728
|
+
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
729
|
+
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
730
|
+
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
731
|
+
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
732
|
+
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
733
|
+
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
734
|
+
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
735
|
+
return ServerCommand22;
|
|
736
|
+
})(ServerCommand || {});
|
|
737
|
+
TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
738
|
+
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
739
|
+
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
740
|
+
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
741
|
+
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
742
|
+
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
743
|
+
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
744
|
+
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
745
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
746
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
747
|
+
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
748
|
+
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
749
|
+
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
750
|
+
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
751
|
+
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
752
|
+
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
753
|
+
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
754
|
+
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
755
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
756
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
757
|
+
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
758
|
+
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
759
|
+
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
760
|
+
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
761
|
+
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
762
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
763
|
+
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
764
|
+
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
765
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
766
|
+
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
767
|
+
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
768
|
+
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
769
|
+
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
770
|
+
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
771
|
+
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
772
|
+
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
773
|
+
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
774
|
+
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
775
|
+
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
776
|
+
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
777
|
+
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
778
|
+
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
779
|
+
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
780
|
+
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
781
|
+
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
782
|
+
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
783
|
+
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
784
|
+
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
785
|
+
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
786
|
+
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
787
|
+
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
788
|
+
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
789
|
+
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
790
|
+
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
791
|
+
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
792
|
+
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
793
|
+
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
794
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
795
|
+
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
796
|
+
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
797
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
798
|
+
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
799
|
+
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
800
|
+
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
801
|
+
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
802
|
+
return TempEntity2;
|
|
803
|
+
})(TempEntity || {});
|
|
804
|
+
MZ_BLASTER = 0;
|
|
805
|
+
MZ_MACHINEGUN = 1;
|
|
806
|
+
MZ_SHOTGUN = 2;
|
|
807
|
+
MZ_CHAINGUN1 = 3;
|
|
808
|
+
MZ_RAILGUN = 6;
|
|
809
|
+
MZ_ROCKET = 7;
|
|
810
|
+
MZ_GRENADE = 8;
|
|
811
|
+
MZ_SSHOTGUN = 11;
|
|
812
|
+
MZ_BFG = 12;
|
|
813
|
+
MZ_HYPERBLASTER = 13;
|
|
814
|
+
PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
815
|
+
PowerupId22["QuadDamage"] = "quad";
|
|
816
|
+
PowerupId22["Invulnerability"] = "invulnerability";
|
|
817
|
+
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
818
|
+
PowerupId22["Rebreather"] = "rebreather";
|
|
819
|
+
PowerupId22["Silencer"] = "silencer";
|
|
820
|
+
PowerupId22["PowerScreen"] = "power_screen";
|
|
821
|
+
PowerupId22["PowerShield"] = "power_shield";
|
|
822
|
+
PowerupId22["QuadFire"] = "quad_fire";
|
|
823
|
+
PowerupId22["Invisibility"] = "invisibility";
|
|
824
|
+
PowerupId22["Bandolier"] = "bandolier";
|
|
825
|
+
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
826
|
+
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
827
|
+
PowerupId22["DoubleDamage"] = "double_damage";
|
|
828
|
+
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
829
|
+
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
830
|
+
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
831
|
+
PowerupId22["Doppelganger"] = "doppelganger";
|
|
832
|
+
PowerupId22["TagToken"] = "tag_token";
|
|
833
|
+
PowerupId22["TechResistance"] = "tech_resistance";
|
|
834
|
+
PowerupId22["TechStrength"] = "tech_strength";
|
|
835
|
+
PowerupId22["TechHaste"] = "tech_haste";
|
|
836
|
+
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
837
|
+
PowerupId22["Flashlight"] = "flashlight";
|
|
838
|
+
PowerupId22["Compass"] = "compass";
|
|
839
|
+
return PowerupId22;
|
|
840
|
+
})(PowerupId || {});
|
|
841
|
+
PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
842
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
843
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
844
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
845
|
+
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
846
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
847
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
848
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
849
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
850
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
851
|
+
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
852
|
+
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
853
|
+
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
854
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
855
|
+
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
856
|
+
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
857
|
+
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
858
|
+
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
859
|
+
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
860
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
861
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
862
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
863
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
864
|
+
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
865
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
866
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
867
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
868
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
869
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
870
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
871
|
+
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
872
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
873
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
874
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
875
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
876
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
877
|
+
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
878
|
+
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
879
|
+
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
880
|
+
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
881
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
882
|
+
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
883
|
+
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
884
|
+
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
885
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
886
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
887
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
888
|
+
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
889
|
+
return PlayerStat2;
|
|
890
|
+
})(PlayerStat || {});
|
|
891
|
+
AMMO_MAX = 12;
|
|
892
|
+
NUM_BITS_FOR_AMMO = 9;
|
|
893
|
+
NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
894
|
+
POWERUP_MAX = 23;
|
|
895
|
+
NUM_BITS_FOR_POWERUP = 2;
|
|
896
|
+
NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
897
|
+
POWERUP_STAT_MAP = {
|
|
898
|
+
[
|
|
899
|
+
"power_screen"
|
|
900
|
+
/* PowerScreen */
|
|
901
|
+
]: 0,
|
|
902
|
+
[
|
|
903
|
+
"power_shield"
|
|
904
|
+
/* PowerShield */
|
|
905
|
+
]: 1,
|
|
906
|
+
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
907
|
+
[
|
|
908
|
+
"quad"
|
|
909
|
+
/* QuadDamage */
|
|
910
|
+
]: 3,
|
|
911
|
+
[
|
|
912
|
+
"quad_fire"
|
|
913
|
+
/* QuadFire */
|
|
914
|
+
]: 4,
|
|
915
|
+
[
|
|
916
|
+
"invulnerability"
|
|
917
|
+
/* Invulnerability */
|
|
918
|
+
]: 5,
|
|
919
|
+
[
|
|
920
|
+
"invisibility"
|
|
921
|
+
/* Invisibility */
|
|
922
|
+
]: 6,
|
|
923
|
+
[
|
|
924
|
+
"silencer"
|
|
925
|
+
/* Silencer */
|
|
926
|
+
]: 7,
|
|
927
|
+
[
|
|
928
|
+
"rebreather"
|
|
929
|
+
/* Rebreather */
|
|
930
|
+
]: 8,
|
|
931
|
+
[
|
|
932
|
+
"enviro_suit"
|
|
933
|
+
/* EnviroSuit */
|
|
934
|
+
]: 9,
|
|
935
|
+
[
|
|
936
|
+
"bandolier"
|
|
937
|
+
/* Bandolier */
|
|
938
|
+
]: 10,
|
|
939
|
+
// Placeholder/Map mismatch handling?
|
|
940
|
+
[
|
|
941
|
+
"ammo_pack"
|
|
942
|
+
/* AmmoPack */
|
|
943
|
+
]: 10,
|
|
944
|
+
// Original reused indices or had gaps?
|
|
945
|
+
[
|
|
946
|
+
"ir_goggles"
|
|
947
|
+
/* IRGoggles */
|
|
948
|
+
]: 11,
|
|
949
|
+
[
|
|
950
|
+
"double_damage"
|
|
951
|
+
/* DoubleDamage */
|
|
952
|
+
]: 12,
|
|
953
|
+
[
|
|
954
|
+
"sphere_vengeance"
|
|
955
|
+
/* SphereVengeance */
|
|
956
|
+
]: 13,
|
|
957
|
+
[
|
|
958
|
+
"sphere_hunter"
|
|
959
|
+
/* SphereHunter */
|
|
960
|
+
]: 14,
|
|
961
|
+
[
|
|
962
|
+
"sphere_defender"
|
|
963
|
+
/* SphereDefender */
|
|
964
|
+
]: 15,
|
|
965
|
+
[
|
|
966
|
+
"doppelganger"
|
|
967
|
+
/* Doppelganger */
|
|
968
|
+
]: 16,
|
|
969
|
+
[
|
|
970
|
+
"flashlight"
|
|
971
|
+
/* Flashlight */
|
|
972
|
+
]: 17,
|
|
973
|
+
[
|
|
974
|
+
"compass"
|
|
975
|
+
/* Compass */
|
|
976
|
+
]: 18,
|
|
977
|
+
[
|
|
978
|
+
"tech_resistance"
|
|
979
|
+
/* TechResistance */
|
|
980
|
+
]: 19,
|
|
981
|
+
[
|
|
982
|
+
"tech_strength"
|
|
983
|
+
/* TechStrength */
|
|
984
|
+
]: 20,
|
|
985
|
+
[
|
|
986
|
+
"tech_haste"
|
|
987
|
+
/* TechHaste */
|
|
988
|
+
]: 21,
|
|
989
|
+
[
|
|
990
|
+
"tech_regeneration"
|
|
991
|
+
/* TechRegeneration */
|
|
992
|
+
]: 22,
|
|
993
|
+
// Add missing mappings to avoid runtime lookups failing for new types
|
|
994
|
+
[
|
|
995
|
+
"tag_token"
|
|
996
|
+
/* TagToken */
|
|
997
|
+
]: -1
|
|
998
|
+
};
|
|
999
|
+
RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
1000
|
+
RenderFx2[RenderFx2["MinLight"] = 1] = "MinLight";
|
|
1001
|
+
RenderFx2[RenderFx2["ViewerModel"] = 2] = "ViewerModel";
|
|
1002
|
+
RenderFx2[RenderFx2["WeaponModel"] = 4] = "WeaponModel";
|
|
1003
|
+
RenderFx2[RenderFx2["FullBright"] = 8] = "FullBright";
|
|
1004
|
+
RenderFx2[RenderFx2["DepthHack"] = 16] = "DepthHack";
|
|
1005
|
+
RenderFx2[RenderFx2["Translucent"] = 32] = "Translucent";
|
|
1006
|
+
RenderFx2[RenderFx2["FrameLerp"] = 64] = "FrameLerp";
|
|
1007
|
+
RenderFx2[RenderFx2["Beam"] = 128] = "Beam";
|
|
1008
|
+
RenderFx2[RenderFx2["CustomLight"] = 256] = "CustomLight";
|
|
1009
|
+
RenderFx2[RenderFx2["Glow"] = 512] = "Glow";
|
|
1010
|
+
RenderFx2[RenderFx2["ShellRed"] = 1024] = "ShellRed";
|
|
1011
|
+
RenderFx2[RenderFx2["ShellGreen"] = 2048] = "ShellGreen";
|
|
1012
|
+
RenderFx2[RenderFx2["ShellBlue"] = 4096] = "ShellBlue";
|
|
1013
|
+
RenderFx2[RenderFx2["IrVisible"] = 32768] = "IrVisible";
|
|
1014
|
+
RenderFx2[RenderFx2["ShellDouble"] = 65536] = "ShellDouble";
|
|
1015
|
+
RenderFx2[RenderFx2["ShellHalfDam"] = 131072] = "ShellHalfDam";
|
|
1016
|
+
RenderFx2[RenderFx2["MinLightPlus"] = 262144] = "MinLightPlus";
|
|
1017
|
+
RenderFx2[RenderFx2["ExtraLight"] = 524288] = "ExtraLight";
|
|
1018
|
+
RenderFx2[RenderFx2["BeamLightning"] = 1048576] = "BeamLightning";
|
|
1019
|
+
return RenderFx2;
|
|
1020
|
+
})(RenderFx || {});
|
|
1021
|
+
entityFlags_exports = {};
|
|
1022
|
+
__export2(entityFlags_exports, {
|
|
1023
|
+
U_ANGLE1: () => U_ANGLE1,
|
|
1024
|
+
U_ANGLE2: () => U_ANGLE2,
|
|
1025
|
+
U_ANGLE3: () => U_ANGLE3,
|
|
1026
|
+
U_EFFECTS: () => U_EFFECTS,
|
|
1027
|
+
U_EVENT: () => U_EVENT,
|
|
1028
|
+
U_FRAME: () => U_FRAME,
|
|
1029
|
+
U_MODEL: () => U_MODEL,
|
|
1030
|
+
U_MODEL2: () => U_MODEL2,
|
|
1031
|
+
U_MODEL3: () => U_MODEL3,
|
|
1032
|
+
U_MODEL4: () => U_MODEL4,
|
|
1033
|
+
U_MOREBITS: () => U_MOREBITS,
|
|
1034
|
+
U_NUMBER: () => U_NUMBER,
|
|
1035
|
+
U_ORIGIN1: () => U_ORIGIN1,
|
|
1036
|
+
U_ORIGIN2: () => U_ORIGIN2,
|
|
1037
|
+
U_ORIGIN3: () => U_ORIGIN3,
|
|
1038
|
+
U_REMOVE: () => U_REMOVE,
|
|
1039
|
+
U_RENDERFX: () => U_RENDERFX,
|
|
1040
|
+
U_SKIN: () => U_SKIN,
|
|
1041
|
+
U_SOLID: () => U_SOLID,
|
|
1042
|
+
U_SOUND: () => U_SOUND
|
|
1043
|
+
});
|
|
1044
|
+
U_NUMBER = 1 << 0;
|
|
1045
|
+
U_MODEL = 1 << 1;
|
|
1046
|
+
U_SOUND = 1 << 2;
|
|
1047
|
+
U_ORIGIN1 = 1 << 3;
|
|
1048
|
+
U_ORIGIN2 = 1 << 4;
|
|
1049
|
+
U_ORIGIN3 = 1 << 5;
|
|
1050
|
+
U_ANGLE1 = 1 << 6;
|
|
1051
|
+
U_ANGLE2 = 1 << 7;
|
|
1052
|
+
U_ANGLE3 = 1 << 8;
|
|
1053
|
+
U_FRAME = 1 << 9;
|
|
1054
|
+
U_SKIN = 1 << 10;
|
|
1055
|
+
U_EFFECTS = 1 << 11;
|
|
1056
|
+
U_RENDERFX = 1 << 12;
|
|
1057
|
+
U_SOLID = 1 << 13;
|
|
1058
|
+
U_EVENT = 1 << 14;
|
|
1059
|
+
U_MOREBITS = 1 << 15;
|
|
1060
|
+
U_MODEL2 = 1 << 0;
|
|
1061
|
+
U_MODEL3 = 1 << 1;
|
|
1062
|
+
U_MODEL4 = 1 << 2;
|
|
1063
|
+
U_REMOVE = 32768;
|
|
1064
|
+
FRAMETIME = 0.025;
|
|
1065
|
+
MASK_WATER2 = 33554432;
|
|
1066
|
+
WaterLevel3 = {
|
|
1067
|
+
None: 0,
|
|
1068
|
+
Feet: 1,
|
|
1069
|
+
Waist: 2,
|
|
1070
|
+
Under: 3
|
|
1071
|
+
};
|
|
1072
|
+
categorizePosition2 = (state, trace) => {
|
|
1073
|
+
const point = { ...state.origin };
|
|
1074
|
+
point.z -= 0.25;
|
|
1075
|
+
const traceResult = trace(state.origin, point);
|
|
1076
|
+
return {
|
|
1077
|
+
...state,
|
|
1078
|
+
onGround: traceResult.fraction < 1
|
|
1079
|
+
};
|
|
1080
|
+
};
|
|
1081
|
+
checkWater = (state, pointContents2) => {
|
|
1082
|
+
const point = { ...state.origin };
|
|
1083
|
+
const { mins, maxs } = state;
|
|
1084
|
+
point.z = state.origin.z + mins.z + 1;
|
|
1085
|
+
const contents = pointContents2(point);
|
|
1086
|
+
if (!(contents & MASK_WATER2)) {
|
|
1087
|
+
return { ...state, waterLevel: WaterLevel3.None };
|
|
1088
|
+
}
|
|
1089
|
+
let waterLevel = WaterLevel3.Feet;
|
|
1090
|
+
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1091
|
+
point.z = waist;
|
|
1092
|
+
const waistContents = pointContents2(point);
|
|
1093
|
+
if (waistContents & MASK_WATER2) {
|
|
1094
|
+
waterLevel = WaterLevel3.Waist;
|
|
1095
|
+
const head = state.origin.z + 22;
|
|
1096
|
+
point.z = head;
|
|
1097
|
+
const headContents = pointContents2(point);
|
|
1098
|
+
if (headContents & MASK_WATER2) {
|
|
1099
|
+
waterLevel = WaterLevel3.Under;
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
return { ...state, waterLevel };
|
|
1103
|
+
};
|
|
1104
|
+
applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1105
|
+
let newState = { ...state };
|
|
1106
|
+
newState = categorizePosition2(newState, trace);
|
|
1107
|
+
newState = checkWater(newState, pointContents2);
|
|
1108
|
+
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1109
|
+
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1110
|
+
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1111
|
+
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1112
|
+
y: viewAngles.y,
|
|
1113
|
+
z: viewAngles.z
|
|
1114
|
+
};
|
|
1115
|
+
const { forward, right } = angleVectors(adjustedAngles);
|
|
1116
|
+
const frictionedVelocity = applyPmoveFriction({
|
|
1117
|
+
velocity,
|
|
1118
|
+
frametime: FRAMETIME,
|
|
1119
|
+
onGround,
|
|
1120
|
+
groundIsSlick: false,
|
|
1121
|
+
onLadder: false,
|
|
1122
|
+
waterlevel: waterLevel,
|
|
1123
|
+
pmFriction: 6,
|
|
1124
|
+
pmStopSpeed: 100,
|
|
1125
|
+
pmWaterFriction: 1
|
|
1126
|
+
});
|
|
1127
|
+
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1128
|
+
forward,
|
|
1129
|
+
right,
|
|
1130
|
+
cmd,
|
|
1131
|
+
maxSpeed: 320
|
|
1132
|
+
}) : buildAirGroundWish({
|
|
1133
|
+
forward,
|
|
1134
|
+
right,
|
|
1135
|
+
cmd,
|
|
1136
|
+
maxSpeed: 320
|
|
1137
|
+
});
|
|
1138
|
+
const finalVelocity = applyPmoveAccelerate({
|
|
1139
|
+
velocity: frictionedVelocity,
|
|
1140
|
+
wishdir: wish.wishdir,
|
|
1141
|
+
wishspeed: wish.wishspeed,
|
|
1142
|
+
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1143
|
+
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1144
|
+
frametime: FRAMETIME
|
|
1145
|
+
});
|
|
1146
|
+
const traceResult = trace(origin, {
|
|
1147
|
+
x: origin.x + finalVelocity.x * FRAMETIME,
|
|
1148
|
+
y: origin.y + finalVelocity.y * FRAMETIME,
|
|
1149
|
+
z: origin.z + finalVelocity.z * FRAMETIME
|
|
1150
|
+
});
|
|
1151
|
+
return {
|
|
1152
|
+
...newState,
|
|
1153
|
+
origin: traceResult.endpos,
|
|
1154
|
+
velocity: finalVelocity
|
|
1155
|
+
};
|
|
1156
|
+
};
|
|
1157
|
+
WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1158
|
+
WeaponId22["Blaster"] = "blaster";
|
|
1159
|
+
WeaponId22["Shotgun"] = "shotgun";
|
|
1160
|
+
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1161
|
+
WeaponId22["Machinegun"] = "machinegun";
|
|
1162
|
+
WeaponId22["Chaingun"] = "chaingun";
|
|
1163
|
+
WeaponId22["HandGrenade"] = "grenades";
|
|
1164
|
+
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1165
|
+
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1166
|
+
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1167
|
+
WeaponId22["Railgun"] = "railgun";
|
|
1168
|
+
WeaponId22["BFG10K"] = "bfg10k";
|
|
1169
|
+
WeaponId22["Grapple"] = "grapple";
|
|
1170
|
+
WeaponId22["ChainFist"] = "chainfist";
|
|
1171
|
+
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1172
|
+
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1173
|
+
WeaponId22["IonRipper"] = "ionripper";
|
|
1174
|
+
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1175
|
+
WeaponId22["Phalanx"] = "phalanx";
|
|
1176
|
+
WeaponId22["Disruptor"] = "disruptor";
|
|
1177
|
+
WeaponId22["Trap"] = "trap";
|
|
1178
|
+
return WeaponId22;
|
|
1179
|
+
})(WeaponId || {});
|
|
1180
|
+
AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1181
|
+
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1182
|
+
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1183
|
+
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1184
|
+
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1185
|
+
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1186
|
+
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1187
|
+
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1188
|
+
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1189
|
+
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1190
|
+
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1191
|
+
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1192
|
+
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1193
|
+
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1194
|
+
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1195
|
+
return AmmoType22;
|
|
1196
|
+
})(AmmoType || {});
|
|
1197
|
+
AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1198
|
+
AmmoItemId = /* @__PURE__ */ ((AmmoItemId22) => {
|
|
1199
|
+
AmmoItemId22["Shells"] = "ammo_shells";
|
|
1200
|
+
AmmoItemId22["Bullets"] = "ammo_bullets";
|
|
1201
|
+
AmmoItemId22["Rockets"] = "ammo_rockets";
|
|
1202
|
+
AmmoItemId22["Grenades"] = "ammo_grenades";
|
|
1203
|
+
AmmoItemId22["Cells"] = "ammo_cells";
|
|
1204
|
+
AmmoItemId22["Slugs"] = "ammo_slugs";
|
|
1205
|
+
AmmoItemId22["MagSlugs"] = "ammo_magslug";
|
|
1206
|
+
AmmoItemId22["Flechettes"] = "ammo_flechettes";
|
|
1207
|
+
AmmoItemId22["Disruptor"] = "ammo_disruptor";
|
|
1208
|
+
AmmoItemId22["Tesla"] = "ammo_tesla";
|
|
1209
|
+
AmmoItemId22["Trap"] = "ammo_trap";
|
|
1210
|
+
AmmoItemId22["Prox"] = "ammo_prox";
|
|
1211
|
+
return AmmoItemId22;
|
|
1212
|
+
})(AmmoItemId || {});
|
|
1213
|
+
WEAPON_WHEEL_ORDER = [
|
|
1214
|
+
"blaster",
|
|
1215
|
+
"shotgun",
|
|
1216
|
+
"supershotgun",
|
|
1217
|
+
"machinegun",
|
|
1218
|
+
"chaingun",
|
|
1219
|
+
"grenadelauncher",
|
|
1220
|
+
"rocketlauncher",
|
|
1221
|
+
"grenades",
|
|
1222
|
+
"hyperblaster",
|
|
1223
|
+
"railgun",
|
|
1224
|
+
"bfg10k"
|
|
1225
|
+
/* BFG10K */
|
|
1226
|
+
];
|
|
1227
|
+
}
|
|
997
1228
|
});
|
|
998
|
-
var U_NUMBER = 1 << 0;
|
|
999
|
-
var U_MODEL = 1 << 1;
|
|
1000
|
-
var U_SOUND = 1 << 2;
|
|
1001
|
-
var U_ORIGIN1 = 1 << 3;
|
|
1002
|
-
var U_ORIGIN2 = 1 << 4;
|
|
1003
|
-
var U_ORIGIN3 = 1 << 5;
|
|
1004
|
-
var U_ANGLE1 = 1 << 6;
|
|
1005
|
-
var U_ANGLE2 = 1 << 7;
|
|
1006
|
-
var U_ANGLE3 = 1 << 8;
|
|
1007
|
-
var U_FRAME = 1 << 9;
|
|
1008
|
-
var U_SKIN = 1 << 10;
|
|
1009
|
-
var U_EFFECTS = 1 << 11;
|
|
1010
|
-
var U_RENDERFX = 1 << 12;
|
|
1011
|
-
var U_SOLID = 1 << 13;
|
|
1012
|
-
var U_EVENT = 1 << 14;
|
|
1013
|
-
var U_MOREBITS = 1 << 15;
|
|
1014
|
-
var U_MODEL2 = 1 << 0;
|
|
1015
|
-
var U_MODEL3 = 1 << 1;
|
|
1016
|
-
var U_MODEL4 = 1 << 2;
|
|
1017
|
-
var U_REMOVE = 32768;
|
|
1018
|
-
var FRAMETIME = 0.025;
|
|
1019
|
-
var MASK_WATER2 = 33554432;
|
|
1020
|
-
var WaterLevel3 = {
|
|
1021
|
-
None: 0,
|
|
1022
|
-
Feet: 1,
|
|
1023
|
-
Waist: 2,
|
|
1024
|
-
Under: 3
|
|
1025
|
-
};
|
|
1026
|
-
var categorizePosition2 = (state, trace) => {
|
|
1027
|
-
const point = { ...state.origin };
|
|
1028
|
-
point.z -= 0.25;
|
|
1029
|
-
const traceResult = trace(state.origin, point);
|
|
1030
|
-
return {
|
|
1031
|
-
...state,
|
|
1032
|
-
onGround: traceResult.fraction < 1
|
|
1033
|
-
};
|
|
1034
|
-
};
|
|
1035
|
-
var checkWater = (state, pointContents2) => {
|
|
1036
|
-
const point = { ...state.origin };
|
|
1037
|
-
const { mins, maxs } = state;
|
|
1038
|
-
point.z = state.origin.z + mins.z + 1;
|
|
1039
|
-
const contents = pointContents2(point);
|
|
1040
|
-
if (!(contents & MASK_WATER2)) {
|
|
1041
|
-
return { ...state, waterLevel: WaterLevel3.None };
|
|
1042
|
-
}
|
|
1043
|
-
let waterLevel = WaterLevel3.Feet;
|
|
1044
|
-
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1045
|
-
point.z = waist;
|
|
1046
|
-
const waistContents = pointContents2(point);
|
|
1047
|
-
if (waistContents & MASK_WATER2) {
|
|
1048
|
-
waterLevel = WaterLevel3.Waist;
|
|
1049
|
-
const head = state.origin.z + 22;
|
|
1050
|
-
point.z = head;
|
|
1051
|
-
const headContents = pointContents2(point);
|
|
1052
|
-
if (headContents & MASK_WATER2) {
|
|
1053
|
-
waterLevel = WaterLevel3.Under;
|
|
1054
|
-
}
|
|
1055
|
-
}
|
|
1056
|
-
return { ...state, waterLevel };
|
|
1057
|
-
};
|
|
1058
|
-
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1059
|
-
let newState = { ...state };
|
|
1060
|
-
newState = categorizePosition2(newState, trace);
|
|
1061
|
-
newState = checkWater(newState, pointContents2);
|
|
1062
|
-
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1063
|
-
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1064
|
-
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1065
|
-
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1066
|
-
y: viewAngles.y,
|
|
1067
|
-
z: viewAngles.z
|
|
1068
|
-
};
|
|
1069
|
-
const { forward, right } = angleVectors(adjustedAngles);
|
|
1070
|
-
const frictionedVelocity = applyPmoveFriction({
|
|
1071
|
-
velocity,
|
|
1072
|
-
frametime: FRAMETIME,
|
|
1073
|
-
onGround,
|
|
1074
|
-
groundIsSlick: false,
|
|
1075
|
-
onLadder: false,
|
|
1076
|
-
waterlevel: waterLevel,
|
|
1077
|
-
pmFriction: 6,
|
|
1078
|
-
pmStopSpeed: 100,
|
|
1079
|
-
pmWaterFriction: 1
|
|
1080
|
-
});
|
|
1081
|
-
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1082
|
-
forward,
|
|
1083
|
-
right,
|
|
1084
|
-
cmd,
|
|
1085
|
-
maxSpeed: 320
|
|
1086
|
-
}) : buildAirGroundWish({
|
|
1087
|
-
forward,
|
|
1088
|
-
right,
|
|
1089
|
-
cmd,
|
|
1090
|
-
maxSpeed: 320
|
|
1091
|
-
});
|
|
1092
|
-
const finalVelocity = applyPmoveAccelerate({
|
|
1093
|
-
velocity: frictionedVelocity,
|
|
1094
|
-
wishdir: wish.wishdir,
|
|
1095
|
-
wishspeed: wish.wishspeed,
|
|
1096
|
-
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1097
|
-
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1098
|
-
frametime: FRAMETIME
|
|
1099
|
-
});
|
|
1100
|
-
const traceResult = trace(origin, {
|
|
1101
|
-
x: origin.x + finalVelocity.x * FRAMETIME,
|
|
1102
|
-
y: origin.y + finalVelocity.y * FRAMETIME,
|
|
1103
|
-
z: origin.z + finalVelocity.z * FRAMETIME
|
|
1104
|
-
});
|
|
1105
|
-
return {
|
|
1106
|
-
...newState,
|
|
1107
|
-
origin: traceResult.endpos,
|
|
1108
|
-
velocity: finalVelocity
|
|
1109
|
-
};
|
|
1110
|
-
};
|
|
1111
|
-
var WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1112
|
-
WeaponId22["Blaster"] = "blaster";
|
|
1113
|
-
WeaponId22["Shotgun"] = "shotgun";
|
|
1114
|
-
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1115
|
-
WeaponId22["Machinegun"] = "machinegun";
|
|
1116
|
-
WeaponId22["Chaingun"] = "chaingun";
|
|
1117
|
-
WeaponId22["HandGrenade"] = "grenades";
|
|
1118
|
-
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1119
|
-
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1120
|
-
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1121
|
-
WeaponId22["Railgun"] = "railgun";
|
|
1122
|
-
WeaponId22["BFG10K"] = "bfg10k";
|
|
1123
|
-
WeaponId22["Grapple"] = "grapple";
|
|
1124
|
-
WeaponId22["ChainFist"] = "chainfist";
|
|
1125
|
-
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1126
|
-
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1127
|
-
WeaponId22["IonRipper"] = "ionripper";
|
|
1128
|
-
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1129
|
-
WeaponId22["Phalanx"] = "phalanx";
|
|
1130
|
-
WeaponId22["Disruptor"] = "disruptor";
|
|
1131
|
-
WeaponId22["Trap"] = "trap";
|
|
1132
|
-
return WeaponId22;
|
|
1133
|
-
})(WeaponId || {});
|
|
1134
|
-
var AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1135
|
-
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1136
|
-
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1137
|
-
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1138
|
-
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1139
|
-
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1140
|
-
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1141
|
-
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1142
|
-
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1143
|
-
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1144
|
-
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1145
|
-
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1146
|
-
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1147
|
-
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1148
|
-
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1149
|
-
return AmmoType22;
|
|
1150
|
-
})(AmmoType || {});
|
|
1151
|
-
var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1152
|
-
var AmmoItemId = /* @__PURE__ */ ((AmmoItemId22) => {
|
|
1153
|
-
AmmoItemId22["Shells"] = "ammo_shells";
|
|
1154
|
-
AmmoItemId22["Bullets"] = "ammo_bullets";
|
|
1155
|
-
AmmoItemId22["Rockets"] = "ammo_rockets";
|
|
1156
|
-
AmmoItemId22["Grenades"] = "ammo_grenades";
|
|
1157
|
-
AmmoItemId22["Cells"] = "ammo_cells";
|
|
1158
|
-
AmmoItemId22["Slugs"] = "ammo_slugs";
|
|
1159
|
-
AmmoItemId22["MagSlugs"] = "ammo_magslug";
|
|
1160
|
-
AmmoItemId22["Flechettes"] = "ammo_flechettes";
|
|
1161
|
-
AmmoItemId22["Disruptor"] = "ammo_disruptor";
|
|
1162
|
-
AmmoItemId22["Tesla"] = "ammo_tesla";
|
|
1163
|
-
AmmoItemId22["Trap"] = "ammo_trap";
|
|
1164
|
-
AmmoItemId22["Prox"] = "ammo_prox";
|
|
1165
|
-
return AmmoItemId22;
|
|
1166
|
-
})(AmmoItemId || {});
|
|
1167
|
-
var WEAPON_WHEEL_ORDER = [
|
|
1168
|
-
"blaster",
|
|
1169
|
-
"shotgun",
|
|
1170
|
-
"supershotgun",
|
|
1171
|
-
"machinegun",
|
|
1172
|
-
"chaingun",
|
|
1173
|
-
"grenadelauncher",
|
|
1174
|
-
"rocketlauncher",
|
|
1175
|
-
"grenades",
|
|
1176
|
-
"hyperblaster",
|
|
1177
|
-
"railgun",
|
|
1178
|
-
"bfg10k"
|
|
1179
|
-
/* BFG10K */
|
|
1180
|
-
];
|
|
1181
1229
|
|
|
1182
1230
|
// src/inventory/ammo.ts
|
|
1183
|
-
var AMMO_ITEM_DEFINITIONS = {
|
|
1184
|
-
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1185
|
-
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1186
|
-
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1187
|
-
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1188
|
-
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1189
|
-
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1190
|
-
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1191
|
-
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1192
|
-
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1193
|
-
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1194
|
-
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1195
|
-
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1196
|
-
};
|
|
1197
1231
|
function getAmmoItemDefinition(id) {
|
|
1198
1232
|
return AMMO_ITEM_DEFINITIONS[id];
|
|
1199
1233
|
}
|
|
@@ -1247,54 +1281,55 @@ function pickupAmmo(inventory, itemId, options = {}) {
|
|
|
1247
1281
|
const amount = options.countOverride ?? def.quantity;
|
|
1248
1282
|
return addAmmo(inventory, def.ammoType, amount);
|
|
1249
1283
|
}
|
|
1284
|
+
var AMMO_ITEM_DEFINITIONS;
|
|
1285
|
+
var init_ammo = __esm({
|
|
1286
|
+
"src/inventory/ammo.ts"() {
|
|
1287
|
+
"use strict";
|
|
1288
|
+
init_esm();
|
|
1289
|
+
AMMO_ITEM_DEFINITIONS = {
|
|
1290
|
+
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1291
|
+
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1292
|
+
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1293
|
+
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1294
|
+
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1295
|
+
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1296
|
+
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1297
|
+
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1298
|
+
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1299
|
+
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1300
|
+
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1301
|
+
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1302
|
+
};
|
|
1303
|
+
}
|
|
1304
|
+
});
|
|
1250
1305
|
|
|
1251
1306
|
// src/combat/damageFlags.ts
|
|
1252
|
-
var DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1253
|
-
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1254
|
-
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1255
|
-
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1256
|
-
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1257
|
-
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1258
|
-
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1259
|
-
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1260
|
-
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1261
|
-
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1262
|
-
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1263
|
-
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1264
|
-
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1265
|
-
return DamageFlags2;
|
|
1266
|
-
})(DamageFlags || {});
|
|
1267
1307
|
function hasAnyDamageFlag(flags, mask) {
|
|
1268
1308
|
return (flags & mask) !== 0;
|
|
1269
1309
|
}
|
|
1310
|
+
var DamageFlags;
|
|
1311
|
+
var init_damageFlags = __esm({
|
|
1312
|
+
"src/combat/damageFlags.ts"() {
|
|
1313
|
+
"use strict";
|
|
1314
|
+
DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1315
|
+
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1316
|
+
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1317
|
+
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1318
|
+
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1319
|
+
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1320
|
+
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1321
|
+
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1322
|
+
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1323
|
+
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1324
|
+
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1325
|
+
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1326
|
+
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1327
|
+
return DamageFlags2;
|
|
1328
|
+
})(DamageFlags || {});
|
|
1329
|
+
}
|
|
1330
|
+
});
|
|
1270
1331
|
|
|
1271
1332
|
// src/combat/armor.ts
|
|
1272
|
-
var ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1273
|
-
ArmorType2["BODY"] = "body";
|
|
1274
|
-
ArmorType2["COMBAT"] = "combat";
|
|
1275
|
-
ArmorType2["JACKET"] = "jacket";
|
|
1276
|
-
return ArmorType2;
|
|
1277
|
-
})(ArmorType || {});
|
|
1278
|
-
var ARMOR_INFO = {
|
|
1279
|
-
["jacket" /* JACKET */]: {
|
|
1280
|
-
baseCount: 25,
|
|
1281
|
-
maxCount: 50,
|
|
1282
|
-
normalProtection: 0.3,
|
|
1283
|
-
energyProtection: 0
|
|
1284
|
-
},
|
|
1285
|
-
["combat" /* COMBAT */]: {
|
|
1286
|
-
baseCount: 50,
|
|
1287
|
-
maxCount: 100,
|
|
1288
|
-
normalProtection: 0.6,
|
|
1289
|
-
energyProtection: 0.3
|
|
1290
|
-
},
|
|
1291
|
-
["body" /* BODY */]: {
|
|
1292
|
-
baseCount: 100,
|
|
1293
|
-
maxCount: 200,
|
|
1294
|
-
normalProtection: 0.8,
|
|
1295
|
-
energyProtection: 0.6
|
|
1296
|
-
}
|
|
1297
|
-
};
|
|
1298
1333
|
function applyRegularArmor(damage, flags, state) {
|
|
1299
1334
|
if (damage <= 0 || hasAnyDamageFlag(flags, 2 /* NO_ARMOR */ | 128 /* NO_REG_ARMOR */) || !state.armorType || state.armorCount <= 0) {
|
|
1300
1335
|
return { saved: 0, remainingArmor: state.armorCount };
|
|
@@ -1358,28 +1393,42 @@ function applyPowerArmor(damage, flags, hitPoint, _hitNormal, state, options = {
|
|
|
1358
1393
|
const remainingCells = Math.max(0, state.cellCount - cellsSpent);
|
|
1359
1394
|
return { saved, remainingCells };
|
|
1360
1395
|
}
|
|
1396
|
+
var ArmorType, ARMOR_INFO;
|
|
1397
|
+
var init_armor = __esm({
|
|
1398
|
+
"src/combat/armor.ts"() {
|
|
1399
|
+
"use strict";
|
|
1400
|
+
init_esm();
|
|
1401
|
+
init_damageFlags();
|
|
1402
|
+
ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1403
|
+
ArmorType2["BODY"] = "body";
|
|
1404
|
+
ArmorType2["COMBAT"] = "combat";
|
|
1405
|
+
ArmorType2["JACKET"] = "jacket";
|
|
1406
|
+
return ArmorType2;
|
|
1407
|
+
})(ArmorType || {});
|
|
1408
|
+
ARMOR_INFO = {
|
|
1409
|
+
["jacket" /* JACKET */]: {
|
|
1410
|
+
baseCount: 25,
|
|
1411
|
+
maxCount: 50,
|
|
1412
|
+
normalProtection: 0.3,
|
|
1413
|
+
energyProtection: 0
|
|
1414
|
+
},
|
|
1415
|
+
["combat" /* COMBAT */]: {
|
|
1416
|
+
baseCount: 50,
|
|
1417
|
+
maxCount: 100,
|
|
1418
|
+
normalProtection: 0.6,
|
|
1419
|
+
energyProtection: 0.3
|
|
1420
|
+
},
|
|
1421
|
+
["body" /* BODY */]: {
|
|
1422
|
+
baseCount: 100,
|
|
1423
|
+
maxCount: 200,
|
|
1424
|
+
normalProtection: 0.8,
|
|
1425
|
+
energyProtection: 0.6
|
|
1426
|
+
}
|
|
1427
|
+
};
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1361
1430
|
|
|
1362
1431
|
// src/inventory/playerInventory.ts
|
|
1363
|
-
var KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
1364
|
-
KeyId2["Blue"] = "key_blue";
|
|
1365
|
-
KeyId2["Red"] = "key_red";
|
|
1366
|
-
KeyId2["Green"] = "key_green";
|
|
1367
|
-
KeyId2["Yellow"] = "key_yellow";
|
|
1368
|
-
KeyId2["DataCD"] = "key_data_cd";
|
|
1369
|
-
KeyId2["PowerCube"] = "key_power_cube";
|
|
1370
|
-
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
1371
|
-
KeyId2["PowerCore"] = "key_power_core";
|
|
1372
|
-
KeyId2["Pyramid"] = "key_pyramid";
|
|
1373
|
-
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
1374
|
-
KeyId2["Pass"] = "key_pass";
|
|
1375
|
-
KeyId2["CommanderHead"] = "key_commander_head";
|
|
1376
|
-
KeyId2["Airstrike"] = "key_airstrike";
|
|
1377
|
-
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
1378
|
-
KeyId2["Nuke"] = "key_nuke";
|
|
1379
|
-
KeyId2["RedFlag"] = "key_red_flag";
|
|
1380
|
-
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
1381
|
-
return KeyId2;
|
|
1382
|
-
})(KeyId || {});
|
|
1383
1432
|
function createPlayerInventory(init = {}) {
|
|
1384
1433
|
const ammoCaps = init.ammoCaps;
|
|
1385
1434
|
const inv = {
|
|
@@ -1652,8 +1701,144 @@ function deserializePlayerInventory(serialized, options = {}) {
|
|
|
1652
1701
|
items: new Set(serialized.items)
|
|
1653
1702
|
};
|
|
1654
1703
|
}
|
|
1704
|
+
var KeyId;
|
|
1705
|
+
var init_playerInventory = __esm({
|
|
1706
|
+
"src/inventory/playerInventory.ts"() {
|
|
1707
|
+
"use strict";
|
|
1708
|
+
init_ammo();
|
|
1709
|
+
init_esm();
|
|
1710
|
+
init_armor();
|
|
1711
|
+
KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
1712
|
+
KeyId2["Blue"] = "key_blue";
|
|
1713
|
+
KeyId2["Red"] = "key_red";
|
|
1714
|
+
KeyId2["Green"] = "key_green";
|
|
1715
|
+
KeyId2["Yellow"] = "key_yellow";
|
|
1716
|
+
KeyId2["DataCD"] = "key_data_cd";
|
|
1717
|
+
KeyId2["PowerCube"] = "key_power_cube";
|
|
1718
|
+
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
1719
|
+
KeyId2["PowerCore"] = "key_power_core";
|
|
1720
|
+
KeyId2["Pyramid"] = "key_pyramid";
|
|
1721
|
+
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
1722
|
+
KeyId2["Pass"] = "key_pass";
|
|
1723
|
+
KeyId2["CommanderHead"] = "key_commander_head";
|
|
1724
|
+
KeyId2["Airstrike"] = "key_airstrike";
|
|
1725
|
+
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
1726
|
+
KeyId2["Nuke"] = "key_nuke";
|
|
1727
|
+
KeyId2["RedFlag"] = "key_red_flag";
|
|
1728
|
+
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
1729
|
+
return KeyId2;
|
|
1730
|
+
})(KeyId || {});
|
|
1731
|
+
}
|
|
1732
|
+
});
|
|
1733
|
+
|
|
1734
|
+
// src/combat/weapons/state.ts
|
|
1735
|
+
function createPlayerWeaponStates() {
|
|
1736
|
+
return {
|
|
1737
|
+
states: /* @__PURE__ */ new Map()
|
|
1738
|
+
};
|
|
1739
|
+
}
|
|
1740
|
+
function getWeaponState(playerStates, weaponId) {
|
|
1741
|
+
let state = playerStates.states.get(weaponId);
|
|
1742
|
+
if (!state) {
|
|
1743
|
+
state = { lastFireTime: 0 };
|
|
1744
|
+
playerStates.states.set(weaponId, state);
|
|
1745
|
+
}
|
|
1746
|
+
return state;
|
|
1747
|
+
}
|
|
1748
|
+
var WeaponStateEnum;
|
|
1749
|
+
var init_state = __esm({
|
|
1750
|
+
"src/combat/weapons/state.ts"() {
|
|
1751
|
+
"use strict";
|
|
1752
|
+
WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
1753
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
1754
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
1755
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
1756
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
1757
|
+
return WeaponStateEnum2;
|
|
1758
|
+
})(WeaponStateEnum || {});
|
|
1759
|
+
}
|
|
1760
|
+
});
|
|
1761
|
+
|
|
1762
|
+
// src/combat/weapons/switching.ts
|
|
1763
|
+
var switching_exports = {};
|
|
1764
|
+
__export(switching_exports, {
|
|
1765
|
+
ChangeWeapon: () => ChangeWeapon,
|
|
1766
|
+
NoAmmoWeaponChange: () => NoAmmoWeaponChange,
|
|
1767
|
+
setInstantSwitch: () => setInstantSwitch,
|
|
1768
|
+
switchToBestWeapon: () => switchToBestWeapon
|
|
1769
|
+
});
|
|
1770
|
+
function setInstantSwitch(enabled) {
|
|
1771
|
+
instantSwitch = enabled;
|
|
1772
|
+
}
|
|
1773
|
+
function ChangeWeapon(ent, weaponId) {
|
|
1774
|
+
if (!ent.client) return;
|
|
1775
|
+
const client = ent.client;
|
|
1776
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
1777
|
+
return;
|
|
1778
|
+
}
|
|
1779
|
+
if (weaponId) {
|
|
1780
|
+
selectWeapon(client.inventory, weaponId);
|
|
1781
|
+
client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
1782
|
+
client.gun_frame = 0;
|
|
1783
|
+
if (instantSwitch) {
|
|
1784
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
1785
|
+
client.weapon_think_time = 0;
|
|
1786
|
+
return;
|
|
1787
|
+
}
|
|
1788
|
+
client.weapon_think_time = 0;
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
function NoAmmoWeaponChange(ent) {
|
|
1792
|
+
if (!ent.client) return;
|
|
1793
|
+
switchToBestWeapon(ent);
|
|
1794
|
+
}
|
|
1795
|
+
function switchToBestWeapon(player) {
|
|
1796
|
+
if (!player.client) {
|
|
1797
|
+
return;
|
|
1798
|
+
}
|
|
1799
|
+
const inventory = player.client.inventory;
|
|
1800
|
+
let bestWeapon = null;
|
|
1801
|
+
if (inventory.ownedWeapons.has(WeaponId.BFG10K) && inventory.ammo.counts[AmmoType.Cells] >= 50) {
|
|
1802
|
+
bestWeapon = WeaponId.BFG10K;
|
|
1803
|
+
} else if (inventory.ownedWeapons.has(WeaponId.RocketLauncher) && inventory.ammo.counts[AmmoType.Rockets] >= 1) {
|
|
1804
|
+
bestWeapon = WeaponId.RocketLauncher;
|
|
1805
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Railgun) && inventory.ammo.counts[AmmoType.Slugs] >= 1) {
|
|
1806
|
+
bestWeapon = WeaponId.Railgun;
|
|
1807
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Chaingun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
1808
|
+
bestWeapon = WeaponId.Chaingun;
|
|
1809
|
+
} else if (inventory.ownedWeapons.has(WeaponId.SuperShotgun) && inventory.ammo.counts[AmmoType.Shells] >= 2) {
|
|
1810
|
+
bestWeapon = WeaponId.SuperShotgun;
|
|
1811
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Machinegun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
1812
|
+
bestWeapon = WeaponId.Machinegun;
|
|
1813
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Shotgun) && inventory.ammo.counts[AmmoType.Shells] >= 1) {
|
|
1814
|
+
bestWeapon = WeaponId.Shotgun;
|
|
1815
|
+
} else {
|
|
1816
|
+
bestWeapon = WeaponId.Blaster;
|
|
1817
|
+
}
|
|
1818
|
+
if (bestWeapon && bestWeapon !== inventory.currentWeapon) {
|
|
1819
|
+
selectWeapon(inventory, bestWeapon);
|
|
1820
|
+
player.client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
1821
|
+
player.client.gun_frame = 0;
|
|
1822
|
+
if (instantSwitch) {
|
|
1823
|
+
player.client.weaponstate = 0 /* WEAPON_READY */;
|
|
1824
|
+
}
|
|
1825
|
+
player.client.weapon_think_time = 0;
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
var instantSwitch;
|
|
1829
|
+
var init_switching = __esm({
|
|
1830
|
+
"src/combat/weapons/switching.ts"() {
|
|
1831
|
+
"use strict";
|
|
1832
|
+
init_playerInventory();
|
|
1833
|
+
init_ammo();
|
|
1834
|
+
instantSwitch = false;
|
|
1835
|
+
}
|
|
1836
|
+
});
|
|
1655
1837
|
|
|
1656
1838
|
// src/entities/entity.ts
|
|
1839
|
+
init_esm();
|
|
1840
|
+
init_playerInventory();
|
|
1841
|
+
init_ammo();
|
|
1657
1842
|
var MoveType = /* @__PURE__ */ ((MoveType3) => {
|
|
1658
1843
|
MoveType3[MoveType3["None"] = 0] = "None";
|
|
1659
1844
|
MoveType3[MoveType3["Noclip"] = 1] = "Noclip";
|
|
@@ -2039,6 +2224,16 @@ var ENTITY_FIELD_METADATA = [
|
|
|
2039
2224
|
// Added
|
|
2040
2225
|
];
|
|
2041
2226
|
|
|
2227
|
+
// src/entities/system.ts
|
|
2228
|
+
init_esm();
|
|
2229
|
+
|
|
2230
|
+
// src/physics/movement.ts
|
|
2231
|
+
init_esm();
|
|
2232
|
+
|
|
2233
|
+
// src/ai/movement.ts
|
|
2234
|
+
init_esm();
|
|
2235
|
+
init_esm();
|
|
2236
|
+
|
|
2042
2237
|
// src/ai/constants.ts
|
|
2043
2238
|
var RANGE_MELEE = 20;
|
|
2044
2239
|
var RANGE_NEAR = 440;
|
|
@@ -2081,6 +2276,8 @@ var TraceMask = /* @__PURE__ */ ((TraceMask2) => {
|
|
|
2081
2276
|
})(TraceMask || {});
|
|
2082
2277
|
|
|
2083
2278
|
// src/ai/perception.ts
|
|
2279
|
+
init_esm();
|
|
2280
|
+
init_esm();
|
|
2084
2281
|
var RangeCategory = /* @__PURE__ */ ((RangeCategory4) => {
|
|
2085
2282
|
RangeCategory4["Melee"] = "melee";
|
|
2086
2283
|
RangeCategory4["Near"] = "near";
|
|
@@ -2141,6 +2338,7 @@ function visible(self, other, trace, options) {
|
|
|
2141
2338
|
}
|
|
2142
2339
|
|
|
2143
2340
|
// src/ai/targeting.ts
|
|
2341
|
+
init_esm();
|
|
2144
2342
|
function setIdealYawTowards(self, other) {
|
|
2145
2343
|
const delta = {
|
|
2146
2344
|
x: other.origin.x - self.origin.x,
|
|
@@ -2799,6 +2997,7 @@ function runPush(pusher, system, imports, frametime) {
|
|
|
2799
2997
|
}
|
|
2800
2998
|
|
|
2801
2999
|
// src/physics/fluid.ts
|
|
3000
|
+
init_esm();
|
|
2802
3001
|
function checkWater2(ent, system, imports) {
|
|
2803
3002
|
const origin = ent.origin;
|
|
2804
3003
|
const mins = ent.mins;
|
|
@@ -3101,6 +3300,7 @@ var ThinkScheduler = class {
|
|
|
3101
3300
|
};
|
|
3102
3301
|
|
|
3103
3302
|
// src/entities/system.ts
|
|
3303
|
+
init_esm();
|
|
3104
3304
|
function computeBounds(entity) {
|
|
3105
3305
|
return {
|
|
3106
3306
|
min: {
|
|
@@ -3233,6 +3433,9 @@ var EntitySystem = class {
|
|
|
3233
3433
|
get pointcontents() {
|
|
3234
3434
|
return this.imports.pointcontents;
|
|
3235
3435
|
}
|
|
3436
|
+
get game() {
|
|
3437
|
+
return this._game;
|
|
3438
|
+
}
|
|
3236
3439
|
get world() {
|
|
3237
3440
|
return this.pool.world;
|
|
3238
3441
|
}
|
|
@@ -3753,6 +3956,15 @@ function damageModName(mod) {
|
|
|
3753
3956
|
return `MOD_${DamageMod[mod]}`;
|
|
3754
3957
|
}
|
|
3755
3958
|
|
|
3959
|
+
// src/entities/misc.ts
|
|
3960
|
+
init_esm();
|
|
3961
|
+
|
|
3962
|
+
// src/combat/damage.ts
|
|
3963
|
+
init_esm();
|
|
3964
|
+
init_armor();
|
|
3965
|
+
init_damageFlags();
|
|
3966
|
+
init_esm();
|
|
3967
|
+
|
|
3756
3968
|
// src/imports.ts
|
|
3757
3969
|
var MulticastType = /* @__PURE__ */ ((MulticastType2) => {
|
|
3758
3970
|
MulticastType2[MulticastType2["All"] = 0] = "All";
|
|
@@ -3907,6 +4119,7 @@ function T_RadiusDamage(entities, inflictor, attacker, damage, ignore, radius, d
|
|
|
3907
4119
|
}
|
|
3908
4120
|
|
|
3909
4121
|
// src/entities/misc.ts
|
|
4122
|
+
var random = createRandomGenerator();
|
|
3910
4123
|
var SPAWNFLAGS_OBJECT_TRIGGER_SPAWN = 1;
|
|
3911
4124
|
var SPAWNFLAGS_OBJECT_ANIMATED = 2;
|
|
3912
4125
|
function func_object_touch(self, other, plane, surf) {
|
|
@@ -3958,6 +4171,24 @@ var func_object = (entity, context) => {
|
|
|
3958
4171
|
if (entity.spawnflags & SPAWNFLAGS_OBJECT_ANIMATED) {
|
|
3959
4172
|
}
|
|
3960
4173
|
};
|
|
4174
|
+
function gib_die(self, inflictor, attacker, damage) {
|
|
4175
|
+
}
|
|
4176
|
+
function spawn_gib(entity, model, context) {
|
|
4177
|
+
context.entities.modelIndex(model);
|
|
4178
|
+
entity.solid = 0 /* Not */;
|
|
4179
|
+
entity.takedamage = true;
|
|
4180
|
+
entity.die = gib_die;
|
|
4181
|
+
entity.movetype = 7 /* Toss */;
|
|
4182
|
+
entity.deadflag = 2;
|
|
4183
|
+
entity.avelocity = {
|
|
4184
|
+
x: random.frandom() * 200,
|
|
4185
|
+
y: random.frandom() * 200,
|
|
4186
|
+
z: random.frandom() * 200
|
|
4187
|
+
};
|
|
4188
|
+
entity.think = (self) => context.entities.free(self);
|
|
4189
|
+
context.entities.scheduleThink(entity, context.entities.timeSeconds + 10);
|
|
4190
|
+
context.entities.linkentity(entity);
|
|
4191
|
+
}
|
|
3961
4192
|
function registerMiscSpawns(registry) {
|
|
3962
4193
|
registry.register("misc_teleporter", (entity) => {
|
|
3963
4194
|
});
|
|
@@ -3975,14 +4206,23 @@ function registerMiscSpawns(registry) {
|
|
|
3975
4206
|
entity.movetype = 0 /* None */;
|
|
3976
4207
|
entity.solid = 3 /* Bsp */;
|
|
3977
4208
|
});
|
|
3978
|
-
registry.register("misc_gib_arm", (entity) => {
|
|
3979
|
-
entity.
|
|
3980
|
-
|
|
4209
|
+
registry.register("misc_gib_arm", (entity, context) => {
|
|
4210
|
+
spawn_gib(entity, "models/objects/gibs/arm/tris.md2", context);
|
|
4211
|
+
});
|
|
4212
|
+
registry.register("misc_gib_leg", (entity, context) => {
|
|
4213
|
+
spawn_gib(entity, "models/objects/gibs/leg/tris.md2", context);
|
|
4214
|
+
});
|
|
4215
|
+
registry.register("misc_gib_head", (entity, context) => {
|
|
4216
|
+
spawn_gib(entity, "models/objects/gibs/head/tris.md2", context);
|
|
3981
4217
|
});
|
|
3982
4218
|
registry.register("func_object", func_object);
|
|
3983
4219
|
}
|
|
3984
4220
|
|
|
4221
|
+
// src/entities/targets.ts
|
|
4222
|
+
init_esm();
|
|
4223
|
+
|
|
3985
4224
|
// src/entities/utils.ts
|
|
4225
|
+
init_esm();
|
|
3986
4226
|
var VEC_UP = { x: 0, y: -1, z: 0 };
|
|
3987
4227
|
var MOVEDIR_UP = { x: 0, y: 0, z: 1 };
|
|
3988
4228
|
var VEC_DOWN = { x: 0, y: -2, z: 0 };
|
|
@@ -4004,6 +4244,7 @@ function setMovedir(angles) {
|
|
|
4004
4244
|
}
|
|
4005
4245
|
|
|
4006
4246
|
// src/entities/projectiles.ts
|
|
4247
|
+
init_esm();
|
|
4007
4248
|
function createRocket(sys, owner, start, dir, damage, radiusDamage, speed, flashtype = 0) {
|
|
4008
4249
|
const rocket = sys.spawn();
|
|
4009
4250
|
rocket.classname = "rocket";
|
|
@@ -4459,6 +4700,7 @@ function useTargetSpawner(self, other, activator, context, registry) {
|
|
|
4459
4700
|
warn: context.warn,
|
|
4460
4701
|
free: context.free
|
|
4461
4702
|
};
|
|
4703
|
+
ent.monsterinfo.aiflags |= 1024 /* DoNotCount */;
|
|
4462
4704
|
spawnFunc(ent, spawnContext);
|
|
4463
4705
|
context.entities.finalizeSpawn(ent);
|
|
4464
4706
|
context.entities.linkentity(ent);
|
|
@@ -4466,6 +4708,7 @@ function useTargetSpawner(self, other, activator, context, registry) {
|
|
|
4466
4708
|
if (self.speed) {
|
|
4467
4709
|
ent.velocity = { ...self.movedir };
|
|
4468
4710
|
}
|
|
4711
|
+
ent.renderfx |= RenderFx.IrVisible;
|
|
4469
4712
|
}
|
|
4470
4713
|
var SPAWNFLAG_BLASTER_NOTRAIL = 1;
|
|
4471
4714
|
var SPAWNFLAG_BLASTER_NOEFFECTS = 2;
|
|
@@ -4851,6 +5094,7 @@ function registerTargetSpawns(registry) {
|
|
|
4851
5094
|
}
|
|
4852
5095
|
|
|
4853
5096
|
// src/entities/triggers.ts
|
|
5097
|
+
init_esm();
|
|
4854
5098
|
var FRAME_TIME_SECONDS = 1 / 40;
|
|
4855
5099
|
var THINK_INTERVAL = 0.1;
|
|
4856
5100
|
var HURT_INTERVAL = 0.1;
|
|
@@ -5353,91 +5597,749 @@ function triggerElevatorInit(self, entities, warn) {
|
|
|
5353
5597
|
warn(`trigger_elevator target ${self.target} is not a train`);
|
|
5354
5598
|
return;
|
|
5355
5599
|
}
|
|
5356
|
-
self.use = (entity, other, activator) => triggerElevatorUse(entity, other ?? activator ?? null, entities, warn);
|
|
5357
|
-
self.svflags |= 1 /* NoClient */;
|
|
5358
|
-
}
|
|
5359
|
-
function registerTriggerElevator(registry) {
|
|
5360
|
-
registry.register("trigger_elevator", (entity, context) => {
|
|
5361
|
-
entity.think = (self) => triggerElevatorInit(self, context.entities, context.warn);
|
|
5362
|
-
context.entities.scheduleThink(entity, context.entities.timeSeconds + FRAME_TIME_SECONDS);
|
|
5363
|
-
});
|
|
5600
|
+
self.use = (entity, other, activator) => triggerElevatorUse(entity, other ?? activator ?? null, entities, warn);
|
|
5601
|
+
self.svflags |= 1 /* NoClient */;
|
|
5602
|
+
}
|
|
5603
|
+
function registerTriggerElevator(registry) {
|
|
5604
|
+
registry.register("trigger_elevator", (entity, context) => {
|
|
5605
|
+
entity.think = (self) => triggerElevatorInit(self, context.entities, context.warn);
|
|
5606
|
+
context.entities.scheduleThink(entity, context.entities.timeSeconds + FRAME_TIME_SECONDS);
|
|
5607
|
+
});
|
|
5608
|
+
}
|
|
5609
|
+
function registerTriggerMonsterJump(registry) {
|
|
5610
|
+
registry.register("trigger_monsterjump", (entity, context) => {
|
|
5611
|
+
const heightText = context.keyValues.height;
|
|
5612
|
+
const height = heightText ? Number.parseFloat(heightText) || 0 : 200;
|
|
5613
|
+
if (entity.angles.y === 0) {
|
|
5614
|
+
entity.angles = { ...entity.angles, y: 360 };
|
|
5615
|
+
}
|
|
5616
|
+
if (!entity.speed) {
|
|
5617
|
+
entity.speed = 200;
|
|
5618
|
+
}
|
|
5619
|
+
initTrigger(entity);
|
|
5620
|
+
entity.movedir = { ...entity.movedir, z: height };
|
|
5621
|
+
const touchHandler = (self, other) => monsterJumpTouch(self, other);
|
|
5622
|
+
entity.touch = touchHandler;
|
|
5623
|
+
if (entity.spawnflags & MONSTERJUMP_SPAWNFLAGS.StartOff) {
|
|
5624
|
+
entity.solid = 0 /* Not */;
|
|
5625
|
+
entity.touch = void 0;
|
|
5626
|
+
}
|
|
5627
|
+
if (entity.spawnflags & MONSTERJUMP_SPAWNFLAGS.Toggle) {
|
|
5628
|
+
entity.use = (self) => {
|
|
5629
|
+
toggleSolid(self);
|
|
5630
|
+
self.touch = self.solid === 1 /* Trigger */ ? touchHandler : void 0;
|
|
5631
|
+
};
|
|
5632
|
+
}
|
|
5633
|
+
});
|
|
5634
|
+
}
|
|
5635
|
+
function registerTriggerSpawns(registry) {
|
|
5636
|
+
registerTriggerMultiple(registry);
|
|
5637
|
+
registerTriggerOnce(registry);
|
|
5638
|
+
registerTriggerRelay(registry);
|
|
5639
|
+
registerTriggerAlways(registry);
|
|
5640
|
+
registerTriggerCounter(registry);
|
|
5641
|
+
registerTriggerKey(registry);
|
|
5642
|
+
registerTriggerPush(registry);
|
|
5643
|
+
registerTriggerHurt(registry);
|
|
5644
|
+
registerTriggerTeleport(registry);
|
|
5645
|
+
registerTriggerGravity(registry);
|
|
5646
|
+
registerTriggerElevator(registry);
|
|
5647
|
+
registerTriggerMonsterJump(registry);
|
|
5648
|
+
}
|
|
5649
|
+
|
|
5650
|
+
// src/inventory/items.ts
|
|
5651
|
+
init_ammo();
|
|
5652
|
+
init_playerInventory();
|
|
5653
|
+
|
|
5654
|
+
// src/combat/weapons/chaingun.ts
|
|
5655
|
+
init_state();
|
|
5656
|
+
init_playerInventory();
|
|
5657
|
+
|
|
5658
|
+
// src/buttons.ts
|
|
5659
|
+
var BUTTON_ATTACK = 1;
|
|
5660
|
+
|
|
5661
|
+
// src/combat/weapons/animation.ts
|
|
5662
|
+
init_playerInventory();
|
|
5663
|
+
|
|
5664
|
+
// src/combat/weapons/firing.ts
|
|
5665
|
+
init_state();
|
|
5666
|
+
init_playerInventory();
|
|
5667
|
+
init_ammo();
|
|
5668
|
+
init_esm();
|
|
5669
|
+
|
|
5670
|
+
// src/combat/weapons/projectSource.ts
|
|
5671
|
+
init_esm();
|
|
5672
|
+
var VIEW_HEIGHT = 22;
|
|
5673
|
+
function P_ProjectSource(game, ent, offset, forward, right, up) {
|
|
5674
|
+
const origin = copyVec3(ent.origin);
|
|
5675
|
+
const eye = { ...origin, z: origin.z + (ent.viewheight ?? VIEW_HEIGHT) };
|
|
5676
|
+
const f = scaleVec3(forward, offset.x);
|
|
5677
|
+
const r = scaleVec3(right, offset.y);
|
|
5678
|
+
const u = scaleVec3(up, offset.z);
|
|
5679
|
+
const point = addVec3(addVec3(addVec3(eye, f), r), u);
|
|
5680
|
+
const tr = game.trace(eye, null, null, point, ent, MASK_SOLID);
|
|
5681
|
+
if (tr.fraction < 1) {
|
|
5682
|
+
return { x: tr.endpos.x - forward.x, y: tr.endpos.y - forward.y, z: tr.endpos.z - forward.z };
|
|
5683
|
+
}
|
|
5684
|
+
return point;
|
|
5685
|
+
}
|
|
5686
|
+
|
|
5687
|
+
// src/combat/weapons/frames.ts
|
|
5688
|
+
var FRAME_SHOTGUN_ACTIVATE_LAST = 7;
|
|
5689
|
+
var FRAME_SHOTGUN_FIRE_LAST = 18;
|
|
5690
|
+
var FRAME_SHOTGUN_IDLE_LAST = 36;
|
|
5691
|
+
var FRAME_SHOTGUN_DEACTIVATE_LAST = 39;
|
|
5692
|
+
var FRAME_SSHOTGUN_ACTIVATE_LAST = 5;
|
|
5693
|
+
var FRAME_SSHOTGUN_FIRE_LAST = 28;
|
|
5694
|
+
var FRAME_SSHOTGUN_IDLE_LAST = 52;
|
|
5695
|
+
var FRAME_SSHOTGUN_DEACTIVATE_LAST = 57;
|
|
5696
|
+
var FRAME_MACHINEGUN_ACTIVATE_LAST = 3;
|
|
5697
|
+
var FRAME_MACHINEGUN_FIRE_LAST = 23;
|
|
5698
|
+
var FRAME_MACHINEGUN_IDLE_LAST = 52;
|
|
5699
|
+
var FRAME_MACHINEGUN_DEACTIVATE_LAST = 61;
|
|
5700
|
+
var FRAME_CHAINGUN_FIRE_FRAME = 5;
|
|
5701
|
+
var FRAME_CHAINGUN_FIRE_LAST = 21;
|
|
5702
|
+
var FRAME_CHAINGUN_IDLE_LAST = 52;
|
|
5703
|
+
var FRAME_CHAINGUN_DEACTIVATE_LAST = 61;
|
|
5704
|
+
var FRAME_RAILGUN_ACTIVATE_LAST = 3;
|
|
5705
|
+
var FRAME_RAILGUN_FIRE_LAST = 18;
|
|
5706
|
+
var FRAME_RAILGUN_IDLE_LAST = 51;
|
|
5707
|
+
var FRAME_RAILGUN_DEACTIVATE_LAST = 56;
|
|
5708
|
+
var FRAME_ROCKET_ACTIVATE_LAST = 3;
|
|
5709
|
+
var FRAME_ROCKET_FIRE_LAST = 12;
|
|
5710
|
+
var FRAME_ROCKET_IDLE_LAST = 34;
|
|
5711
|
+
var FRAME_ROCKET_DEACTIVATE_LAST = 38;
|
|
5712
|
+
var FRAME_HYPERBLASTER_FIRE_FRAME = 6;
|
|
5713
|
+
var FRAME_HYPERBLASTER_FIRE_LAST = 9;
|
|
5714
|
+
var FRAME_HYPERBLASTER_IDLE_LAST = 28;
|
|
5715
|
+
var FRAME_HYPERBLASTER_DEACTIVATE_LAST = 32;
|
|
5716
|
+
var FRAME_BFG_ACTIVATE_LAST = 8;
|
|
5717
|
+
var FRAME_BFG_FIRE_LAST = 32;
|
|
5718
|
+
var FRAME_BFG_IDLE_LAST = 54;
|
|
5719
|
+
var FRAME_BFG_DEACTIVATE_LAST = 58;
|
|
5720
|
+
var FRAME_GRENADELAUNCHER_ACTIVATE_LAST = 5;
|
|
5721
|
+
var FRAME_GRENADELAUNCHER_FIRE_LAST = 16;
|
|
5722
|
+
var FRAME_GRENADELAUNCHER_IDLE_LAST = 36;
|
|
5723
|
+
var FRAME_GRENADELAUNCHER_DEACTIVATE_LAST = 39;
|
|
5724
|
+
var FRAME_BLASTER_ACTIVATE_LAST = 4;
|
|
5725
|
+
var FRAME_BLASTER_FIRE_LAST = 8;
|
|
5726
|
+
var FRAME_BLASTER_IDLE_LAST = 52;
|
|
5727
|
+
var FRAME_BLASTER_DEACTIVATE_LAST = 55;
|
|
5728
|
+
|
|
5729
|
+
// src/entities/player_anim.ts
|
|
5730
|
+
var FRAME_stand01 = 0;
|
|
5731
|
+
var FRAME_stand40 = 39;
|
|
5732
|
+
var FRAME_run1 = 40;
|
|
5733
|
+
var FRAME_run6 = 45;
|
|
5734
|
+
var FRAME_attack1 = 46;
|
|
5735
|
+
var FRAME_attack8 = 53;
|
|
5736
|
+
var FRAME_pain101 = 54;
|
|
5737
|
+
var FRAME_pain104 = 57;
|
|
5738
|
+
var FRAME_pain201 = 58;
|
|
5739
|
+
var FRAME_pain204 = 61;
|
|
5740
|
+
var FRAME_pain301 = 62;
|
|
5741
|
+
var FRAME_pain304 = 65;
|
|
5742
|
+
var FRAME_death101 = 66;
|
|
5743
|
+
var FRAME_death106 = 71;
|
|
5744
|
+
var FRAME_death201 = 72;
|
|
5745
|
+
var FRAME_death206 = 77;
|
|
5746
|
+
var FRAME_death301 = 78;
|
|
5747
|
+
var FRAME_death306 = 83;
|
|
5748
|
+
var FRAME_crattak1 = 109;
|
|
5749
|
+
var FRAME_crattak9 = 117;
|
|
5750
|
+
var ANIM_BASIC = 0;
|
|
5751
|
+
var ANIM_ATTACK = 1;
|
|
5752
|
+
var ANIM_PAIN = 2;
|
|
5753
|
+
var ANIM_DEATH = 3;
|
|
5754
|
+
|
|
5755
|
+
// src/combat/weapons/firing.ts
|
|
5756
|
+
var random2 = createRandomGenerator();
|
|
5757
|
+
function applyKick(player, pitch, yaw = 0, kickOrigin = 0) {
|
|
5758
|
+
if (player.client) {
|
|
5759
|
+
player.client.kick_angles = { x: pitch, y: yaw, z: 0 };
|
|
5760
|
+
player.client.kick_origin = { x: kickOrigin, y: 0, z: 0 };
|
|
5761
|
+
}
|
|
5762
|
+
}
|
|
5763
|
+
function setPlayerAttackAnim(player) {
|
|
5764
|
+
if (!player.client) return;
|
|
5765
|
+
const ducked = (player.client.pm_flags & 2) !== 0;
|
|
5766
|
+
player.client.anim_priority = ANIM_ATTACK;
|
|
5767
|
+
if (ducked) {
|
|
5768
|
+
player.frame = FRAME_crattak1 - 1;
|
|
5769
|
+
player.client.anim_end = FRAME_crattak9;
|
|
5770
|
+
} else {
|
|
5771
|
+
player.frame = FRAME_attack1 - 1;
|
|
5772
|
+
player.client.anim_end = FRAME_attack8;
|
|
5773
|
+
}
|
|
5774
|
+
}
|
|
5775
|
+
function fireHitscan(game, player, start, forward, damage, knockback, mod) {
|
|
5776
|
+
const end = { x: start.x + forward.x * 8192, y: start.y + forward.y * 8192, z: start.z + forward.z * 8192 };
|
|
5777
|
+
const trace = game.trace(
|
|
5778
|
+
start,
|
|
5779
|
+
null,
|
|
5780
|
+
null,
|
|
5781
|
+
end,
|
|
5782
|
+
player,
|
|
5783
|
+
0
|
|
5784
|
+
);
|
|
5785
|
+
if (trace.ent && trace.ent.takedamage) {
|
|
5786
|
+
T_Damage(
|
|
5787
|
+
trace.ent,
|
|
5788
|
+
player,
|
|
5789
|
+
player,
|
|
5790
|
+
ZERO_VEC3,
|
|
5791
|
+
trace.endpos,
|
|
5792
|
+
trace.plane ? trace.plane.normal : ZERO_VEC3,
|
|
5793
|
+
damage,
|
|
5794
|
+
knockback,
|
|
5795
|
+
16 /* BULLET */,
|
|
5796
|
+
mod,
|
|
5797
|
+
game.time,
|
|
5798
|
+
game.multicast
|
|
5799
|
+
);
|
|
5800
|
+
} else {
|
|
5801
|
+
if (trace.plane) {
|
|
5802
|
+
game.multicast(trace.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.GUNSHOT, trace.endpos, trace.plane.normal);
|
|
5803
|
+
}
|
|
5804
|
+
}
|
|
5805
|
+
}
|
|
5806
|
+
function fireMultiplePellets(game, player, start, forward, right, up, count, damage, knockback, hspread, vspread, mod) {
|
|
5807
|
+
for (let i = 0; i < count; i++) {
|
|
5808
|
+
const spread = addVec3(scaleVec3(right, random2.crandom() * hspread), scaleVec3(up, random2.crandom() * vspread));
|
|
5809
|
+
const dir = addVec3(forward, spread);
|
|
5810
|
+
const end = { x: start.x + dir.x * 8192, y: start.y + dir.y * 8192, z: start.z + dir.z * 8192 };
|
|
5811
|
+
const trace = game.trace(start, null, null, end, player, 0);
|
|
5812
|
+
if (trace.ent && trace.ent.takedamage) {
|
|
5813
|
+
T_Damage(
|
|
5814
|
+
trace.ent,
|
|
5815
|
+
player,
|
|
5816
|
+
player,
|
|
5817
|
+
ZERO_VEC3,
|
|
5818
|
+
trace.endpos,
|
|
5819
|
+
trace.plane ? trace.plane.normal : ZERO_VEC3,
|
|
5820
|
+
damage,
|
|
5821
|
+
knockback,
|
|
5822
|
+
16 /* BULLET */,
|
|
5823
|
+
mod,
|
|
5824
|
+
game.time,
|
|
5825
|
+
game.multicast
|
|
5826
|
+
);
|
|
5827
|
+
} else if (trace.plane) {
|
|
5828
|
+
if (random2.frandom() > 0.9) {
|
|
5829
|
+
game.multicast(trace.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.GUNSHOT, trace.endpos, trace.plane.normal);
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5832
|
+
}
|
|
5833
|
+
}
|
|
5834
|
+
function fireRailgun(game, player, start, forward, damage, knockback) {
|
|
5835
|
+
const originalStart = { ...start };
|
|
5836
|
+
let currentStart = { ...start };
|
|
5837
|
+
const end = { x: start.x + forward.x * 8192, y: start.y + forward.y * 8192, z: start.z + forward.z * 8192 };
|
|
5838
|
+
let ignore = player;
|
|
5839
|
+
let count = 0;
|
|
5840
|
+
let finalEnd = end;
|
|
5841
|
+
while (count < 16) {
|
|
5842
|
+
count++;
|
|
5843
|
+
const trace = game.trace(currentStart, null, null, end, ignore, 0);
|
|
5844
|
+
finalEnd = trace.endpos;
|
|
5845
|
+
if (trace.fraction >= 1) {
|
|
5846
|
+
break;
|
|
5847
|
+
}
|
|
5848
|
+
if (trace.ent && trace.ent.takedamage) {
|
|
5849
|
+
T_Damage(
|
|
5850
|
+
trace.ent,
|
|
5851
|
+
player,
|
|
5852
|
+
player,
|
|
5853
|
+
ZERO_VEC3,
|
|
5854
|
+
trace.endpos,
|
|
5855
|
+
trace.plane ? trace.plane.normal : ZERO_VEC3,
|
|
5856
|
+
damage,
|
|
5857
|
+
knockback,
|
|
5858
|
+
4 /* ENERGY */,
|
|
5859
|
+
11 /* RAILGUN */,
|
|
5860
|
+
game.time,
|
|
5861
|
+
game.multicast
|
|
5862
|
+
);
|
|
5863
|
+
}
|
|
5864
|
+
ignore = trace.ent;
|
|
5865
|
+
currentStart = trace.endpos;
|
|
5866
|
+
if (!trace.ent || trace.ent === game.entities.world) {
|
|
5867
|
+
break;
|
|
5868
|
+
}
|
|
5869
|
+
}
|
|
5870
|
+
game.multicast(originalStart, 2 /* Phs */, ServerCommand.temp_entity, TempEntity.RAILTRAIL, originalStart, finalEnd);
|
|
5871
|
+
}
|
|
5872
|
+
function fireShotgun(game, player) {
|
|
5873
|
+
if (!player.client) return;
|
|
5874
|
+
const inventory = player.client.inventory;
|
|
5875
|
+
if (inventory.ammo.counts[AmmoType.Shells] < 1) {
|
|
5876
|
+
return;
|
|
5877
|
+
}
|
|
5878
|
+
inventory.ammo.counts[AmmoType.Shells]--;
|
|
5879
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_SHOTGUN);
|
|
5880
|
+
applyKick(player, -2, 0, -2);
|
|
5881
|
+
setPlayerAttackAnim(player);
|
|
5882
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5883
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5884
|
+
fireMultiplePellets(game, player, source, forward, right, up, 12, 4, 1, 500, 500, 2 /* SHOTGUN */);
|
|
5885
|
+
}
|
|
5886
|
+
function fireSuperShotgun(game, player) {
|
|
5887
|
+
if (!player.client) return;
|
|
5888
|
+
const inventory = player.client.inventory;
|
|
5889
|
+
if (inventory.ammo.counts[AmmoType.Shells] < 2) {
|
|
5890
|
+
return;
|
|
5891
|
+
}
|
|
5892
|
+
inventory.ammo.counts[AmmoType.Shells] -= 2;
|
|
5893
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_SSHOTGUN);
|
|
5894
|
+
applyKick(player, -4, 0, -4);
|
|
5895
|
+
setPlayerAttackAnim(player);
|
|
5896
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5897
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5898
|
+
const { forward: forward1, right: right1, up: up1 } = angleVectors({ ...player.angles, y: player.angles.y - 5 });
|
|
5899
|
+
fireMultiplePellets(game, player, source, forward1, right1, up1, 10, 6, 1, 700, 700, 3 /* SSHOTGUN */);
|
|
5900
|
+
const { forward: forward2, right: right2, up: up2 } = angleVectors({ ...player.angles, y: player.angles.y + 5 });
|
|
5901
|
+
fireMultiplePellets(game, player, source, forward2, right2, up2, 10, 6, 1, 700, 700, 3 /* SSHOTGUN */);
|
|
5902
|
+
}
|
|
5903
|
+
function fireMachinegun(game, player) {
|
|
5904
|
+
if (!player.client) return;
|
|
5905
|
+
const inventory = player.client.inventory;
|
|
5906
|
+
if (inventory.ammo.counts[AmmoType.Bullets] < 1) {
|
|
5907
|
+
return;
|
|
5908
|
+
}
|
|
5909
|
+
inventory.ammo.counts[AmmoType.Bullets]--;
|
|
5910
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_MACHINEGUN);
|
|
5911
|
+
applyKick(player, -1, random2.crandom() * 0.5, 0);
|
|
5912
|
+
setPlayerAttackAnim(player);
|
|
5913
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5914
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5915
|
+
fireHitscan(game, player, source, forward, 8, 1, 4 /* MACHINEGUN */);
|
|
5916
|
+
}
|
|
5917
|
+
function fireChaingun(game, player) {
|
|
5918
|
+
if (!player.client) return;
|
|
5919
|
+
const inventory = player.client.inventory;
|
|
5920
|
+
const weaponState = getWeaponState(player.client.weaponStates, WeaponId.Chaingun);
|
|
5921
|
+
if (game.time - weaponState.lastFireTime > 200) {
|
|
5922
|
+
weaponState.spinupCount = 0;
|
|
5923
|
+
}
|
|
5924
|
+
const spinupCount = (weaponState.spinupCount || 0) + 1;
|
|
5925
|
+
weaponState.spinupCount = spinupCount;
|
|
5926
|
+
let shots;
|
|
5927
|
+
if (spinupCount <= 5) {
|
|
5928
|
+
shots = 1;
|
|
5929
|
+
if (spinupCount === 1) {
|
|
5930
|
+
game.sound(player, 0, "weapons/chngnu1a.wav", 1, 0, 0);
|
|
5931
|
+
}
|
|
5932
|
+
} else {
|
|
5933
|
+
if (spinupCount <= 10) {
|
|
5934
|
+
shots = 2;
|
|
5935
|
+
} else {
|
|
5936
|
+
shots = 3;
|
|
5937
|
+
}
|
|
5938
|
+
game.sound(player, 0, "weapons/chngnl1a.wav", 1, 0, 0);
|
|
5939
|
+
}
|
|
5940
|
+
if (inventory.ammo.counts[AmmoType.Bullets] < shots) {
|
|
5941
|
+
shots = inventory.ammo.counts[AmmoType.Bullets];
|
|
5942
|
+
}
|
|
5943
|
+
if (shots === 0) {
|
|
5944
|
+
return;
|
|
5945
|
+
}
|
|
5946
|
+
inventory.ammo.counts[AmmoType.Bullets] -= shots;
|
|
5947
|
+
const damage = game.deathmatch ? 6 : 8;
|
|
5948
|
+
const knockback = 1;
|
|
5949
|
+
applyKick(player, -0.5, random2.crandom() * (0.5 + shots * 0.15), 0);
|
|
5950
|
+
setPlayerAttackAnim(player);
|
|
5951
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5952
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5953
|
+
for (let i = 0; i < shots; i++) {
|
|
5954
|
+
const spread = addVec3(scaleVec3(right, random2.crandom() * 4), scaleVec3(up, random2.crandom() * 4));
|
|
5955
|
+
const dir = addVec3(forward, spread);
|
|
5956
|
+
fireHitscan(game, player, source, dir, damage, knockback, 5 /* CHAINGUN */);
|
|
5957
|
+
}
|
|
5958
|
+
const flash = MZ_CHAINGUN1 + shots - 1;
|
|
5959
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, flash);
|
|
5960
|
+
}
|
|
5961
|
+
function fireRailgunShot(game, player) {
|
|
5962
|
+
if (!player.client) return;
|
|
5963
|
+
const inventory = player.client.inventory;
|
|
5964
|
+
if (inventory.ammo.counts[AmmoType.Slugs] < 1) {
|
|
5965
|
+
return;
|
|
5966
|
+
}
|
|
5967
|
+
inventory.ammo.counts[AmmoType.Slugs]--;
|
|
5968
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_RAILGUN);
|
|
5969
|
+
applyKick(player, -3, 0, -3);
|
|
5970
|
+
setPlayerAttackAnim(player);
|
|
5971
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5972
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5973
|
+
const damage = game.deathmatch ? 100 : 125;
|
|
5974
|
+
const knockback = game.deathmatch ? 200 : 225;
|
|
5975
|
+
fireRailgun(game, player, source, forward, damage, knockback);
|
|
5976
|
+
}
|
|
5977
|
+
function fireHyperBlaster(game, player) {
|
|
5978
|
+
if (!player.client) return;
|
|
5979
|
+
const inventory = player.client.inventory;
|
|
5980
|
+
if (inventory.ammo.counts[AmmoType.Cells] < 1) {
|
|
5981
|
+
return;
|
|
5982
|
+
}
|
|
5983
|
+
inventory.ammo.counts[AmmoType.Cells]--;
|
|
5984
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_HYPERBLASTER);
|
|
5985
|
+
applyKick(player, -0.5, 0, 0);
|
|
5986
|
+
setPlayerAttackAnim(player);
|
|
5987
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5988
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5989
|
+
const damage = game.deathmatch ? 15 : 20;
|
|
5990
|
+
createBlasterBolt(game.entities, player, source, forward, damage, 1e3, 10 /* HYPERBLASTER */);
|
|
5991
|
+
}
|
|
5992
|
+
function fireBlaster(game, player) {
|
|
5993
|
+
if (!player.client) return;
|
|
5994
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_BLASTER);
|
|
5995
|
+
applyKick(player, -0.5, 0, 0);
|
|
5996
|
+
setPlayerAttackAnim(player);
|
|
5997
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
5998
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
5999
|
+
createBlasterBolt(game.entities, player, source, forward, 15, 1500, 1 /* BLASTER */);
|
|
6000
|
+
}
|
|
6001
|
+
function fireRocket(game, player) {
|
|
6002
|
+
if (!player.client) return;
|
|
6003
|
+
const inventory = player.client.inventory;
|
|
6004
|
+
if (inventory.ammo.counts[AmmoType.Rockets] < 1) {
|
|
6005
|
+
return;
|
|
6006
|
+
}
|
|
6007
|
+
inventory.ammo.counts[AmmoType.Rockets]--;
|
|
6008
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_ROCKET);
|
|
6009
|
+
applyKick(player, -2, 0, -2);
|
|
6010
|
+
setPlayerAttackAnim(player);
|
|
6011
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6012
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6013
|
+
const damage = 100 + game.random.irandom(21);
|
|
6014
|
+
const radiusDamage = 120;
|
|
6015
|
+
createRocket(game.entities, player, source, forward, damage, radiusDamage, 650);
|
|
6016
|
+
}
|
|
6017
|
+
function fireGrenadeLauncher(game, player) {
|
|
6018
|
+
if (!player.client) return;
|
|
6019
|
+
const inventory = player.client.inventory;
|
|
6020
|
+
if (inventory.ammo.counts[AmmoType.Grenades] < 1) {
|
|
6021
|
+
return;
|
|
6022
|
+
}
|
|
6023
|
+
inventory.ammo.counts[AmmoType.Grenades]--;
|
|
6024
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_GRENADE);
|
|
6025
|
+
applyKick(player, -2, 0, -2);
|
|
6026
|
+
setPlayerAttackAnim(player);
|
|
6027
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6028
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6029
|
+
createGrenade(game.entities, player, source, forward, 120, 600);
|
|
6030
|
+
}
|
|
6031
|
+
function fireBFG(game, player) {
|
|
6032
|
+
if (!player.client) return;
|
|
6033
|
+
const inventory = player.client.inventory;
|
|
6034
|
+
const gun_frame = player.client.gun_frame;
|
|
6035
|
+
const isPrimeFrame = gun_frame === 9 || gun_frame === 0 || gun_frame === void 0;
|
|
6036
|
+
const isFireFrame = gun_frame === 22 || gun_frame === 0 || gun_frame === void 0;
|
|
6037
|
+
if (isPrimeFrame) {
|
|
6038
|
+
if (inventory.ammo.counts[AmmoType.Cells] < 50) {
|
|
6039
|
+
return;
|
|
6040
|
+
}
|
|
6041
|
+
inventory.ammo.counts[AmmoType.Cells] -= 50;
|
|
6042
|
+
game.sound(player, 0, "weapons/bfg__f1y.wav", 1, 0, 0);
|
|
6043
|
+
}
|
|
6044
|
+
if (isFireFrame) {
|
|
6045
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_BFG);
|
|
6046
|
+
applyKick(player, -5, 0, -2);
|
|
6047
|
+
setPlayerAttackAnim(player);
|
|
6048
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6049
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6050
|
+
const damage = game.deathmatch ? 200 : 500;
|
|
6051
|
+
createBfgBall(game.entities, player, source, forward, damage, 400, 200);
|
|
6052
|
+
} else if (gun_frame === void 0 || gun_frame === 0) {
|
|
6053
|
+
}
|
|
6054
|
+
}
|
|
6055
|
+
|
|
6056
|
+
// src/combat/weapons/animation.ts
|
|
6057
|
+
function Weapon_AnimationTime(ent) {
|
|
6058
|
+
let time = 0.1;
|
|
6059
|
+
if (ent.client?.inventory.powerups.has(PowerupId.TechHaste)) {
|
|
6060
|
+
time *= 0.5;
|
|
6061
|
+
}
|
|
6062
|
+
if (ent.client?.inventory.powerups.has(PowerupId.QuadFire)) {
|
|
6063
|
+
time *= 0.25;
|
|
6064
|
+
}
|
|
6065
|
+
return time;
|
|
6066
|
+
}
|
|
6067
|
+
function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_DEACTIVATE_LAST, pause_frames, fire_frames, fire, sys) {
|
|
6068
|
+
if (!ent.client) return;
|
|
6069
|
+
const client = ent.client;
|
|
6070
|
+
const time = sys.timeSeconds;
|
|
6071
|
+
if (client.weapon_think_time && client.weapon_think_time <= time) {
|
|
6072
|
+
client.weapon_think_time = 0;
|
|
6073
|
+
}
|
|
6074
|
+
if (client.weapon_think_time && client.weapon_think_time > time) {
|
|
6075
|
+
return;
|
|
6076
|
+
}
|
|
6077
|
+
if (client.weaponstate === 1 /* WEAPON_ACTIVATING */) {
|
|
6078
|
+
if (client.gun_frame < FRAME_ACTIVATE_LAST) {
|
|
6079
|
+
client.gun_frame++;
|
|
6080
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6081
|
+
return;
|
|
6082
|
+
}
|
|
6083
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
6084
|
+
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
6085
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6086
|
+
return;
|
|
6087
|
+
}
|
|
6088
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
6089
|
+
if (client.gun_frame < FRAME_DEACTIVATE_LAST) {
|
|
6090
|
+
client.gun_frame++;
|
|
6091
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6092
|
+
return;
|
|
6093
|
+
}
|
|
6094
|
+
Promise.resolve().then(() => (init_switching(), switching_exports)).then(({ ChangeWeapon: ChangeWeapon2 }) => {
|
|
6095
|
+
ChangeWeapon2(ent);
|
|
6096
|
+
});
|
|
6097
|
+
return;
|
|
6098
|
+
}
|
|
6099
|
+
if (client.weaponstate === 0 /* WEAPON_READY */) {
|
|
6100
|
+
if (client.buttons & 1) {
|
|
6101
|
+
client.weaponstate = 3 /* WEAPON_FIRING */;
|
|
6102
|
+
client.gun_frame = FRAME_ACTIVATE_LAST + 1;
|
|
6103
|
+
return;
|
|
6104
|
+
}
|
|
6105
|
+
if (client.gun_frame < FRAME_IDLE_LAST) {
|
|
6106
|
+
client.gun_frame++;
|
|
6107
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6108
|
+
if (pause_frames) {
|
|
6109
|
+
for (const frame of pause_frames) {
|
|
6110
|
+
if (client.gun_frame === frame) {
|
|
6111
|
+
if (random2.frandom() < 0.5) {
|
|
6112
|
+
return;
|
|
6113
|
+
}
|
|
6114
|
+
}
|
|
6115
|
+
}
|
|
6116
|
+
}
|
|
6117
|
+
return;
|
|
6118
|
+
}
|
|
6119
|
+
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
6120
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6121
|
+
return;
|
|
6122
|
+
}
|
|
6123
|
+
if (client.weaponstate === 3 /* WEAPON_FIRING */) {
|
|
6124
|
+
if (fire_frames) {
|
|
6125
|
+
for (const frame of fire_frames) {
|
|
6126
|
+
if (client.gun_frame === frame) {
|
|
6127
|
+
if (fire) fire(ent);
|
|
6128
|
+
break;
|
|
6129
|
+
}
|
|
6130
|
+
}
|
|
6131
|
+
}
|
|
6132
|
+
if (client.gun_frame < FRAME_FIRE_LAST) {
|
|
6133
|
+
client.gun_frame++;
|
|
6134
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6135
|
+
return;
|
|
6136
|
+
}
|
|
6137
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
6138
|
+
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
6139
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6140
|
+
return;
|
|
6141
|
+
}
|
|
5364
6142
|
}
|
|
5365
|
-
function
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
if (
|
|
5370
|
-
|
|
5371
|
-
}
|
|
5372
|
-
|
|
5373
|
-
entity.speed = 200;
|
|
6143
|
+
function Weapon_Repeating(ent, FRAME_FIRE_FRAME, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_PAUSE, FRAME_NOOP, fire, sys) {
|
|
6144
|
+
if (!ent.client) return;
|
|
6145
|
+
const client = ent.client;
|
|
6146
|
+
if (client.weaponstate === 3 /* WEAPON_FIRING */) {
|
|
6147
|
+
if (client.gun_frame === FRAME_FIRE_LAST || client.gun_frame === FRAME_IDLE_LAST) {
|
|
6148
|
+
client.gun_frame = FRAME_FIRE_FRAME;
|
|
6149
|
+
} else {
|
|
6150
|
+
client.gun_frame++;
|
|
5374
6151
|
}
|
|
5375
|
-
|
|
5376
|
-
|
|
5377
|
-
const touchHandler = (self, other) => monsterJumpTouch(self, other);
|
|
5378
|
-
entity.touch = touchHandler;
|
|
5379
|
-
if (entity.spawnflags & MONSTERJUMP_SPAWNFLAGS.StartOff) {
|
|
5380
|
-
entity.solid = 0 /* Not */;
|
|
5381
|
-
entity.touch = void 0;
|
|
6152
|
+
if (fire) {
|
|
6153
|
+
fire(ent);
|
|
5382
6154
|
}
|
|
5383
|
-
if (
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
self.touch = self.solid === 1 /* Trigger */ ? touchHandler : void 0;
|
|
5387
|
-
};
|
|
6155
|
+
if (!(client.buttons & 1)) {
|
|
6156
|
+
client.gun_frame = FRAME_IDLE_LAST + 1;
|
|
6157
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
5388
6158
|
}
|
|
5389
|
-
}
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
registerTriggerGravity(registry);
|
|
5402
|
-
registerTriggerElevator(registry);
|
|
5403
|
-
registerTriggerMonsterJump(registry);
|
|
5404
|
-
}
|
|
5405
|
-
|
|
5406
|
-
// src/combat/weapons/state.ts
|
|
5407
|
-
var WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
5408
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
5409
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
5410
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
5411
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
5412
|
-
return WeaponStateEnum2;
|
|
5413
|
-
})(WeaponStateEnum || {});
|
|
5414
|
-
function createPlayerWeaponStates() {
|
|
5415
|
-
return {
|
|
5416
|
-
states: /* @__PURE__ */ new Map()
|
|
5417
|
-
};
|
|
5418
|
-
}
|
|
5419
|
-
function getWeaponState(playerStates, weaponId) {
|
|
5420
|
-
let state = playerStates.states.get(weaponId);
|
|
5421
|
-
if (!state) {
|
|
5422
|
-
state = { lastFireTime: 0 };
|
|
5423
|
-
playerStates.states.set(weaponId, state);
|
|
6159
|
+
} else {
|
|
6160
|
+
Weapon_Generic(
|
|
6161
|
+
ent,
|
|
6162
|
+
FRAME_FIRE_FRAME - 1,
|
|
6163
|
+
FRAME_FIRE_LAST,
|
|
6164
|
+
FRAME_IDLE_LAST,
|
|
6165
|
+
FRAME_PAUSE,
|
|
6166
|
+
null,
|
|
6167
|
+
null,
|
|
6168
|
+
fire,
|
|
6169
|
+
sys
|
|
6170
|
+
);
|
|
5424
6171
|
}
|
|
5425
|
-
return state;
|
|
5426
6172
|
}
|
|
5427
6173
|
|
|
5428
|
-
// src/buttons.ts
|
|
5429
|
-
var BUTTON_ATTACK = 1;
|
|
5430
|
-
|
|
5431
6174
|
// src/combat/weapons/chaingun.ts
|
|
5432
6175
|
function chaingunThink(player, sys) {
|
|
5433
|
-
if (!player.client) {
|
|
5434
|
-
return;
|
|
5435
|
-
}
|
|
5436
6176
|
const weaponState = getWeaponState(player.client.weaponStates, WeaponId.Chaingun);
|
|
5437
6177
|
if (!(player.client.buttons & BUTTON_ATTACK) && weaponState.spinupCount && weaponState.spinupCount > 0) {
|
|
5438
6178
|
sys.sound(player, 0, "weapons/chngnd1a.wav", 1, 0, 0);
|
|
5439
6179
|
weaponState.spinupCount = 0;
|
|
5440
6180
|
}
|
|
6181
|
+
Weapon_Repeating(
|
|
6182
|
+
player,
|
|
6183
|
+
FRAME_CHAINGUN_FIRE_FRAME,
|
|
6184
|
+
FRAME_CHAINGUN_FIRE_LAST,
|
|
6185
|
+
FRAME_CHAINGUN_IDLE_LAST,
|
|
6186
|
+
FRAME_CHAINGUN_DEACTIVATE_LAST,
|
|
6187
|
+
0,
|
|
6188
|
+
// FRAME_NOOP
|
|
6189
|
+
(ent) => fireChaingun(sys.game, ent),
|
|
6190
|
+
sys
|
|
6191
|
+
);
|
|
6192
|
+
}
|
|
6193
|
+
|
|
6194
|
+
// src/combat/weapons/shotgun.ts
|
|
6195
|
+
var SHOTGUN_PAUSE_FRAMES = [22, 28, 34];
|
|
6196
|
+
var SHOTGUN_FIRE_FRAMES = [8];
|
|
6197
|
+
function shotgunThink(player, sys) {
|
|
6198
|
+
Weapon_Generic(
|
|
6199
|
+
player,
|
|
6200
|
+
FRAME_SHOTGUN_ACTIVATE_LAST,
|
|
6201
|
+
FRAME_SHOTGUN_FIRE_LAST,
|
|
6202
|
+
FRAME_SHOTGUN_IDLE_LAST,
|
|
6203
|
+
FRAME_SHOTGUN_DEACTIVATE_LAST,
|
|
6204
|
+
SHOTGUN_PAUSE_FRAMES,
|
|
6205
|
+
SHOTGUN_FIRE_FRAMES,
|
|
6206
|
+
(ent) => fireShotgun(sys.game, ent),
|
|
6207
|
+
sys
|
|
6208
|
+
);
|
|
6209
|
+
}
|
|
6210
|
+
|
|
6211
|
+
// src/combat/weapons/supershotgun.ts
|
|
6212
|
+
var SSHOTGUN_PAUSE_FRAMES = [29, 42, 57];
|
|
6213
|
+
var SSHOTGUN_FIRE_FRAMES = [22, 28];
|
|
6214
|
+
function superShotgunThink(player, sys) {
|
|
6215
|
+
Weapon_Generic(
|
|
6216
|
+
player,
|
|
6217
|
+
FRAME_SSHOTGUN_ACTIVATE_LAST,
|
|
6218
|
+
FRAME_SSHOTGUN_FIRE_LAST,
|
|
6219
|
+
FRAME_SSHOTGUN_IDLE_LAST,
|
|
6220
|
+
FRAME_SSHOTGUN_DEACTIVATE_LAST,
|
|
6221
|
+
SSHOTGUN_PAUSE_FRAMES,
|
|
6222
|
+
SSHOTGUN_FIRE_FRAMES,
|
|
6223
|
+
(ent) => fireSuperShotgun(sys.game, ent),
|
|
6224
|
+
sys
|
|
6225
|
+
);
|
|
6226
|
+
}
|
|
6227
|
+
|
|
6228
|
+
// src/combat/weapons/machinegun.ts
|
|
6229
|
+
var MACHINEGUN_PAUSE_FRAMES = [23, 45];
|
|
6230
|
+
var MACHINEGUN_FIRE_FRAMES = [4, 5, 30, 31];
|
|
6231
|
+
function machinegunThink(player, sys) {
|
|
6232
|
+
Weapon_Generic(
|
|
6233
|
+
player,
|
|
6234
|
+
FRAME_MACHINEGUN_ACTIVATE_LAST,
|
|
6235
|
+
FRAME_MACHINEGUN_FIRE_LAST,
|
|
6236
|
+
FRAME_MACHINEGUN_IDLE_LAST,
|
|
6237
|
+
FRAME_MACHINEGUN_DEACTIVATE_LAST,
|
|
6238
|
+
MACHINEGUN_PAUSE_FRAMES,
|
|
6239
|
+
MACHINEGUN_FIRE_FRAMES,
|
|
6240
|
+
(ent) => fireMachinegun(sys.game, ent),
|
|
6241
|
+
sys
|
|
6242
|
+
);
|
|
6243
|
+
}
|
|
6244
|
+
|
|
6245
|
+
// src/combat/weapons/rocket.ts
|
|
6246
|
+
var ROCKET_PAUSE_FRAMES = [25, 33];
|
|
6247
|
+
var ROCKET_FIRE_FRAMES = [4];
|
|
6248
|
+
function rocketLauncherThink(player, sys) {
|
|
6249
|
+
Weapon_Generic(
|
|
6250
|
+
player,
|
|
6251
|
+
FRAME_ROCKET_ACTIVATE_LAST,
|
|
6252
|
+
FRAME_ROCKET_FIRE_LAST,
|
|
6253
|
+
FRAME_ROCKET_IDLE_LAST,
|
|
6254
|
+
FRAME_ROCKET_DEACTIVATE_LAST,
|
|
6255
|
+
ROCKET_PAUSE_FRAMES,
|
|
6256
|
+
ROCKET_FIRE_FRAMES,
|
|
6257
|
+
(ent) => fireRocket(sys.game, ent),
|
|
6258
|
+
sys
|
|
6259
|
+
);
|
|
6260
|
+
}
|
|
6261
|
+
|
|
6262
|
+
// src/combat/weapons/hyperblaster.ts
|
|
6263
|
+
function hyperBlasterThink(player, sys) {
|
|
6264
|
+
Weapon_Repeating(
|
|
6265
|
+
player,
|
|
6266
|
+
FRAME_HYPERBLASTER_FIRE_FRAME,
|
|
6267
|
+
FRAME_HYPERBLASTER_FIRE_LAST,
|
|
6268
|
+
FRAME_HYPERBLASTER_IDLE_LAST,
|
|
6269
|
+
FRAME_HYPERBLASTER_DEACTIVATE_LAST,
|
|
6270
|
+
0,
|
|
6271
|
+
// FRAME_NOOP
|
|
6272
|
+
(ent) => fireHyperBlaster(sys.game, ent),
|
|
6273
|
+
sys
|
|
6274
|
+
);
|
|
6275
|
+
}
|
|
6276
|
+
|
|
6277
|
+
// src/combat/weapons/railgun.ts
|
|
6278
|
+
var RAILGUN_PAUSE_FRAMES = [56];
|
|
6279
|
+
var RAILGUN_FIRE_FRAMES = [4];
|
|
6280
|
+
function railgunThink(player, sys) {
|
|
6281
|
+
Weapon_Generic(
|
|
6282
|
+
player,
|
|
6283
|
+
FRAME_RAILGUN_ACTIVATE_LAST,
|
|
6284
|
+
FRAME_RAILGUN_FIRE_LAST,
|
|
6285
|
+
FRAME_RAILGUN_IDLE_LAST,
|
|
6286
|
+
FRAME_RAILGUN_DEACTIVATE_LAST,
|
|
6287
|
+
RAILGUN_PAUSE_FRAMES,
|
|
6288
|
+
RAILGUN_FIRE_FRAMES,
|
|
6289
|
+
(ent) => fireRailgunShot(sys.game, ent),
|
|
6290
|
+
sys
|
|
6291
|
+
);
|
|
6292
|
+
}
|
|
6293
|
+
|
|
6294
|
+
// src/combat/weapons/bfg.ts
|
|
6295
|
+
var BFG_PAUSE_FRAMES = [39, 45, 50, 54];
|
|
6296
|
+
var BFG_FIRE_FRAMES = [9, 22];
|
|
6297
|
+
function bfgThink2(player, sys) {
|
|
6298
|
+
Weapon_Generic(
|
|
6299
|
+
player,
|
|
6300
|
+
FRAME_BFG_ACTIVATE_LAST,
|
|
6301
|
+
FRAME_BFG_FIRE_LAST,
|
|
6302
|
+
FRAME_BFG_IDLE_LAST,
|
|
6303
|
+
FRAME_BFG_DEACTIVATE_LAST,
|
|
6304
|
+
BFG_PAUSE_FRAMES,
|
|
6305
|
+
BFG_FIRE_FRAMES,
|
|
6306
|
+
(ent) => fireBFG(sys.game, ent),
|
|
6307
|
+
sys
|
|
6308
|
+
);
|
|
6309
|
+
}
|
|
6310
|
+
|
|
6311
|
+
// src/combat/weapons/grenadelauncher.ts
|
|
6312
|
+
var GRENADELAUNCHER_PAUSE_FRAMES = [34, 51, 59];
|
|
6313
|
+
var GRENADELAUNCHER_FIRE_FRAMES = [6];
|
|
6314
|
+
function grenadeLauncherThink(player, sys) {
|
|
6315
|
+
Weapon_Generic(
|
|
6316
|
+
player,
|
|
6317
|
+
FRAME_GRENADELAUNCHER_ACTIVATE_LAST,
|
|
6318
|
+
FRAME_GRENADELAUNCHER_FIRE_LAST,
|
|
6319
|
+
FRAME_GRENADELAUNCHER_IDLE_LAST,
|
|
6320
|
+
FRAME_GRENADELAUNCHER_DEACTIVATE_LAST,
|
|
6321
|
+
GRENADELAUNCHER_PAUSE_FRAMES,
|
|
6322
|
+
GRENADELAUNCHER_FIRE_FRAMES,
|
|
6323
|
+
(ent) => fireGrenadeLauncher(sys.game, ent),
|
|
6324
|
+
sys
|
|
6325
|
+
);
|
|
6326
|
+
}
|
|
6327
|
+
|
|
6328
|
+
// src/combat/weapons/blaster.ts
|
|
6329
|
+
var BLASTER_PAUSE_FRAMES = [19, 32];
|
|
6330
|
+
var BLASTER_FIRE_FRAMES = [5];
|
|
6331
|
+
function blasterThink(player, sys) {
|
|
6332
|
+
Weapon_Generic(
|
|
6333
|
+
player,
|
|
6334
|
+
FRAME_BLASTER_ACTIVATE_LAST,
|
|
6335
|
+
FRAME_BLASTER_FIRE_LAST,
|
|
6336
|
+
FRAME_BLASTER_IDLE_LAST,
|
|
6337
|
+
FRAME_BLASTER_DEACTIVATE_LAST,
|
|
6338
|
+
BLASTER_PAUSE_FRAMES,
|
|
6339
|
+
BLASTER_FIRE_FRAMES,
|
|
6340
|
+
(ent) => fireBlaster(sys.game, ent),
|
|
6341
|
+
sys
|
|
6342
|
+
);
|
|
5441
6343
|
}
|
|
5442
6344
|
|
|
5443
6345
|
// src/inventory/items.ts
|
|
@@ -5450,7 +6352,8 @@ var WEAPON_ITEMS = {
|
|
|
5450
6352
|
ammoType: null,
|
|
5451
6353
|
initialAmmo: 0,
|
|
5452
6354
|
pickupAmmo: 0,
|
|
5453
|
-
fireRate: 0.5
|
|
6355
|
+
fireRate: 0.5,
|
|
6356
|
+
think: blasterThink
|
|
5454
6357
|
},
|
|
5455
6358
|
"weapon_shotgun": {
|
|
5456
6359
|
type: "weapon",
|
|
@@ -5460,7 +6363,8 @@ var WEAPON_ITEMS = {
|
|
|
5460
6363
|
ammoType: AmmoType.Shells,
|
|
5461
6364
|
initialAmmo: 10,
|
|
5462
6365
|
pickupAmmo: 10,
|
|
5463
|
-
fireRate: 1
|
|
6366
|
+
fireRate: 1,
|
|
6367
|
+
think: shotgunThink
|
|
5464
6368
|
},
|
|
5465
6369
|
"weapon_supershotgun": {
|
|
5466
6370
|
type: "weapon",
|
|
@@ -5470,7 +6374,8 @@ var WEAPON_ITEMS = {
|
|
|
5470
6374
|
ammoType: AmmoType.Shells,
|
|
5471
6375
|
initialAmmo: 10,
|
|
5472
6376
|
pickupAmmo: 10,
|
|
5473
|
-
fireRate: 1
|
|
6377
|
+
fireRate: 1,
|
|
6378
|
+
think: superShotgunThink
|
|
5474
6379
|
},
|
|
5475
6380
|
"weapon_machinegun": {
|
|
5476
6381
|
type: "weapon",
|
|
@@ -5481,7 +6386,7 @@ var WEAPON_ITEMS = {
|
|
|
5481
6386
|
initialAmmo: 50,
|
|
5482
6387
|
pickupAmmo: 50,
|
|
5483
6388
|
fireRate: 0.1,
|
|
5484
|
-
think:
|
|
6389
|
+
think: machinegunThink
|
|
5485
6390
|
},
|
|
5486
6391
|
"weapon_chaingun": {
|
|
5487
6392
|
type: "weapon",
|
|
@@ -5491,7 +6396,8 @@ var WEAPON_ITEMS = {
|
|
|
5491
6396
|
ammoType: AmmoType.Bullets,
|
|
5492
6397
|
initialAmmo: 50,
|
|
5493
6398
|
pickupAmmo: 50,
|
|
5494
|
-
fireRate: 0.1
|
|
6399
|
+
fireRate: 0.1,
|
|
6400
|
+
think: chaingunThink
|
|
5495
6401
|
},
|
|
5496
6402
|
"weapon_grenades": {
|
|
5497
6403
|
type: "weapon",
|
|
@@ -5511,7 +6417,8 @@ var WEAPON_ITEMS = {
|
|
|
5511
6417
|
ammoType: AmmoType.Grenades,
|
|
5512
6418
|
initialAmmo: 10,
|
|
5513
6419
|
pickupAmmo: 10,
|
|
5514
|
-
fireRate: 1
|
|
6420
|
+
fireRate: 1,
|
|
6421
|
+
think: grenadeLauncherThink
|
|
5515
6422
|
},
|
|
5516
6423
|
"weapon_rocketlauncher": {
|
|
5517
6424
|
type: "weapon",
|
|
@@ -5521,7 +6428,8 @@ var WEAPON_ITEMS = {
|
|
|
5521
6428
|
ammoType: AmmoType.Rockets,
|
|
5522
6429
|
initialAmmo: 5,
|
|
5523
6430
|
pickupAmmo: 5,
|
|
5524
|
-
fireRate: 1
|
|
6431
|
+
fireRate: 1,
|
|
6432
|
+
think: rocketLauncherThink
|
|
5525
6433
|
},
|
|
5526
6434
|
"weapon_hyperblaster": {
|
|
5527
6435
|
type: "weapon",
|
|
@@ -5531,7 +6439,8 @@ var WEAPON_ITEMS = {
|
|
|
5531
6439
|
ammoType: AmmoType.Cells,
|
|
5532
6440
|
initialAmmo: 50,
|
|
5533
6441
|
pickupAmmo: 50,
|
|
5534
|
-
fireRate: 0.1
|
|
6442
|
+
fireRate: 0.1,
|
|
6443
|
+
think: hyperBlasterThink
|
|
5535
6444
|
},
|
|
5536
6445
|
"weapon_railgun": {
|
|
5537
6446
|
type: "weapon",
|
|
@@ -5541,7 +6450,8 @@ var WEAPON_ITEMS = {
|
|
|
5541
6450
|
ammoType: AmmoType.Slugs,
|
|
5542
6451
|
initialAmmo: 10,
|
|
5543
6452
|
pickupAmmo: 10,
|
|
5544
|
-
fireRate: 1.5
|
|
6453
|
+
fireRate: 1.5,
|
|
6454
|
+
think: railgunThink
|
|
5545
6455
|
},
|
|
5546
6456
|
"weapon_bfg": {
|
|
5547
6457
|
type: "weapon",
|
|
@@ -5551,7 +6461,8 @@ var WEAPON_ITEMS = {
|
|
|
5551
6461
|
ammoType: AmmoType.Cells,
|
|
5552
6462
|
initialAmmo: 50,
|
|
5553
6463
|
pickupAmmo: 50,
|
|
5554
|
-
fireRate: 1
|
|
6464
|
+
fireRate: 1,
|
|
6465
|
+
think: bfgThink2
|
|
5555
6466
|
},
|
|
5556
6467
|
// Rogue Weapons
|
|
5557
6468
|
"weapon_boomer": {
|
|
@@ -5606,7 +6517,6 @@ var WEAPON_ITEMS = {
|
|
|
5606
6517
|
fireRate: 0.8
|
|
5607
6518
|
// Guessing fire rate, refine if needed
|
|
5608
6519
|
}
|
|
5609
|
-
// ... add others as we implement them
|
|
5610
6520
|
};
|
|
5611
6521
|
var HEALTH_ITEMS = {
|
|
5612
6522
|
"item_health_small": {
|
|
@@ -5866,6 +6776,7 @@ function createKeyPickupEntity(game, keyItem) {
|
|
|
5866
6776
|
}
|
|
5867
6777
|
|
|
5868
6778
|
// src/entities/items/ammo.ts
|
|
6779
|
+
init_ammo();
|
|
5869
6780
|
function createAmmoPickupEntity(game, itemId) {
|
|
5870
6781
|
const def = getAmmoItemDefinition(itemId);
|
|
5871
6782
|
const respawn = (self) => {
|
|
@@ -5920,6 +6831,7 @@ function createPowerArmorPickupEntity(game, item) {
|
|
|
5920
6831
|
}
|
|
5921
6832
|
|
|
5922
6833
|
// src/entities/items.ts
|
|
6834
|
+
init_ammo();
|
|
5923
6835
|
function registerItemSpawns(game, registry) {
|
|
5924
6836
|
for (const weaponItem of Object.values(WEAPON_ITEMS)) {
|
|
5925
6837
|
registry.register(weaponItem.id, (entity) => {
|
|
@@ -5958,6 +6870,70 @@ function registerItemSpawns(game, registry) {
|
|
|
5958
6870
|
}
|
|
5959
6871
|
}
|
|
5960
6872
|
|
|
6873
|
+
// src/entities/funcs.ts
|
|
6874
|
+
init_esm();
|
|
6875
|
+
|
|
6876
|
+
// src/entities/gibs.ts
|
|
6877
|
+
init_esm();
|
|
6878
|
+
var random3 = createRandomGenerator();
|
|
6879
|
+
var GIB_METALLIC = 1;
|
|
6880
|
+
var GIB_DEBRIS = 2;
|
|
6881
|
+
function spawnGib(sys, origin, damage, model, type) {
|
|
6882
|
+
const gib = sys.spawn();
|
|
6883
|
+
gib.classname = "gib";
|
|
6884
|
+
gib.origin = {
|
|
6885
|
+
x: origin.x + (random3.frandom() - 0.5) * 20,
|
|
6886
|
+
y: origin.y + (random3.frandom() - 0.5) * 20,
|
|
6887
|
+
z: origin.z + (random3.frandom() - 0.5) * 20
|
|
6888
|
+
};
|
|
6889
|
+
gib.velocity = {
|
|
6890
|
+
x: (random3.frandom() - 0.5) * 300,
|
|
6891
|
+
y: (random3.frandom() - 0.5) * 300,
|
|
6892
|
+
z: 200 + random3.frandom() * 100
|
|
6893
|
+
};
|
|
6894
|
+
gib.movetype = 9 /* Bounce */;
|
|
6895
|
+
gib.solid = 0 /* Not */;
|
|
6896
|
+
gib.clipmask = 1;
|
|
6897
|
+
gib.avelocity = {
|
|
6898
|
+
x: random3.crandom() * 600,
|
|
6899
|
+
y: random3.crandom() * 600,
|
|
6900
|
+
z: random3.crandom() * 600
|
|
6901
|
+
};
|
|
6902
|
+
const defaultModels = [
|
|
6903
|
+
"models/objects/gibs/bone/tris.md2",
|
|
6904
|
+
"models/objects/gibs/meat/tris.md2",
|
|
6905
|
+
"models/objects/gibs/sm_meat/tris.md2"
|
|
6906
|
+
];
|
|
6907
|
+
const modelName = model || defaultModels[Math.floor(random3.frandom() * defaultModels.length)];
|
|
6908
|
+
gib.modelindex = sys.modelIndex(modelName);
|
|
6909
|
+
gib.mins = { x: -2, y: -2, z: -2 };
|
|
6910
|
+
gib.maxs = { x: 2, y: 2, z: 2 };
|
|
6911
|
+
if (type && type & GIB_METALLIC) {
|
|
6912
|
+
}
|
|
6913
|
+
gib.think = (self) => {
|
|
6914
|
+
sys.free(self);
|
|
6915
|
+
};
|
|
6916
|
+
sys.scheduleThink(gib, sys.timeSeconds + 10 + random3.frandom() * 10);
|
|
6917
|
+
sys.finalizeSpawn(gib);
|
|
6918
|
+
return gib;
|
|
6919
|
+
}
|
|
6920
|
+
function throwGibs(sys, origin, damageOrDefs) {
|
|
6921
|
+
if (typeof damageOrDefs === "number") {
|
|
6922
|
+
const damage = damageOrDefs;
|
|
6923
|
+
const count = 4 + Math.floor(random3.frandom() * 4);
|
|
6924
|
+
for (let i = 0; i < count; i++) {
|
|
6925
|
+
spawnGib(sys, origin, damage);
|
|
6926
|
+
}
|
|
6927
|
+
} else {
|
|
6928
|
+
const defs = damageOrDefs;
|
|
6929
|
+
for (const def of defs) {
|
|
6930
|
+
for (let i = 0; i < def.count; i++) {
|
|
6931
|
+
spawnGib(sys, origin, 0, def.model, def.flags);
|
|
6932
|
+
}
|
|
6933
|
+
}
|
|
6934
|
+
}
|
|
6935
|
+
}
|
|
6936
|
+
|
|
5961
6937
|
// src/entities/funcs.ts
|
|
5962
6938
|
function move_calc(ent, dest, context, done) {
|
|
5963
6939
|
const dt = 0.1;
|
|
@@ -6602,15 +7578,99 @@ var func_water = (entity, context) => {
|
|
|
6602
7578
|
entity.solid = 3 /* Bsp */;
|
|
6603
7579
|
entity.movetype = 2 /* Push */;
|
|
6604
7580
|
};
|
|
7581
|
+
var SPAWNFLAGS_EXPLOSIVE_TRIGGER_SPAWN = 1;
|
|
7582
|
+
var SPAWNFLAGS_EXPLOSIVE_ANIMATED = 2;
|
|
7583
|
+
var SPAWNFLAGS_EXPLOSIVE_ANIMATED_FAST = 4;
|
|
7584
|
+
var SPAWNFLAGS_EXPLOSIVE_INACTIVE = 8;
|
|
7585
|
+
var SPAWNFLAGS_EXPLOSIVE_ALWAYS_SHOOTABLE = 16;
|
|
6605
7586
|
var func_explosive = (entity, context) => {
|
|
6606
|
-
|
|
7587
|
+
const sys = context.entities;
|
|
6607
7588
|
entity.movetype = 2 /* Push */;
|
|
6608
|
-
|
|
6609
|
-
|
|
6610
|
-
|
|
6611
|
-
|
|
6612
|
-
|
|
7589
|
+
const func_explosive_spawn = (self, other, activator) => {
|
|
7590
|
+
self.solid = 3 /* Bsp */;
|
|
7591
|
+
self.svflags &= ~1 /* NoClient */;
|
|
7592
|
+
self.use = void 0;
|
|
7593
|
+
sys.linkentity(self);
|
|
7594
|
+
sys.killBox(self);
|
|
7595
|
+
};
|
|
7596
|
+
const func_explosive_explode = (self, inflictor, attacker, damage) => {
|
|
7597
|
+
self.takedamage = false;
|
|
7598
|
+
const ent = self;
|
|
7599
|
+
if (ent.dmg) {
|
|
7600
|
+
const radius = ent.dmg + 40;
|
|
7601
|
+
const candidates = sys.findByRadius(ent.origin, radius);
|
|
7602
|
+
const damageables = candidates;
|
|
7603
|
+
T_RadiusDamage(damageables, ent, attacker, ent.dmg, null, radius, 0 /* NONE */, 26 /* EXPLOSIVE */, sys.timeSeconds, {}, sys.multicast.bind(sys));
|
|
7604
|
+
}
|
|
7605
|
+
const mass = ent.mass || 75;
|
|
7606
|
+
if (mass >= 100) {
|
|
7607
|
+
let count2 = Math.floor(mass / 100);
|
|
7608
|
+
if (count2 > 8) count2 = 8;
|
|
7609
|
+
throwGibs(sys, ent.origin, [
|
|
7610
|
+
{ count: count2, model: "models/objects/debris1/tris.md2", flags: GIB_METALLIC | GIB_DEBRIS }
|
|
7611
|
+
]);
|
|
7612
|
+
}
|
|
7613
|
+
let count = Math.floor(mass / 25);
|
|
7614
|
+
if (count > 16) count = 16;
|
|
7615
|
+
throwGibs(sys, ent.origin, [
|
|
7616
|
+
{ count, model: "models/objects/debris2/tris.md2", flags: GIB_METALLIC | GIB_DEBRIS }
|
|
7617
|
+
]);
|
|
7618
|
+
sys.useTargets(ent, attacker);
|
|
7619
|
+
if (ent.noise_index) {
|
|
7620
|
+
sys.sound(ent, 0, ent.noise_index, 1, 1, 0);
|
|
7621
|
+
}
|
|
7622
|
+
if (ent.dmg) {
|
|
7623
|
+
sys.free(ent);
|
|
7624
|
+
} else {
|
|
7625
|
+
sys.free(ent);
|
|
7626
|
+
}
|
|
7627
|
+
};
|
|
7628
|
+
const func_explosive_use = (self, other, activator) => {
|
|
7629
|
+
func_explosive_explode(self, self, activator || null, self.health);
|
|
6613
7630
|
};
|
|
7631
|
+
const func_explosive_activate = (self, other, activator) => {
|
|
7632
|
+
let approved = false;
|
|
7633
|
+
if (other && other.target && self.targetname && other.target === self.targetname) {
|
|
7634
|
+
approved = true;
|
|
7635
|
+
}
|
|
7636
|
+
if (!approved && activator && activator.target && self.targetname && activator.target === self.targetname) {
|
|
7637
|
+
approved = true;
|
|
7638
|
+
}
|
|
7639
|
+
if (!approved) return;
|
|
7640
|
+
self.use = func_explosive_use;
|
|
7641
|
+
if (!self.health) self.health = 100;
|
|
7642
|
+
self.die = func_explosive_explode;
|
|
7643
|
+
self.takedamage = true;
|
|
7644
|
+
};
|
|
7645
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_TRIGGER_SPAWN) {
|
|
7646
|
+
entity.svflags |= 1 /* NoClient */;
|
|
7647
|
+
entity.solid = 0 /* Not */;
|
|
7648
|
+
entity.use = func_explosive_spawn;
|
|
7649
|
+
} else if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_INACTIVE) {
|
|
7650
|
+
entity.solid = 3 /* Bsp */;
|
|
7651
|
+
if (entity.targetname) {
|
|
7652
|
+
entity.use = func_explosive_activate;
|
|
7653
|
+
}
|
|
7654
|
+
} else {
|
|
7655
|
+
entity.solid = 3 /* Bsp */;
|
|
7656
|
+
if (entity.targetname) {
|
|
7657
|
+
entity.use = func_explosive_use;
|
|
7658
|
+
}
|
|
7659
|
+
}
|
|
7660
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_ANIMATED) {
|
|
7661
|
+
entity.effects |= EF_ANIM_ALL;
|
|
7662
|
+
}
|
|
7663
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_ANIMATED_FAST) {
|
|
7664
|
+
entity.effects |= EF_ANIM_ALLFAST;
|
|
7665
|
+
}
|
|
7666
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_ALWAYS_SHOOTABLE || entity.use !== func_explosive_use && entity.use !== func_explosive_activate) {
|
|
7667
|
+
if (!entity.health) entity.health = 100;
|
|
7668
|
+
entity.die = func_explosive_explode;
|
|
7669
|
+
entity.takedamage = true;
|
|
7670
|
+
}
|
|
7671
|
+
if (entity.sounds === 1) {
|
|
7672
|
+
entity.noise_index = "world/brkglas.wav";
|
|
7673
|
+
}
|
|
6614
7674
|
};
|
|
6615
7675
|
var func_killbox = (entity, context) => {
|
|
6616
7676
|
entity.solid = 0 /* Not */;
|
|
@@ -6707,6 +7767,9 @@ function registerLightSpawns(registry) {
|
|
|
6707
7767
|
});
|
|
6708
7768
|
}
|
|
6709
7769
|
|
|
7770
|
+
// src/entities/monsters/berserk.ts
|
|
7771
|
+
init_esm();
|
|
7772
|
+
|
|
6710
7773
|
// src/ai/monster.ts
|
|
6711
7774
|
function M_MoveFrame(self, context) {
|
|
6712
7775
|
const move = self.monsterinfo.current_move;
|
|
@@ -6746,64 +7809,19 @@ function monster_think(self, context) {
|
|
|
6746
7809
|
self.nextthink = context.timeSeconds + 0.1;
|
|
6747
7810
|
}
|
|
6748
7811
|
|
|
6749
|
-
// src/entities/gibs.ts
|
|
6750
|
-
var random = createRandomGenerator();
|
|
6751
|
-
function spawnGib(sys, origin, damage) {
|
|
6752
|
-
const gib = sys.spawn();
|
|
6753
|
-
gib.classname = "gib";
|
|
6754
|
-
gib.origin = {
|
|
6755
|
-
x: origin.x + (random.frandom() - 0.5) * 20,
|
|
6756
|
-
y: origin.y + (random.frandom() - 0.5) * 20,
|
|
6757
|
-
z: origin.z + (random.frandom() - 0.5) * 20
|
|
6758
|
-
};
|
|
6759
|
-
gib.velocity = {
|
|
6760
|
-
x: (random.frandom() - 0.5) * 300,
|
|
6761
|
-
y: (random.frandom() - 0.5) * 300,
|
|
6762
|
-
z: 200 + random.frandom() * 100
|
|
6763
|
-
};
|
|
6764
|
-
gib.movetype = 9 /* Bounce */;
|
|
6765
|
-
gib.solid = 0 /* Not */;
|
|
6766
|
-
gib.clipmask = 1;
|
|
6767
|
-
gib.avelocity = {
|
|
6768
|
-
x: random.crandom() * 600,
|
|
6769
|
-
y: random.crandom() * 600,
|
|
6770
|
-
z: random.crandom() * 600
|
|
6771
|
-
};
|
|
6772
|
-
const models = [
|
|
6773
|
-
"models/objects/gibs/bone/tris.md2",
|
|
6774
|
-
"models/objects/gibs/meat/tris.md2",
|
|
6775
|
-
"models/objects/gibs/sm_meat/tris.md2"
|
|
6776
|
-
];
|
|
6777
|
-
const modelName = models[Math.floor(random.frandom() * models.length)];
|
|
6778
|
-
gib.modelindex = sys.modelIndex(modelName);
|
|
6779
|
-
gib.mins = { x: -2, y: -2, z: -2 };
|
|
6780
|
-
gib.maxs = { x: 2, y: 2, z: 2 };
|
|
6781
|
-
gib.think = (self) => {
|
|
6782
|
-
sys.free(self);
|
|
6783
|
-
};
|
|
6784
|
-
sys.scheduleThink(gib, sys.timeSeconds + 10 + random.frandom() * 10);
|
|
6785
|
-
sys.finalizeSpawn(gib);
|
|
6786
|
-
}
|
|
6787
|
-
function throwGibs(sys, origin, damage) {
|
|
6788
|
-
const count = 4 + Math.floor(random.frandom() * 4);
|
|
6789
|
-
for (let i = 0; i < count; i++) {
|
|
6790
|
-
spawnGib(sys, origin, damage);
|
|
6791
|
-
}
|
|
6792
|
-
}
|
|
6793
|
-
|
|
6794
7812
|
// src/entities/monsters/berserk.ts
|
|
6795
7813
|
var MONSTER_TICK = 0.1;
|
|
6796
7814
|
var MELEE_DISTANCE = 80;
|
|
6797
7815
|
var SPAWNFLAG_BERSERK_NOJUMPING = 16;
|
|
6798
|
-
var
|
|
7816
|
+
var random4 = createRandomGenerator();
|
|
6799
7817
|
function frandom() {
|
|
6800
|
-
return
|
|
7818
|
+
return random4.frandom();
|
|
6801
7819
|
}
|
|
6802
7820
|
function brandom() {
|
|
6803
|
-
return
|
|
7821
|
+
return random4.frandom() > 0.5;
|
|
6804
7822
|
}
|
|
6805
7823
|
function irandom(min, max) {
|
|
6806
|
-
return Math.floor(
|
|
7824
|
+
return Math.floor(random4.frandom() * (max - min + 1) + min);
|
|
6807
7825
|
}
|
|
6808
7826
|
function monster_ai_stand(self, dist, context) {
|
|
6809
7827
|
ai_stand(self, MONSTER_TICK, context);
|
|
@@ -7299,6 +8317,7 @@ function registerBerserkSpawns(registry) {
|
|
|
7299
8317
|
}
|
|
7300
8318
|
|
|
7301
8319
|
// src/entities/monsters/attack.ts
|
|
8320
|
+
init_esm();
|
|
7302
8321
|
function crandom() {
|
|
7303
8322
|
return 2 * Math.random() - 1;
|
|
7304
8323
|
}
|
|
@@ -7489,6 +8508,7 @@ function monster_fire_dabeam(self, damage, secondary, update_func, context) {
|
|
|
7489
8508
|
}
|
|
7490
8509
|
|
|
7491
8510
|
// src/entities/monsters/boss2.ts
|
|
8511
|
+
init_esm();
|
|
7492
8512
|
var MONSTER_TICK2 = 0.1;
|
|
7493
8513
|
var BOSS2_ROCKET_OFFSET_1 = { x: 0, y: 30, z: -15 };
|
|
7494
8514
|
var BOSS2_ROCKET_OFFSET_2 = { x: 0, y: 15, z: 0 };
|
|
@@ -7676,9 +8696,10 @@ function registerBoss2Spawns(registry) {
|
|
|
7676
8696
|
}
|
|
7677
8697
|
|
|
7678
8698
|
// src/entities/monsters/brain.ts
|
|
8699
|
+
init_esm();
|
|
7679
8700
|
var MONSTER_TICK3 = 0.1;
|
|
7680
8701
|
var MELEE_DISTANCE2 = 80;
|
|
7681
|
-
var
|
|
8702
|
+
var random5 = Math.random;
|
|
7682
8703
|
function monster_ai_stand3(self, dist, context) {
|
|
7683
8704
|
ai_stand(self, MONSTER_TICK3, context);
|
|
7684
8705
|
}
|
|
@@ -7731,7 +8752,7 @@ function brain_swing_right(self, context) {
|
|
|
7731
8752
|
}
|
|
7732
8753
|
function brain_hit_right(self, context) {
|
|
7733
8754
|
const aim = { x: MELEE_DISTANCE2, y: self.maxs.x, z: 8 };
|
|
7734
|
-
if (monster_fire_hit(self, aim, 15 + Math.floor(
|
|
8755
|
+
if (monster_fire_hit(self, aim, 15 + Math.floor(random5() * 5), 40, context)) {
|
|
7735
8756
|
context.engine.sound?.(self, 0, "brain/melee3.wav", 1, 1, 0);
|
|
7736
8757
|
} else {
|
|
7737
8758
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -7742,7 +8763,7 @@ function brain_swing_left(self, context) {
|
|
|
7742
8763
|
}
|
|
7743
8764
|
function brain_hit_left(self, context) {
|
|
7744
8765
|
const aim = { x: MELEE_DISTANCE2, y: self.mins.x, z: 8 };
|
|
7745
|
-
if (monster_fire_hit(self, aim, 15 + Math.floor(
|
|
8766
|
+
if (monster_fire_hit(self, aim, 15 + Math.floor(random5() * 5), 40, context)) {
|
|
7746
8767
|
context.engine.sound?.(self, 0, "brain/melee3.wav", 1, 1, 0);
|
|
7747
8768
|
} else {
|
|
7748
8769
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -7755,7 +8776,7 @@ function brain_chest_open(self, context) {
|
|
|
7755
8776
|
}
|
|
7756
8777
|
function brain_tentacle_attack(self, context) {
|
|
7757
8778
|
const aim = { x: MELEE_DISTANCE2, y: 0, z: 8 };
|
|
7758
|
-
if (monster_fire_hit(self, aim, 10 + Math.floor(
|
|
8779
|
+
if (monster_fire_hit(self, aim, 10 + Math.floor(random5() * 5), -600, context)) {
|
|
7759
8780
|
self.count = 1;
|
|
7760
8781
|
} else {
|
|
7761
8782
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -7770,7 +8791,7 @@ function brain_chest_closed(self) {
|
|
|
7770
8791
|
}
|
|
7771
8792
|
}
|
|
7772
8793
|
function brain_melee(self) {
|
|
7773
|
-
if (
|
|
8794
|
+
if (random5() <= 0.5) {
|
|
7774
8795
|
self.monsterinfo.current_move = attack1_move;
|
|
7775
8796
|
} else {
|
|
7776
8797
|
self.monsterinfo.current_move = attack2_move;
|
|
@@ -7853,7 +8874,7 @@ function brain_laserbeam(self, context) {
|
|
|
7853
8874
|
monster_fire_dabeam(self, 1, true, brain_left_eye_laser_update, context);
|
|
7854
8875
|
}
|
|
7855
8876
|
function brain_laserbeam_reattack(self) {
|
|
7856
|
-
if (
|
|
8877
|
+
if (random5() < 0.5) {
|
|
7857
8878
|
if (self.enemy && self.enemy.health > 0) {
|
|
7858
8879
|
self.frame = 0;
|
|
7859
8880
|
}
|
|
@@ -7862,7 +8883,7 @@ function brain_laserbeam_reattack(self) {
|
|
|
7862
8883
|
function brain_attack(self, context) {
|
|
7863
8884
|
const r = rangeTo(self, self.enemy);
|
|
7864
8885
|
if (r <= RANGE_NEAR) {
|
|
7865
|
-
if (
|
|
8886
|
+
if (random5() < 0.5) {
|
|
7866
8887
|
self.monsterinfo.current_move = attack3_move;
|
|
7867
8888
|
} else {
|
|
7868
8889
|
self.monsterinfo.current_move = attack4_move;
|
|
@@ -7882,7 +8903,7 @@ function brain_duck_up(self) {
|
|
|
7882
8903
|
self.monsterinfo.aiflags &= ~16;
|
|
7883
8904
|
}
|
|
7884
8905
|
function brain_dodge(self, attacker, eta) {
|
|
7885
|
-
if (
|
|
8906
|
+
if (random5() > 0.25) return;
|
|
7886
8907
|
if (!self.enemy) self.enemy = attacker;
|
|
7887
8908
|
self.monsterinfo.pausetime = self.timestamp + eta + 0.5;
|
|
7888
8909
|
self.monsterinfo.current_move = duck_move;
|
|
@@ -8138,7 +9159,7 @@ function brain_pain(self, other, kick, damage, context) {
|
|
|
8138
9159
|
return;
|
|
8139
9160
|
}
|
|
8140
9161
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8141
|
-
const r =
|
|
9162
|
+
const r = random5();
|
|
8142
9163
|
if (r < 0.33) {
|
|
8143
9164
|
context.engine.sound?.(self, 0, "brain/brnpain1.wav", 1, 1, 0);
|
|
8144
9165
|
self.monsterinfo.current_move = pain1_move;
|
|
@@ -8162,7 +9183,7 @@ function brain_die(self, inflictor, attacker, damage, point, context) {
|
|
|
8162
9183
|
context.engine.sound?.(self, 0, "brain/brndeth1.wav", 1, 1, 0);
|
|
8163
9184
|
self.deadflag = 2 /* Dead */;
|
|
8164
9185
|
self.takedamage = true;
|
|
8165
|
-
if (
|
|
9186
|
+
if (random5() <= 0.5) {
|
|
8166
9187
|
self.monsterinfo.current_move = death1_move;
|
|
8167
9188
|
} else {
|
|
8168
9189
|
self.monsterinfo.current_move = death2_move;
|
|
@@ -8199,7 +9220,7 @@ function SP_monster_brain(self, context) {
|
|
|
8199
9220
|
context.entities.sound?.(s, 2, "brain/brnsght1.wav", 1, 1, 0);
|
|
8200
9221
|
};
|
|
8201
9222
|
self.monsterinfo.search = (s) => {
|
|
8202
|
-
if (
|
|
9223
|
+
if (random5() < 0.5) {
|
|
8203
9224
|
context.entities.sound?.(s, 2, "brain/brnidle2.wav", 1, 1, 0);
|
|
8204
9225
|
} else {
|
|
8205
9226
|
context.entities.sound?.(s, 2, "brain/brnsrch1.wav", 1, 1, 0);
|
|
@@ -8217,9 +9238,10 @@ function registerBrainSpawns(registry) {
|
|
|
8217
9238
|
}
|
|
8218
9239
|
|
|
8219
9240
|
// src/entities/monsters/chick.ts
|
|
9241
|
+
init_esm();
|
|
8220
9242
|
var MONSTER_TICK4 = 0.1;
|
|
8221
9243
|
var MELEE_DISTANCE3 = 80;
|
|
8222
|
-
var
|
|
9244
|
+
var random6 = Math.random;
|
|
8223
9245
|
function monster_ai_stand4(self, dist, context) {
|
|
8224
9246
|
ai_stand(self, MONSTER_TICK4, context);
|
|
8225
9247
|
}
|
|
@@ -8267,12 +9289,12 @@ function chick_run(self) {
|
|
|
8267
9289
|
function chick_fidget(self) {
|
|
8268
9290
|
if (self.monsterinfo.aiflags & 4) return;
|
|
8269
9291
|
if (self.enemy) return;
|
|
8270
|
-
if (
|
|
9292
|
+
if (random6() <= 0.3) {
|
|
8271
9293
|
self.monsterinfo.current_move = fidget_move;
|
|
8272
9294
|
}
|
|
8273
9295
|
}
|
|
8274
9296
|
function ChickMoan(self, context) {
|
|
8275
|
-
if (
|
|
9297
|
+
if (random6() < 0.5) {
|
|
8276
9298
|
context.engine.sound?.(self, 2, "chick/chkidle1.wav", 1, 0, 0);
|
|
8277
9299
|
} else {
|
|
8278
9300
|
context.engine.sound?.(self, 2, "chick/chkidle2.wav", 1, 0, 0);
|
|
@@ -8281,7 +9303,7 @@ function ChickMoan(self, context) {
|
|
|
8281
9303
|
function chick_slash(self, context) {
|
|
8282
9304
|
const aim = { x: MELEE_DISTANCE3, y: self.mins.x, z: 10 };
|
|
8283
9305
|
context.engine.sound?.(self, 0, "chick/chkatck3.wav", 1, 1, 0);
|
|
8284
|
-
monster_fire_hit(self, aim, 10 + Math.floor(
|
|
9306
|
+
monster_fire_hit(self, aim, 10 + Math.floor(random6() * 6), 100, context);
|
|
8285
9307
|
}
|
|
8286
9308
|
function chick_rocket(self, context) {
|
|
8287
9309
|
const { forward, right } = angleVectors(self.angles);
|
|
@@ -8302,7 +9324,7 @@ function chick_rocket(self, context) {
|
|
|
8302
9324
|
}
|
|
8303
9325
|
let dir = subtractVec3(target, finalStart);
|
|
8304
9326
|
if (!blindfire && self.enemy) {
|
|
8305
|
-
if (
|
|
9327
|
+
if (random6() < 0.33 || finalStart.z < self.enemy.absmin.z) {
|
|
8306
9328
|
const tempDir = { ...dir, z: dir.z + self.enemy.viewheight };
|
|
8307
9329
|
dir = tempDir;
|
|
8308
9330
|
} else {
|
|
@@ -8337,7 +9359,7 @@ function chick_rerocket(self) {
|
|
|
8337
9359
|
return;
|
|
8338
9360
|
}
|
|
8339
9361
|
if (self.enemy && self.enemy.health > 0) {
|
|
8340
|
-
if (
|
|
9362
|
+
if (random6() <= 0.6) {
|
|
8341
9363
|
self.monsterinfo.current_move = attack1_move2;
|
|
8342
9364
|
return;
|
|
8343
9365
|
}
|
|
@@ -8346,7 +9368,7 @@ function chick_rerocket(self) {
|
|
|
8346
9368
|
}
|
|
8347
9369
|
function chick_reslash(self) {
|
|
8348
9370
|
if (self.enemy && self.enemy.health > 0) {
|
|
8349
|
-
if (
|
|
9371
|
+
if (random6() <= 0.9) {
|
|
8350
9372
|
self.monsterinfo.current_move = slash_move;
|
|
8351
9373
|
return;
|
|
8352
9374
|
}
|
|
@@ -8424,7 +9446,7 @@ function chick_pain(self, other, kick, damage, context) {
|
|
|
8424
9446
|
}
|
|
8425
9447
|
if (self.timestamp < (self.pain_debounce_time || 0)) return;
|
|
8426
9448
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8427
|
-
const r =
|
|
9449
|
+
const r = random6();
|
|
8428
9450
|
if (r < 0.33) context.engine.sound?.(self, 0, "chick/chkpain1.wav", 1, 1, 0);
|
|
8429
9451
|
else if (r < 0.66) context.engine.sound?.(self, 0, "chick/chkpain2.wav", 1, 1, 0);
|
|
8430
9452
|
else context.engine.sound?.(self, 0, "chick/chkpain3.wav", 1, 1, 0);
|
|
@@ -8453,7 +9475,7 @@ function chick_die(self, inflictor, attacker, damage, point, context) {
|
|
|
8453
9475
|
if (self.deadflag === 2 /* Dead */) return;
|
|
8454
9476
|
self.deadflag = 2 /* Dead */;
|
|
8455
9477
|
self.takedamage = true;
|
|
8456
|
-
if (
|
|
9478
|
+
if (random6() <= 0.5) {
|
|
8457
9479
|
self.monsterinfo.current_move = death1_move2;
|
|
8458
9480
|
context.engine.sound?.(self, 0, "chick/chkdeth1.wav", 1, 1, 0);
|
|
8459
9481
|
} else {
|
|
@@ -8573,7 +9595,7 @@ function registerChickSpawns(registry) {
|
|
|
8573
9595
|
var MONSTER_TICK5 = 0.1;
|
|
8574
9596
|
var MELEE_DISTANCE4 = 80;
|
|
8575
9597
|
var FLIPPER_RUN_SPEED = 24;
|
|
8576
|
-
var
|
|
9598
|
+
var random7 = Math.random;
|
|
8577
9599
|
function monster_ai_stand5(self, dist, context) {
|
|
8578
9600
|
ai_stand(self, MONSTER_TICK5, context);
|
|
8579
9601
|
}
|
|
@@ -8690,7 +9712,7 @@ function flipper_pain(self, other, kick, damage, context) {
|
|
|
8690
9712
|
return;
|
|
8691
9713
|
}
|
|
8692
9714
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8693
|
-
if (
|
|
9715
|
+
if (random7() < 0.5) {
|
|
8694
9716
|
context.engine.sound?.(self, 0, "flipper/flppain1.wav", 1, 1, 0);
|
|
8695
9717
|
self.monsterinfo.current_move = pain1_move3;
|
|
8696
9718
|
} else {
|
|
@@ -8798,6 +9820,7 @@ function registerFlipperSpawns(registry) {
|
|
|
8798
9820
|
}
|
|
8799
9821
|
|
|
8800
9822
|
// src/entities/monsters/floater.ts
|
|
9823
|
+
init_esm();
|
|
8801
9824
|
var MONSTER_TICK6 = 0.1;
|
|
8802
9825
|
function monster_ai_stand6(self, dist, context) {
|
|
8803
9826
|
ai_stand(self, MONSTER_TICK6, context);
|
|
@@ -8955,6 +9978,7 @@ function registerFloaterSpawns(registry) {
|
|
|
8955
9978
|
}
|
|
8956
9979
|
|
|
8957
9980
|
// src/entities/monsters/flyer.ts
|
|
9981
|
+
init_esm();
|
|
8958
9982
|
var MONSTER_TICK7 = 0.1;
|
|
8959
9983
|
function monster_ai_stand7(self, dist, context) {
|
|
8960
9984
|
ai_stand(self, MONSTER_TICK7, context);
|
|
@@ -9133,6 +10157,7 @@ function registerFlyerSpawns(registry) {
|
|
|
9133
10157
|
}
|
|
9134
10158
|
|
|
9135
10159
|
// src/entities/monsters/gladiator.ts
|
|
10160
|
+
init_esm();
|
|
9136
10161
|
var MONSTER_TICK8 = 0.1;
|
|
9137
10162
|
function monster_ai_stand8(self, dist, context) {
|
|
9138
10163
|
ai_stand(self, MONSTER_TICK8, context);
|
|
@@ -9332,6 +10357,7 @@ function registerGladiatorSpawns(registry) {
|
|
|
9332
10357
|
}
|
|
9333
10358
|
|
|
9334
10359
|
// src/entities/monsters/gunner.ts
|
|
10360
|
+
init_esm();
|
|
9335
10361
|
var MONSTER_TICK9 = 0.1;
|
|
9336
10362
|
function monster_ai_stand9(self, dist, context) {
|
|
9337
10363
|
ai_stand(self, MONSTER_TICK9, context);
|
|
@@ -9754,6 +10780,7 @@ function registerGunnerSpawns(registry) {
|
|
|
9754
10780
|
}
|
|
9755
10781
|
|
|
9756
10782
|
// src/entities/monsters/hover.ts
|
|
10783
|
+
init_esm();
|
|
9757
10784
|
var MONSTER_TICK10 = 0.1;
|
|
9758
10785
|
function monster_ai_stand10(self, dist, context) {
|
|
9759
10786
|
ai_stand(self, MONSTER_TICK10, context);
|
|
@@ -9911,6 +10938,7 @@ function registerHoverSpawns(registry) {
|
|
|
9911
10938
|
}
|
|
9912
10939
|
|
|
9913
10940
|
// src/entities/monsters/icarus.ts
|
|
10941
|
+
init_esm();
|
|
9914
10942
|
var MONSTER_TICK11 = 0.1;
|
|
9915
10943
|
function monster_ai_stand11(self, dist, context) {
|
|
9916
10944
|
ai_stand(self, MONSTER_TICK11, context);
|
|
@@ -10068,6 +11096,7 @@ function registerIcarusSpawns(registry) {
|
|
|
10068
11096
|
}
|
|
10069
11097
|
|
|
10070
11098
|
// src/entities/monsters/infantry.ts
|
|
11099
|
+
init_esm();
|
|
10071
11100
|
var MONSTER_TICK12 = 0.1;
|
|
10072
11101
|
function monster_ai_stand12(self, dist, context) {
|
|
10073
11102
|
ai_stand(self, MONSTER_TICK12, context);
|
|
@@ -10268,6 +11297,7 @@ function registerInfantrySpawns(registry) {
|
|
|
10268
11297
|
}
|
|
10269
11298
|
|
|
10270
11299
|
// src/entities/monsters/makron.ts
|
|
11300
|
+
init_esm();
|
|
10271
11301
|
var MONSTER_TICK13 = 0.1;
|
|
10272
11302
|
var MAKRON_BFG_OFFSET = { x: 30, y: 28, z: 24 };
|
|
10273
11303
|
var MAKRON_BLASTER_OFFSET_1 = { x: 26, y: 16, z: 24 };
|
|
@@ -10513,6 +11543,7 @@ function registerMakronSpawns(registry) {
|
|
|
10513
11543
|
}
|
|
10514
11544
|
|
|
10515
11545
|
// src/entities/monsters/jorg.ts
|
|
11546
|
+
init_esm();
|
|
10516
11547
|
var MONSTER_TICK14 = 0.1;
|
|
10517
11548
|
var JORG_MACHINEGUN_R1_OFFSET = { x: 40, y: -20, z: 20 };
|
|
10518
11549
|
var JORG_MACHINEGUN_L1_OFFSET = { x: 40, y: 20, z: 20 };
|
|
@@ -10736,7 +11767,7 @@ var SPAWNFLAG_INSANE_STAND_GROUND = 16;
|
|
|
10736
11767
|
var SPAWNFLAG_INSANE_ALWAYS_STAND = 32;
|
|
10737
11768
|
var SPAWNFLAG_INSANE_QUIET = 64;
|
|
10738
11769
|
var FRAME_stand1 = 0;
|
|
10739
|
-
var
|
|
11770
|
+
var FRAME_stand402 = 39;
|
|
10740
11771
|
var FRAME_stand41 = 40;
|
|
10741
11772
|
var FRAME_stand59 = 58;
|
|
10742
11773
|
var FRAME_stand60 = 59;
|
|
@@ -10998,7 +12029,7 @@ var frames_uptodown = [
|
|
|
10998
12029
|
];
|
|
10999
12030
|
insane_move_uptodown = {
|
|
11000
12031
|
firstframe: FRAME_stand1,
|
|
11001
|
-
lastframe:
|
|
12032
|
+
lastframe: FRAME_stand402,
|
|
11002
12033
|
frames: frames_uptodown,
|
|
11003
12034
|
endfunc: insane_onground
|
|
11004
12035
|
};
|
|
@@ -11363,7 +12394,7 @@ function SP_misc_insane(self, context) {
|
|
|
11363
12394
|
return;
|
|
11364
12395
|
}
|
|
11365
12396
|
const frame = self2.frame;
|
|
11366
|
-
if (frame >= FRAME_crawl1 && frame <= FRAME_crawl9 || frame >= FRAME_stand100 && frame <= FRAME_stand160 || frame >= FRAME_stand1 && frame <=
|
|
12397
|
+
if (frame >= FRAME_crawl1 && frame <= FRAME_crawl9 || frame >= FRAME_stand100 && frame <= FRAME_stand160 || frame >= FRAME_stand1 && frame <= FRAME_stand402) {
|
|
11367
12398
|
self2.monsterinfo.current_move = insane_move_crawl_pain;
|
|
11368
12399
|
} else {
|
|
11369
12400
|
self2.monsterinfo.current_move = insane_move_stand_pain;
|
|
@@ -11422,6 +12453,8 @@ function registerInsaneSpawns(registry) {
|
|
|
11422
12453
|
}
|
|
11423
12454
|
|
|
11424
12455
|
// src/entities/monsters/actor.ts
|
|
12456
|
+
init_esm();
|
|
12457
|
+
init_esm();
|
|
11425
12458
|
var MONSTER_TICK16 = 0.1;
|
|
11426
12459
|
var MZ2_ACTOR_MACHINEGUN_1 = 0;
|
|
11427
12460
|
var actor_names = [
|
|
@@ -11440,19 +12473,19 @@ var FRAME_walk01 = 40;
|
|
|
11440
12473
|
var FRAME_walk08 = 47;
|
|
11441
12474
|
var FRAME_run02 = 48;
|
|
11442
12475
|
var FRAME_run07 = 53;
|
|
11443
|
-
var
|
|
12476
|
+
var FRAME_pain1012 = 54;
|
|
11444
12477
|
var FRAME_pain103 = 56;
|
|
11445
|
-
var
|
|
12478
|
+
var FRAME_pain2012 = 57;
|
|
11446
12479
|
var FRAME_pain203 = 59;
|
|
11447
|
-
var
|
|
12480
|
+
var FRAME_pain3012 = 60;
|
|
11448
12481
|
var FRAME_pain303 = 62;
|
|
11449
12482
|
var FRAME_flip01 = 63;
|
|
11450
12483
|
var FRAME_flip14 = 76;
|
|
11451
12484
|
var FRAME_taunt01 = 77;
|
|
11452
12485
|
var FRAME_taunt17 = 93;
|
|
11453
|
-
var
|
|
12486
|
+
var FRAME_death1012 = 94;
|
|
11454
12487
|
var FRAME_death107 = 100;
|
|
11455
|
-
var
|
|
12488
|
+
var FRAME_death2012 = 101;
|
|
11456
12489
|
var FRAME_death213 = 113;
|
|
11457
12490
|
var FRAME_attak01 = 114;
|
|
11458
12491
|
var FRAME_attak04 = 117;
|
|
@@ -11508,8 +12541,8 @@ function actor_pain(self, other, kick, damage) {
|
|
|
11508
12541
|
if (context.timeSeconds < self.pain_debounce_time)
|
|
11509
12542
|
return;
|
|
11510
12543
|
self.pain_debounce_time = context.timeSeconds + 3;
|
|
11511
|
-
const
|
|
11512
|
-
if (other && other.client &&
|
|
12544
|
+
const random13 = Math.random();
|
|
12545
|
+
if (other && other.client && random13 < 0.4) {
|
|
11513
12546
|
const v = subtractVec3(other.origin, self.origin);
|
|
11514
12547
|
self.ideal_yaw = vectorToYaw(v);
|
|
11515
12548
|
if (Math.random() < 0.5)
|
|
@@ -11702,7 +12735,7 @@ var frames_pain1 = [
|
|
|
11702
12735
|
m2(ai_move, 1)
|
|
11703
12736
|
];
|
|
11704
12737
|
actor_move_pain1 = {
|
|
11705
|
-
firstframe:
|
|
12738
|
+
firstframe: FRAME_pain1012,
|
|
11706
12739
|
lastframe: FRAME_pain103,
|
|
11707
12740
|
frames: frames_pain1,
|
|
11708
12741
|
endfunc: actor_run
|
|
@@ -11713,7 +12746,7 @@ var frames_pain2 = [
|
|
|
11713
12746
|
m2(ai_move)
|
|
11714
12747
|
];
|
|
11715
12748
|
actor_move_pain2 = {
|
|
11716
|
-
firstframe:
|
|
12749
|
+
firstframe: FRAME_pain2012,
|
|
11717
12750
|
lastframe: FRAME_pain203,
|
|
11718
12751
|
frames: frames_pain2,
|
|
11719
12752
|
endfunc: actor_run
|
|
@@ -11724,7 +12757,7 @@ var frames_pain3 = [
|
|
|
11724
12757
|
m2(ai_move, 0)
|
|
11725
12758
|
];
|
|
11726
12759
|
actor_move_pain3 = {
|
|
11727
|
-
firstframe:
|
|
12760
|
+
firstframe: FRAME_pain3012,
|
|
11728
12761
|
lastframe: FRAME_pain303,
|
|
11729
12762
|
frames: frames_pain3,
|
|
11730
12763
|
endfunc: actor_run
|
|
@@ -11786,7 +12819,7 @@ var frames_death1 = [
|
|
|
11786
12819
|
m2(ai_move, 1)
|
|
11787
12820
|
];
|
|
11788
12821
|
actor_move_death1 = {
|
|
11789
|
-
firstframe:
|
|
12822
|
+
firstframe: FRAME_death1012,
|
|
11790
12823
|
lastframe: FRAME_death107,
|
|
11791
12824
|
frames: frames_death1,
|
|
11792
12825
|
endfunc: actor_dead
|
|
@@ -11807,7 +12840,7 @@ var frames_death2 = [
|
|
|
11807
12840
|
m2(ai_move)
|
|
11808
12841
|
];
|
|
11809
12842
|
actor_move_death2 = {
|
|
11810
|
-
firstframe:
|
|
12843
|
+
firstframe: FRAME_death2012,
|
|
11811
12844
|
lastframe: FRAME_death213,
|
|
11812
12845
|
frames: frames_death2,
|
|
11813
12846
|
endfunc: actor_dead
|
|
@@ -11962,6 +12995,8 @@ function registerActorSpawns(registry) {
|
|
|
11962
12995
|
}
|
|
11963
12996
|
|
|
11964
12997
|
// src/entities/monsters/medic.ts
|
|
12998
|
+
init_esm();
|
|
12999
|
+
init_esm();
|
|
11965
13000
|
var MONSTER_TICK17 = 0.1;
|
|
11966
13001
|
function monster_ai_stand15(self, dist, context) {
|
|
11967
13002
|
if (self.classname === "monster_medic") {
|
|
@@ -12338,8 +13373,9 @@ function registerMedicSpawns(registry) {
|
|
|
12338
13373
|
}
|
|
12339
13374
|
|
|
12340
13375
|
// src/entities/monsters/mutant.ts
|
|
13376
|
+
init_esm();
|
|
12341
13377
|
var MONSTER_TICK18 = 0.1;
|
|
12342
|
-
var
|
|
13378
|
+
var random8 = () => Math.random();
|
|
12343
13379
|
function monster_ai_stand16(self, dist, context) {
|
|
12344
13380
|
ai_stand(self, MONSTER_TICK18, context);
|
|
12345
13381
|
}
|
|
@@ -12452,11 +13488,11 @@ function mutant_check_attack(self, context) {
|
|
|
12452
13488
|
if (self.enemy && self.enemy.health > 0) {
|
|
12453
13489
|
const diff = subtractVec3(self.enemy.origin, self.origin);
|
|
12454
13490
|
const dist = lengthVec3(diff);
|
|
12455
|
-
if (dist < 128 &&
|
|
13491
|
+
if (dist < 128 && random8() < 0.5) {
|
|
12456
13492
|
self.monsterinfo.current_move = attack_move7;
|
|
12457
13493
|
return true;
|
|
12458
13494
|
}
|
|
12459
|
-
if (dist >= 128 && dist < 512 &&
|
|
13495
|
+
if (dist >= 128 && dist < 512 && random8() < 0.3) {
|
|
12460
13496
|
self.monsterinfo.current_move = jump_move2;
|
|
12461
13497
|
return true;
|
|
12462
13498
|
}
|
|
@@ -12469,10 +13505,10 @@ function mutant_pain_func(self, other, kick, damage, context) {
|
|
|
12469
13505
|
}
|
|
12470
13506
|
if (self.timestamp < (self.pain_finished_time || 0)) return;
|
|
12471
13507
|
self.pain_finished_time = self.timestamp + 3;
|
|
12472
|
-
if (
|
|
13508
|
+
if (random8() < 0.5) {
|
|
12473
13509
|
context.engine.sound?.(self, 0, "mutant/mutpain1.wav", 1, 1, 0);
|
|
12474
13510
|
self.monsterinfo.current_move = pain1_move6;
|
|
12475
|
-
} else if (
|
|
13511
|
+
} else if (random8() < 0.5) {
|
|
12476
13512
|
context.engine.sound?.(self, 0, "mutant/mutpain2.wav", 1, 1, 0);
|
|
12477
13513
|
self.monsterinfo.current_move = pain2_move6;
|
|
12478
13514
|
} else {
|
|
@@ -12727,8 +13763,9 @@ function registerMutantSpawns(registry) {
|
|
|
12727
13763
|
}
|
|
12728
13764
|
|
|
12729
13765
|
// src/entities/monsters/parasite.ts
|
|
13766
|
+
init_esm();
|
|
12730
13767
|
var MONSTER_TICK19 = 0.1;
|
|
12731
|
-
var
|
|
13768
|
+
var random9 = () => Math.random();
|
|
12732
13769
|
function monster_ai_stand17(self, dist, context) {
|
|
12733
13770
|
ai_stand(self, MONSTER_TICK19, context);
|
|
12734
13771
|
}
|
|
@@ -12773,7 +13810,7 @@ function parasite_do_fidget(self) {
|
|
|
12773
13810
|
self.monsterinfo.current_move = fidget_move3;
|
|
12774
13811
|
}
|
|
12775
13812
|
function parasite_refidget(self) {
|
|
12776
|
-
if (
|
|
13813
|
+
if (random9() <= 0.8) {
|
|
12777
13814
|
self.monsterinfo.current_move = fidget_move3;
|
|
12778
13815
|
} else {
|
|
12779
13816
|
self.monsterinfo.current_move = end_fidget_move;
|
|
@@ -12886,7 +13923,7 @@ function parasite_pain_func(self, other, kick, damage, context) {
|
|
|
12886
13923
|
}
|
|
12887
13924
|
if (self.timestamp < (self.pain_finished_time || 0)) return;
|
|
12888
13925
|
self.pain_finished_time = self.timestamp + 3;
|
|
12889
|
-
if (
|
|
13926
|
+
if (random9() < 0.5) {
|
|
12890
13927
|
context.engine.sound?.(self, 0, "parasite/parpain1.wav", 1, 1, 0);
|
|
12891
13928
|
} else {
|
|
12892
13929
|
context.engine.sound?.(self, 0, "parasite/parpain2.wav", 1, 1, 0);
|
|
@@ -13123,6 +14160,7 @@ function registerParasiteSpawns(registry) {
|
|
|
13123
14160
|
}
|
|
13124
14161
|
|
|
13125
14162
|
// src/entities/monsters/soldier.ts
|
|
14163
|
+
init_esm();
|
|
13126
14164
|
var MONSTER_TICK20 = 0.1;
|
|
13127
14165
|
var SOLDIER_LIGHT = 1;
|
|
13128
14166
|
var SOLDIER_SSG = 2;
|
|
@@ -13461,6 +14499,7 @@ function registerMonsterSpawns(registry) {
|
|
|
13461
14499
|
}
|
|
13462
14500
|
|
|
13463
14501
|
// src/entities/monsters/supertank.ts
|
|
14502
|
+
init_esm();
|
|
13464
14503
|
var MONSTER_TICK21 = 0.1;
|
|
13465
14504
|
var SUPERTANK_MACHINEGUN_OFFSET = { x: 30, y: 30, z: 40 };
|
|
13466
14505
|
var SUPERTANK_ROCKET_OFFSET = { x: 30, y: -30, z: 40 };
|
|
@@ -13685,6 +14724,7 @@ function registerSupertankSpawns(registry) {
|
|
|
13685
14724
|
}
|
|
13686
14725
|
|
|
13687
14726
|
// src/entities/monsters/tank.ts
|
|
14727
|
+
init_esm();
|
|
13688
14728
|
var MONSTER_TICK22 = 0.1;
|
|
13689
14729
|
function M_AdjustBlindfireTarget(self, start, target, right, context) {
|
|
13690
14730
|
const tr = context.trace(start, target, ZERO_VEC3, ZERO_VEC3, self, MASK_SHOT);
|
|
@@ -14055,6 +15095,7 @@ function registerTankCommanderSpawns(registry) {
|
|
|
14055
15095
|
}
|
|
14056
15096
|
|
|
14057
15097
|
// src/entities/monsters/turret.ts
|
|
15098
|
+
init_esm();
|
|
14058
15099
|
var MONSTER_TICK23 = 0.1;
|
|
14059
15100
|
function monster_ai_stand21(self, dist, context) {
|
|
14060
15101
|
ai_stand(self, MONSTER_TICK23, context);
|
|
@@ -14206,8 +15247,9 @@ function registerTurretSpawns(registry) {
|
|
|
14206
15247
|
}
|
|
14207
15248
|
|
|
14208
15249
|
// src/entities/monsters/gekk.ts
|
|
15250
|
+
init_esm();
|
|
14209
15251
|
var MONSTER_TICK24 = 0.1;
|
|
14210
|
-
var
|
|
15252
|
+
var random10 = () => Math.random();
|
|
14211
15253
|
var frandom2 = () => Math.random();
|
|
14212
15254
|
var irandom2 = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
|
|
14213
15255
|
function monster_ai_stand22(self, dist, context) {
|
|
@@ -14716,7 +15758,7 @@ function gekk_pain(self, other, kick, damage, context) {
|
|
|
14716
15758
|
}
|
|
14717
15759
|
self.monsterinfo.current_move = gekk_move_pain;
|
|
14718
15760
|
} else {
|
|
14719
|
-
if (
|
|
15761
|
+
if (random10() > 0.5) self.monsterinfo.current_move = gekk_move_pain1;
|
|
14720
15762
|
else self.monsterinfo.current_move = gekk_move_pain2;
|
|
14721
15763
|
}
|
|
14722
15764
|
}
|
|
@@ -14848,8 +15890,9 @@ function registerGekkSpawns(registry) {
|
|
|
14848
15890
|
}
|
|
14849
15891
|
|
|
14850
15892
|
// src/entities/monsters/fixbot.ts
|
|
15893
|
+
init_esm();
|
|
14851
15894
|
var MONSTER_TICK25 = 0.1;
|
|
14852
|
-
var
|
|
15895
|
+
var random11 = () => Math.random();
|
|
14853
15896
|
var frandom3 = () => Math.random();
|
|
14854
15897
|
function monster_ai_walk21(self, dist, context) {
|
|
14855
15898
|
ai_walk(self, dist, MONSTER_TICK25, context);
|
|
@@ -14912,7 +15955,7 @@ function fixbot_search(self, context) {
|
|
|
14912
15955
|
fixbot_run(self);
|
|
14913
15956
|
fixbot_set_fly_parameters(self, true, false);
|
|
14914
15957
|
} else {
|
|
14915
|
-
if (
|
|
15958
|
+
if (random11() < 0.1) {
|
|
14916
15959
|
context.engine.sound?.(self, 0, "flyer/flysght1.wav", 1, 1, 0);
|
|
14917
15960
|
}
|
|
14918
15961
|
}
|
|
@@ -15571,6 +16614,9 @@ var LevelClock = class {
|
|
|
15571
16614
|
}
|
|
15572
16615
|
};
|
|
15573
16616
|
|
|
16617
|
+
// src/save/save.ts
|
|
16618
|
+
init_esm();
|
|
16619
|
+
|
|
15574
16620
|
// src/checksum.ts
|
|
15575
16621
|
var FNV_OFFSET_BASIS = 2166136261;
|
|
15576
16622
|
var FNV_PRIME = 16777619;
|
|
@@ -16033,6 +17079,7 @@ function applySaveFile(save, targets) {
|
|
|
16033
17079
|
}
|
|
16034
17080
|
|
|
16035
17081
|
// src/save/rerelease.ts
|
|
17082
|
+
init_esm();
|
|
16036
17083
|
function ensureObject2(value, label) {
|
|
16037
17084
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
16038
17085
|
throw new Error(`${label} must be an object`);
|
|
@@ -16445,6 +17492,9 @@ _SaveStorage.DEFAULT_STORE = "saves";
|
|
|
16445
17492
|
_SaveStorage.QUICK_SLOT = "quicksave";
|
|
16446
17493
|
var SaveStorage = _SaveStorage;
|
|
16447
17494
|
|
|
17495
|
+
// src/index.ts
|
|
17496
|
+
init_esm();
|
|
17497
|
+
|
|
16448
17498
|
// src/ai/noise.ts
|
|
16449
17499
|
var PNOISE_SELF = 0;
|
|
16450
17500
|
var PNOISE_WEAPON = 1;
|
|
@@ -16470,8 +17520,13 @@ function PlayerNoise(who, where, type, context) {
|
|
|
16470
17520
|
}
|
|
16471
17521
|
}
|
|
16472
17522
|
|
|
17523
|
+
// src/entities/player.ts
|
|
17524
|
+
init_playerInventory();
|
|
17525
|
+
|
|
16473
17526
|
// src/combat/obituary.ts
|
|
16474
|
-
|
|
17527
|
+
init_esm();
|
|
17528
|
+
init_esm();
|
|
17529
|
+
var random12 = createRandomGenerator();
|
|
16475
17530
|
var PRINT_MEDIUM = 1;
|
|
16476
17531
|
function getGender(ent) {
|
|
16477
17532
|
return "male";
|
|
@@ -16612,30 +17667,6 @@ function ClientObituary(self, inflictor, attacker, mod, sys) {
|
|
|
16612
17667
|
}
|
|
16613
17668
|
}
|
|
16614
17669
|
|
|
16615
|
-
// src/entities/player_anim.ts
|
|
16616
|
-
var FRAME_stand01 = 0;
|
|
16617
|
-
var FRAME_stand402 = 39;
|
|
16618
|
-
var FRAME_run1 = 40;
|
|
16619
|
-
var FRAME_run6 = 45;
|
|
16620
|
-
var FRAME_pain1012 = 54;
|
|
16621
|
-
var FRAME_pain104 = 57;
|
|
16622
|
-
var FRAME_pain2012 = 58;
|
|
16623
|
-
var FRAME_pain204 = 61;
|
|
16624
|
-
var FRAME_pain3012 = 62;
|
|
16625
|
-
var FRAME_pain304 = 65;
|
|
16626
|
-
var FRAME_death1012 = 66;
|
|
16627
|
-
var FRAME_death106 = 71;
|
|
16628
|
-
var FRAME_death2012 = 72;
|
|
16629
|
-
var FRAME_death206 = 77;
|
|
16630
|
-
var FRAME_death301 = 78;
|
|
16631
|
-
var FRAME_death306 = 83;
|
|
16632
|
-
var ANIM_BASIC = 0;
|
|
16633
|
-
var ANIM_PAIN = 2;
|
|
16634
|
-
var ANIM_DEATH = 3;
|
|
16635
|
-
|
|
16636
|
-
// src/combat/weapons/firing.ts
|
|
16637
|
-
var random11 = createRandomGenerator();
|
|
16638
|
-
|
|
16639
17670
|
// src/entities/player.ts
|
|
16640
17671
|
function P_PlayerThink(ent, sys) {
|
|
16641
17672
|
if (!ent.client) return;
|
|
@@ -16654,9 +17685,9 @@ function P_PlayerThink(ent, sys) {
|
|
|
16654
17685
|
animChanged = true;
|
|
16655
17686
|
}
|
|
16656
17687
|
} else {
|
|
16657
|
-
if (ent.frame >= FRAME_run1 && ent.frame <= FRAME_run6 || client.anim_priority === ANIM_BASIC && client.anim_end !==
|
|
17688
|
+
if (ent.frame >= FRAME_run1 && ent.frame <= FRAME_run6 || client.anim_priority === ANIM_BASIC && client.anim_end !== FRAME_stand40 || client.anim_priority === void 0) {
|
|
16658
17689
|
ent.frame = FRAME_stand01;
|
|
16659
|
-
client.anim_end =
|
|
17690
|
+
client.anim_end = FRAME_stand40;
|
|
16660
17691
|
client.anim_priority = ANIM_BASIC;
|
|
16661
17692
|
animChanged = true;
|
|
16662
17693
|
}
|
|
@@ -16675,7 +17706,7 @@ function P_PlayerThink(ent, sys) {
|
|
|
16675
17706
|
} else if (client.anim_end === ent.frame) {
|
|
16676
17707
|
if (client.anim_priority === ANIM_BASIC) {
|
|
16677
17708
|
if (ent.frame === FRAME_run6) ent.frame = FRAME_run1;
|
|
16678
|
-
else if (ent.frame ===
|
|
17709
|
+
else if (ent.frame === FRAME_stand40) ent.frame = FRAME_stand01;
|
|
16679
17710
|
} else {
|
|
16680
17711
|
if (client.anim_priority !== ANIM_DEATH) {
|
|
16681
17712
|
client.anim_priority = ANIM_BASIC;
|
|
@@ -16691,15 +17722,15 @@ function player_pain(self, damage) {
|
|
|
16691
17722
|
return;
|
|
16692
17723
|
}
|
|
16693
17724
|
self.client.anim_priority = ANIM_PAIN;
|
|
16694
|
-
const r =
|
|
17725
|
+
const r = random2.frandom();
|
|
16695
17726
|
if (r < 0.33) {
|
|
16696
|
-
self.frame =
|
|
17727
|
+
self.frame = FRAME_pain101;
|
|
16697
17728
|
self.client.anim_end = FRAME_pain104;
|
|
16698
17729
|
} else if (r < 0.66) {
|
|
16699
|
-
self.frame =
|
|
17730
|
+
self.frame = FRAME_pain201;
|
|
16700
17731
|
self.client.anim_end = FRAME_pain204;
|
|
16701
17732
|
} else {
|
|
16702
|
-
self.frame =
|
|
17733
|
+
self.frame = FRAME_pain301;
|
|
16703
17734
|
self.client.anim_end = FRAME_pain304;
|
|
16704
17735
|
}
|
|
16705
17736
|
}
|
|
@@ -16714,12 +17745,12 @@ function player_die(self, inflictor, attacker, damage, point, mod, sys) {
|
|
|
16714
17745
|
}
|
|
16715
17746
|
if (self.client) {
|
|
16716
17747
|
self.client.anim_priority = ANIM_DEATH;
|
|
16717
|
-
const r =
|
|
17748
|
+
const r = random2.frandom();
|
|
16718
17749
|
if (r < 0.33) {
|
|
16719
|
-
self.frame =
|
|
17750
|
+
self.frame = FRAME_death101;
|
|
16720
17751
|
self.client.anim_end = FRAME_death106;
|
|
16721
17752
|
} else if (r < 0.66) {
|
|
16722
|
-
self.frame =
|
|
17753
|
+
self.frame = FRAME_death201;
|
|
16723
17754
|
self.client.anim_end = FRAME_death206;
|
|
16724
17755
|
} else {
|
|
16725
17756
|
self.frame = FRAME_death301;
|
|
@@ -16767,6 +17798,8 @@ function player_think(self, sys) {
|
|
|
16767
17798
|
}
|
|
16768
17799
|
|
|
16769
17800
|
// src/entities/playerStats.ts
|
|
17801
|
+
init_esm();
|
|
17802
|
+
init_playerInventory();
|
|
16770
17803
|
var POWERUP_TIMERS = [
|
|
16771
17804
|
{ id: PowerupId.QuadDamage, priority: 1 },
|
|
16772
17805
|
{ id: PowerupId.Invulnerability, priority: 2 },
|
|
@@ -16832,7 +17865,11 @@ function populatePlayerStats(player, timeSeconds) {
|
|
|
16832
17865
|
return statArray;
|
|
16833
17866
|
}
|
|
16834
17867
|
|
|
17868
|
+
// src/index.ts
|
|
17869
|
+
init_esm();
|
|
17870
|
+
|
|
16835
17871
|
// src/combat/specialDamage.ts
|
|
17872
|
+
init_esm();
|
|
16836
17873
|
var ZERO2 = { x: 0, y: 0, z: 0 };
|
|
16837
17874
|
var EnvironmentalFlags = /* @__PURE__ */ ((EnvironmentalFlags2) => {
|
|
16838
17875
|
EnvironmentalFlags2[EnvironmentalFlags2["IN_WATER"] = 1] = "IN_WATER";
|
|
@@ -17153,6 +18190,13 @@ function createGame(imports, engine, options) {
|
|
|
17153
18190
|
configstring
|
|
17154
18191
|
};
|
|
17155
18192
|
const entities = new EntitySystem(engine, systemImports, gravity, void 0, void 0, deathmatch);
|
|
18193
|
+
entities._game = {
|
|
18194
|
+
// Lazy proxy or partial implementation of GameExports needed by EntitySystem consumers (like weapons)
|
|
18195
|
+
// This is circular, so we must be careful.
|
|
18196
|
+
// We will assign the full gameExports object later?
|
|
18197
|
+
// No, gameExports is const defined below.
|
|
18198
|
+
// We can use a getter or assign properties later.
|
|
18199
|
+
};
|
|
17156
18200
|
frameLoop.addStage("prep", (context) => {
|
|
17157
18201
|
levelClock.tick(context);
|
|
17158
18202
|
entities.beginFrame(levelClock.current.timeSeconds);
|
|
@@ -17439,6 +18483,7 @@ function createGame(imports, engine, options) {
|
|
|
17439
18483
|
};
|
|
17440
18484
|
const spawnRegistry = createDefaultSpawnRegistry(gameExports);
|
|
17441
18485
|
entities.setSpawnRegistry(spawnRegistry);
|
|
18486
|
+
entities._game = gameExports;
|
|
17442
18487
|
return gameExports;
|
|
17443
18488
|
}
|
|
17444
18489
|
export {
|