quake2ts 0.0.277 → 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 +2108 -1193
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +1879 -957
- 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/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
|
@@ -3,6 +3,9 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __esm = (fn, res) => function __init() {
|
|
7
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
8
|
+
};
|
|
6
9
|
var __export = (target, all) => {
|
|
7
10
|
for (var name in all)
|
|
8
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -17,162 +20,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
20
|
};
|
|
18
21
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
22
|
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
AIFlags: () => AIFlags,
|
|
24
|
-
AMMO_TYPE_COUNT: () => AMMO_TYPE_COUNT,
|
|
25
|
-
ARMOR_INFO: () => ARMOR_INFO,
|
|
26
|
-
ARMOR_ITEMS: () => ARMOR_ITEMS,
|
|
27
|
-
AmmoItemId: () => AmmoItemId,
|
|
28
|
-
AmmoType: () => AmmoType,
|
|
29
|
-
ArmorType: () => ArmorType,
|
|
30
|
-
AttackState: () => AttackState,
|
|
31
|
-
CheckGround: () => CheckGround,
|
|
32
|
-
DamageFlags: () => DamageFlags,
|
|
33
|
-
DamageMod: () => DamageMod,
|
|
34
|
-
DeadFlag: () => DeadFlag,
|
|
35
|
-
ENTITY_FIELD_METADATA: () => ENTITY_FIELD_METADATA,
|
|
36
|
-
Entity: () => Entity,
|
|
37
|
-
EntityDamageFlags: () => EntityDamageFlags,
|
|
38
|
-
EntitySystem: () => EntitySystem,
|
|
39
|
-
EnvironmentalFlags: () => EnvironmentalFlags,
|
|
40
|
-
FL_NOTARGET: () => FL_NOTARGET,
|
|
41
|
-
FL_NOVISIBLE: () => FL_NOVISIBLE,
|
|
42
|
-
HEALTH_ITEMS: () => HEALTH_ITEMS,
|
|
43
|
-
KEY_ITEMS: () => KEY_ITEMS,
|
|
44
|
-
KeyId: () => KeyId,
|
|
45
|
-
M_CheckBottom: () => M_CheckBottom,
|
|
46
|
-
M_MoveFrame: () => M_MoveFrame,
|
|
47
|
-
M_walkmove: () => M_walkmove,
|
|
48
|
-
MoveType: () => MoveType,
|
|
49
|
-
MulticastType: () => MulticastType,
|
|
50
|
-
ORDERED_DAMAGE_MODS: () => ORDERED_DAMAGE_MODS,
|
|
51
|
-
PNOISE_IMPACT: () => PNOISE_IMPACT,
|
|
52
|
-
PNOISE_SELF: () => PNOISE_SELF,
|
|
53
|
-
PNOISE_WEAPON: () => PNOISE_WEAPON,
|
|
54
|
-
POWERUP_ITEMS: () => POWERUP_ITEMS,
|
|
55
|
-
POWER_ARMOR_ITEMS: () => POWER_ARMOR_ITEMS,
|
|
56
|
-
PlayerNoise: () => PlayerNoise,
|
|
57
|
-
PowerupId: () => PowerupId,
|
|
58
|
-
RANGE_MELEE: () => RANGE_MELEE,
|
|
59
|
-
RANGE_MID: () => RANGE_MID,
|
|
60
|
-
RANGE_NEAR: () => RANGE_NEAR,
|
|
61
|
-
Range: () => RangeCategory,
|
|
62
|
-
RangeCategory: () => RangeCategory,
|
|
63
|
-
SAVE_FORMAT_VERSION: () => SAVE_FORMAT_VERSION,
|
|
64
|
-
SPAWNFLAG_MONSTER_AMBUSH: () => SPAWNFLAG_MONSTER_AMBUSH,
|
|
65
|
-
SV_NewChaseDir: () => SV_NewChaseDir,
|
|
66
|
-
SV_StepDirection: () => SV_StepDirection,
|
|
67
|
-
SaveStorage: () => SaveStorage,
|
|
68
|
-
ServerFlags: () => ServerFlags,
|
|
69
|
-
Solid: () => Solid,
|
|
70
|
-
SpawnRegistry: () => SpawnRegistry,
|
|
71
|
-
T_Damage: () => T_Damage,
|
|
72
|
-
T_RadiusDamage: () => T_RadiusDamage,
|
|
73
|
-
TraceMask: () => TraceMask,
|
|
74
|
-
WEAPONS: () => WEAPONS,
|
|
75
|
-
WEAPON_ITEMS: () => WEAPON_ITEMS,
|
|
76
|
-
WeaponId: () => WeaponId,
|
|
77
|
-
WeaponStateEnum: () => WeaponStateEnum,
|
|
78
|
-
WeaponType: () => WeaponType,
|
|
79
|
-
addAmmo: () => addAmmo,
|
|
80
|
-
addKey: () => addKey,
|
|
81
|
-
addPowerup: () => addPowerup,
|
|
82
|
-
ai_charge: () => ai_charge,
|
|
83
|
-
ai_face: () => ai_face,
|
|
84
|
-
ai_move: () => ai_move,
|
|
85
|
-
ai_run: () => ai_run,
|
|
86
|
-
ai_stand: () => ai_stand,
|
|
87
|
-
ai_turn: () => ai_turn,
|
|
88
|
-
ai_walk: () => ai_walk,
|
|
89
|
-
applyCrushDamage: () => applyCrushDamage,
|
|
90
|
-
applyEntityKeyValues: () => applyEntityKeyValues,
|
|
91
|
-
applyEnvironmentalDamage: () => applyEnvironmentalDamage,
|
|
92
|
-
applyFallingDamage: () => applyFallingDamage,
|
|
93
|
-
applyPowerArmor: () => applyPowerArmor,
|
|
94
|
-
applyRegularArmor: () => applyRegularArmor,
|
|
95
|
-
applySaveFile: () => applySaveFile,
|
|
96
|
-
calculateFallingDamage: () => calculateFallingDamage,
|
|
97
|
-
calculateSaveChecksum: () => calculateSaveChecksum,
|
|
98
|
-
canPickupHealth: () => canPickupHealth,
|
|
99
|
-
changeYaw: () => changeYaw,
|
|
100
|
-
clampAmmoCounts: () => clampAmmoCounts,
|
|
101
|
-
classifyRange: () => classifyRange,
|
|
102
|
-
clearExpiredPowerups: () => clearExpiredPowerups,
|
|
103
|
-
convertGameSaveToRereleaseLevel: () => convertGameSaveToRereleaseLevel,
|
|
104
|
-
convertRereleaseLevelToGameSave: () => convertRereleaseLevelToGameSave,
|
|
105
|
-
convertRereleaseSaveToGameSave: () => convertRereleaseSaveToGameSave,
|
|
106
|
-
createAmmoInventory: () => createAmmoInventory,
|
|
107
|
-
createAmmoPickupEntity: () => createAmmoPickupEntity,
|
|
108
|
-
createArmorPickupEntity: () => createArmorPickupEntity,
|
|
109
|
-
createBaseAmmoCaps: () => createBaseAmmoCaps,
|
|
110
|
-
createCallbackRegistry: () => createCallbackRegistry,
|
|
111
|
-
createDefaultSpawnRegistry: () => createDefaultSpawnRegistry,
|
|
112
|
-
createGame: () => createGame,
|
|
113
|
-
createHealthPickupEntity: () => createHealthPickupEntity,
|
|
114
|
-
createKeyPickupEntity: () => createKeyPickupEntity,
|
|
115
|
-
createPlayerInventory: () => createPlayerInventory,
|
|
116
|
-
createPlayerWeaponStates: () => createPlayerWeaponStates,
|
|
117
|
-
createPowerupPickupEntity: () => createPowerupPickupEntity,
|
|
118
|
-
createSaveFile: () => createSaveFile,
|
|
119
|
-
createWeaponPickupEntity: () => createWeaponPickupEntity,
|
|
120
|
-
damageModName: () => damageModName,
|
|
121
|
-
deserializePlayerInventory: () => deserializePlayerInventory,
|
|
122
|
-
equipArmor: () => equipArmor,
|
|
123
|
-
facingIdeal: () => facingIdeal,
|
|
124
|
-
findTarget: () => findTarget,
|
|
125
|
-
foundTarget: () => foundTarget,
|
|
126
|
-
getAmmoItemDefinition: () => getAmmoItemDefinition,
|
|
127
|
-
getWeaponState: () => getWeaponState,
|
|
128
|
-
giveAmmoItem: () => giveAmmoItem,
|
|
129
|
-
giveWeapon: () => giveWeapon,
|
|
130
|
-
hasAnyDamageFlag: () => hasAnyDamageFlag,
|
|
131
|
-
hasItem: () => hasItem,
|
|
132
|
-
hasKey: () => hasKey,
|
|
133
|
-
hasPowerup: () => hasPowerup,
|
|
134
|
-
hasWeapon: () => hasWeapon,
|
|
135
|
-
hashEntitySystem: () => hashEntitySystem,
|
|
136
|
-
hashGameState: () => hashGameState,
|
|
137
|
-
huntTarget: () => huntTarget,
|
|
138
|
-
infront: () => infront,
|
|
139
|
-
isZeroVector: () => isZeroVector,
|
|
140
|
-
killBox: () => killBox,
|
|
141
|
-
monster_think: () => monster_think,
|
|
142
|
-
parseEntityLump: () => parseEntityLump,
|
|
143
|
-
parseRereleaseSave: () => parseRereleaseSave,
|
|
144
|
-
parseSaveFile: () => parseSaveFile,
|
|
145
|
-
pickupAmmo: () => pickupAmmo,
|
|
146
|
-
pickupArmor: () => pickupArmor,
|
|
147
|
-
pickupKey: () => pickupKey,
|
|
148
|
-
pickupPowerArmor: () => pickupPowerArmor,
|
|
149
|
-
pickupPowerup: () => pickupPowerup,
|
|
150
|
-
pickupWeapon: () => pickupWeapon,
|
|
151
|
-
range: () => rangeTo,
|
|
152
|
-
rangeTo: () => rangeTo,
|
|
153
|
-
registerCallback: () => registerCallback,
|
|
154
|
-
registerDefaultSpawns: () => registerDefaultSpawns,
|
|
155
|
-
selectWeapon: () => selectWeapon,
|
|
156
|
-
serializePlayerInventory: () => serializePlayerInventory,
|
|
157
|
-
serializeRereleaseSave: () => serializeRereleaseSave,
|
|
158
|
-
setMovedir: () => setMovedir,
|
|
159
|
-
spawnEntitiesFromText: () => spawnEntitiesFromText,
|
|
160
|
-
spawnEntityFromDictionary: () => spawnEntityFromDictionary,
|
|
161
|
-
summarizeRereleaseSave: () => summarizeRereleaseSave,
|
|
162
|
-
visible: () => visible,
|
|
163
|
-
walkMove: () => walkMove
|
|
164
|
-
});
|
|
165
|
-
module.exports = __toCommonJS(index_exports);
|
|
166
|
-
|
|
167
23
|
// ../shared/dist/esm/index.js
|
|
168
|
-
var __defProp2 = Object.defineProperty;
|
|
169
|
-
var __export2 = (target, all) => {
|
|
170
|
-
for (var name in all)
|
|
171
|
-
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
172
|
-
};
|
|
173
|
-
var ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
174
|
-
var STOP_EPSILON = 0.1;
|
|
175
|
-
var DEG_TO_RAD = Math.PI / 180;
|
|
176
24
|
function copyVec3(a) {
|
|
177
25
|
return { x: a.x, y: a.y, z: a.z };
|
|
178
26
|
}
|
|
@@ -319,11 +167,6 @@ function rotatePointAroundVector(dir, point, degrees) {
|
|
|
319
167
|
z: rot[2][0] * point.x + rot[2][1] * point.y + rot[2][2] * point.z
|
|
320
168
|
};
|
|
321
169
|
}
|
|
322
|
-
var PITCH = 0;
|
|
323
|
-
var YAW = 1;
|
|
324
|
-
var ROLL = 2;
|
|
325
|
-
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
326
|
-
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
327
170
|
function axisComponent(vec, axis) {
|
|
328
171
|
switch (axis) {
|
|
329
172
|
case PITCH:
|
|
@@ -409,247 +252,9 @@ function vectorToAngles(vec) {
|
|
|
409
252
|
}
|
|
410
253
|
return { x: -pitch, y: yaw, z: 0 };
|
|
411
254
|
}
|
|
412
|
-
var STATE_SIZE = 624;
|
|
413
|
-
var MIDDLE_WORD = 397;
|
|
414
|
-
var MATRIX_A = 2567483615;
|
|
415
|
-
var UPPER_MASK = 2147483648;
|
|
416
|
-
var LOWER_MASK = 2147483647;
|
|
417
|
-
var TWO_POW_32 = 4294967296;
|
|
418
|
-
var MersenneTwister19937 = class {
|
|
419
|
-
constructor(seed = 5489) {
|
|
420
|
-
this.state = new Uint32Array(STATE_SIZE);
|
|
421
|
-
this.index = STATE_SIZE;
|
|
422
|
-
this.seed(seed);
|
|
423
|
-
}
|
|
424
|
-
seed(seed) {
|
|
425
|
-
this.state[0] = seed >>> 0;
|
|
426
|
-
for (let i = 1; i < STATE_SIZE; i++) {
|
|
427
|
-
const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
|
|
428
|
-
const next = Math.imul(prev >>> 0, 1812433253) + i;
|
|
429
|
-
this.state[i] = next >>> 0;
|
|
430
|
-
}
|
|
431
|
-
this.index = STATE_SIZE;
|
|
432
|
-
}
|
|
433
|
-
nextUint32() {
|
|
434
|
-
if (this.index >= STATE_SIZE) {
|
|
435
|
-
this.twist();
|
|
436
|
-
}
|
|
437
|
-
let y = this.state[this.index++];
|
|
438
|
-
y ^= y >>> 11;
|
|
439
|
-
y ^= y << 7 & 2636928640;
|
|
440
|
-
y ^= y << 15 & 4022730752;
|
|
441
|
-
y ^= y >>> 18;
|
|
442
|
-
return y >>> 0;
|
|
443
|
-
}
|
|
444
|
-
twist() {
|
|
445
|
-
for (let i = 0; i < STATE_SIZE; i++) {
|
|
446
|
-
const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
|
|
447
|
-
let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
|
|
448
|
-
if ((y & 1) !== 0) {
|
|
449
|
-
next ^= MATRIX_A;
|
|
450
|
-
}
|
|
451
|
-
this.state[i] = next >>> 0;
|
|
452
|
-
}
|
|
453
|
-
this.index = 0;
|
|
454
|
-
}
|
|
455
|
-
getState() {
|
|
456
|
-
return {
|
|
457
|
-
index: this.index,
|
|
458
|
-
state: Array.from(this.state)
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
setState(snapshot) {
|
|
462
|
-
if (snapshot.state.length !== STATE_SIZE) {
|
|
463
|
-
throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
|
|
464
|
-
}
|
|
465
|
-
this.index = snapshot.index;
|
|
466
|
-
this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
|
|
467
|
-
}
|
|
468
|
-
};
|
|
469
|
-
var RandomGenerator = class {
|
|
470
|
-
constructor(options = {}) {
|
|
471
|
-
this.mt = new MersenneTwister19937(options.seed);
|
|
472
|
-
}
|
|
473
|
-
seed(seed) {
|
|
474
|
-
this.mt.seed(seed);
|
|
475
|
-
}
|
|
476
|
-
/** Uniform float in [0, 1). */
|
|
477
|
-
frandom() {
|
|
478
|
-
return this.mt.nextUint32() / TWO_POW_32;
|
|
479
|
-
}
|
|
480
|
-
/** Uniform float in [min, max). */
|
|
481
|
-
frandomRange(minInclusive, maxExclusive) {
|
|
482
|
-
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
483
|
-
}
|
|
484
|
-
/** Uniform float in [0, max). */
|
|
485
|
-
frandomMax(maxExclusive) {
|
|
486
|
-
return this.frandomRange(0, maxExclusive);
|
|
487
|
-
}
|
|
488
|
-
/** Uniform float in [-1, 1). */
|
|
489
|
-
crandom() {
|
|
490
|
-
return this.frandomRange(-1, 1);
|
|
491
|
-
}
|
|
492
|
-
/** Uniform float in (-1, 1). */
|
|
493
|
-
crandomOpen() {
|
|
494
|
-
const epsilon = Number.EPSILON;
|
|
495
|
-
return this.frandomRange(-1 + epsilon, 1);
|
|
496
|
-
}
|
|
497
|
-
/** Raw uint32 sample. */
|
|
498
|
-
irandomUint32() {
|
|
499
|
-
return this.mt.nextUint32();
|
|
500
|
-
}
|
|
501
|
-
/** Uniform integer in [min, max). */
|
|
502
|
-
irandomRange(minInclusive, maxExclusive) {
|
|
503
|
-
if (maxExclusive - minInclusive <= 1) {
|
|
504
|
-
return minInclusive;
|
|
505
|
-
}
|
|
506
|
-
const span = maxExclusive - minInclusive;
|
|
507
|
-
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
508
|
-
let sample;
|
|
509
|
-
do {
|
|
510
|
-
sample = this.mt.nextUint32();
|
|
511
|
-
} while (sample >= limit);
|
|
512
|
-
return minInclusive + sample % span;
|
|
513
|
-
}
|
|
514
|
-
/** Uniform integer in [0, max). */
|
|
515
|
-
irandom(maxExclusive) {
|
|
516
|
-
if (maxExclusive <= 0) {
|
|
517
|
-
return 0;
|
|
518
|
-
}
|
|
519
|
-
return this.irandomRange(0, maxExclusive);
|
|
520
|
-
}
|
|
521
|
-
/** Uniform time in milliseconds [min, max). */
|
|
522
|
-
randomTimeRange(minMs, maxMs) {
|
|
523
|
-
if (maxMs <= minMs) {
|
|
524
|
-
return minMs;
|
|
525
|
-
}
|
|
526
|
-
return this.irandomRange(minMs, maxMs);
|
|
527
|
-
}
|
|
528
|
-
/** Uniform time in milliseconds [0, max). */
|
|
529
|
-
randomTime(maxMs) {
|
|
530
|
-
return this.irandom(maxMs);
|
|
531
|
-
}
|
|
532
|
-
randomIndex(container) {
|
|
533
|
-
return this.irandom(container.length);
|
|
534
|
-
}
|
|
535
|
-
getState() {
|
|
536
|
-
return { mt: this.mt.getState() };
|
|
537
|
-
}
|
|
538
|
-
setState(snapshot) {
|
|
539
|
-
this.mt.setState(snapshot.mt);
|
|
540
|
-
}
|
|
541
|
-
};
|
|
542
255
|
function createRandomGenerator(options) {
|
|
543
256
|
return new RandomGenerator(options);
|
|
544
257
|
}
|
|
545
|
-
var CONTENTS_SOLID = 1 << 0;
|
|
546
|
-
var CONTENTS_WINDOW = 1 << 1;
|
|
547
|
-
var CONTENTS_AUX = 1 << 2;
|
|
548
|
-
var CONTENTS_LAVA = 1 << 3;
|
|
549
|
-
var CONTENTS_SLIME = 1 << 4;
|
|
550
|
-
var CONTENTS_WATER = 1 << 5;
|
|
551
|
-
var CONTENTS_MIST = 1 << 6;
|
|
552
|
-
var CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
553
|
-
var CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
554
|
-
var CONTENTS_AREAPORTAL = 1 << 15;
|
|
555
|
-
var CONTENTS_PLAYERCLIP = 1 << 16;
|
|
556
|
-
var CONTENTS_MONSTERCLIP = 1 << 17;
|
|
557
|
-
var CONTENTS_CURRENT_0 = 1 << 18;
|
|
558
|
-
var CONTENTS_CURRENT_90 = 1 << 19;
|
|
559
|
-
var CONTENTS_CURRENT_180 = 1 << 20;
|
|
560
|
-
var CONTENTS_CURRENT_270 = 1 << 21;
|
|
561
|
-
var CONTENTS_CURRENT_UP = 1 << 22;
|
|
562
|
-
var CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
563
|
-
var CONTENTS_ORIGIN = 1 << 24;
|
|
564
|
-
var CONTENTS_MONSTER = 1 << 25;
|
|
565
|
-
var CONTENTS_DEADMONSTER = 1 << 26;
|
|
566
|
-
var CONTENTS_DETAIL = 1 << 27;
|
|
567
|
-
var CONTENTS_TRANSLUCENT = 1 << 28;
|
|
568
|
-
var CONTENTS_LADDER = 1 << 29;
|
|
569
|
-
var CONTENTS_PLAYER = 1 << 30;
|
|
570
|
-
var CONTENTS_PROJECTILE = 1 << 31;
|
|
571
|
-
var SURF_LIGHT = 1 << 0;
|
|
572
|
-
var SURF_SLICK = 1 << 1;
|
|
573
|
-
var SURF_SKY = 1 << 2;
|
|
574
|
-
var SURF_WARP = 1 << 3;
|
|
575
|
-
var SURF_TRANS33 = 1 << 4;
|
|
576
|
-
var SURF_TRANS66 = 1 << 5;
|
|
577
|
-
var SURF_FLOWING = 1 << 6;
|
|
578
|
-
var SURF_NODRAW = 1 << 7;
|
|
579
|
-
var SURF_ALPHATEST = 1 << 25;
|
|
580
|
-
var SURF_N64_UV = 1 << 28;
|
|
581
|
-
var SURF_N64_SCROLL_X = 1 << 29;
|
|
582
|
-
var SURF_N64_SCROLL_Y = 1 << 30;
|
|
583
|
-
var SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
584
|
-
var MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
585
|
-
var MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
586
|
-
var MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
587
|
-
var MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
588
|
-
var MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
589
|
-
var MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
590
|
-
var MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
591
|
-
var MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
592
|
-
var MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
593
|
-
var MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
594
|
-
var MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
595
|
-
var MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
596
|
-
var MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
597
|
-
var MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
598
|
-
var CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
599
|
-
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
600
|
-
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
601
|
-
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
602
|
-
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
603
|
-
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
604
|
-
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
605
|
-
return CvarFlags2;
|
|
606
|
-
})(CvarFlags || {});
|
|
607
|
-
var MAX_CLIENTS = 256;
|
|
608
|
-
var MAX_LIGHTSTYLES = 256;
|
|
609
|
-
var MAX_MODELS = 8192;
|
|
610
|
-
var MAX_SOUNDS = 2048;
|
|
611
|
-
var MAX_IMAGES = 512;
|
|
612
|
-
var MAX_ITEMS = 256;
|
|
613
|
-
var MAX_GENERAL = MAX_CLIENTS * 2;
|
|
614
|
-
var MAX_SHADOW_LIGHTS = 256;
|
|
615
|
-
var MAX_WHEEL_ITEMS = 32;
|
|
616
|
-
var ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
617
|
-
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
618
|
-
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
619
|
-
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
620
|
-
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
621
|
-
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
622
|
-
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
623
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
624
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
625
|
-
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
626
|
-
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
627
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
628
|
-
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
629
|
-
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
630
|
-
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
631
|
-
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
632
|
-
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
633
|
-
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
634
|
-
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
635
|
-
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
636
|
-
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
637
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
638
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
639
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
640
|
-
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
641
|
-
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
642
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
643
|
-
return ConfigStringIndex2;
|
|
644
|
-
})(ConfigStringIndex || {});
|
|
645
|
-
var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
646
|
-
var replay_exports = {};
|
|
647
|
-
__export2(replay_exports, {
|
|
648
|
-
addReplayFrame: () => addReplayFrame,
|
|
649
|
-
createReplaySession: () => createReplaySession,
|
|
650
|
-
deserializeReplay: () => deserializeReplay,
|
|
651
|
-
serializeReplay: () => serializeReplay
|
|
652
|
-
});
|
|
653
258
|
function serializeReplay(session) {
|
|
654
259
|
return JSON.stringify(session, null, 2);
|
|
655
260
|
}
|
|
@@ -678,13 +283,6 @@ function addReplayFrame(session, cmd, serverFrame, startTime) {
|
|
|
678
283
|
timestamp: Date.now() - startTime
|
|
679
284
|
});
|
|
680
285
|
}
|
|
681
|
-
var WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
682
|
-
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
683
|
-
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
684
|
-
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
685
|
-
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
686
|
-
return WaterLevel4;
|
|
687
|
-
})(WaterLevel || {});
|
|
688
286
|
function applyPmoveFriction(params) {
|
|
689
287
|
const {
|
|
690
288
|
velocity,
|
|
@@ -783,111 +381,6 @@ function buildWaterWish(params) {
|
|
|
783
381
|
wishspeed
|
|
784
382
|
};
|
|
785
383
|
}
|
|
786
|
-
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
787
|
-
var ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
788
|
-
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
789
|
-
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
790
|
-
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
791
|
-
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
792
|
-
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
793
|
-
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
794
|
-
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
795
|
-
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
796
|
-
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
797
|
-
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
798
|
-
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
799
|
-
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
800
|
-
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
801
|
-
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
802
|
-
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
803
|
-
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
804
|
-
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
805
|
-
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
806
|
-
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
807
|
-
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
808
|
-
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
809
|
-
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
810
|
-
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
811
|
-
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
812
|
-
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
813
|
-
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
814
|
-
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
815
|
-
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
816
|
-
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
817
|
-
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
818
|
-
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
819
|
-
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
820
|
-
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
821
|
-
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
822
|
-
return ServerCommand22;
|
|
823
|
-
})(ServerCommand || {});
|
|
824
|
-
var TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
825
|
-
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
826
|
-
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
827
|
-
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
828
|
-
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
829
|
-
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
830
|
-
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
831
|
-
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
832
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
833
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
834
|
-
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
835
|
-
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
836
|
-
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
837
|
-
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
838
|
-
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
839
|
-
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
840
|
-
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
841
|
-
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
842
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
843
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
844
|
-
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
845
|
-
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
846
|
-
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
847
|
-
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
848
|
-
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
849
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
850
|
-
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
851
|
-
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
852
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
853
|
-
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
854
|
-
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
855
|
-
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
856
|
-
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
857
|
-
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
858
|
-
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
859
|
-
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
860
|
-
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
861
|
-
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
862
|
-
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
863
|
-
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
864
|
-
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
865
|
-
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
866
|
-
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
867
|
-
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
868
|
-
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
869
|
-
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
870
|
-
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
871
|
-
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
872
|
-
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
873
|
-
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
874
|
-
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
875
|
-
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
876
|
-
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
877
|
-
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
878
|
-
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
879
|
-
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
880
|
-
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
881
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
882
|
-
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
883
|
-
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
884
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
885
|
-
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
886
|
-
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
887
|
-
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
888
|
-
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
889
|
-
return TempEntity2;
|
|
890
|
-
})(TempEntity || {});
|
|
891
384
|
function toSigned16(val) {
|
|
892
385
|
return val << 16 >> 16;
|
|
893
386
|
}
|
|
@@ -933,191 +426,6 @@ function setCompressedInteger(stats, startIndex, id, count, bitsPerValue) {
|
|
|
933
426
|
const valueToWrite = base & ~mask | count << bitShift & mask;
|
|
934
427
|
writeUint16LE(stats, startIndex, byteOffset, valueToWrite & 65535);
|
|
935
428
|
}
|
|
936
|
-
var PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
937
|
-
PowerupId22["QuadDamage"] = "quad";
|
|
938
|
-
PowerupId22["Invulnerability"] = "invulnerability";
|
|
939
|
-
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
940
|
-
PowerupId22["Rebreather"] = "rebreather";
|
|
941
|
-
PowerupId22["Silencer"] = "silencer";
|
|
942
|
-
PowerupId22["PowerScreen"] = "power_screen";
|
|
943
|
-
PowerupId22["PowerShield"] = "power_shield";
|
|
944
|
-
PowerupId22["QuadFire"] = "quad_fire";
|
|
945
|
-
PowerupId22["Invisibility"] = "invisibility";
|
|
946
|
-
PowerupId22["Bandolier"] = "bandolier";
|
|
947
|
-
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
948
|
-
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
949
|
-
PowerupId22["DoubleDamage"] = "double_damage";
|
|
950
|
-
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
951
|
-
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
952
|
-
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
953
|
-
PowerupId22["Doppelganger"] = "doppelganger";
|
|
954
|
-
PowerupId22["TagToken"] = "tag_token";
|
|
955
|
-
PowerupId22["TechResistance"] = "tech_resistance";
|
|
956
|
-
PowerupId22["TechStrength"] = "tech_strength";
|
|
957
|
-
PowerupId22["TechHaste"] = "tech_haste";
|
|
958
|
-
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
959
|
-
PowerupId22["Flashlight"] = "flashlight";
|
|
960
|
-
PowerupId22["Compass"] = "compass";
|
|
961
|
-
return PowerupId22;
|
|
962
|
-
})(PowerupId || {});
|
|
963
|
-
var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
964
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
965
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
966
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
967
|
-
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
968
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
969
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
970
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
971
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
972
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
973
|
-
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
974
|
-
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
975
|
-
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
976
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
977
|
-
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
978
|
-
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
979
|
-
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
980
|
-
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
981
|
-
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
982
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
983
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
984
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
985
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
986
|
-
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
987
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
988
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
989
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
990
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
991
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
992
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
993
|
-
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
994
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
995
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
996
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
997
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
998
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
999
|
-
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
1000
|
-
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
1001
|
-
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
1002
|
-
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
1003
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
1004
|
-
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
1005
|
-
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
1006
|
-
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
1007
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
1008
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
1009
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
1010
|
-
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
1011
|
-
return PlayerStat2;
|
|
1012
|
-
})(PlayerStat || {});
|
|
1013
|
-
var AMMO_MAX = 12;
|
|
1014
|
-
var NUM_BITS_FOR_AMMO = 9;
|
|
1015
|
-
var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
1016
|
-
var POWERUP_MAX = 23;
|
|
1017
|
-
var NUM_BITS_FOR_POWERUP = 2;
|
|
1018
|
-
var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
1019
|
-
var POWERUP_STAT_MAP = {
|
|
1020
|
-
[
|
|
1021
|
-
"power_screen"
|
|
1022
|
-
/* PowerScreen */
|
|
1023
|
-
]: 0,
|
|
1024
|
-
[
|
|
1025
|
-
"power_shield"
|
|
1026
|
-
/* PowerShield */
|
|
1027
|
-
]: 1,
|
|
1028
|
-
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
1029
|
-
[
|
|
1030
|
-
"quad"
|
|
1031
|
-
/* QuadDamage */
|
|
1032
|
-
]: 3,
|
|
1033
|
-
[
|
|
1034
|
-
"quad_fire"
|
|
1035
|
-
/* QuadFire */
|
|
1036
|
-
]: 4,
|
|
1037
|
-
[
|
|
1038
|
-
"invulnerability"
|
|
1039
|
-
/* Invulnerability */
|
|
1040
|
-
]: 5,
|
|
1041
|
-
[
|
|
1042
|
-
"invisibility"
|
|
1043
|
-
/* Invisibility */
|
|
1044
|
-
]: 6,
|
|
1045
|
-
[
|
|
1046
|
-
"silencer"
|
|
1047
|
-
/* Silencer */
|
|
1048
|
-
]: 7,
|
|
1049
|
-
[
|
|
1050
|
-
"rebreather"
|
|
1051
|
-
/* Rebreather */
|
|
1052
|
-
]: 8,
|
|
1053
|
-
[
|
|
1054
|
-
"enviro_suit"
|
|
1055
|
-
/* EnviroSuit */
|
|
1056
|
-
]: 9,
|
|
1057
|
-
[
|
|
1058
|
-
"bandolier"
|
|
1059
|
-
/* Bandolier */
|
|
1060
|
-
]: 10,
|
|
1061
|
-
// Placeholder/Map mismatch handling?
|
|
1062
|
-
[
|
|
1063
|
-
"ammo_pack"
|
|
1064
|
-
/* AmmoPack */
|
|
1065
|
-
]: 10,
|
|
1066
|
-
// Original reused indices or had gaps?
|
|
1067
|
-
[
|
|
1068
|
-
"ir_goggles"
|
|
1069
|
-
/* IRGoggles */
|
|
1070
|
-
]: 11,
|
|
1071
|
-
[
|
|
1072
|
-
"double_damage"
|
|
1073
|
-
/* DoubleDamage */
|
|
1074
|
-
]: 12,
|
|
1075
|
-
[
|
|
1076
|
-
"sphere_vengeance"
|
|
1077
|
-
/* SphereVengeance */
|
|
1078
|
-
]: 13,
|
|
1079
|
-
[
|
|
1080
|
-
"sphere_hunter"
|
|
1081
|
-
/* SphereHunter */
|
|
1082
|
-
]: 14,
|
|
1083
|
-
[
|
|
1084
|
-
"sphere_defender"
|
|
1085
|
-
/* SphereDefender */
|
|
1086
|
-
]: 15,
|
|
1087
|
-
[
|
|
1088
|
-
"doppelganger"
|
|
1089
|
-
/* Doppelganger */
|
|
1090
|
-
]: 16,
|
|
1091
|
-
[
|
|
1092
|
-
"flashlight"
|
|
1093
|
-
/* Flashlight */
|
|
1094
|
-
]: 17,
|
|
1095
|
-
[
|
|
1096
|
-
"compass"
|
|
1097
|
-
/* Compass */
|
|
1098
|
-
]: 18,
|
|
1099
|
-
[
|
|
1100
|
-
"tech_resistance"
|
|
1101
|
-
/* TechResistance */
|
|
1102
|
-
]: 19,
|
|
1103
|
-
[
|
|
1104
|
-
"tech_strength"
|
|
1105
|
-
/* TechStrength */
|
|
1106
|
-
]: 20,
|
|
1107
|
-
[
|
|
1108
|
-
"tech_haste"
|
|
1109
|
-
/* TechHaste */
|
|
1110
|
-
]: 21,
|
|
1111
|
-
[
|
|
1112
|
-
"tech_regeneration"
|
|
1113
|
-
/* TechRegeneration */
|
|
1114
|
-
]: 22,
|
|
1115
|
-
// Add missing mappings to avoid runtime lookups failing for new types
|
|
1116
|
-
[
|
|
1117
|
-
"tag_token"
|
|
1118
|
-
/* TagToken */
|
|
1119
|
-
]: -1
|
|
1120
|
-
};
|
|
1121
429
|
function G_SetAmmoStat(stats, ammoId, count) {
|
|
1122
430
|
if (ammoId < 0 || ammoId >= AMMO_MAX) return;
|
|
1123
431
|
let val = count;
|
|
@@ -1138,228 +446,800 @@ function G_SetPowerupStat(stats, powerupId, val) {
|
|
|
1138
446
|
if (safeVal < 0) safeVal = 0;
|
|
1139
447
|
setCompressedInteger(stats, 41, index, safeVal, NUM_BITS_FOR_POWERUP);
|
|
1140
448
|
}
|
|
1141
|
-
var entityFlags_exports
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
449
|
+
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;
|
|
450
|
+
var init_esm = __esm({
|
|
451
|
+
"../shared/dist/esm/index.js"() {
|
|
452
|
+
"use strict";
|
|
453
|
+
__defProp2 = Object.defineProperty;
|
|
454
|
+
__export2 = (target, all) => {
|
|
455
|
+
for (var name in all)
|
|
456
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
457
|
+
};
|
|
458
|
+
ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
459
|
+
STOP_EPSILON = 0.1;
|
|
460
|
+
DEG_TO_RAD = Math.PI / 180;
|
|
461
|
+
PITCH = 0;
|
|
462
|
+
YAW = 1;
|
|
463
|
+
ROLL = 2;
|
|
464
|
+
DEG2RAD_FACTOR = Math.PI / 180;
|
|
465
|
+
RAD2DEG_FACTOR = 180 / Math.PI;
|
|
466
|
+
STATE_SIZE = 624;
|
|
467
|
+
MIDDLE_WORD = 397;
|
|
468
|
+
MATRIX_A = 2567483615;
|
|
469
|
+
UPPER_MASK = 2147483648;
|
|
470
|
+
LOWER_MASK = 2147483647;
|
|
471
|
+
TWO_POW_32 = 4294967296;
|
|
472
|
+
MersenneTwister19937 = class {
|
|
473
|
+
constructor(seed = 5489) {
|
|
474
|
+
this.state = new Uint32Array(STATE_SIZE);
|
|
475
|
+
this.index = STATE_SIZE;
|
|
476
|
+
this.seed(seed);
|
|
477
|
+
}
|
|
478
|
+
seed(seed) {
|
|
479
|
+
this.state[0] = seed >>> 0;
|
|
480
|
+
for (let i = 1; i < STATE_SIZE; i++) {
|
|
481
|
+
const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
|
|
482
|
+
const next = Math.imul(prev >>> 0, 1812433253) + i;
|
|
483
|
+
this.state[i] = next >>> 0;
|
|
484
|
+
}
|
|
485
|
+
this.index = STATE_SIZE;
|
|
486
|
+
}
|
|
487
|
+
nextUint32() {
|
|
488
|
+
if (this.index >= STATE_SIZE) {
|
|
489
|
+
this.twist();
|
|
490
|
+
}
|
|
491
|
+
let y = this.state[this.index++];
|
|
492
|
+
y ^= y >>> 11;
|
|
493
|
+
y ^= y << 7 & 2636928640;
|
|
494
|
+
y ^= y << 15 & 4022730752;
|
|
495
|
+
y ^= y >>> 18;
|
|
496
|
+
return y >>> 0;
|
|
497
|
+
}
|
|
498
|
+
twist() {
|
|
499
|
+
for (let i = 0; i < STATE_SIZE; i++) {
|
|
500
|
+
const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
|
|
501
|
+
let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
|
|
502
|
+
if ((y & 1) !== 0) {
|
|
503
|
+
next ^= MATRIX_A;
|
|
504
|
+
}
|
|
505
|
+
this.state[i] = next >>> 0;
|
|
506
|
+
}
|
|
507
|
+
this.index = 0;
|
|
508
|
+
}
|
|
509
|
+
getState() {
|
|
510
|
+
return {
|
|
511
|
+
index: this.index,
|
|
512
|
+
state: Array.from(this.state)
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
setState(snapshot) {
|
|
516
|
+
if (snapshot.state.length !== STATE_SIZE) {
|
|
517
|
+
throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
|
|
518
|
+
}
|
|
519
|
+
this.index = snapshot.index;
|
|
520
|
+
this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
|
|
521
|
+
}
|
|
522
|
+
};
|
|
523
|
+
RandomGenerator = class {
|
|
524
|
+
constructor(options = {}) {
|
|
525
|
+
this.mt = new MersenneTwister19937(options.seed);
|
|
526
|
+
}
|
|
527
|
+
seed(seed) {
|
|
528
|
+
this.mt.seed(seed);
|
|
529
|
+
}
|
|
530
|
+
/** Uniform float in [0, 1). */
|
|
531
|
+
frandom() {
|
|
532
|
+
return this.mt.nextUint32() / TWO_POW_32;
|
|
533
|
+
}
|
|
534
|
+
/** Uniform float in [min, max). */
|
|
535
|
+
frandomRange(minInclusive, maxExclusive) {
|
|
536
|
+
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
537
|
+
}
|
|
538
|
+
/** Uniform float in [0, max). */
|
|
539
|
+
frandomMax(maxExclusive) {
|
|
540
|
+
return this.frandomRange(0, maxExclusive);
|
|
541
|
+
}
|
|
542
|
+
/** Uniform float in [-1, 1). */
|
|
543
|
+
crandom() {
|
|
544
|
+
return this.frandomRange(-1, 1);
|
|
545
|
+
}
|
|
546
|
+
/** Uniform float in (-1, 1). */
|
|
547
|
+
crandomOpen() {
|
|
548
|
+
const epsilon = Number.EPSILON;
|
|
549
|
+
return this.frandomRange(-1 + epsilon, 1);
|
|
550
|
+
}
|
|
551
|
+
/** Raw uint32 sample. */
|
|
552
|
+
irandomUint32() {
|
|
553
|
+
return this.mt.nextUint32();
|
|
554
|
+
}
|
|
555
|
+
/** Uniform integer in [min, max). */
|
|
556
|
+
irandomRange(minInclusive, maxExclusive) {
|
|
557
|
+
if (maxExclusive - minInclusive <= 1) {
|
|
558
|
+
return minInclusive;
|
|
559
|
+
}
|
|
560
|
+
const span = maxExclusive - minInclusive;
|
|
561
|
+
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
562
|
+
let sample;
|
|
563
|
+
do {
|
|
564
|
+
sample = this.mt.nextUint32();
|
|
565
|
+
} while (sample >= limit);
|
|
566
|
+
return minInclusive + sample % span;
|
|
567
|
+
}
|
|
568
|
+
/** Uniform integer in [0, max). */
|
|
569
|
+
irandom(maxExclusive) {
|
|
570
|
+
if (maxExclusive <= 0) {
|
|
571
|
+
return 0;
|
|
572
|
+
}
|
|
573
|
+
return this.irandomRange(0, maxExclusive);
|
|
574
|
+
}
|
|
575
|
+
/** Uniform time in milliseconds [min, max). */
|
|
576
|
+
randomTimeRange(minMs, maxMs) {
|
|
577
|
+
if (maxMs <= minMs) {
|
|
578
|
+
return minMs;
|
|
579
|
+
}
|
|
580
|
+
return this.irandomRange(minMs, maxMs);
|
|
581
|
+
}
|
|
582
|
+
/** Uniform time in milliseconds [0, max). */
|
|
583
|
+
randomTime(maxMs) {
|
|
584
|
+
return this.irandom(maxMs);
|
|
585
|
+
}
|
|
586
|
+
randomIndex(container) {
|
|
587
|
+
return this.irandom(container.length);
|
|
588
|
+
}
|
|
589
|
+
getState() {
|
|
590
|
+
return { mt: this.mt.getState() };
|
|
591
|
+
}
|
|
592
|
+
setState(snapshot) {
|
|
593
|
+
this.mt.setState(snapshot.mt);
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
CONTENTS_SOLID = 1 << 0;
|
|
597
|
+
CONTENTS_WINDOW = 1 << 1;
|
|
598
|
+
CONTENTS_AUX = 1 << 2;
|
|
599
|
+
CONTENTS_LAVA = 1 << 3;
|
|
600
|
+
CONTENTS_SLIME = 1 << 4;
|
|
601
|
+
CONTENTS_WATER = 1 << 5;
|
|
602
|
+
CONTENTS_MIST = 1 << 6;
|
|
603
|
+
CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
604
|
+
CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
605
|
+
CONTENTS_AREAPORTAL = 1 << 15;
|
|
606
|
+
CONTENTS_PLAYERCLIP = 1 << 16;
|
|
607
|
+
CONTENTS_MONSTERCLIP = 1 << 17;
|
|
608
|
+
CONTENTS_CURRENT_0 = 1 << 18;
|
|
609
|
+
CONTENTS_CURRENT_90 = 1 << 19;
|
|
610
|
+
CONTENTS_CURRENT_180 = 1 << 20;
|
|
611
|
+
CONTENTS_CURRENT_270 = 1 << 21;
|
|
612
|
+
CONTENTS_CURRENT_UP = 1 << 22;
|
|
613
|
+
CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
614
|
+
CONTENTS_ORIGIN = 1 << 24;
|
|
615
|
+
CONTENTS_MONSTER = 1 << 25;
|
|
616
|
+
CONTENTS_DEADMONSTER = 1 << 26;
|
|
617
|
+
CONTENTS_DETAIL = 1 << 27;
|
|
618
|
+
CONTENTS_TRANSLUCENT = 1 << 28;
|
|
619
|
+
CONTENTS_LADDER = 1 << 29;
|
|
620
|
+
CONTENTS_PLAYER = 1 << 30;
|
|
621
|
+
CONTENTS_PROJECTILE = 1 << 31;
|
|
622
|
+
SURF_LIGHT = 1 << 0;
|
|
623
|
+
SURF_SLICK = 1 << 1;
|
|
624
|
+
SURF_SKY = 1 << 2;
|
|
625
|
+
SURF_WARP = 1 << 3;
|
|
626
|
+
SURF_TRANS33 = 1 << 4;
|
|
627
|
+
SURF_TRANS66 = 1 << 5;
|
|
628
|
+
SURF_FLOWING = 1 << 6;
|
|
629
|
+
SURF_NODRAW = 1 << 7;
|
|
630
|
+
SURF_ALPHATEST = 1 << 25;
|
|
631
|
+
SURF_N64_UV = 1 << 28;
|
|
632
|
+
SURF_N64_SCROLL_X = 1 << 29;
|
|
633
|
+
SURF_N64_SCROLL_Y = 1 << 30;
|
|
634
|
+
SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
635
|
+
MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
636
|
+
MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
637
|
+
MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
638
|
+
MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
639
|
+
MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
640
|
+
MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
641
|
+
MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
642
|
+
MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
643
|
+
MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
644
|
+
MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
645
|
+
MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
646
|
+
MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
647
|
+
MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
648
|
+
MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
649
|
+
CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
650
|
+
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
651
|
+
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
652
|
+
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
653
|
+
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
654
|
+
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
655
|
+
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
656
|
+
return CvarFlags2;
|
|
657
|
+
})(CvarFlags || {});
|
|
658
|
+
MAX_CLIENTS = 256;
|
|
659
|
+
MAX_LIGHTSTYLES = 256;
|
|
660
|
+
MAX_MODELS = 8192;
|
|
661
|
+
MAX_SOUNDS = 2048;
|
|
662
|
+
MAX_IMAGES = 512;
|
|
663
|
+
MAX_ITEMS = 256;
|
|
664
|
+
MAX_GENERAL = MAX_CLIENTS * 2;
|
|
665
|
+
MAX_SHADOW_LIGHTS = 256;
|
|
666
|
+
MAX_WHEEL_ITEMS = 32;
|
|
667
|
+
ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
668
|
+
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
669
|
+
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
670
|
+
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
671
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
672
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
673
|
+
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
674
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
675
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
676
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
677
|
+
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
678
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
679
|
+
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
680
|
+
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
681
|
+
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
682
|
+
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
683
|
+
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
684
|
+
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
685
|
+
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
686
|
+
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
687
|
+
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
688
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
689
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
690
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
691
|
+
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
692
|
+
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
693
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
694
|
+
return ConfigStringIndex2;
|
|
695
|
+
})(ConfigStringIndex || {});
|
|
696
|
+
MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
697
|
+
replay_exports = {};
|
|
698
|
+
__export2(replay_exports, {
|
|
699
|
+
addReplayFrame: () => addReplayFrame,
|
|
700
|
+
createReplaySession: () => createReplaySession,
|
|
701
|
+
deserializeReplay: () => deserializeReplay,
|
|
702
|
+
serializeReplay: () => serializeReplay
|
|
703
|
+
});
|
|
704
|
+
WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
705
|
+
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
706
|
+
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
707
|
+
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
708
|
+
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
709
|
+
return WaterLevel4;
|
|
710
|
+
})(WaterLevel || {});
|
|
711
|
+
WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
712
|
+
ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
713
|
+
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
714
|
+
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
715
|
+
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
716
|
+
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
717
|
+
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
718
|
+
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
719
|
+
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
720
|
+
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
721
|
+
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
722
|
+
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
723
|
+
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
724
|
+
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
725
|
+
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
726
|
+
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
727
|
+
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
728
|
+
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
729
|
+
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
730
|
+
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
731
|
+
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
732
|
+
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
733
|
+
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
734
|
+
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
735
|
+
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
736
|
+
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
737
|
+
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
738
|
+
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
739
|
+
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
740
|
+
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
741
|
+
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
742
|
+
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
743
|
+
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
744
|
+
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
745
|
+
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
746
|
+
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
747
|
+
return ServerCommand22;
|
|
748
|
+
})(ServerCommand || {});
|
|
749
|
+
TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
750
|
+
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
751
|
+
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
752
|
+
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
753
|
+
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
754
|
+
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
755
|
+
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
756
|
+
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
757
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
758
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
759
|
+
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
760
|
+
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
761
|
+
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
762
|
+
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
763
|
+
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
764
|
+
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
765
|
+
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
766
|
+
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
767
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
768
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
769
|
+
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
770
|
+
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
771
|
+
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
772
|
+
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
773
|
+
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
774
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
775
|
+
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
776
|
+
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
777
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
778
|
+
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
779
|
+
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
780
|
+
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
781
|
+
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
782
|
+
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
783
|
+
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
784
|
+
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
785
|
+
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
786
|
+
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
787
|
+
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
788
|
+
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
789
|
+
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
790
|
+
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
791
|
+
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
792
|
+
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
793
|
+
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
794
|
+
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
795
|
+
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
796
|
+
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
797
|
+
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
798
|
+
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
799
|
+
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
800
|
+
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
801
|
+
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
802
|
+
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
803
|
+
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
804
|
+
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
805
|
+
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
806
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
807
|
+
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
808
|
+
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
809
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
810
|
+
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
811
|
+
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
812
|
+
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
813
|
+
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
814
|
+
return TempEntity2;
|
|
815
|
+
})(TempEntity || {});
|
|
816
|
+
MZ_BLASTER = 0;
|
|
817
|
+
MZ_MACHINEGUN = 1;
|
|
818
|
+
MZ_SHOTGUN = 2;
|
|
819
|
+
MZ_CHAINGUN1 = 3;
|
|
820
|
+
MZ_RAILGUN = 6;
|
|
821
|
+
MZ_ROCKET = 7;
|
|
822
|
+
MZ_GRENADE = 8;
|
|
823
|
+
MZ_SSHOTGUN = 11;
|
|
824
|
+
MZ_BFG = 12;
|
|
825
|
+
MZ_HYPERBLASTER = 13;
|
|
826
|
+
PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
827
|
+
PowerupId22["QuadDamage"] = "quad";
|
|
828
|
+
PowerupId22["Invulnerability"] = "invulnerability";
|
|
829
|
+
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
830
|
+
PowerupId22["Rebreather"] = "rebreather";
|
|
831
|
+
PowerupId22["Silencer"] = "silencer";
|
|
832
|
+
PowerupId22["PowerScreen"] = "power_screen";
|
|
833
|
+
PowerupId22["PowerShield"] = "power_shield";
|
|
834
|
+
PowerupId22["QuadFire"] = "quad_fire";
|
|
835
|
+
PowerupId22["Invisibility"] = "invisibility";
|
|
836
|
+
PowerupId22["Bandolier"] = "bandolier";
|
|
837
|
+
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
838
|
+
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
839
|
+
PowerupId22["DoubleDamage"] = "double_damage";
|
|
840
|
+
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
841
|
+
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
842
|
+
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
843
|
+
PowerupId22["Doppelganger"] = "doppelganger";
|
|
844
|
+
PowerupId22["TagToken"] = "tag_token";
|
|
845
|
+
PowerupId22["TechResistance"] = "tech_resistance";
|
|
846
|
+
PowerupId22["TechStrength"] = "tech_strength";
|
|
847
|
+
PowerupId22["TechHaste"] = "tech_haste";
|
|
848
|
+
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
849
|
+
PowerupId22["Flashlight"] = "flashlight";
|
|
850
|
+
PowerupId22["Compass"] = "compass";
|
|
851
|
+
return PowerupId22;
|
|
852
|
+
})(PowerupId || {});
|
|
853
|
+
PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
854
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
855
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
856
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
857
|
+
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
858
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
859
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
860
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
861
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
862
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
863
|
+
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
864
|
+
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
865
|
+
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
866
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
867
|
+
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
868
|
+
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
869
|
+
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
870
|
+
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
871
|
+
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
872
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
873
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
874
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
875
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
876
|
+
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
877
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
878
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
879
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
880
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
881
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
882
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
883
|
+
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
884
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
885
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
886
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
887
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
888
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
889
|
+
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
890
|
+
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
891
|
+
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
892
|
+
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
893
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
894
|
+
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
895
|
+
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
896
|
+
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
897
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
898
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
899
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
900
|
+
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
901
|
+
return PlayerStat2;
|
|
902
|
+
})(PlayerStat || {});
|
|
903
|
+
AMMO_MAX = 12;
|
|
904
|
+
NUM_BITS_FOR_AMMO = 9;
|
|
905
|
+
NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
906
|
+
POWERUP_MAX = 23;
|
|
907
|
+
NUM_BITS_FOR_POWERUP = 2;
|
|
908
|
+
NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
909
|
+
POWERUP_STAT_MAP = {
|
|
910
|
+
[
|
|
911
|
+
"power_screen"
|
|
912
|
+
/* PowerScreen */
|
|
913
|
+
]: 0,
|
|
914
|
+
[
|
|
915
|
+
"power_shield"
|
|
916
|
+
/* PowerShield */
|
|
917
|
+
]: 1,
|
|
918
|
+
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
919
|
+
[
|
|
920
|
+
"quad"
|
|
921
|
+
/* QuadDamage */
|
|
922
|
+
]: 3,
|
|
923
|
+
[
|
|
924
|
+
"quad_fire"
|
|
925
|
+
/* QuadFire */
|
|
926
|
+
]: 4,
|
|
927
|
+
[
|
|
928
|
+
"invulnerability"
|
|
929
|
+
/* Invulnerability */
|
|
930
|
+
]: 5,
|
|
931
|
+
[
|
|
932
|
+
"invisibility"
|
|
933
|
+
/* Invisibility */
|
|
934
|
+
]: 6,
|
|
935
|
+
[
|
|
936
|
+
"silencer"
|
|
937
|
+
/* Silencer */
|
|
938
|
+
]: 7,
|
|
939
|
+
[
|
|
940
|
+
"rebreather"
|
|
941
|
+
/* Rebreather */
|
|
942
|
+
]: 8,
|
|
943
|
+
[
|
|
944
|
+
"enviro_suit"
|
|
945
|
+
/* EnviroSuit */
|
|
946
|
+
]: 9,
|
|
947
|
+
[
|
|
948
|
+
"bandolier"
|
|
949
|
+
/* Bandolier */
|
|
950
|
+
]: 10,
|
|
951
|
+
// Placeholder/Map mismatch handling?
|
|
952
|
+
[
|
|
953
|
+
"ammo_pack"
|
|
954
|
+
/* AmmoPack */
|
|
955
|
+
]: 10,
|
|
956
|
+
// Original reused indices or had gaps?
|
|
957
|
+
[
|
|
958
|
+
"ir_goggles"
|
|
959
|
+
/* IRGoggles */
|
|
960
|
+
]: 11,
|
|
961
|
+
[
|
|
962
|
+
"double_damage"
|
|
963
|
+
/* DoubleDamage */
|
|
964
|
+
]: 12,
|
|
965
|
+
[
|
|
966
|
+
"sphere_vengeance"
|
|
967
|
+
/* SphereVengeance */
|
|
968
|
+
]: 13,
|
|
969
|
+
[
|
|
970
|
+
"sphere_hunter"
|
|
971
|
+
/* SphereHunter */
|
|
972
|
+
]: 14,
|
|
973
|
+
[
|
|
974
|
+
"sphere_defender"
|
|
975
|
+
/* SphereDefender */
|
|
976
|
+
]: 15,
|
|
977
|
+
[
|
|
978
|
+
"doppelganger"
|
|
979
|
+
/* Doppelganger */
|
|
980
|
+
]: 16,
|
|
981
|
+
[
|
|
982
|
+
"flashlight"
|
|
983
|
+
/* Flashlight */
|
|
984
|
+
]: 17,
|
|
985
|
+
[
|
|
986
|
+
"compass"
|
|
987
|
+
/* Compass */
|
|
988
|
+
]: 18,
|
|
989
|
+
[
|
|
990
|
+
"tech_resistance"
|
|
991
|
+
/* TechResistance */
|
|
992
|
+
]: 19,
|
|
993
|
+
[
|
|
994
|
+
"tech_strength"
|
|
995
|
+
/* TechStrength */
|
|
996
|
+
]: 20,
|
|
997
|
+
[
|
|
998
|
+
"tech_haste"
|
|
999
|
+
/* TechHaste */
|
|
1000
|
+
]: 21,
|
|
1001
|
+
[
|
|
1002
|
+
"tech_regeneration"
|
|
1003
|
+
/* TechRegeneration */
|
|
1004
|
+
]: 22,
|
|
1005
|
+
// Add missing mappings to avoid runtime lookups failing for new types
|
|
1006
|
+
[
|
|
1007
|
+
"tag_token"
|
|
1008
|
+
/* TagToken */
|
|
1009
|
+
]: -1
|
|
1010
|
+
};
|
|
1011
|
+
RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
1012
|
+
RenderFx2[RenderFx2["MinLight"] = 1] = "MinLight";
|
|
1013
|
+
RenderFx2[RenderFx2["ViewerModel"] = 2] = "ViewerModel";
|
|
1014
|
+
RenderFx2[RenderFx2["WeaponModel"] = 4] = "WeaponModel";
|
|
1015
|
+
RenderFx2[RenderFx2["FullBright"] = 8] = "FullBright";
|
|
1016
|
+
RenderFx2[RenderFx2["DepthHack"] = 16] = "DepthHack";
|
|
1017
|
+
RenderFx2[RenderFx2["Translucent"] = 32] = "Translucent";
|
|
1018
|
+
RenderFx2[RenderFx2["FrameLerp"] = 64] = "FrameLerp";
|
|
1019
|
+
RenderFx2[RenderFx2["Beam"] = 128] = "Beam";
|
|
1020
|
+
RenderFx2[RenderFx2["CustomLight"] = 256] = "CustomLight";
|
|
1021
|
+
RenderFx2[RenderFx2["Glow"] = 512] = "Glow";
|
|
1022
|
+
RenderFx2[RenderFx2["ShellRed"] = 1024] = "ShellRed";
|
|
1023
|
+
RenderFx2[RenderFx2["ShellGreen"] = 2048] = "ShellGreen";
|
|
1024
|
+
RenderFx2[RenderFx2["ShellBlue"] = 4096] = "ShellBlue";
|
|
1025
|
+
RenderFx2[RenderFx2["IrVisible"] = 32768] = "IrVisible";
|
|
1026
|
+
RenderFx2[RenderFx2["ShellDouble"] = 65536] = "ShellDouble";
|
|
1027
|
+
RenderFx2[RenderFx2["ShellHalfDam"] = 131072] = "ShellHalfDam";
|
|
1028
|
+
RenderFx2[RenderFx2["MinLightPlus"] = 262144] = "MinLightPlus";
|
|
1029
|
+
RenderFx2[RenderFx2["ExtraLight"] = 524288] = "ExtraLight";
|
|
1030
|
+
RenderFx2[RenderFx2["BeamLightning"] = 1048576] = "BeamLightning";
|
|
1031
|
+
return RenderFx2;
|
|
1032
|
+
})(RenderFx || {});
|
|
1033
|
+
entityFlags_exports = {};
|
|
1034
|
+
__export2(entityFlags_exports, {
|
|
1035
|
+
U_ANGLE1: () => U_ANGLE1,
|
|
1036
|
+
U_ANGLE2: () => U_ANGLE2,
|
|
1037
|
+
U_ANGLE3: () => U_ANGLE3,
|
|
1038
|
+
U_EFFECTS: () => U_EFFECTS,
|
|
1039
|
+
U_EVENT: () => U_EVENT,
|
|
1040
|
+
U_FRAME: () => U_FRAME,
|
|
1041
|
+
U_MODEL: () => U_MODEL,
|
|
1042
|
+
U_MODEL2: () => U_MODEL2,
|
|
1043
|
+
U_MODEL3: () => U_MODEL3,
|
|
1044
|
+
U_MODEL4: () => U_MODEL4,
|
|
1045
|
+
U_MOREBITS: () => U_MOREBITS,
|
|
1046
|
+
U_NUMBER: () => U_NUMBER,
|
|
1047
|
+
U_ORIGIN1: () => U_ORIGIN1,
|
|
1048
|
+
U_ORIGIN2: () => U_ORIGIN2,
|
|
1049
|
+
U_ORIGIN3: () => U_ORIGIN3,
|
|
1050
|
+
U_REMOVE: () => U_REMOVE,
|
|
1051
|
+
U_RENDERFX: () => U_RENDERFX,
|
|
1052
|
+
U_SKIN: () => U_SKIN,
|
|
1053
|
+
U_SOLID: () => U_SOLID,
|
|
1054
|
+
U_SOUND: () => U_SOUND
|
|
1055
|
+
});
|
|
1056
|
+
U_NUMBER = 1 << 0;
|
|
1057
|
+
U_MODEL = 1 << 1;
|
|
1058
|
+
U_SOUND = 1 << 2;
|
|
1059
|
+
U_ORIGIN1 = 1 << 3;
|
|
1060
|
+
U_ORIGIN2 = 1 << 4;
|
|
1061
|
+
U_ORIGIN3 = 1 << 5;
|
|
1062
|
+
U_ANGLE1 = 1 << 6;
|
|
1063
|
+
U_ANGLE2 = 1 << 7;
|
|
1064
|
+
U_ANGLE3 = 1 << 8;
|
|
1065
|
+
U_FRAME = 1 << 9;
|
|
1066
|
+
U_SKIN = 1 << 10;
|
|
1067
|
+
U_EFFECTS = 1 << 11;
|
|
1068
|
+
U_RENDERFX = 1 << 12;
|
|
1069
|
+
U_SOLID = 1 << 13;
|
|
1070
|
+
U_EVENT = 1 << 14;
|
|
1071
|
+
U_MOREBITS = 1 << 15;
|
|
1072
|
+
U_MODEL2 = 1 << 0;
|
|
1073
|
+
U_MODEL3 = 1 << 1;
|
|
1074
|
+
U_MODEL4 = 1 << 2;
|
|
1075
|
+
U_REMOVE = 32768;
|
|
1076
|
+
FRAMETIME = 0.025;
|
|
1077
|
+
MASK_WATER2 = 33554432;
|
|
1078
|
+
WaterLevel3 = {
|
|
1079
|
+
None: 0,
|
|
1080
|
+
Feet: 1,
|
|
1081
|
+
Waist: 2,
|
|
1082
|
+
Under: 3
|
|
1083
|
+
};
|
|
1084
|
+
categorizePosition2 = (state, trace) => {
|
|
1085
|
+
const point = { ...state.origin };
|
|
1086
|
+
point.z -= 0.25;
|
|
1087
|
+
const traceResult = trace(state.origin, point);
|
|
1088
|
+
return {
|
|
1089
|
+
...state,
|
|
1090
|
+
onGround: traceResult.fraction < 1
|
|
1091
|
+
};
|
|
1092
|
+
};
|
|
1093
|
+
checkWater = (state, pointContents2) => {
|
|
1094
|
+
const point = { ...state.origin };
|
|
1095
|
+
const { mins, maxs } = state;
|
|
1096
|
+
point.z = state.origin.z + mins.z + 1;
|
|
1097
|
+
const contents = pointContents2(point);
|
|
1098
|
+
if (!(contents & MASK_WATER2)) {
|
|
1099
|
+
return { ...state, waterLevel: WaterLevel3.None };
|
|
1100
|
+
}
|
|
1101
|
+
let waterLevel = WaterLevel3.Feet;
|
|
1102
|
+
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1103
|
+
point.z = waist;
|
|
1104
|
+
const waistContents = pointContents2(point);
|
|
1105
|
+
if (waistContents & MASK_WATER2) {
|
|
1106
|
+
waterLevel = WaterLevel3.Waist;
|
|
1107
|
+
const head = state.origin.z + 22;
|
|
1108
|
+
point.z = head;
|
|
1109
|
+
const headContents = pointContents2(point);
|
|
1110
|
+
if (headContents & MASK_WATER2) {
|
|
1111
|
+
waterLevel = WaterLevel3.Under;
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
return { ...state, waterLevel };
|
|
1115
|
+
};
|
|
1116
|
+
applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1117
|
+
let newState = { ...state };
|
|
1118
|
+
newState = categorizePosition2(newState, trace);
|
|
1119
|
+
newState = checkWater(newState, pointContents2);
|
|
1120
|
+
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1121
|
+
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1122
|
+
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1123
|
+
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1124
|
+
y: viewAngles.y,
|
|
1125
|
+
z: viewAngles.z
|
|
1126
|
+
};
|
|
1127
|
+
const { forward, right } = angleVectors(adjustedAngles);
|
|
1128
|
+
const frictionedVelocity = applyPmoveFriction({
|
|
1129
|
+
velocity,
|
|
1130
|
+
frametime: FRAMETIME,
|
|
1131
|
+
onGround,
|
|
1132
|
+
groundIsSlick: false,
|
|
1133
|
+
onLadder: false,
|
|
1134
|
+
waterlevel: waterLevel,
|
|
1135
|
+
pmFriction: 6,
|
|
1136
|
+
pmStopSpeed: 100,
|
|
1137
|
+
pmWaterFriction: 1
|
|
1138
|
+
});
|
|
1139
|
+
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1140
|
+
forward,
|
|
1141
|
+
right,
|
|
1142
|
+
cmd,
|
|
1143
|
+
maxSpeed: 320
|
|
1144
|
+
}) : buildAirGroundWish({
|
|
1145
|
+
forward,
|
|
1146
|
+
right,
|
|
1147
|
+
cmd,
|
|
1148
|
+
maxSpeed: 320
|
|
1149
|
+
});
|
|
1150
|
+
const finalVelocity = applyPmoveAccelerate({
|
|
1151
|
+
velocity: frictionedVelocity,
|
|
1152
|
+
wishdir: wish.wishdir,
|
|
1153
|
+
wishspeed: wish.wishspeed,
|
|
1154
|
+
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1155
|
+
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1156
|
+
frametime: FRAMETIME
|
|
1157
|
+
});
|
|
1158
|
+
const traceResult = trace(origin, {
|
|
1159
|
+
x: origin.x + finalVelocity.x * FRAMETIME,
|
|
1160
|
+
y: origin.y + finalVelocity.y * FRAMETIME,
|
|
1161
|
+
z: origin.z + finalVelocity.z * FRAMETIME
|
|
1162
|
+
});
|
|
1163
|
+
return {
|
|
1164
|
+
...newState,
|
|
1165
|
+
origin: traceResult.endpos,
|
|
1166
|
+
velocity: finalVelocity
|
|
1167
|
+
};
|
|
1168
|
+
};
|
|
1169
|
+
WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1170
|
+
WeaponId22["Blaster"] = "blaster";
|
|
1171
|
+
WeaponId22["Shotgun"] = "shotgun";
|
|
1172
|
+
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1173
|
+
WeaponId22["Machinegun"] = "machinegun";
|
|
1174
|
+
WeaponId22["Chaingun"] = "chaingun";
|
|
1175
|
+
WeaponId22["HandGrenade"] = "grenades";
|
|
1176
|
+
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1177
|
+
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1178
|
+
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1179
|
+
WeaponId22["Railgun"] = "railgun";
|
|
1180
|
+
WeaponId22["BFG10K"] = "bfg10k";
|
|
1181
|
+
WeaponId22["Grapple"] = "grapple";
|
|
1182
|
+
WeaponId22["ChainFist"] = "chainfist";
|
|
1183
|
+
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1184
|
+
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1185
|
+
WeaponId22["IonRipper"] = "ionripper";
|
|
1186
|
+
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1187
|
+
WeaponId22["Phalanx"] = "phalanx";
|
|
1188
|
+
WeaponId22["Disruptor"] = "disruptor";
|
|
1189
|
+
WeaponId22["Trap"] = "trap";
|
|
1190
|
+
return WeaponId22;
|
|
1191
|
+
})(WeaponId || {});
|
|
1192
|
+
AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1193
|
+
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1194
|
+
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1195
|
+
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1196
|
+
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1197
|
+
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1198
|
+
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1199
|
+
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1200
|
+
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1201
|
+
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1202
|
+
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1203
|
+
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1204
|
+
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1205
|
+
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1206
|
+
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1207
|
+
return AmmoType22;
|
|
1208
|
+
})(AmmoType || {});
|
|
1209
|
+
AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1210
|
+
AmmoItemId = /* @__PURE__ */ ((AmmoItemId22) => {
|
|
1211
|
+
AmmoItemId22["Shells"] = "ammo_shells";
|
|
1212
|
+
AmmoItemId22["Bullets"] = "ammo_bullets";
|
|
1213
|
+
AmmoItemId22["Rockets"] = "ammo_rockets";
|
|
1214
|
+
AmmoItemId22["Grenades"] = "ammo_grenades";
|
|
1215
|
+
AmmoItemId22["Cells"] = "ammo_cells";
|
|
1216
|
+
AmmoItemId22["Slugs"] = "ammo_slugs";
|
|
1217
|
+
AmmoItemId22["MagSlugs"] = "ammo_magslug";
|
|
1218
|
+
AmmoItemId22["Flechettes"] = "ammo_flechettes";
|
|
1219
|
+
AmmoItemId22["Disruptor"] = "ammo_disruptor";
|
|
1220
|
+
AmmoItemId22["Tesla"] = "ammo_tesla";
|
|
1221
|
+
AmmoItemId22["Trap"] = "ammo_trap";
|
|
1222
|
+
AmmoItemId22["Prox"] = "ammo_prox";
|
|
1223
|
+
return AmmoItemId22;
|
|
1224
|
+
})(AmmoItemId || {});
|
|
1225
|
+
WEAPON_WHEEL_ORDER = [
|
|
1226
|
+
"blaster",
|
|
1227
|
+
"shotgun",
|
|
1228
|
+
"supershotgun",
|
|
1229
|
+
"machinegun",
|
|
1230
|
+
"chaingun",
|
|
1231
|
+
"grenadelauncher",
|
|
1232
|
+
"rocketlauncher",
|
|
1233
|
+
"grenades",
|
|
1234
|
+
"hyperblaster",
|
|
1235
|
+
"railgun",
|
|
1236
|
+
"bfg10k"
|
|
1237
|
+
/* BFG10K */
|
|
1238
|
+
];
|
|
1239
|
+
}
|
|
1163
1240
|
});
|
|
1164
|
-
var U_NUMBER = 1 << 0;
|
|
1165
|
-
var U_MODEL = 1 << 1;
|
|
1166
|
-
var U_SOUND = 1 << 2;
|
|
1167
|
-
var U_ORIGIN1 = 1 << 3;
|
|
1168
|
-
var U_ORIGIN2 = 1 << 4;
|
|
1169
|
-
var U_ORIGIN3 = 1 << 5;
|
|
1170
|
-
var U_ANGLE1 = 1 << 6;
|
|
1171
|
-
var U_ANGLE2 = 1 << 7;
|
|
1172
|
-
var U_ANGLE3 = 1 << 8;
|
|
1173
|
-
var U_FRAME = 1 << 9;
|
|
1174
|
-
var U_SKIN = 1 << 10;
|
|
1175
|
-
var U_EFFECTS = 1 << 11;
|
|
1176
|
-
var U_RENDERFX = 1 << 12;
|
|
1177
|
-
var U_SOLID = 1 << 13;
|
|
1178
|
-
var U_EVENT = 1 << 14;
|
|
1179
|
-
var U_MOREBITS = 1 << 15;
|
|
1180
|
-
var U_MODEL2 = 1 << 0;
|
|
1181
|
-
var U_MODEL3 = 1 << 1;
|
|
1182
|
-
var U_MODEL4 = 1 << 2;
|
|
1183
|
-
var U_REMOVE = 32768;
|
|
1184
|
-
var FRAMETIME = 0.025;
|
|
1185
|
-
var MASK_WATER2 = 33554432;
|
|
1186
|
-
var WaterLevel3 = {
|
|
1187
|
-
None: 0,
|
|
1188
|
-
Feet: 1,
|
|
1189
|
-
Waist: 2,
|
|
1190
|
-
Under: 3
|
|
1191
|
-
};
|
|
1192
|
-
var categorizePosition2 = (state, trace) => {
|
|
1193
|
-
const point = { ...state.origin };
|
|
1194
|
-
point.z -= 0.25;
|
|
1195
|
-
const traceResult = trace(state.origin, point);
|
|
1196
|
-
return {
|
|
1197
|
-
...state,
|
|
1198
|
-
onGround: traceResult.fraction < 1
|
|
1199
|
-
};
|
|
1200
|
-
};
|
|
1201
|
-
var checkWater = (state, pointContents2) => {
|
|
1202
|
-
const point = { ...state.origin };
|
|
1203
|
-
const { mins, maxs } = state;
|
|
1204
|
-
point.z = state.origin.z + mins.z + 1;
|
|
1205
|
-
const contents = pointContents2(point);
|
|
1206
|
-
if (!(contents & MASK_WATER2)) {
|
|
1207
|
-
return { ...state, waterLevel: WaterLevel3.None };
|
|
1208
|
-
}
|
|
1209
|
-
let waterLevel = WaterLevel3.Feet;
|
|
1210
|
-
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1211
|
-
point.z = waist;
|
|
1212
|
-
const waistContents = pointContents2(point);
|
|
1213
|
-
if (waistContents & MASK_WATER2) {
|
|
1214
|
-
waterLevel = WaterLevel3.Waist;
|
|
1215
|
-
const head = state.origin.z + 22;
|
|
1216
|
-
point.z = head;
|
|
1217
|
-
const headContents = pointContents2(point);
|
|
1218
|
-
if (headContents & MASK_WATER2) {
|
|
1219
|
-
waterLevel = WaterLevel3.Under;
|
|
1220
|
-
}
|
|
1221
|
-
}
|
|
1222
|
-
return { ...state, waterLevel };
|
|
1223
|
-
};
|
|
1224
|
-
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1225
|
-
let newState = { ...state };
|
|
1226
|
-
newState = categorizePosition2(newState, trace);
|
|
1227
|
-
newState = checkWater(newState, pointContents2);
|
|
1228
|
-
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1229
|
-
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1230
|
-
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1231
|
-
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1232
|
-
y: viewAngles.y,
|
|
1233
|
-
z: viewAngles.z
|
|
1234
|
-
};
|
|
1235
|
-
const { forward, right } = angleVectors(adjustedAngles);
|
|
1236
|
-
const frictionedVelocity = applyPmoveFriction({
|
|
1237
|
-
velocity,
|
|
1238
|
-
frametime: FRAMETIME,
|
|
1239
|
-
onGround,
|
|
1240
|
-
groundIsSlick: false,
|
|
1241
|
-
onLadder: false,
|
|
1242
|
-
waterlevel: waterLevel,
|
|
1243
|
-
pmFriction: 6,
|
|
1244
|
-
pmStopSpeed: 100,
|
|
1245
|
-
pmWaterFriction: 1
|
|
1246
|
-
});
|
|
1247
|
-
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1248
|
-
forward,
|
|
1249
|
-
right,
|
|
1250
|
-
cmd,
|
|
1251
|
-
maxSpeed: 320
|
|
1252
|
-
}) : buildAirGroundWish({
|
|
1253
|
-
forward,
|
|
1254
|
-
right,
|
|
1255
|
-
cmd,
|
|
1256
|
-
maxSpeed: 320
|
|
1257
|
-
});
|
|
1258
|
-
const finalVelocity = applyPmoveAccelerate({
|
|
1259
|
-
velocity: frictionedVelocity,
|
|
1260
|
-
wishdir: wish.wishdir,
|
|
1261
|
-
wishspeed: wish.wishspeed,
|
|
1262
|
-
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1263
|
-
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1264
|
-
frametime: FRAMETIME
|
|
1265
|
-
});
|
|
1266
|
-
const traceResult = trace(origin, {
|
|
1267
|
-
x: origin.x + finalVelocity.x * FRAMETIME,
|
|
1268
|
-
y: origin.y + finalVelocity.y * FRAMETIME,
|
|
1269
|
-
z: origin.z + finalVelocity.z * FRAMETIME
|
|
1270
|
-
});
|
|
1271
|
-
return {
|
|
1272
|
-
...newState,
|
|
1273
|
-
origin: traceResult.endpos,
|
|
1274
|
-
velocity: finalVelocity
|
|
1275
|
-
};
|
|
1276
|
-
};
|
|
1277
|
-
var WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1278
|
-
WeaponId22["Blaster"] = "blaster";
|
|
1279
|
-
WeaponId22["Shotgun"] = "shotgun";
|
|
1280
|
-
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1281
|
-
WeaponId22["Machinegun"] = "machinegun";
|
|
1282
|
-
WeaponId22["Chaingun"] = "chaingun";
|
|
1283
|
-
WeaponId22["HandGrenade"] = "grenades";
|
|
1284
|
-
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1285
|
-
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1286
|
-
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1287
|
-
WeaponId22["Railgun"] = "railgun";
|
|
1288
|
-
WeaponId22["BFG10K"] = "bfg10k";
|
|
1289
|
-
WeaponId22["Grapple"] = "grapple";
|
|
1290
|
-
WeaponId22["ChainFist"] = "chainfist";
|
|
1291
|
-
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1292
|
-
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1293
|
-
WeaponId22["IonRipper"] = "ionripper";
|
|
1294
|
-
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1295
|
-
WeaponId22["Phalanx"] = "phalanx";
|
|
1296
|
-
WeaponId22["Disruptor"] = "disruptor";
|
|
1297
|
-
WeaponId22["Trap"] = "trap";
|
|
1298
|
-
return WeaponId22;
|
|
1299
|
-
})(WeaponId || {});
|
|
1300
|
-
var AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1301
|
-
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1302
|
-
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1303
|
-
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1304
|
-
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1305
|
-
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1306
|
-
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1307
|
-
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1308
|
-
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1309
|
-
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1310
|
-
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1311
|
-
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1312
|
-
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1313
|
-
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1314
|
-
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1315
|
-
return AmmoType22;
|
|
1316
|
-
})(AmmoType || {});
|
|
1317
|
-
var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1318
|
-
var AmmoItemId = /* @__PURE__ */ ((AmmoItemId22) => {
|
|
1319
|
-
AmmoItemId22["Shells"] = "ammo_shells";
|
|
1320
|
-
AmmoItemId22["Bullets"] = "ammo_bullets";
|
|
1321
|
-
AmmoItemId22["Rockets"] = "ammo_rockets";
|
|
1322
|
-
AmmoItemId22["Grenades"] = "ammo_grenades";
|
|
1323
|
-
AmmoItemId22["Cells"] = "ammo_cells";
|
|
1324
|
-
AmmoItemId22["Slugs"] = "ammo_slugs";
|
|
1325
|
-
AmmoItemId22["MagSlugs"] = "ammo_magslug";
|
|
1326
|
-
AmmoItemId22["Flechettes"] = "ammo_flechettes";
|
|
1327
|
-
AmmoItemId22["Disruptor"] = "ammo_disruptor";
|
|
1328
|
-
AmmoItemId22["Tesla"] = "ammo_tesla";
|
|
1329
|
-
AmmoItemId22["Trap"] = "ammo_trap";
|
|
1330
|
-
AmmoItemId22["Prox"] = "ammo_prox";
|
|
1331
|
-
return AmmoItemId22;
|
|
1332
|
-
})(AmmoItemId || {});
|
|
1333
|
-
var WEAPON_WHEEL_ORDER = [
|
|
1334
|
-
"blaster",
|
|
1335
|
-
"shotgun",
|
|
1336
|
-
"supershotgun",
|
|
1337
|
-
"machinegun",
|
|
1338
|
-
"chaingun",
|
|
1339
|
-
"grenadelauncher",
|
|
1340
|
-
"rocketlauncher",
|
|
1341
|
-
"grenades",
|
|
1342
|
-
"hyperblaster",
|
|
1343
|
-
"railgun",
|
|
1344
|
-
"bfg10k"
|
|
1345
|
-
/* BFG10K */
|
|
1346
|
-
];
|
|
1347
1241
|
|
|
1348
1242
|
// src/inventory/ammo.ts
|
|
1349
|
-
var AMMO_ITEM_DEFINITIONS = {
|
|
1350
|
-
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1351
|
-
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1352
|
-
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1353
|
-
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1354
|
-
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1355
|
-
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1356
|
-
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1357
|
-
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1358
|
-
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1359
|
-
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1360
|
-
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1361
|
-
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1362
|
-
};
|
|
1363
1243
|
function getAmmoItemDefinition(id) {
|
|
1364
1244
|
return AMMO_ITEM_DEFINITIONS[id];
|
|
1365
1245
|
}
|
|
@@ -1413,54 +1293,55 @@ function pickupAmmo(inventory, itemId, options = {}) {
|
|
|
1413
1293
|
const amount = options.countOverride ?? def.quantity;
|
|
1414
1294
|
return addAmmo(inventory, def.ammoType, amount);
|
|
1415
1295
|
}
|
|
1296
|
+
var AMMO_ITEM_DEFINITIONS;
|
|
1297
|
+
var init_ammo = __esm({
|
|
1298
|
+
"src/inventory/ammo.ts"() {
|
|
1299
|
+
"use strict";
|
|
1300
|
+
init_esm();
|
|
1301
|
+
AMMO_ITEM_DEFINITIONS = {
|
|
1302
|
+
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1303
|
+
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1304
|
+
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1305
|
+
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1306
|
+
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1307
|
+
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1308
|
+
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1309
|
+
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1310
|
+
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1311
|
+
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1312
|
+
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1313
|
+
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
});
|
|
1416
1317
|
|
|
1417
1318
|
// src/combat/damageFlags.ts
|
|
1418
|
-
var DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1419
|
-
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1420
|
-
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1421
|
-
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1422
|
-
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1423
|
-
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1424
|
-
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1425
|
-
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1426
|
-
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1427
|
-
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1428
|
-
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1429
|
-
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1430
|
-
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1431
|
-
return DamageFlags2;
|
|
1432
|
-
})(DamageFlags || {});
|
|
1433
1319
|
function hasAnyDamageFlag(flags, mask) {
|
|
1434
1320
|
return (flags & mask) !== 0;
|
|
1435
1321
|
}
|
|
1322
|
+
var DamageFlags;
|
|
1323
|
+
var init_damageFlags = __esm({
|
|
1324
|
+
"src/combat/damageFlags.ts"() {
|
|
1325
|
+
"use strict";
|
|
1326
|
+
DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1327
|
+
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1328
|
+
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1329
|
+
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1330
|
+
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1331
|
+
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1332
|
+
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1333
|
+
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1334
|
+
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1335
|
+
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1336
|
+
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1337
|
+
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1338
|
+
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1339
|
+
return DamageFlags2;
|
|
1340
|
+
})(DamageFlags || {});
|
|
1341
|
+
}
|
|
1342
|
+
});
|
|
1436
1343
|
|
|
1437
1344
|
// src/combat/armor.ts
|
|
1438
|
-
var ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1439
|
-
ArmorType2["BODY"] = "body";
|
|
1440
|
-
ArmorType2["COMBAT"] = "combat";
|
|
1441
|
-
ArmorType2["JACKET"] = "jacket";
|
|
1442
|
-
return ArmorType2;
|
|
1443
|
-
})(ArmorType || {});
|
|
1444
|
-
var ARMOR_INFO = {
|
|
1445
|
-
["jacket" /* JACKET */]: {
|
|
1446
|
-
baseCount: 25,
|
|
1447
|
-
maxCount: 50,
|
|
1448
|
-
normalProtection: 0.3,
|
|
1449
|
-
energyProtection: 0
|
|
1450
|
-
},
|
|
1451
|
-
["combat" /* COMBAT */]: {
|
|
1452
|
-
baseCount: 50,
|
|
1453
|
-
maxCount: 100,
|
|
1454
|
-
normalProtection: 0.6,
|
|
1455
|
-
energyProtection: 0.3
|
|
1456
|
-
},
|
|
1457
|
-
["body" /* BODY */]: {
|
|
1458
|
-
baseCount: 100,
|
|
1459
|
-
maxCount: 200,
|
|
1460
|
-
normalProtection: 0.8,
|
|
1461
|
-
energyProtection: 0.6
|
|
1462
|
-
}
|
|
1463
|
-
};
|
|
1464
1345
|
function applyRegularArmor(damage, flags, state) {
|
|
1465
1346
|
if (damage <= 0 || hasAnyDamageFlag(flags, 2 /* NO_ARMOR */ | 128 /* NO_REG_ARMOR */) || !state.armorType || state.armorCount <= 0) {
|
|
1466
1347
|
return { saved: 0, remainingArmor: state.armorCount };
|
|
@@ -1524,28 +1405,42 @@ function applyPowerArmor(damage, flags, hitPoint, _hitNormal, state, options = {
|
|
|
1524
1405
|
const remainingCells = Math.max(0, state.cellCount - cellsSpent);
|
|
1525
1406
|
return { saved, remainingCells };
|
|
1526
1407
|
}
|
|
1408
|
+
var ArmorType, ARMOR_INFO;
|
|
1409
|
+
var init_armor = __esm({
|
|
1410
|
+
"src/combat/armor.ts"() {
|
|
1411
|
+
"use strict";
|
|
1412
|
+
init_esm();
|
|
1413
|
+
init_damageFlags();
|
|
1414
|
+
ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1415
|
+
ArmorType2["BODY"] = "body";
|
|
1416
|
+
ArmorType2["COMBAT"] = "combat";
|
|
1417
|
+
ArmorType2["JACKET"] = "jacket";
|
|
1418
|
+
return ArmorType2;
|
|
1419
|
+
})(ArmorType || {});
|
|
1420
|
+
ARMOR_INFO = {
|
|
1421
|
+
["jacket" /* JACKET */]: {
|
|
1422
|
+
baseCount: 25,
|
|
1423
|
+
maxCount: 50,
|
|
1424
|
+
normalProtection: 0.3,
|
|
1425
|
+
energyProtection: 0
|
|
1426
|
+
},
|
|
1427
|
+
["combat" /* COMBAT */]: {
|
|
1428
|
+
baseCount: 50,
|
|
1429
|
+
maxCount: 100,
|
|
1430
|
+
normalProtection: 0.6,
|
|
1431
|
+
energyProtection: 0.3
|
|
1432
|
+
},
|
|
1433
|
+
["body" /* BODY */]: {
|
|
1434
|
+
baseCount: 100,
|
|
1435
|
+
maxCount: 200,
|
|
1436
|
+
normalProtection: 0.8,
|
|
1437
|
+
energyProtection: 0.6
|
|
1438
|
+
}
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
});
|
|
1527
1442
|
|
|
1528
1443
|
// src/inventory/playerInventory.ts
|
|
1529
|
-
var KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
1530
|
-
KeyId2["Blue"] = "key_blue";
|
|
1531
|
-
KeyId2["Red"] = "key_red";
|
|
1532
|
-
KeyId2["Green"] = "key_green";
|
|
1533
|
-
KeyId2["Yellow"] = "key_yellow";
|
|
1534
|
-
KeyId2["DataCD"] = "key_data_cd";
|
|
1535
|
-
KeyId2["PowerCube"] = "key_power_cube";
|
|
1536
|
-
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
1537
|
-
KeyId2["PowerCore"] = "key_power_core";
|
|
1538
|
-
KeyId2["Pyramid"] = "key_pyramid";
|
|
1539
|
-
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
1540
|
-
KeyId2["Pass"] = "key_pass";
|
|
1541
|
-
KeyId2["CommanderHead"] = "key_commander_head";
|
|
1542
|
-
KeyId2["Airstrike"] = "key_airstrike";
|
|
1543
|
-
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
1544
|
-
KeyId2["Nuke"] = "key_nuke";
|
|
1545
|
-
KeyId2["RedFlag"] = "key_red_flag";
|
|
1546
|
-
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
1547
|
-
return KeyId2;
|
|
1548
|
-
})(KeyId || {});
|
|
1549
1444
|
function createPlayerInventory(init = {}) {
|
|
1550
1445
|
const ammoCaps = init.ammoCaps;
|
|
1551
1446
|
const inv = {
|
|
@@ -1818,8 +1713,291 @@ function deserializePlayerInventory(serialized, options = {}) {
|
|
|
1818
1713
|
items: new Set(serialized.items)
|
|
1819
1714
|
};
|
|
1820
1715
|
}
|
|
1716
|
+
var KeyId;
|
|
1717
|
+
var init_playerInventory = __esm({
|
|
1718
|
+
"src/inventory/playerInventory.ts"() {
|
|
1719
|
+
"use strict";
|
|
1720
|
+
init_ammo();
|
|
1721
|
+
init_esm();
|
|
1722
|
+
init_armor();
|
|
1723
|
+
KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
1724
|
+
KeyId2["Blue"] = "key_blue";
|
|
1725
|
+
KeyId2["Red"] = "key_red";
|
|
1726
|
+
KeyId2["Green"] = "key_green";
|
|
1727
|
+
KeyId2["Yellow"] = "key_yellow";
|
|
1728
|
+
KeyId2["DataCD"] = "key_data_cd";
|
|
1729
|
+
KeyId2["PowerCube"] = "key_power_cube";
|
|
1730
|
+
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
1731
|
+
KeyId2["PowerCore"] = "key_power_core";
|
|
1732
|
+
KeyId2["Pyramid"] = "key_pyramid";
|
|
1733
|
+
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
1734
|
+
KeyId2["Pass"] = "key_pass";
|
|
1735
|
+
KeyId2["CommanderHead"] = "key_commander_head";
|
|
1736
|
+
KeyId2["Airstrike"] = "key_airstrike";
|
|
1737
|
+
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
1738
|
+
KeyId2["Nuke"] = "key_nuke";
|
|
1739
|
+
KeyId2["RedFlag"] = "key_red_flag";
|
|
1740
|
+
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
1741
|
+
return KeyId2;
|
|
1742
|
+
})(KeyId || {});
|
|
1743
|
+
}
|
|
1744
|
+
});
|
|
1745
|
+
|
|
1746
|
+
// src/combat/weapons/state.ts
|
|
1747
|
+
function createPlayerWeaponStates() {
|
|
1748
|
+
return {
|
|
1749
|
+
states: /* @__PURE__ */ new Map()
|
|
1750
|
+
};
|
|
1751
|
+
}
|
|
1752
|
+
function getWeaponState(playerStates, weaponId) {
|
|
1753
|
+
let state = playerStates.states.get(weaponId);
|
|
1754
|
+
if (!state) {
|
|
1755
|
+
state = { lastFireTime: 0 };
|
|
1756
|
+
playerStates.states.set(weaponId, state);
|
|
1757
|
+
}
|
|
1758
|
+
return state;
|
|
1759
|
+
}
|
|
1760
|
+
var WeaponStateEnum;
|
|
1761
|
+
var init_state = __esm({
|
|
1762
|
+
"src/combat/weapons/state.ts"() {
|
|
1763
|
+
"use strict";
|
|
1764
|
+
WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
1765
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
1766
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
1767
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
1768
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
1769
|
+
return WeaponStateEnum2;
|
|
1770
|
+
})(WeaponStateEnum || {});
|
|
1771
|
+
}
|
|
1772
|
+
});
|
|
1773
|
+
|
|
1774
|
+
// src/combat/weapons/switching.ts
|
|
1775
|
+
var switching_exports = {};
|
|
1776
|
+
__export(switching_exports, {
|
|
1777
|
+
ChangeWeapon: () => ChangeWeapon,
|
|
1778
|
+
NoAmmoWeaponChange: () => NoAmmoWeaponChange,
|
|
1779
|
+
setInstantSwitch: () => setInstantSwitch,
|
|
1780
|
+
switchToBestWeapon: () => switchToBestWeapon
|
|
1781
|
+
});
|
|
1782
|
+
function setInstantSwitch(enabled) {
|
|
1783
|
+
instantSwitch = enabled;
|
|
1784
|
+
}
|
|
1785
|
+
function ChangeWeapon(ent, weaponId) {
|
|
1786
|
+
if (!ent.client) return;
|
|
1787
|
+
const client = ent.client;
|
|
1788
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
1789
|
+
return;
|
|
1790
|
+
}
|
|
1791
|
+
if (weaponId) {
|
|
1792
|
+
selectWeapon(client.inventory, weaponId);
|
|
1793
|
+
client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
1794
|
+
client.gun_frame = 0;
|
|
1795
|
+
if (instantSwitch) {
|
|
1796
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
1797
|
+
client.weapon_think_time = 0;
|
|
1798
|
+
return;
|
|
1799
|
+
}
|
|
1800
|
+
client.weapon_think_time = 0;
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
function NoAmmoWeaponChange(ent) {
|
|
1804
|
+
if (!ent.client) return;
|
|
1805
|
+
switchToBestWeapon(ent);
|
|
1806
|
+
}
|
|
1807
|
+
function switchToBestWeapon(player) {
|
|
1808
|
+
if (!player.client) {
|
|
1809
|
+
return;
|
|
1810
|
+
}
|
|
1811
|
+
const inventory = player.client.inventory;
|
|
1812
|
+
let bestWeapon = null;
|
|
1813
|
+
if (inventory.ownedWeapons.has(WeaponId.BFG10K) && inventory.ammo.counts[AmmoType.Cells] >= 50) {
|
|
1814
|
+
bestWeapon = WeaponId.BFG10K;
|
|
1815
|
+
} else if (inventory.ownedWeapons.has(WeaponId.RocketLauncher) && inventory.ammo.counts[AmmoType.Rockets] >= 1) {
|
|
1816
|
+
bestWeapon = WeaponId.RocketLauncher;
|
|
1817
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Railgun) && inventory.ammo.counts[AmmoType.Slugs] >= 1) {
|
|
1818
|
+
bestWeapon = WeaponId.Railgun;
|
|
1819
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Chaingun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
1820
|
+
bestWeapon = WeaponId.Chaingun;
|
|
1821
|
+
} else if (inventory.ownedWeapons.has(WeaponId.SuperShotgun) && inventory.ammo.counts[AmmoType.Shells] >= 2) {
|
|
1822
|
+
bestWeapon = WeaponId.SuperShotgun;
|
|
1823
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Machinegun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
1824
|
+
bestWeapon = WeaponId.Machinegun;
|
|
1825
|
+
} else if (inventory.ownedWeapons.has(WeaponId.Shotgun) && inventory.ammo.counts[AmmoType.Shells] >= 1) {
|
|
1826
|
+
bestWeapon = WeaponId.Shotgun;
|
|
1827
|
+
} else {
|
|
1828
|
+
bestWeapon = WeaponId.Blaster;
|
|
1829
|
+
}
|
|
1830
|
+
if (bestWeapon && bestWeapon !== inventory.currentWeapon) {
|
|
1831
|
+
selectWeapon(inventory, bestWeapon);
|
|
1832
|
+
player.client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
1833
|
+
player.client.gun_frame = 0;
|
|
1834
|
+
if (instantSwitch) {
|
|
1835
|
+
player.client.weaponstate = 0 /* WEAPON_READY */;
|
|
1836
|
+
}
|
|
1837
|
+
player.client.weapon_think_time = 0;
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
var instantSwitch;
|
|
1841
|
+
var init_switching = __esm({
|
|
1842
|
+
"src/combat/weapons/switching.ts"() {
|
|
1843
|
+
"use strict";
|
|
1844
|
+
init_playerInventory();
|
|
1845
|
+
init_ammo();
|
|
1846
|
+
instantSwitch = false;
|
|
1847
|
+
}
|
|
1848
|
+
});
|
|
1849
|
+
|
|
1850
|
+
// src/index.ts
|
|
1851
|
+
var index_exports = {};
|
|
1852
|
+
__export(index_exports, {
|
|
1853
|
+
AIFlags: () => AIFlags,
|
|
1854
|
+
AMMO_TYPE_COUNT: () => AMMO_TYPE_COUNT,
|
|
1855
|
+
ARMOR_INFO: () => ARMOR_INFO,
|
|
1856
|
+
ARMOR_ITEMS: () => ARMOR_ITEMS,
|
|
1857
|
+
AmmoItemId: () => AmmoItemId,
|
|
1858
|
+
AmmoType: () => AmmoType,
|
|
1859
|
+
ArmorType: () => ArmorType,
|
|
1860
|
+
AttackState: () => AttackState,
|
|
1861
|
+
CheckGround: () => CheckGround,
|
|
1862
|
+
DamageFlags: () => DamageFlags,
|
|
1863
|
+
DamageMod: () => DamageMod,
|
|
1864
|
+
DeadFlag: () => DeadFlag,
|
|
1865
|
+
ENTITY_FIELD_METADATA: () => ENTITY_FIELD_METADATA,
|
|
1866
|
+
Entity: () => Entity,
|
|
1867
|
+
EntityDamageFlags: () => EntityDamageFlags,
|
|
1868
|
+
EntitySystem: () => EntitySystem,
|
|
1869
|
+
EnvironmentalFlags: () => EnvironmentalFlags,
|
|
1870
|
+
FL_NOTARGET: () => FL_NOTARGET,
|
|
1871
|
+
FL_NOVISIBLE: () => FL_NOVISIBLE,
|
|
1872
|
+
HEALTH_ITEMS: () => HEALTH_ITEMS,
|
|
1873
|
+
KEY_ITEMS: () => KEY_ITEMS,
|
|
1874
|
+
KeyId: () => KeyId,
|
|
1875
|
+
M_CheckBottom: () => M_CheckBottom,
|
|
1876
|
+
M_MoveFrame: () => M_MoveFrame,
|
|
1877
|
+
M_walkmove: () => M_walkmove,
|
|
1878
|
+
MoveType: () => MoveType,
|
|
1879
|
+
MulticastType: () => MulticastType,
|
|
1880
|
+
ORDERED_DAMAGE_MODS: () => ORDERED_DAMAGE_MODS,
|
|
1881
|
+
PNOISE_IMPACT: () => PNOISE_IMPACT,
|
|
1882
|
+
PNOISE_SELF: () => PNOISE_SELF,
|
|
1883
|
+
PNOISE_WEAPON: () => PNOISE_WEAPON,
|
|
1884
|
+
POWERUP_ITEMS: () => POWERUP_ITEMS,
|
|
1885
|
+
POWER_ARMOR_ITEMS: () => POWER_ARMOR_ITEMS,
|
|
1886
|
+
PlayerNoise: () => PlayerNoise,
|
|
1887
|
+
PowerupId: () => PowerupId,
|
|
1888
|
+
RANGE_MELEE: () => RANGE_MELEE,
|
|
1889
|
+
RANGE_MID: () => RANGE_MID,
|
|
1890
|
+
RANGE_NEAR: () => RANGE_NEAR,
|
|
1891
|
+
Range: () => RangeCategory,
|
|
1892
|
+
RangeCategory: () => RangeCategory,
|
|
1893
|
+
SAVE_FORMAT_VERSION: () => SAVE_FORMAT_VERSION,
|
|
1894
|
+
SPAWNFLAG_MONSTER_AMBUSH: () => SPAWNFLAG_MONSTER_AMBUSH,
|
|
1895
|
+
SV_NewChaseDir: () => SV_NewChaseDir,
|
|
1896
|
+
SV_StepDirection: () => SV_StepDirection,
|
|
1897
|
+
SaveStorage: () => SaveStorage,
|
|
1898
|
+
ServerFlags: () => ServerFlags,
|
|
1899
|
+
Solid: () => Solid,
|
|
1900
|
+
SpawnRegistry: () => SpawnRegistry,
|
|
1901
|
+
T_Damage: () => T_Damage,
|
|
1902
|
+
T_RadiusDamage: () => T_RadiusDamage,
|
|
1903
|
+
TraceMask: () => TraceMask,
|
|
1904
|
+
WEAPONS: () => WEAPONS,
|
|
1905
|
+
WEAPON_ITEMS: () => WEAPON_ITEMS,
|
|
1906
|
+
WeaponId: () => WeaponId,
|
|
1907
|
+
WeaponStateEnum: () => WeaponStateEnum,
|
|
1908
|
+
WeaponType: () => WeaponType,
|
|
1909
|
+
addAmmo: () => addAmmo,
|
|
1910
|
+
addKey: () => addKey,
|
|
1911
|
+
addPowerup: () => addPowerup,
|
|
1912
|
+
ai_charge: () => ai_charge,
|
|
1913
|
+
ai_face: () => ai_face,
|
|
1914
|
+
ai_move: () => ai_move,
|
|
1915
|
+
ai_run: () => ai_run,
|
|
1916
|
+
ai_stand: () => ai_stand,
|
|
1917
|
+
ai_turn: () => ai_turn,
|
|
1918
|
+
ai_walk: () => ai_walk,
|
|
1919
|
+
applyCrushDamage: () => applyCrushDamage,
|
|
1920
|
+
applyEntityKeyValues: () => applyEntityKeyValues,
|
|
1921
|
+
applyEnvironmentalDamage: () => applyEnvironmentalDamage,
|
|
1922
|
+
applyFallingDamage: () => applyFallingDamage,
|
|
1923
|
+
applyPowerArmor: () => applyPowerArmor,
|
|
1924
|
+
applyRegularArmor: () => applyRegularArmor,
|
|
1925
|
+
applySaveFile: () => applySaveFile,
|
|
1926
|
+
calculateFallingDamage: () => calculateFallingDamage,
|
|
1927
|
+
calculateSaveChecksum: () => calculateSaveChecksum,
|
|
1928
|
+
canPickupHealth: () => canPickupHealth,
|
|
1929
|
+
changeYaw: () => changeYaw,
|
|
1930
|
+
clampAmmoCounts: () => clampAmmoCounts,
|
|
1931
|
+
classifyRange: () => classifyRange,
|
|
1932
|
+
clearExpiredPowerups: () => clearExpiredPowerups,
|
|
1933
|
+
convertGameSaveToRereleaseLevel: () => convertGameSaveToRereleaseLevel,
|
|
1934
|
+
convertRereleaseLevelToGameSave: () => convertRereleaseLevelToGameSave,
|
|
1935
|
+
convertRereleaseSaveToGameSave: () => convertRereleaseSaveToGameSave,
|
|
1936
|
+
createAmmoInventory: () => createAmmoInventory,
|
|
1937
|
+
createAmmoPickupEntity: () => createAmmoPickupEntity,
|
|
1938
|
+
createArmorPickupEntity: () => createArmorPickupEntity,
|
|
1939
|
+
createBaseAmmoCaps: () => createBaseAmmoCaps,
|
|
1940
|
+
createCallbackRegistry: () => createCallbackRegistry,
|
|
1941
|
+
createDefaultSpawnRegistry: () => createDefaultSpawnRegistry,
|
|
1942
|
+
createGame: () => createGame,
|
|
1943
|
+
createHealthPickupEntity: () => createHealthPickupEntity,
|
|
1944
|
+
createKeyPickupEntity: () => createKeyPickupEntity,
|
|
1945
|
+
createPlayerInventory: () => createPlayerInventory,
|
|
1946
|
+
createPlayerWeaponStates: () => createPlayerWeaponStates,
|
|
1947
|
+
createPowerupPickupEntity: () => createPowerupPickupEntity,
|
|
1948
|
+
createSaveFile: () => createSaveFile,
|
|
1949
|
+
createWeaponPickupEntity: () => createWeaponPickupEntity,
|
|
1950
|
+
damageModName: () => damageModName,
|
|
1951
|
+
deserializePlayerInventory: () => deserializePlayerInventory,
|
|
1952
|
+
equipArmor: () => equipArmor,
|
|
1953
|
+
facingIdeal: () => facingIdeal,
|
|
1954
|
+
findTarget: () => findTarget,
|
|
1955
|
+
foundTarget: () => foundTarget,
|
|
1956
|
+
getAmmoItemDefinition: () => getAmmoItemDefinition,
|
|
1957
|
+
getWeaponState: () => getWeaponState,
|
|
1958
|
+
giveAmmoItem: () => giveAmmoItem,
|
|
1959
|
+
giveWeapon: () => giveWeapon,
|
|
1960
|
+
hasAnyDamageFlag: () => hasAnyDamageFlag,
|
|
1961
|
+
hasItem: () => hasItem,
|
|
1962
|
+
hasKey: () => hasKey,
|
|
1963
|
+
hasPowerup: () => hasPowerup,
|
|
1964
|
+
hasWeapon: () => hasWeapon,
|
|
1965
|
+
hashEntitySystem: () => hashEntitySystem,
|
|
1966
|
+
hashGameState: () => hashGameState,
|
|
1967
|
+
huntTarget: () => huntTarget,
|
|
1968
|
+
infront: () => infront,
|
|
1969
|
+
isZeroVector: () => isZeroVector,
|
|
1970
|
+
killBox: () => killBox,
|
|
1971
|
+
monster_think: () => monster_think,
|
|
1972
|
+
parseEntityLump: () => parseEntityLump,
|
|
1973
|
+
parseRereleaseSave: () => parseRereleaseSave,
|
|
1974
|
+
parseSaveFile: () => parseSaveFile,
|
|
1975
|
+
pickupAmmo: () => pickupAmmo,
|
|
1976
|
+
pickupArmor: () => pickupArmor,
|
|
1977
|
+
pickupKey: () => pickupKey,
|
|
1978
|
+
pickupPowerArmor: () => pickupPowerArmor,
|
|
1979
|
+
pickupPowerup: () => pickupPowerup,
|
|
1980
|
+
pickupWeapon: () => pickupWeapon,
|
|
1981
|
+
range: () => rangeTo,
|
|
1982
|
+
rangeTo: () => rangeTo,
|
|
1983
|
+
registerCallback: () => registerCallback,
|
|
1984
|
+
registerDefaultSpawns: () => registerDefaultSpawns,
|
|
1985
|
+
selectWeapon: () => selectWeapon,
|
|
1986
|
+
serializePlayerInventory: () => serializePlayerInventory,
|
|
1987
|
+
serializeRereleaseSave: () => serializeRereleaseSave,
|
|
1988
|
+
setMovedir: () => setMovedir,
|
|
1989
|
+
spawnEntitiesFromText: () => spawnEntitiesFromText,
|
|
1990
|
+
spawnEntityFromDictionary: () => spawnEntityFromDictionary,
|
|
1991
|
+
summarizeRereleaseSave: () => summarizeRereleaseSave,
|
|
1992
|
+
visible: () => visible,
|
|
1993
|
+
walkMove: () => walkMove
|
|
1994
|
+
});
|
|
1995
|
+
module.exports = __toCommonJS(index_exports);
|
|
1821
1996
|
|
|
1822
1997
|
// src/entities/entity.ts
|
|
1998
|
+
init_esm();
|
|
1999
|
+
init_playerInventory();
|
|
2000
|
+
init_ammo();
|
|
1823
2001
|
var MoveType = /* @__PURE__ */ ((MoveType3) => {
|
|
1824
2002
|
MoveType3[MoveType3["None"] = 0] = "None";
|
|
1825
2003
|
MoveType3[MoveType3["Noclip"] = 1] = "Noclip";
|
|
@@ -2205,6 +2383,16 @@ var ENTITY_FIELD_METADATA = [
|
|
|
2205
2383
|
// Added
|
|
2206
2384
|
];
|
|
2207
2385
|
|
|
2386
|
+
// src/entities/system.ts
|
|
2387
|
+
init_esm();
|
|
2388
|
+
|
|
2389
|
+
// src/physics/movement.ts
|
|
2390
|
+
init_esm();
|
|
2391
|
+
|
|
2392
|
+
// src/ai/movement.ts
|
|
2393
|
+
init_esm();
|
|
2394
|
+
init_esm();
|
|
2395
|
+
|
|
2208
2396
|
// src/ai/constants.ts
|
|
2209
2397
|
var RANGE_MELEE = 20;
|
|
2210
2398
|
var RANGE_NEAR = 440;
|
|
@@ -2247,6 +2435,8 @@ var TraceMask = /* @__PURE__ */ ((TraceMask2) => {
|
|
|
2247
2435
|
})(TraceMask || {});
|
|
2248
2436
|
|
|
2249
2437
|
// src/ai/perception.ts
|
|
2438
|
+
init_esm();
|
|
2439
|
+
init_esm();
|
|
2250
2440
|
var RangeCategory = /* @__PURE__ */ ((RangeCategory4) => {
|
|
2251
2441
|
RangeCategory4["Melee"] = "melee";
|
|
2252
2442
|
RangeCategory4["Near"] = "near";
|
|
@@ -2307,6 +2497,7 @@ function visible(self, other, trace, options) {
|
|
|
2307
2497
|
}
|
|
2308
2498
|
|
|
2309
2499
|
// src/ai/targeting.ts
|
|
2500
|
+
init_esm();
|
|
2310
2501
|
function setIdealYawTowards(self, other) {
|
|
2311
2502
|
const delta = {
|
|
2312
2503
|
x: other.origin.x - self.origin.x,
|
|
@@ -2965,6 +3156,7 @@ function runPush(pusher, system, imports, frametime) {
|
|
|
2965
3156
|
}
|
|
2966
3157
|
|
|
2967
3158
|
// src/physics/fluid.ts
|
|
3159
|
+
init_esm();
|
|
2968
3160
|
function checkWater2(ent, system, imports) {
|
|
2969
3161
|
const origin = ent.origin;
|
|
2970
3162
|
const mins = ent.mins;
|
|
@@ -3267,6 +3459,7 @@ var ThinkScheduler = class {
|
|
|
3267
3459
|
};
|
|
3268
3460
|
|
|
3269
3461
|
// src/entities/system.ts
|
|
3462
|
+
init_esm();
|
|
3270
3463
|
function computeBounds(entity) {
|
|
3271
3464
|
return {
|
|
3272
3465
|
min: {
|
|
@@ -3399,6 +3592,9 @@ var EntitySystem = class {
|
|
|
3399
3592
|
get pointcontents() {
|
|
3400
3593
|
return this.imports.pointcontents;
|
|
3401
3594
|
}
|
|
3595
|
+
get game() {
|
|
3596
|
+
return this._game;
|
|
3597
|
+
}
|
|
3402
3598
|
get world() {
|
|
3403
3599
|
return this.pool.world;
|
|
3404
3600
|
}
|
|
@@ -3919,6 +4115,15 @@ function damageModName(mod) {
|
|
|
3919
4115
|
return `MOD_${DamageMod[mod]}`;
|
|
3920
4116
|
}
|
|
3921
4117
|
|
|
4118
|
+
// src/entities/misc.ts
|
|
4119
|
+
init_esm();
|
|
4120
|
+
|
|
4121
|
+
// src/combat/damage.ts
|
|
4122
|
+
init_esm();
|
|
4123
|
+
init_armor();
|
|
4124
|
+
init_damageFlags();
|
|
4125
|
+
init_esm();
|
|
4126
|
+
|
|
3922
4127
|
// src/imports.ts
|
|
3923
4128
|
var MulticastType = /* @__PURE__ */ ((MulticastType2) => {
|
|
3924
4129
|
MulticastType2[MulticastType2["All"] = 0] = "All";
|
|
@@ -4172,7 +4377,11 @@ function registerMiscSpawns(registry) {
|
|
|
4172
4377
|
registry.register("func_object", func_object);
|
|
4173
4378
|
}
|
|
4174
4379
|
|
|
4380
|
+
// src/entities/targets.ts
|
|
4381
|
+
init_esm();
|
|
4382
|
+
|
|
4175
4383
|
// src/entities/utils.ts
|
|
4384
|
+
init_esm();
|
|
4176
4385
|
var VEC_UP = { x: 0, y: -1, z: 0 };
|
|
4177
4386
|
var MOVEDIR_UP = { x: 0, y: 0, z: 1 };
|
|
4178
4387
|
var VEC_DOWN = { x: 0, y: -2, z: 0 };
|
|
@@ -4194,6 +4403,7 @@ function setMovedir(angles) {
|
|
|
4194
4403
|
}
|
|
4195
4404
|
|
|
4196
4405
|
// src/entities/projectiles.ts
|
|
4406
|
+
init_esm();
|
|
4197
4407
|
function createRocket(sys, owner, start, dir, damage, radiusDamage, speed, flashtype = 0) {
|
|
4198
4408
|
const rocket = sys.spawn();
|
|
4199
4409
|
rocket.classname = "rocket";
|
|
@@ -4649,6 +4859,7 @@ function useTargetSpawner(self, other, activator, context, registry) {
|
|
|
4649
4859
|
warn: context.warn,
|
|
4650
4860
|
free: context.free
|
|
4651
4861
|
};
|
|
4862
|
+
ent.monsterinfo.aiflags |= 1024 /* DoNotCount */;
|
|
4652
4863
|
spawnFunc(ent, spawnContext);
|
|
4653
4864
|
context.entities.finalizeSpawn(ent);
|
|
4654
4865
|
context.entities.linkentity(ent);
|
|
@@ -4656,6 +4867,7 @@ function useTargetSpawner(self, other, activator, context, registry) {
|
|
|
4656
4867
|
if (self.speed) {
|
|
4657
4868
|
ent.velocity = { ...self.movedir };
|
|
4658
4869
|
}
|
|
4870
|
+
ent.renderfx |= RenderFx.IrVisible;
|
|
4659
4871
|
}
|
|
4660
4872
|
var SPAWNFLAG_BLASTER_NOTRAIL = 1;
|
|
4661
4873
|
var SPAWNFLAG_BLASTER_NOEFFECTS = 2;
|
|
@@ -5041,6 +5253,7 @@ function registerTargetSpawns(registry) {
|
|
|
5041
5253
|
}
|
|
5042
5254
|
|
|
5043
5255
|
// src/entities/triggers.ts
|
|
5256
|
+
init_esm();
|
|
5044
5257
|
var FRAME_TIME_SECONDS = 1 / 40;
|
|
5045
5258
|
var THINK_INTERVAL = 0.1;
|
|
5046
5259
|
var HURT_INTERVAL = 0.1;
|
|
@@ -5483,151 +5696,809 @@ function registerTriggerGravity(registry) {
|
|
|
5483
5696
|
self.touch = self.solid === 1 /* Trigger */ ? touchHandler : void 0;
|
|
5484
5697
|
};
|
|
5485
5698
|
}
|
|
5486
|
-
});
|
|
5487
|
-
}
|
|
5488
|
-
function monsterJumpTouch(self, other) {
|
|
5489
|
-
if (!other) {
|
|
5699
|
+
});
|
|
5700
|
+
}
|
|
5701
|
+
function monsterJumpTouch(self, other) {
|
|
5702
|
+
if (!other) {
|
|
5703
|
+
return;
|
|
5704
|
+
}
|
|
5705
|
+
if ((other.flags & (1 /* Fly */ | 2 /* Swim */)) !== 0) {
|
|
5706
|
+
return;
|
|
5707
|
+
}
|
|
5708
|
+
if (other.svflags & 2 /* DeadMonster */) {
|
|
5709
|
+
return;
|
|
5710
|
+
}
|
|
5711
|
+
if ((other.svflags & 4 /* Monster */) === 0) {
|
|
5712
|
+
return;
|
|
5713
|
+
}
|
|
5714
|
+
other.velocity = {
|
|
5715
|
+
x: self.movedir.x * self.speed,
|
|
5716
|
+
y: self.movedir.y * self.speed,
|
|
5717
|
+
z: other.velocity.z
|
|
5718
|
+
};
|
|
5719
|
+
if (!other.groundentity) {
|
|
5720
|
+
return;
|
|
5721
|
+
}
|
|
5722
|
+
other.groundentity = null;
|
|
5723
|
+
other.velocity = { x: other.velocity.x, y: other.velocity.y, z: self.movedir.z };
|
|
5724
|
+
}
|
|
5725
|
+
function triggerElevatorUse(self, other, entities, warn) {
|
|
5726
|
+
if (!self.movetarget) {
|
|
5727
|
+
return;
|
|
5728
|
+
}
|
|
5729
|
+
if (self.movetarget.nextthink > 0) {
|
|
5730
|
+
return;
|
|
5731
|
+
}
|
|
5732
|
+
if (!other?.pathtarget) {
|
|
5733
|
+
warn("trigger_elevator used with no pathtarget");
|
|
5734
|
+
return;
|
|
5735
|
+
}
|
|
5736
|
+
const target = entities.pickTarget(other.pathtarget);
|
|
5737
|
+
if (!target) {
|
|
5738
|
+
warn(`trigger_elevator used with bad pathtarget: ${other.pathtarget}`);
|
|
5739
|
+
return;
|
|
5740
|
+
}
|
|
5741
|
+
self.movetarget.target_ent = target;
|
|
5742
|
+
trainResume(self.movetarget, entities);
|
|
5743
|
+
}
|
|
5744
|
+
function triggerElevatorInit(self, entities, warn) {
|
|
5745
|
+
if (!self.target) {
|
|
5746
|
+
warn("trigger_elevator has no target");
|
|
5747
|
+
return;
|
|
5748
|
+
}
|
|
5749
|
+
const target = entities.pickTarget(self.target);
|
|
5750
|
+
if (!target) {
|
|
5751
|
+
warn(`trigger_elevator unable to find target ${self.target}`);
|
|
5752
|
+
return;
|
|
5753
|
+
}
|
|
5754
|
+
self.movetarget = target;
|
|
5755
|
+
if (target.classname !== "func_train") {
|
|
5756
|
+
warn(`trigger_elevator target ${self.target} is not a train`);
|
|
5757
|
+
return;
|
|
5758
|
+
}
|
|
5759
|
+
self.use = (entity, other, activator) => triggerElevatorUse(entity, other ?? activator ?? null, entities, warn);
|
|
5760
|
+
self.svflags |= 1 /* NoClient */;
|
|
5761
|
+
}
|
|
5762
|
+
function registerTriggerElevator(registry) {
|
|
5763
|
+
registry.register("trigger_elevator", (entity, context) => {
|
|
5764
|
+
entity.think = (self) => triggerElevatorInit(self, context.entities, context.warn);
|
|
5765
|
+
context.entities.scheduleThink(entity, context.entities.timeSeconds + FRAME_TIME_SECONDS);
|
|
5766
|
+
});
|
|
5767
|
+
}
|
|
5768
|
+
function registerTriggerMonsterJump(registry) {
|
|
5769
|
+
registry.register("trigger_monsterjump", (entity, context) => {
|
|
5770
|
+
const heightText = context.keyValues.height;
|
|
5771
|
+
const height = heightText ? Number.parseFloat(heightText) || 0 : 200;
|
|
5772
|
+
if (entity.angles.y === 0) {
|
|
5773
|
+
entity.angles = { ...entity.angles, y: 360 };
|
|
5774
|
+
}
|
|
5775
|
+
if (!entity.speed) {
|
|
5776
|
+
entity.speed = 200;
|
|
5777
|
+
}
|
|
5778
|
+
initTrigger(entity);
|
|
5779
|
+
entity.movedir = { ...entity.movedir, z: height };
|
|
5780
|
+
const touchHandler = (self, other) => monsterJumpTouch(self, other);
|
|
5781
|
+
entity.touch = touchHandler;
|
|
5782
|
+
if (entity.spawnflags & MONSTERJUMP_SPAWNFLAGS.StartOff) {
|
|
5783
|
+
entity.solid = 0 /* Not */;
|
|
5784
|
+
entity.touch = void 0;
|
|
5785
|
+
}
|
|
5786
|
+
if (entity.spawnflags & MONSTERJUMP_SPAWNFLAGS.Toggle) {
|
|
5787
|
+
entity.use = (self) => {
|
|
5788
|
+
toggleSolid(self);
|
|
5789
|
+
self.touch = self.solid === 1 /* Trigger */ ? touchHandler : void 0;
|
|
5790
|
+
};
|
|
5791
|
+
}
|
|
5792
|
+
});
|
|
5793
|
+
}
|
|
5794
|
+
function registerTriggerSpawns(registry) {
|
|
5795
|
+
registerTriggerMultiple(registry);
|
|
5796
|
+
registerTriggerOnce(registry);
|
|
5797
|
+
registerTriggerRelay(registry);
|
|
5798
|
+
registerTriggerAlways(registry);
|
|
5799
|
+
registerTriggerCounter(registry);
|
|
5800
|
+
registerTriggerKey(registry);
|
|
5801
|
+
registerTriggerPush(registry);
|
|
5802
|
+
registerTriggerHurt(registry);
|
|
5803
|
+
registerTriggerTeleport(registry);
|
|
5804
|
+
registerTriggerGravity(registry);
|
|
5805
|
+
registerTriggerElevator(registry);
|
|
5806
|
+
registerTriggerMonsterJump(registry);
|
|
5807
|
+
}
|
|
5808
|
+
|
|
5809
|
+
// src/inventory/items.ts
|
|
5810
|
+
init_ammo();
|
|
5811
|
+
init_playerInventory();
|
|
5812
|
+
|
|
5813
|
+
// src/combat/weapons/chaingun.ts
|
|
5814
|
+
init_state();
|
|
5815
|
+
init_playerInventory();
|
|
5816
|
+
|
|
5817
|
+
// src/buttons.ts
|
|
5818
|
+
var BUTTON_ATTACK = 1;
|
|
5819
|
+
|
|
5820
|
+
// src/combat/weapons/animation.ts
|
|
5821
|
+
init_playerInventory();
|
|
5822
|
+
|
|
5823
|
+
// src/combat/weapons/firing.ts
|
|
5824
|
+
init_state();
|
|
5825
|
+
init_playerInventory();
|
|
5826
|
+
init_ammo();
|
|
5827
|
+
init_esm();
|
|
5828
|
+
|
|
5829
|
+
// src/combat/weapons/projectSource.ts
|
|
5830
|
+
init_esm();
|
|
5831
|
+
var VIEW_HEIGHT = 22;
|
|
5832
|
+
function P_ProjectSource(game, ent, offset, forward, right, up) {
|
|
5833
|
+
const origin = copyVec3(ent.origin);
|
|
5834
|
+
const eye = { ...origin, z: origin.z + (ent.viewheight ?? VIEW_HEIGHT) };
|
|
5835
|
+
const f = scaleVec3(forward, offset.x);
|
|
5836
|
+
const r = scaleVec3(right, offset.y);
|
|
5837
|
+
const u = scaleVec3(up, offset.z);
|
|
5838
|
+
const point = addVec3(addVec3(addVec3(eye, f), r), u);
|
|
5839
|
+
const tr = game.trace(eye, null, null, point, ent, MASK_SOLID);
|
|
5840
|
+
if (tr.fraction < 1) {
|
|
5841
|
+
return { x: tr.endpos.x - forward.x, y: tr.endpos.y - forward.y, z: tr.endpos.z - forward.z };
|
|
5842
|
+
}
|
|
5843
|
+
return point;
|
|
5844
|
+
}
|
|
5845
|
+
|
|
5846
|
+
// src/combat/weapons/frames.ts
|
|
5847
|
+
var FRAME_SHOTGUN_ACTIVATE_LAST = 7;
|
|
5848
|
+
var FRAME_SHOTGUN_FIRE_LAST = 18;
|
|
5849
|
+
var FRAME_SHOTGUN_IDLE_LAST = 36;
|
|
5850
|
+
var FRAME_SHOTGUN_DEACTIVATE_LAST = 39;
|
|
5851
|
+
var FRAME_SSHOTGUN_ACTIVATE_LAST = 5;
|
|
5852
|
+
var FRAME_SSHOTGUN_FIRE_LAST = 28;
|
|
5853
|
+
var FRAME_SSHOTGUN_IDLE_LAST = 52;
|
|
5854
|
+
var FRAME_SSHOTGUN_DEACTIVATE_LAST = 57;
|
|
5855
|
+
var FRAME_MACHINEGUN_ACTIVATE_LAST = 3;
|
|
5856
|
+
var FRAME_MACHINEGUN_FIRE_LAST = 23;
|
|
5857
|
+
var FRAME_MACHINEGUN_IDLE_LAST = 52;
|
|
5858
|
+
var FRAME_MACHINEGUN_DEACTIVATE_LAST = 61;
|
|
5859
|
+
var FRAME_CHAINGUN_FIRE_FRAME = 5;
|
|
5860
|
+
var FRAME_CHAINGUN_FIRE_LAST = 21;
|
|
5861
|
+
var FRAME_CHAINGUN_IDLE_LAST = 52;
|
|
5862
|
+
var FRAME_CHAINGUN_DEACTIVATE_LAST = 61;
|
|
5863
|
+
var FRAME_RAILGUN_ACTIVATE_LAST = 3;
|
|
5864
|
+
var FRAME_RAILGUN_FIRE_LAST = 18;
|
|
5865
|
+
var FRAME_RAILGUN_IDLE_LAST = 51;
|
|
5866
|
+
var FRAME_RAILGUN_DEACTIVATE_LAST = 56;
|
|
5867
|
+
var FRAME_ROCKET_ACTIVATE_LAST = 3;
|
|
5868
|
+
var FRAME_ROCKET_FIRE_LAST = 12;
|
|
5869
|
+
var FRAME_ROCKET_IDLE_LAST = 34;
|
|
5870
|
+
var FRAME_ROCKET_DEACTIVATE_LAST = 38;
|
|
5871
|
+
var FRAME_HYPERBLASTER_FIRE_FRAME = 6;
|
|
5872
|
+
var FRAME_HYPERBLASTER_FIRE_LAST = 9;
|
|
5873
|
+
var FRAME_HYPERBLASTER_IDLE_LAST = 28;
|
|
5874
|
+
var FRAME_HYPERBLASTER_DEACTIVATE_LAST = 32;
|
|
5875
|
+
var FRAME_BFG_ACTIVATE_LAST = 8;
|
|
5876
|
+
var FRAME_BFG_FIRE_LAST = 32;
|
|
5877
|
+
var FRAME_BFG_IDLE_LAST = 54;
|
|
5878
|
+
var FRAME_BFG_DEACTIVATE_LAST = 58;
|
|
5879
|
+
var FRAME_GRENADELAUNCHER_ACTIVATE_LAST = 5;
|
|
5880
|
+
var FRAME_GRENADELAUNCHER_FIRE_LAST = 16;
|
|
5881
|
+
var FRAME_GRENADELAUNCHER_IDLE_LAST = 36;
|
|
5882
|
+
var FRAME_GRENADELAUNCHER_DEACTIVATE_LAST = 39;
|
|
5883
|
+
var FRAME_BLASTER_ACTIVATE_LAST = 4;
|
|
5884
|
+
var FRAME_BLASTER_FIRE_LAST = 8;
|
|
5885
|
+
var FRAME_BLASTER_IDLE_LAST = 52;
|
|
5886
|
+
var FRAME_BLASTER_DEACTIVATE_LAST = 55;
|
|
5887
|
+
|
|
5888
|
+
// src/entities/player_anim.ts
|
|
5889
|
+
var FRAME_stand01 = 0;
|
|
5890
|
+
var FRAME_stand40 = 39;
|
|
5891
|
+
var FRAME_run1 = 40;
|
|
5892
|
+
var FRAME_run6 = 45;
|
|
5893
|
+
var FRAME_attack1 = 46;
|
|
5894
|
+
var FRAME_attack8 = 53;
|
|
5895
|
+
var FRAME_pain101 = 54;
|
|
5896
|
+
var FRAME_pain104 = 57;
|
|
5897
|
+
var FRAME_pain201 = 58;
|
|
5898
|
+
var FRAME_pain204 = 61;
|
|
5899
|
+
var FRAME_pain301 = 62;
|
|
5900
|
+
var FRAME_pain304 = 65;
|
|
5901
|
+
var FRAME_death101 = 66;
|
|
5902
|
+
var FRAME_death106 = 71;
|
|
5903
|
+
var FRAME_death201 = 72;
|
|
5904
|
+
var FRAME_death206 = 77;
|
|
5905
|
+
var FRAME_death301 = 78;
|
|
5906
|
+
var FRAME_death306 = 83;
|
|
5907
|
+
var FRAME_crattak1 = 109;
|
|
5908
|
+
var FRAME_crattak9 = 117;
|
|
5909
|
+
var ANIM_BASIC = 0;
|
|
5910
|
+
var ANIM_ATTACK = 1;
|
|
5911
|
+
var ANIM_PAIN = 2;
|
|
5912
|
+
var ANIM_DEATH = 3;
|
|
5913
|
+
|
|
5914
|
+
// src/combat/weapons/firing.ts
|
|
5915
|
+
var random2 = createRandomGenerator();
|
|
5916
|
+
function applyKick(player, pitch, yaw = 0, kickOrigin = 0) {
|
|
5917
|
+
if (player.client) {
|
|
5918
|
+
player.client.kick_angles = { x: pitch, y: yaw, z: 0 };
|
|
5919
|
+
player.client.kick_origin = { x: kickOrigin, y: 0, z: 0 };
|
|
5920
|
+
}
|
|
5921
|
+
}
|
|
5922
|
+
function setPlayerAttackAnim(player) {
|
|
5923
|
+
if (!player.client) return;
|
|
5924
|
+
const ducked = (player.client.pm_flags & 2) !== 0;
|
|
5925
|
+
player.client.anim_priority = ANIM_ATTACK;
|
|
5926
|
+
if (ducked) {
|
|
5927
|
+
player.frame = FRAME_crattak1 - 1;
|
|
5928
|
+
player.client.anim_end = FRAME_crattak9;
|
|
5929
|
+
} else {
|
|
5930
|
+
player.frame = FRAME_attack1 - 1;
|
|
5931
|
+
player.client.anim_end = FRAME_attack8;
|
|
5932
|
+
}
|
|
5933
|
+
}
|
|
5934
|
+
function fireHitscan(game, player, start, forward, damage, knockback, mod) {
|
|
5935
|
+
const end = { x: start.x + forward.x * 8192, y: start.y + forward.y * 8192, z: start.z + forward.z * 8192 };
|
|
5936
|
+
const trace = game.trace(
|
|
5937
|
+
start,
|
|
5938
|
+
null,
|
|
5939
|
+
null,
|
|
5940
|
+
end,
|
|
5941
|
+
player,
|
|
5942
|
+
0
|
|
5943
|
+
);
|
|
5944
|
+
if (trace.ent && trace.ent.takedamage) {
|
|
5945
|
+
T_Damage(
|
|
5946
|
+
trace.ent,
|
|
5947
|
+
player,
|
|
5948
|
+
player,
|
|
5949
|
+
ZERO_VEC3,
|
|
5950
|
+
trace.endpos,
|
|
5951
|
+
trace.plane ? trace.plane.normal : ZERO_VEC3,
|
|
5952
|
+
damage,
|
|
5953
|
+
knockback,
|
|
5954
|
+
16 /* BULLET */,
|
|
5955
|
+
mod,
|
|
5956
|
+
game.time,
|
|
5957
|
+
game.multicast
|
|
5958
|
+
);
|
|
5959
|
+
} else {
|
|
5960
|
+
if (trace.plane) {
|
|
5961
|
+
game.multicast(trace.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.GUNSHOT, trace.endpos, trace.plane.normal);
|
|
5962
|
+
}
|
|
5963
|
+
}
|
|
5964
|
+
}
|
|
5965
|
+
function fireMultiplePellets(game, player, start, forward, right, up, count, damage, knockback, hspread, vspread, mod) {
|
|
5966
|
+
for (let i = 0; i < count; i++) {
|
|
5967
|
+
const spread = addVec3(scaleVec3(right, random2.crandom() * hspread), scaleVec3(up, random2.crandom() * vspread));
|
|
5968
|
+
const dir = addVec3(forward, spread);
|
|
5969
|
+
const end = { x: start.x + dir.x * 8192, y: start.y + dir.y * 8192, z: start.z + dir.z * 8192 };
|
|
5970
|
+
const trace = game.trace(start, null, null, end, player, 0);
|
|
5971
|
+
if (trace.ent && trace.ent.takedamage) {
|
|
5972
|
+
T_Damage(
|
|
5973
|
+
trace.ent,
|
|
5974
|
+
player,
|
|
5975
|
+
player,
|
|
5976
|
+
ZERO_VEC3,
|
|
5977
|
+
trace.endpos,
|
|
5978
|
+
trace.plane ? trace.plane.normal : ZERO_VEC3,
|
|
5979
|
+
damage,
|
|
5980
|
+
knockback,
|
|
5981
|
+
16 /* BULLET */,
|
|
5982
|
+
mod,
|
|
5983
|
+
game.time,
|
|
5984
|
+
game.multicast
|
|
5985
|
+
);
|
|
5986
|
+
} else if (trace.plane) {
|
|
5987
|
+
if (random2.frandom() > 0.9) {
|
|
5988
|
+
game.multicast(trace.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.GUNSHOT, trace.endpos, trace.plane.normal);
|
|
5989
|
+
}
|
|
5990
|
+
}
|
|
5991
|
+
}
|
|
5992
|
+
}
|
|
5993
|
+
function fireRailgun(game, player, start, forward, damage, knockback) {
|
|
5994
|
+
const originalStart = { ...start };
|
|
5995
|
+
let currentStart = { ...start };
|
|
5996
|
+
const end = { x: start.x + forward.x * 8192, y: start.y + forward.y * 8192, z: start.z + forward.z * 8192 };
|
|
5997
|
+
let ignore = player;
|
|
5998
|
+
let count = 0;
|
|
5999
|
+
let finalEnd = end;
|
|
6000
|
+
while (count < 16) {
|
|
6001
|
+
count++;
|
|
6002
|
+
const trace = game.trace(currentStart, null, null, end, ignore, 0);
|
|
6003
|
+
finalEnd = trace.endpos;
|
|
6004
|
+
if (trace.fraction >= 1) {
|
|
6005
|
+
break;
|
|
6006
|
+
}
|
|
6007
|
+
if (trace.ent && trace.ent.takedamage) {
|
|
6008
|
+
T_Damage(
|
|
6009
|
+
trace.ent,
|
|
6010
|
+
player,
|
|
6011
|
+
player,
|
|
6012
|
+
ZERO_VEC3,
|
|
6013
|
+
trace.endpos,
|
|
6014
|
+
trace.plane ? trace.plane.normal : ZERO_VEC3,
|
|
6015
|
+
damage,
|
|
6016
|
+
knockback,
|
|
6017
|
+
4 /* ENERGY */,
|
|
6018
|
+
11 /* RAILGUN */,
|
|
6019
|
+
game.time,
|
|
6020
|
+
game.multicast
|
|
6021
|
+
);
|
|
6022
|
+
}
|
|
6023
|
+
ignore = trace.ent;
|
|
6024
|
+
currentStart = trace.endpos;
|
|
6025
|
+
if (!trace.ent || trace.ent === game.entities.world) {
|
|
6026
|
+
break;
|
|
6027
|
+
}
|
|
6028
|
+
}
|
|
6029
|
+
game.multicast(originalStart, 2 /* Phs */, ServerCommand.temp_entity, TempEntity.RAILTRAIL, originalStart, finalEnd);
|
|
6030
|
+
}
|
|
6031
|
+
function fireShotgun(game, player) {
|
|
6032
|
+
if (!player.client) return;
|
|
6033
|
+
const inventory = player.client.inventory;
|
|
6034
|
+
if (inventory.ammo.counts[AmmoType.Shells] < 1) {
|
|
6035
|
+
return;
|
|
6036
|
+
}
|
|
6037
|
+
inventory.ammo.counts[AmmoType.Shells]--;
|
|
6038
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_SHOTGUN);
|
|
6039
|
+
applyKick(player, -2, 0, -2);
|
|
6040
|
+
setPlayerAttackAnim(player);
|
|
6041
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6042
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6043
|
+
fireMultiplePellets(game, player, source, forward, right, up, 12, 4, 1, 500, 500, 2 /* SHOTGUN */);
|
|
6044
|
+
}
|
|
6045
|
+
function fireSuperShotgun(game, player) {
|
|
6046
|
+
if (!player.client) return;
|
|
6047
|
+
const inventory = player.client.inventory;
|
|
6048
|
+
if (inventory.ammo.counts[AmmoType.Shells] < 2) {
|
|
6049
|
+
return;
|
|
6050
|
+
}
|
|
6051
|
+
inventory.ammo.counts[AmmoType.Shells] -= 2;
|
|
6052
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_SSHOTGUN);
|
|
6053
|
+
applyKick(player, -4, 0, -4);
|
|
6054
|
+
setPlayerAttackAnim(player);
|
|
6055
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6056
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6057
|
+
const { forward: forward1, right: right1, up: up1 } = angleVectors({ ...player.angles, y: player.angles.y - 5 });
|
|
6058
|
+
fireMultiplePellets(game, player, source, forward1, right1, up1, 10, 6, 1, 700, 700, 3 /* SSHOTGUN */);
|
|
6059
|
+
const { forward: forward2, right: right2, up: up2 } = angleVectors({ ...player.angles, y: player.angles.y + 5 });
|
|
6060
|
+
fireMultiplePellets(game, player, source, forward2, right2, up2, 10, 6, 1, 700, 700, 3 /* SSHOTGUN */);
|
|
6061
|
+
}
|
|
6062
|
+
function fireMachinegun(game, player) {
|
|
6063
|
+
if (!player.client) return;
|
|
6064
|
+
const inventory = player.client.inventory;
|
|
6065
|
+
if (inventory.ammo.counts[AmmoType.Bullets] < 1) {
|
|
6066
|
+
return;
|
|
6067
|
+
}
|
|
6068
|
+
inventory.ammo.counts[AmmoType.Bullets]--;
|
|
6069
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_MACHINEGUN);
|
|
6070
|
+
applyKick(player, -1, random2.crandom() * 0.5, 0);
|
|
6071
|
+
setPlayerAttackAnim(player);
|
|
6072
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6073
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6074
|
+
fireHitscan(game, player, source, forward, 8, 1, 4 /* MACHINEGUN */);
|
|
6075
|
+
}
|
|
6076
|
+
function fireChaingun(game, player) {
|
|
6077
|
+
if (!player.client) return;
|
|
6078
|
+
const inventory = player.client.inventory;
|
|
6079
|
+
const weaponState = getWeaponState(player.client.weaponStates, WeaponId.Chaingun);
|
|
6080
|
+
if (game.time - weaponState.lastFireTime > 200) {
|
|
6081
|
+
weaponState.spinupCount = 0;
|
|
6082
|
+
}
|
|
6083
|
+
const spinupCount = (weaponState.spinupCount || 0) + 1;
|
|
6084
|
+
weaponState.spinupCount = spinupCount;
|
|
6085
|
+
let shots;
|
|
6086
|
+
if (spinupCount <= 5) {
|
|
6087
|
+
shots = 1;
|
|
6088
|
+
if (spinupCount === 1) {
|
|
6089
|
+
game.sound(player, 0, "weapons/chngnu1a.wav", 1, 0, 0);
|
|
6090
|
+
}
|
|
6091
|
+
} else {
|
|
6092
|
+
if (spinupCount <= 10) {
|
|
6093
|
+
shots = 2;
|
|
6094
|
+
} else {
|
|
6095
|
+
shots = 3;
|
|
6096
|
+
}
|
|
6097
|
+
game.sound(player, 0, "weapons/chngnl1a.wav", 1, 0, 0);
|
|
6098
|
+
}
|
|
6099
|
+
if (inventory.ammo.counts[AmmoType.Bullets] < shots) {
|
|
6100
|
+
shots = inventory.ammo.counts[AmmoType.Bullets];
|
|
6101
|
+
}
|
|
6102
|
+
if (shots === 0) {
|
|
5490
6103
|
return;
|
|
5491
6104
|
}
|
|
5492
|
-
|
|
6105
|
+
inventory.ammo.counts[AmmoType.Bullets] -= shots;
|
|
6106
|
+
const damage = game.deathmatch ? 6 : 8;
|
|
6107
|
+
const knockback = 1;
|
|
6108
|
+
applyKick(player, -0.5, random2.crandom() * (0.5 + shots * 0.15), 0);
|
|
6109
|
+
setPlayerAttackAnim(player);
|
|
6110
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6111
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6112
|
+
for (let i = 0; i < shots; i++) {
|
|
6113
|
+
const spread = addVec3(scaleVec3(right, random2.crandom() * 4), scaleVec3(up, random2.crandom() * 4));
|
|
6114
|
+
const dir = addVec3(forward, spread);
|
|
6115
|
+
fireHitscan(game, player, source, dir, damage, knockback, 5 /* CHAINGUN */);
|
|
6116
|
+
}
|
|
6117
|
+
const flash = MZ_CHAINGUN1 + shots - 1;
|
|
6118
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, flash);
|
|
6119
|
+
}
|
|
6120
|
+
function fireRailgunShot(game, player) {
|
|
6121
|
+
if (!player.client) return;
|
|
6122
|
+
const inventory = player.client.inventory;
|
|
6123
|
+
if (inventory.ammo.counts[AmmoType.Slugs] < 1) {
|
|
5493
6124
|
return;
|
|
5494
6125
|
}
|
|
5495
|
-
|
|
6126
|
+
inventory.ammo.counts[AmmoType.Slugs]--;
|
|
6127
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_RAILGUN);
|
|
6128
|
+
applyKick(player, -3, 0, -3);
|
|
6129
|
+
setPlayerAttackAnim(player);
|
|
6130
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6131
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6132
|
+
const damage = game.deathmatch ? 100 : 125;
|
|
6133
|
+
const knockback = game.deathmatch ? 200 : 225;
|
|
6134
|
+
fireRailgun(game, player, source, forward, damage, knockback);
|
|
6135
|
+
}
|
|
6136
|
+
function fireHyperBlaster(game, player) {
|
|
6137
|
+
if (!player.client) return;
|
|
6138
|
+
const inventory = player.client.inventory;
|
|
6139
|
+
if (inventory.ammo.counts[AmmoType.Cells] < 1) {
|
|
5496
6140
|
return;
|
|
5497
6141
|
}
|
|
5498
|
-
|
|
6142
|
+
inventory.ammo.counts[AmmoType.Cells]--;
|
|
6143
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_HYPERBLASTER);
|
|
6144
|
+
applyKick(player, -0.5, 0, 0);
|
|
6145
|
+
setPlayerAttackAnim(player);
|
|
6146
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6147
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6148
|
+
const damage = game.deathmatch ? 15 : 20;
|
|
6149
|
+
createBlasterBolt(game.entities, player, source, forward, damage, 1e3, 10 /* HYPERBLASTER */);
|
|
6150
|
+
}
|
|
6151
|
+
function fireBlaster(game, player) {
|
|
6152
|
+
if (!player.client) return;
|
|
6153
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_BLASTER);
|
|
6154
|
+
applyKick(player, -0.5, 0, 0);
|
|
6155
|
+
setPlayerAttackAnim(player);
|
|
6156
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6157
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6158
|
+
createBlasterBolt(game.entities, player, source, forward, 15, 1500, 1 /* BLASTER */);
|
|
6159
|
+
}
|
|
6160
|
+
function fireRocket(game, player) {
|
|
6161
|
+
if (!player.client) return;
|
|
6162
|
+
const inventory = player.client.inventory;
|
|
6163
|
+
if (inventory.ammo.counts[AmmoType.Rockets] < 1) {
|
|
5499
6164
|
return;
|
|
5500
6165
|
}
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
};
|
|
5506
|
-
|
|
6166
|
+
inventory.ammo.counts[AmmoType.Rockets]--;
|
|
6167
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_ROCKET);
|
|
6168
|
+
applyKick(player, -2, 0, -2);
|
|
6169
|
+
setPlayerAttackAnim(player);
|
|
6170
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6171
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6172
|
+
const damage = 100 + game.random.irandom(21);
|
|
6173
|
+
const radiusDamage = 120;
|
|
6174
|
+
createRocket(game.entities, player, source, forward, damage, radiusDamage, 650);
|
|
6175
|
+
}
|
|
6176
|
+
function fireGrenadeLauncher(game, player) {
|
|
6177
|
+
if (!player.client) return;
|
|
6178
|
+
const inventory = player.client.inventory;
|
|
6179
|
+
if (inventory.ammo.counts[AmmoType.Grenades] < 1) {
|
|
5507
6180
|
return;
|
|
5508
6181
|
}
|
|
5509
|
-
|
|
5510
|
-
|
|
6182
|
+
inventory.ammo.counts[AmmoType.Grenades]--;
|
|
6183
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_GRENADE);
|
|
6184
|
+
applyKick(player, -2, 0, -2);
|
|
6185
|
+
setPlayerAttackAnim(player);
|
|
6186
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6187
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6188
|
+
createGrenade(game.entities, player, source, forward, 120, 600);
|
|
5511
6189
|
}
|
|
5512
|
-
function
|
|
5513
|
-
if (!
|
|
5514
|
-
|
|
6190
|
+
function fireBFG(game, player) {
|
|
6191
|
+
if (!player.client) return;
|
|
6192
|
+
const inventory = player.client.inventory;
|
|
6193
|
+
const gun_frame = player.client.gun_frame;
|
|
6194
|
+
const isPrimeFrame = gun_frame === 9 || gun_frame === 0 || gun_frame === void 0;
|
|
6195
|
+
const isFireFrame = gun_frame === 22 || gun_frame === 0 || gun_frame === void 0;
|
|
6196
|
+
if (isPrimeFrame) {
|
|
6197
|
+
if (inventory.ammo.counts[AmmoType.Cells] < 50) {
|
|
6198
|
+
return;
|
|
6199
|
+
}
|
|
6200
|
+
inventory.ammo.counts[AmmoType.Cells] -= 50;
|
|
6201
|
+
game.sound(player, 0, "weapons/bfg__f1y.wav", 1, 0, 0);
|
|
5515
6202
|
}
|
|
5516
|
-
if (
|
|
5517
|
-
|
|
6203
|
+
if (isFireFrame) {
|
|
6204
|
+
game.multicast(player.origin, 1 /* Pvs */, ServerCommand.muzzleflash, player.index, MZ_BFG);
|
|
6205
|
+
applyKick(player, -5, 0, -2);
|
|
6206
|
+
setPlayerAttackAnim(player);
|
|
6207
|
+
const { forward, right, up } = angleVectors(player.angles);
|
|
6208
|
+
const source = P_ProjectSource(game, player, { x: 8, y: 8, z: -8 }, forward, right, up);
|
|
6209
|
+
const damage = game.deathmatch ? 200 : 500;
|
|
6210
|
+
createBfgBall(game.entities, player, source, forward, damage, 400, 200);
|
|
6211
|
+
} else if (gun_frame === void 0 || gun_frame === 0) {
|
|
5518
6212
|
}
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
|
|
6213
|
+
}
|
|
6214
|
+
|
|
6215
|
+
// src/combat/weapons/animation.ts
|
|
6216
|
+
function Weapon_AnimationTime(ent) {
|
|
6217
|
+
let time = 0.1;
|
|
6218
|
+
if (ent.client?.inventory.powerups.has(PowerupId.TechHaste)) {
|
|
6219
|
+
time *= 0.5;
|
|
5522
6220
|
}
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
warn(`trigger_elevator used with bad pathtarget: ${other.pathtarget}`);
|
|
5526
|
-
return;
|
|
6221
|
+
if (ent.client?.inventory.powerups.has(PowerupId.QuadFire)) {
|
|
6222
|
+
time *= 0.25;
|
|
5527
6223
|
}
|
|
5528
|
-
|
|
5529
|
-
trainResume(self.movetarget, entities);
|
|
6224
|
+
return time;
|
|
5530
6225
|
}
|
|
5531
|
-
function
|
|
5532
|
-
if (!
|
|
5533
|
-
|
|
6226
|
+
function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_DEACTIVATE_LAST, pause_frames, fire_frames, fire, sys) {
|
|
6227
|
+
if (!ent.client) return;
|
|
6228
|
+
const client = ent.client;
|
|
6229
|
+
const time = sys.timeSeconds;
|
|
6230
|
+
if (client.weapon_think_time && client.weapon_think_time <= time) {
|
|
6231
|
+
client.weapon_think_time = 0;
|
|
6232
|
+
}
|
|
6233
|
+
if (client.weapon_think_time && client.weapon_think_time > time) {
|
|
5534
6234
|
return;
|
|
5535
6235
|
}
|
|
5536
|
-
|
|
5537
|
-
|
|
5538
|
-
|
|
6236
|
+
if (client.weaponstate === 1 /* WEAPON_ACTIVATING */) {
|
|
6237
|
+
if (client.gun_frame < FRAME_ACTIVATE_LAST) {
|
|
6238
|
+
client.gun_frame++;
|
|
6239
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6240
|
+
return;
|
|
6241
|
+
}
|
|
6242
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
6243
|
+
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
6244
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
5539
6245
|
return;
|
|
5540
6246
|
}
|
|
5541
|
-
|
|
5542
|
-
|
|
5543
|
-
|
|
6247
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
6248
|
+
if (client.gun_frame < FRAME_DEACTIVATE_LAST) {
|
|
6249
|
+
client.gun_frame++;
|
|
6250
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6251
|
+
return;
|
|
6252
|
+
}
|
|
6253
|
+
Promise.resolve().then(() => (init_switching(), switching_exports)).then(({ ChangeWeapon: ChangeWeapon2 }) => {
|
|
6254
|
+
ChangeWeapon2(ent);
|
|
6255
|
+
});
|
|
5544
6256
|
return;
|
|
5545
6257
|
}
|
|
5546
|
-
|
|
5547
|
-
|
|
5548
|
-
|
|
5549
|
-
|
|
5550
|
-
|
|
5551
|
-
entity.think = (self) => triggerElevatorInit(self, context.entities, context.warn);
|
|
5552
|
-
context.entities.scheduleThink(entity, context.entities.timeSeconds + FRAME_TIME_SECONDS);
|
|
5553
|
-
});
|
|
5554
|
-
}
|
|
5555
|
-
function registerTriggerMonsterJump(registry) {
|
|
5556
|
-
registry.register("trigger_monsterjump", (entity, context) => {
|
|
5557
|
-
const heightText = context.keyValues.height;
|
|
5558
|
-
const height = heightText ? Number.parseFloat(heightText) || 0 : 200;
|
|
5559
|
-
if (entity.angles.y === 0) {
|
|
5560
|
-
entity.angles = { ...entity.angles, y: 360 };
|
|
6258
|
+
if (client.weaponstate === 0 /* WEAPON_READY */) {
|
|
6259
|
+
if (client.buttons & 1) {
|
|
6260
|
+
client.weaponstate = 3 /* WEAPON_FIRING */;
|
|
6261
|
+
client.gun_frame = FRAME_ACTIVATE_LAST + 1;
|
|
6262
|
+
return;
|
|
5561
6263
|
}
|
|
5562
|
-
if (
|
|
5563
|
-
|
|
6264
|
+
if (client.gun_frame < FRAME_IDLE_LAST) {
|
|
6265
|
+
client.gun_frame++;
|
|
6266
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6267
|
+
if (pause_frames) {
|
|
6268
|
+
for (const frame of pause_frames) {
|
|
6269
|
+
if (client.gun_frame === frame) {
|
|
6270
|
+
if (random2.frandom() < 0.5) {
|
|
6271
|
+
return;
|
|
6272
|
+
}
|
|
6273
|
+
}
|
|
6274
|
+
}
|
|
6275
|
+
}
|
|
6276
|
+
return;
|
|
5564
6277
|
}
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
|
|
5568
|
-
|
|
5569
|
-
|
|
5570
|
-
|
|
5571
|
-
|
|
6278
|
+
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
6279
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6280
|
+
return;
|
|
6281
|
+
}
|
|
6282
|
+
if (client.weaponstate === 3 /* WEAPON_FIRING */) {
|
|
6283
|
+
if (fire_frames) {
|
|
6284
|
+
for (const frame of fire_frames) {
|
|
6285
|
+
if (client.gun_frame === frame) {
|
|
6286
|
+
if (fire) fire(ent);
|
|
6287
|
+
break;
|
|
6288
|
+
}
|
|
6289
|
+
}
|
|
5572
6290
|
}
|
|
5573
|
-
if (
|
|
5574
|
-
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
};
|
|
6291
|
+
if (client.gun_frame < FRAME_FIRE_LAST) {
|
|
6292
|
+
client.gun_frame++;
|
|
6293
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6294
|
+
return;
|
|
5578
6295
|
}
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5582
|
-
|
|
5583
|
-
|
|
5584
|
-
registerTriggerRelay(registry);
|
|
5585
|
-
registerTriggerAlways(registry);
|
|
5586
|
-
registerTriggerCounter(registry);
|
|
5587
|
-
registerTriggerKey(registry);
|
|
5588
|
-
registerTriggerPush(registry);
|
|
5589
|
-
registerTriggerHurt(registry);
|
|
5590
|
-
registerTriggerTeleport(registry);
|
|
5591
|
-
registerTriggerGravity(registry);
|
|
5592
|
-
registerTriggerElevator(registry);
|
|
5593
|
-
registerTriggerMonsterJump(registry);
|
|
5594
|
-
}
|
|
5595
|
-
|
|
5596
|
-
// src/combat/weapons/state.ts
|
|
5597
|
-
var WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
5598
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
5599
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
5600
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
5601
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
5602
|
-
return WeaponStateEnum2;
|
|
5603
|
-
})(WeaponStateEnum || {});
|
|
5604
|
-
function createPlayerWeaponStates() {
|
|
5605
|
-
return {
|
|
5606
|
-
states: /* @__PURE__ */ new Map()
|
|
5607
|
-
};
|
|
6296
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
6297
|
+
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
6298
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6299
|
+
return;
|
|
6300
|
+
}
|
|
5608
6301
|
}
|
|
5609
|
-
function
|
|
5610
|
-
|
|
5611
|
-
|
|
5612
|
-
|
|
5613
|
-
|
|
6302
|
+
function Weapon_Repeating(ent, FRAME_FIRE_FRAME, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_PAUSE, FRAME_NOOP, fire, sys) {
|
|
6303
|
+
if (!ent.client) return;
|
|
6304
|
+
const client = ent.client;
|
|
6305
|
+
if (client.weaponstate === 3 /* WEAPON_FIRING */) {
|
|
6306
|
+
if (client.gun_frame === FRAME_FIRE_LAST || client.gun_frame === FRAME_IDLE_LAST) {
|
|
6307
|
+
client.gun_frame = FRAME_FIRE_FRAME;
|
|
6308
|
+
} else {
|
|
6309
|
+
client.gun_frame++;
|
|
6310
|
+
}
|
|
6311
|
+
if (fire) {
|
|
6312
|
+
fire(ent);
|
|
6313
|
+
}
|
|
6314
|
+
if (!(client.buttons & 1)) {
|
|
6315
|
+
client.gun_frame = FRAME_IDLE_LAST + 1;
|
|
6316
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
6317
|
+
}
|
|
6318
|
+
} else {
|
|
6319
|
+
Weapon_Generic(
|
|
6320
|
+
ent,
|
|
6321
|
+
FRAME_FIRE_FRAME - 1,
|
|
6322
|
+
FRAME_FIRE_LAST,
|
|
6323
|
+
FRAME_IDLE_LAST,
|
|
6324
|
+
FRAME_PAUSE,
|
|
6325
|
+
null,
|
|
6326
|
+
null,
|
|
6327
|
+
fire,
|
|
6328
|
+
sys
|
|
6329
|
+
);
|
|
5614
6330
|
}
|
|
5615
|
-
return state;
|
|
5616
6331
|
}
|
|
5617
6332
|
|
|
5618
|
-
// src/buttons.ts
|
|
5619
|
-
var BUTTON_ATTACK = 1;
|
|
5620
|
-
|
|
5621
6333
|
// src/combat/weapons/chaingun.ts
|
|
5622
6334
|
function chaingunThink(player, sys) {
|
|
5623
|
-
if (!player.client) {
|
|
5624
|
-
return;
|
|
5625
|
-
}
|
|
5626
6335
|
const weaponState = getWeaponState(player.client.weaponStates, WeaponId.Chaingun);
|
|
5627
6336
|
if (!(player.client.buttons & BUTTON_ATTACK) && weaponState.spinupCount && weaponState.spinupCount > 0) {
|
|
5628
6337
|
sys.sound(player, 0, "weapons/chngnd1a.wav", 1, 0, 0);
|
|
5629
6338
|
weaponState.spinupCount = 0;
|
|
5630
6339
|
}
|
|
6340
|
+
Weapon_Repeating(
|
|
6341
|
+
player,
|
|
6342
|
+
FRAME_CHAINGUN_FIRE_FRAME,
|
|
6343
|
+
FRAME_CHAINGUN_FIRE_LAST,
|
|
6344
|
+
FRAME_CHAINGUN_IDLE_LAST,
|
|
6345
|
+
FRAME_CHAINGUN_DEACTIVATE_LAST,
|
|
6346
|
+
0,
|
|
6347
|
+
// FRAME_NOOP
|
|
6348
|
+
(ent) => fireChaingun(sys.game, ent),
|
|
6349
|
+
sys
|
|
6350
|
+
);
|
|
6351
|
+
}
|
|
6352
|
+
|
|
6353
|
+
// src/combat/weapons/shotgun.ts
|
|
6354
|
+
var SHOTGUN_PAUSE_FRAMES = [22, 28, 34];
|
|
6355
|
+
var SHOTGUN_FIRE_FRAMES = [8];
|
|
6356
|
+
function shotgunThink(player, sys) {
|
|
6357
|
+
Weapon_Generic(
|
|
6358
|
+
player,
|
|
6359
|
+
FRAME_SHOTGUN_ACTIVATE_LAST,
|
|
6360
|
+
FRAME_SHOTGUN_FIRE_LAST,
|
|
6361
|
+
FRAME_SHOTGUN_IDLE_LAST,
|
|
6362
|
+
FRAME_SHOTGUN_DEACTIVATE_LAST,
|
|
6363
|
+
SHOTGUN_PAUSE_FRAMES,
|
|
6364
|
+
SHOTGUN_FIRE_FRAMES,
|
|
6365
|
+
(ent) => fireShotgun(sys.game, ent),
|
|
6366
|
+
sys
|
|
6367
|
+
);
|
|
6368
|
+
}
|
|
6369
|
+
|
|
6370
|
+
// src/combat/weapons/supershotgun.ts
|
|
6371
|
+
var SSHOTGUN_PAUSE_FRAMES = [29, 42, 57];
|
|
6372
|
+
var SSHOTGUN_FIRE_FRAMES = [22, 28];
|
|
6373
|
+
function superShotgunThink(player, sys) {
|
|
6374
|
+
Weapon_Generic(
|
|
6375
|
+
player,
|
|
6376
|
+
FRAME_SSHOTGUN_ACTIVATE_LAST,
|
|
6377
|
+
FRAME_SSHOTGUN_FIRE_LAST,
|
|
6378
|
+
FRAME_SSHOTGUN_IDLE_LAST,
|
|
6379
|
+
FRAME_SSHOTGUN_DEACTIVATE_LAST,
|
|
6380
|
+
SSHOTGUN_PAUSE_FRAMES,
|
|
6381
|
+
SSHOTGUN_FIRE_FRAMES,
|
|
6382
|
+
(ent) => fireSuperShotgun(sys.game, ent),
|
|
6383
|
+
sys
|
|
6384
|
+
);
|
|
6385
|
+
}
|
|
6386
|
+
|
|
6387
|
+
// src/combat/weapons/machinegun.ts
|
|
6388
|
+
var MACHINEGUN_PAUSE_FRAMES = [23, 45];
|
|
6389
|
+
var MACHINEGUN_FIRE_FRAMES = [4, 5, 30, 31];
|
|
6390
|
+
function machinegunThink(player, sys) {
|
|
6391
|
+
Weapon_Generic(
|
|
6392
|
+
player,
|
|
6393
|
+
FRAME_MACHINEGUN_ACTIVATE_LAST,
|
|
6394
|
+
FRAME_MACHINEGUN_FIRE_LAST,
|
|
6395
|
+
FRAME_MACHINEGUN_IDLE_LAST,
|
|
6396
|
+
FRAME_MACHINEGUN_DEACTIVATE_LAST,
|
|
6397
|
+
MACHINEGUN_PAUSE_FRAMES,
|
|
6398
|
+
MACHINEGUN_FIRE_FRAMES,
|
|
6399
|
+
(ent) => fireMachinegun(sys.game, ent),
|
|
6400
|
+
sys
|
|
6401
|
+
);
|
|
6402
|
+
}
|
|
6403
|
+
|
|
6404
|
+
// src/combat/weapons/rocket.ts
|
|
6405
|
+
var ROCKET_PAUSE_FRAMES = [25, 33];
|
|
6406
|
+
var ROCKET_FIRE_FRAMES = [4];
|
|
6407
|
+
function rocketLauncherThink(player, sys) {
|
|
6408
|
+
Weapon_Generic(
|
|
6409
|
+
player,
|
|
6410
|
+
FRAME_ROCKET_ACTIVATE_LAST,
|
|
6411
|
+
FRAME_ROCKET_FIRE_LAST,
|
|
6412
|
+
FRAME_ROCKET_IDLE_LAST,
|
|
6413
|
+
FRAME_ROCKET_DEACTIVATE_LAST,
|
|
6414
|
+
ROCKET_PAUSE_FRAMES,
|
|
6415
|
+
ROCKET_FIRE_FRAMES,
|
|
6416
|
+
(ent) => fireRocket(sys.game, ent),
|
|
6417
|
+
sys
|
|
6418
|
+
);
|
|
6419
|
+
}
|
|
6420
|
+
|
|
6421
|
+
// src/combat/weapons/hyperblaster.ts
|
|
6422
|
+
function hyperBlasterThink(player, sys) {
|
|
6423
|
+
Weapon_Repeating(
|
|
6424
|
+
player,
|
|
6425
|
+
FRAME_HYPERBLASTER_FIRE_FRAME,
|
|
6426
|
+
FRAME_HYPERBLASTER_FIRE_LAST,
|
|
6427
|
+
FRAME_HYPERBLASTER_IDLE_LAST,
|
|
6428
|
+
FRAME_HYPERBLASTER_DEACTIVATE_LAST,
|
|
6429
|
+
0,
|
|
6430
|
+
// FRAME_NOOP
|
|
6431
|
+
(ent) => fireHyperBlaster(sys.game, ent),
|
|
6432
|
+
sys
|
|
6433
|
+
);
|
|
6434
|
+
}
|
|
6435
|
+
|
|
6436
|
+
// src/combat/weapons/railgun.ts
|
|
6437
|
+
var RAILGUN_PAUSE_FRAMES = [56];
|
|
6438
|
+
var RAILGUN_FIRE_FRAMES = [4];
|
|
6439
|
+
function railgunThink(player, sys) {
|
|
6440
|
+
Weapon_Generic(
|
|
6441
|
+
player,
|
|
6442
|
+
FRAME_RAILGUN_ACTIVATE_LAST,
|
|
6443
|
+
FRAME_RAILGUN_FIRE_LAST,
|
|
6444
|
+
FRAME_RAILGUN_IDLE_LAST,
|
|
6445
|
+
FRAME_RAILGUN_DEACTIVATE_LAST,
|
|
6446
|
+
RAILGUN_PAUSE_FRAMES,
|
|
6447
|
+
RAILGUN_FIRE_FRAMES,
|
|
6448
|
+
(ent) => fireRailgunShot(sys.game, ent),
|
|
6449
|
+
sys
|
|
6450
|
+
);
|
|
6451
|
+
}
|
|
6452
|
+
|
|
6453
|
+
// src/combat/weapons/bfg.ts
|
|
6454
|
+
var BFG_PAUSE_FRAMES = [39, 45, 50, 54];
|
|
6455
|
+
var BFG_FIRE_FRAMES = [9, 22];
|
|
6456
|
+
function bfgThink2(player, sys) {
|
|
6457
|
+
Weapon_Generic(
|
|
6458
|
+
player,
|
|
6459
|
+
FRAME_BFG_ACTIVATE_LAST,
|
|
6460
|
+
FRAME_BFG_FIRE_LAST,
|
|
6461
|
+
FRAME_BFG_IDLE_LAST,
|
|
6462
|
+
FRAME_BFG_DEACTIVATE_LAST,
|
|
6463
|
+
BFG_PAUSE_FRAMES,
|
|
6464
|
+
BFG_FIRE_FRAMES,
|
|
6465
|
+
(ent) => fireBFG(sys.game, ent),
|
|
6466
|
+
sys
|
|
6467
|
+
);
|
|
6468
|
+
}
|
|
6469
|
+
|
|
6470
|
+
// src/combat/weapons/grenadelauncher.ts
|
|
6471
|
+
var GRENADELAUNCHER_PAUSE_FRAMES = [34, 51, 59];
|
|
6472
|
+
var GRENADELAUNCHER_FIRE_FRAMES = [6];
|
|
6473
|
+
function grenadeLauncherThink(player, sys) {
|
|
6474
|
+
Weapon_Generic(
|
|
6475
|
+
player,
|
|
6476
|
+
FRAME_GRENADELAUNCHER_ACTIVATE_LAST,
|
|
6477
|
+
FRAME_GRENADELAUNCHER_FIRE_LAST,
|
|
6478
|
+
FRAME_GRENADELAUNCHER_IDLE_LAST,
|
|
6479
|
+
FRAME_GRENADELAUNCHER_DEACTIVATE_LAST,
|
|
6480
|
+
GRENADELAUNCHER_PAUSE_FRAMES,
|
|
6481
|
+
GRENADELAUNCHER_FIRE_FRAMES,
|
|
6482
|
+
(ent) => fireGrenadeLauncher(sys.game, ent),
|
|
6483
|
+
sys
|
|
6484
|
+
);
|
|
6485
|
+
}
|
|
6486
|
+
|
|
6487
|
+
// src/combat/weapons/blaster.ts
|
|
6488
|
+
var BLASTER_PAUSE_FRAMES = [19, 32];
|
|
6489
|
+
var BLASTER_FIRE_FRAMES = [5];
|
|
6490
|
+
function blasterThink(player, sys) {
|
|
6491
|
+
Weapon_Generic(
|
|
6492
|
+
player,
|
|
6493
|
+
FRAME_BLASTER_ACTIVATE_LAST,
|
|
6494
|
+
FRAME_BLASTER_FIRE_LAST,
|
|
6495
|
+
FRAME_BLASTER_IDLE_LAST,
|
|
6496
|
+
FRAME_BLASTER_DEACTIVATE_LAST,
|
|
6497
|
+
BLASTER_PAUSE_FRAMES,
|
|
6498
|
+
BLASTER_FIRE_FRAMES,
|
|
6499
|
+
(ent) => fireBlaster(sys.game, ent),
|
|
6500
|
+
sys
|
|
6501
|
+
);
|
|
5631
6502
|
}
|
|
5632
6503
|
|
|
5633
6504
|
// src/inventory/items.ts
|
|
@@ -5640,7 +6511,8 @@ var WEAPON_ITEMS = {
|
|
|
5640
6511
|
ammoType: null,
|
|
5641
6512
|
initialAmmo: 0,
|
|
5642
6513
|
pickupAmmo: 0,
|
|
5643
|
-
fireRate: 0.5
|
|
6514
|
+
fireRate: 0.5,
|
|
6515
|
+
think: blasterThink
|
|
5644
6516
|
},
|
|
5645
6517
|
"weapon_shotgun": {
|
|
5646
6518
|
type: "weapon",
|
|
@@ -5650,7 +6522,8 @@ var WEAPON_ITEMS = {
|
|
|
5650
6522
|
ammoType: AmmoType.Shells,
|
|
5651
6523
|
initialAmmo: 10,
|
|
5652
6524
|
pickupAmmo: 10,
|
|
5653
|
-
fireRate: 1
|
|
6525
|
+
fireRate: 1,
|
|
6526
|
+
think: shotgunThink
|
|
5654
6527
|
},
|
|
5655
6528
|
"weapon_supershotgun": {
|
|
5656
6529
|
type: "weapon",
|
|
@@ -5660,7 +6533,8 @@ var WEAPON_ITEMS = {
|
|
|
5660
6533
|
ammoType: AmmoType.Shells,
|
|
5661
6534
|
initialAmmo: 10,
|
|
5662
6535
|
pickupAmmo: 10,
|
|
5663
|
-
fireRate: 1
|
|
6536
|
+
fireRate: 1,
|
|
6537
|
+
think: superShotgunThink
|
|
5664
6538
|
},
|
|
5665
6539
|
"weapon_machinegun": {
|
|
5666
6540
|
type: "weapon",
|
|
@@ -5671,7 +6545,7 @@ var WEAPON_ITEMS = {
|
|
|
5671
6545
|
initialAmmo: 50,
|
|
5672
6546
|
pickupAmmo: 50,
|
|
5673
6547
|
fireRate: 0.1,
|
|
5674
|
-
think:
|
|
6548
|
+
think: machinegunThink
|
|
5675
6549
|
},
|
|
5676
6550
|
"weapon_chaingun": {
|
|
5677
6551
|
type: "weapon",
|
|
@@ -5681,7 +6555,8 @@ var WEAPON_ITEMS = {
|
|
|
5681
6555
|
ammoType: AmmoType.Bullets,
|
|
5682
6556
|
initialAmmo: 50,
|
|
5683
6557
|
pickupAmmo: 50,
|
|
5684
|
-
fireRate: 0.1
|
|
6558
|
+
fireRate: 0.1,
|
|
6559
|
+
think: chaingunThink
|
|
5685
6560
|
},
|
|
5686
6561
|
"weapon_grenades": {
|
|
5687
6562
|
type: "weapon",
|
|
@@ -5701,7 +6576,8 @@ var WEAPON_ITEMS = {
|
|
|
5701
6576
|
ammoType: AmmoType.Grenades,
|
|
5702
6577
|
initialAmmo: 10,
|
|
5703
6578
|
pickupAmmo: 10,
|
|
5704
|
-
fireRate: 1
|
|
6579
|
+
fireRate: 1,
|
|
6580
|
+
think: grenadeLauncherThink
|
|
5705
6581
|
},
|
|
5706
6582
|
"weapon_rocketlauncher": {
|
|
5707
6583
|
type: "weapon",
|
|
@@ -5711,7 +6587,8 @@ var WEAPON_ITEMS = {
|
|
|
5711
6587
|
ammoType: AmmoType.Rockets,
|
|
5712
6588
|
initialAmmo: 5,
|
|
5713
6589
|
pickupAmmo: 5,
|
|
5714
|
-
fireRate: 1
|
|
6590
|
+
fireRate: 1,
|
|
6591
|
+
think: rocketLauncherThink
|
|
5715
6592
|
},
|
|
5716
6593
|
"weapon_hyperblaster": {
|
|
5717
6594
|
type: "weapon",
|
|
@@ -5721,7 +6598,8 @@ var WEAPON_ITEMS = {
|
|
|
5721
6598
|
ammoType: AmmoType.Cells,
|
|
5722
6599
|
initialAmmo: 50,
|
|
5723
6600
|
pickupAmmo: 50,
|
|
5724
|
-
fireRate: 0.1
|
|
6601
|
+
fireRate: 0.1,
|
|
6602
|
+
think: hyperBlasterThink
|
|
5725
6603
|
},
|
|
5726
6604
|
"weapon_railgun": {
|
|
5727
6605
|
type: "weapon",
|
|
@@ -5731,7 +6609,8 @@ var WEAPON_ITEMS = {
|
|
|
5731
6609
|
ammoType: AmmoType.Slugs,
|
|
5732
6610
|
initialAmmo: 10,
|
|
5733
6611
|
pickupAmmo: 10,
|
|
5734
|
-
fireRate: 1.5
|
|
6612
|
+
fireRate: 1.5,
|
|
6613
|
+
think: railgunThink
|
|
5735
6614
|
},
|
|
5736
6615
|
"weapon_bfg": {
|
|
5737
6616
|
type: "weapon",
|
|
@@ -5741,7 +6620,8 @@ var WEAPON_ITEMS = {
|
|
|
5741
6620
|
ammoType: AmmoType.Cells,
|
|
5742
6621
|
initialAmmo: 50,
|
|
5743
6622
|
pickupAmmo: 50,
|
|
5744
|
-
fireRate: 1
|
|
6623
|
+
fireRate: 1,
|
|
6624
|
+
think: bfgThink2
|
|
5745
6625
|
},
|
|
5746
6626
|
// Rogue Weapons
|
|
5747
6627
|
"weapon_boomer": {
|
|
@@ -5796,7 +6676,6 @@ var WEAPON_ITEMS = {
|
|
|
5796
6676
|
fireRate: 0.8
|
|
5797
6677
|
// Guessing fire rate, refine if needed
|
|
5798
6678
|
}
|
|
5799
|
-
// ... add others as we implement them
|
|
5800
6679
|
};
|
|
5801
6680
|
var HEALTH_ITEMS = {
|
|
5802
6681
|
"item_health_small": {
|
|
@@ -6056,6 +6935,7 @@ function createKeyPickupEntity(game, keyItem) {
|
|
|
6056
6935
|
}
|
|
6057
6936
|
|
|
6058
6937
|
// src/entities/items/ammo.ts
|
|
6938
|
+
init_ammo();
|
|
6059
6939
|
function createAmmoPickupEntity(game, itemId) {
|
|
6060
6940
|
const def = getAmmoItemDefinition(itemId);
|
|
6061
6941
|
const respawn = (self) => {
|
|
@@ -6110,6 +6990,7 @@ function createPowerArmorPickupEntity(game, item) {
|
|
|
6110
6990
|
}
|
|
6111
6991
|
|
|
6112
6992
|
// src/entities/items.ts
|
|
6993
|
+
init_ammo();
|
|
6113
6994
|
function registerItemSpawns(game, registry) {
|
|
6114
6995
|
for (const weaponItem of Object.values(WEAPON_ITEMS)) {
|
|
6115
6996
|
registry.register(weaponItem.id, (entity) => {
|
|
@@ -6148,37 +7029,41 @@ function registerItemSpawns(game, registry) {
|
|
|
6148
7029
|
}
|
|
6149
7030
|
}
|
|
6150
7031
|
|
|
7032
|
+
// src/entities/funcs.ts
|
|
7033
|
+
init_esm();
|
|
7034
|
+
|
|
6151
7035
|
// src/entities/gibs.ts
|
|
6152
|
-
|
|
7036
|
+
init_esm();
|
|
7037
|
+
var random3 = createRandomGenerator();
|
|
6153
7038
|
var GIB_METALLIC = 1;
|
|
6154
7039
|
var GIB_DEBRIS = 2;
|
|
6155
7040
|
function spawnGib(sys, origin, damage, model, type) {
|
|
6156
7041
|
const gib = sys.spawn();
|
|
6157
7042
|
gib.classname = "gib";
|
|
6158
7043
|
gib.origin = {
|
|
6159
|
-
x: origin.x + (
|
|
6160
|
-
y: origin.y + (
|
|
6161
|
-
z: origin.z + (
|
|
7044
|
+
x: origin.x + (random3.frandom() - 0.5) * 20,
|
|
7045
|
+
y: origin.y + (random3.frandom() - 0.5) * 20,
|
|
7046
|
+
z: origin.z + (random3.frandom() - 0.5) * 20
|
|
6162
7047
|
};
|
|
6163
7048
|
gib.velocity = {
|
|
6164
|
-
x: (
|
|
6165
|
-
y: (
|
|
6166
|
-
z: 200 +
|
|
7049
|
+
x: (random3.frandom() - 0.5) * 300,
|
|
7050
|
+
y: (random3.frandom() - 0.5) * 300,
|
|
7051
|
+
z: 200 + random3.frandom() * 100
|
|
6167
7052
|
};
|
|
6168
7053
|
gib.movetype = 9 /* Bounce */;
|
|
6169
7054
|
gib.solid = 0 /* Not */;
|
|
6170
7055
|
gib.clipmask = 1;
|
|
6171
7056
|
gib.avelocity = {
|
|
6172
|
-
x:
|
|
6173
|
-
y:
|
|
6174
|
-
z:
|
|
7057
|
+
x: random3.crandom() * 600,
|
|
7058
|
+
y: random3.crandom() * 600,
|
|
7059
|
+
z: random3.crandom() * 600
|
|
6175
7060
|
};
|
|
6176
7061
|
const defaultModels = [
|
|
6177
7062
|
"models/objects/gibs/bone/tris.md2",
|
|
6178
7063
|
"models/objects/gibs/meat/tris.md2",
|
|
6179
7064
|
"models/objects/gibs/sm_meat/tris.md2"
|
|
6180
7065
|
];
|
|
6181
|
-
const modelName = model || defaultModels[Math.floor(
|
|
7066
|
+
const modelName = model || defaultModels[Math.floor(random3.frandom() * defaultModels.length)];
|
|
6182
7067
|
gib.modelindex = sys.modelIndex(modelName);
|
|
6183
7068
|
gib.mins = { x: -2, y: -2, z: -2 };
|
|
6184
7069
|
gib.maxs = { x: 2, y: 2, z: 2 };
|
|
@@ -6187,14 +7072,14 @@ function spawnGib(sys, origin, damage, model, type) {
|
|
|
6187
7072
|
gib.think = (self) => {
|
|
6188
7073
|
sys.free(self);
|
|
6189
7074
|
};
|
|
6190
|
-
sys.scheduleThink(gib, sys.timeSeconds + 10 +
|
|
7075
|
+
sys.scheduleThink(gib, sys.timeSeconds + 10 + random3.frandom() * 10);
|
|
6191
7076
|
sys.finalizeSpawn(gib);
|
|
6192
7077
|
return gib;
|
|
6193
7078
|
}
|
|
6194
7079
|
function throwGibs(sys, origin, damageOrDefs) {
|
|
6195
7080
|
if (typeof damageOrDefs === "number") {
|
|
6196
7081
|
const damage = damageOrDefs;
|
|
6197
|
-
const count = 4 + Math.floor(
|
|
7082
|
+
const count = 4 + Math.floor(random3.frandom() * 4);
|
|
6198
7083
|
for (let i = 0; i < count; i++) {
|
|
6199
7084
|
spawnGib(sys, origin, damage);
|
|
6200
7085
|
}
|
|
@@ -7041,6 +7926,9 @@ function registerLightSpawns(registry) {
|
|
|
7041
7926
|
});
|
|
7042
7927
|
}
|
|
7043
7928
|
|
|
7929
|
+
// src/entities/monsters/berserk.ts
|
|
7930
|
+
init_esm();
|
|
7931
|
+
|
|
7044
7932
|
// src/ai/monster.ts
|
|
7045
7933
|
function M_MoveFrame(self, context) {
|
|
7046
7934
|
const move = self.monsterinfo.current_move;
|
|
@@ -7084,15 +7972,15 @@ function monster_think(self, context) {
|
|
|
7084
7972
|
var MONSTER_TICK = 0.1;
|
|
7085
7973
|
var MELEE_DISTANCE = 80;
|
|
7086
7974
|
var SPAWNFLAG_BERSERK_NOJUMPING = 16;
|
|
7087
|
-
var
|
|
7975
|
+
var random4 = createRandomGenerator();
|
|
7088
7976
|
function frandom() {
|
|
7089
|
-
return
|
|
7977
|
+
return random4.frandom();
|
|
7090
7978
|
}
|
|
7091
7979
|
function brandom() {
|
|
7092
|
-
return
|
|
7980
|
+
return random4.frandom() > 0.5;
|
|
7093
7981
|
}
|
|
7094
7982
|
function irandom(min, max) {
|
|
7095
|
-
return Math.floor(
|
|
7983
|
+
return Math.floor(random4.frandom() * (max - min + 1) + min);
|
|
7096
7984
|
}
|
|
7097
7985
|
function monster_ai_stand(self, dist, context) {
|
|
7098
7986
|
ai_stand(self, MONSTER_TICK, context);
|
|
@@ -7588,6 +8476,7 @@ function registerBerserkSpawns(registry) {
|
|
|
7588
8476
|
}
|
|
7589
8477
|
|
|
7590
8478
|
// src/entities/monsters/attack.ts
|
|
8479
|
+
init_esm();
|
|
7591
8480
|
function crandom() {
|
|
7592
8481
|
return 2 * Math.random() - 1;
|
|
7593
8482
|
}
|
|
@@ -7778,6 +8667,7 @@ function monster_fire_dabeam(self, damage, secondary, update_func, context) {
|
|
|
7778
8667
|
}
|
|
7779
8668
|
|
|
7780
8669
|
// src/entities/monsters/boss2.ts
|
|
8670
|
+
init_esm();
|
|
7781
8671
|
var MONSTER_TICK2 = 0.1;
|
|
7782
8672
|
var BOSS2_ROCKET_OFFSET_1 = { x: 0, y: 30, z: -15 };
|
|
7783
8673
|
var BOSS2_ROCKET_OFFSET_2 = { x: 0, y: 15, z: 0 };
|
|
@@ -7965,9 +8855,10 @@ function registerBoss2Spawns(registry) {
|
|
|
7965
8855
|
}
|
|
7966
8856
|
|
|
7967
8857
|
// src/entities/monsters/brain.ts
|
|
8858
|
+
init_esm();
|
|
7968
8859
|
var MONSTER_TICK3 = 0.1;
|
|
7969
8860
|
var MELEE_DISTANCE2 = 80;
|
|
7970
|
-
var
|
|
8861
|
+
var random5 = Math.random;
|
|
7971
8862
|
function monster_ai_stand3(self, dist, context) {
|
|
7972
8863
|
ai_stand(self, MONSTER_TICK3, context);
|
|
7973
8864
|
}
|
|
@@ -8020,7 +8911,7 @@ function brain_swing_right(self, context) {
|
|
|
8020
8911
|
}
|
|
8021
8912
|
function brain_hit_right(self, context) {
|
|
8022
8913
|
const aim = { x: MELEE_DISTANCE2, y: self.maxs.x, z: 8 };
|
|
8023
|
-
if (monster_fire_hit(self, aim, 15 + Math.floor(
|
|
8914
|
+
if (monster_fire_hit(self, aim, 15 + Math.floor(random5() * 5), 40, context)) {
|
|
8024
8915
|
context.engine.sound?.(self, 0, "brain/melee3.wav", 1, 1, 0);
|
|
8025
8916
|
} else {
|
|
8026
8917
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -8031,7 +8922,7 @@ function brain_swing_left(self, context) {
|
|
|
8031
8922
|
}
|
|
8032
8923
|
function brain_hit_left(self, context) {
|
|
8033
8924
|
const aim = { x: MELEE_DISTANCE2, y: self.mins.x, z: 8 };
|
|
8034
|
-
if (monster_fire_hit(self, aim, 15 + Math.floor(
|
|
8925
|
+
if (monster_fire_hit(self, aim, 15 + Math.floor(random5() * 5), 40, context)) {
|
|
8035
8926
|
context.engine.sound?.(self, 0, "brain/melee3.wav", 1, 1, 0);
|
|
8036
8927
|
} else {
|
|
8037
8928
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -8044,7 +8935,7 @@ function brain_chest_open(self, context) {
|
|
|
8044
8935
|
}
|
|
8045
8936
|
function brain_tentacle_attack(self, context) {
|
|
8046
8937
|
const aim = { x: MELEE_DISTANCE2, y: 0, z: 8 };
|
|
8047
|
-
if (monster_fire_hit(self, aim, 10 + Math.floor(
|
|
8938
|
+
if (monster_fire_hit(self, aim, 10 + Math.floor(random5() * 5), -600, context)) {
|
|
8048
8939
|
self.count = 1;
|
|
8049
8940
|
} else {
|
|
8050
8941
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -8059,7 +8950,7 @@ function brain_chest_closed(self) {
|
|
|
8059
8950
|
}
|
|
8060
8951
|
}
|
|
8061
8952
|
function brain_melee(self) {
|
|
8062
|
-
if (
|
|
8953
|
+
if (random5() <= 0.5) {
|
|
8063
8954
|
self.monsterinfo.current_move = attack1_move;
|
|
8064
8955
|
} else {
|
|
8065
8956
|
self.monsterinfo.current_move = attack2_move;
|
|
@@ -8142,7 +9033,7 @@ function brain_laserbeam(self, context) {
|
|
|
8142
9033
|
monster_fire_dabeam(self, 1, true, brain_left_eye_laser_update, context);
|
|
8143
9034
|
}
|
|
8144
9035
|
function brain_laserbeam_reattack(self) {
|
|
8145
|
-
if (
|
|
9036
|
+
if (random5() < 0.5) {
|
|
8146
9037
|
if (self.enemy && self.enemy.health > 0) {
|
|
8147
9038
|
self.frame = 0;
|
|
8148
9039
|
}
|
|
@@ -8151,7 +9042,7 @@ function brain_laserbeam_reattack(self) {
|
|
|
8151
9042
|
function brain_attack(self, context) {
|
|
8152
9043
|
const r = rangeTo(self, self.enemy);
|
|
8153
9044
|
if (r <= RANGE_NEAR) {
|
|
8154
|
-
if (
|
|
9045
|
+
if (random5() < 0.5) {
|
|
8155
9046
|
self.monsterinfo.current_move = attack3_move;
|
|
8156
9047
|
} else {
|
|
8157
9048
|
self.monsterinfo.current_move = attack4_move;
|
|
@@ -8171,7 +9062,7 @@ function brain_duck_up(self) {
|
|
|
8171
9062
|
self.monsterinfo.aiflags &= ~16;
|
|
8172
9063
|
}
|
|
8173
9064
|
function brain_dodge(self, attacker, eta) {
|
|
8174
|
-
if (
|
|
9065
|
+
if (random5() > 0.25) return;
|
|
8175
9066
|
if (!self.enemy) self.enemy = attacker;
|
|
8176
9067
|
self.monsterinfo.pausetime = self.timestamp + eta + 0.5;
|
|
8177
9068
|
self.monsterinfo.current_move = duck_move;
|
|
@@ -8427,7 +9318,7 @@ function brain_pain(self, other, kick, damage, context) {
|
|
|
8427
9318
|
return;
|
|
8428
9319
|
}
|
|
8429
9320
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8430
|
-
const r =
|
|
9321
|
+
const r = random5();
|
|
8431
9322
|
if (r < 0.33) {
|
|
8432
9323
|
context.engine.sound?.(self, 0, "brain/brnpain1.wav", 1, 1, 0);
|
|
8433
9324
|
self.monsterinfo.current_move = pain1_move;
|
|
@@ -8451,7 +9342,7 @@ function brain_die(self, inflictor, attacker, damage, point, context) {
|
|
|
8451
9342
|
context.engine.sound?.(self, 0, "brain/brndeth1.wav", 1, 1, 0);
|
|
8452
9343
|
self.deadflag = 2 /* Dead */;
|
|
8453
9344
|
self.takedamage = true;
|
|
8454
|
-
if (
|
|
9345
|
+
if (random5() <= 0.5) {
|
|
8455
9346
|
self.monsterinfo.current_move = death1_move;
|
|
8456
9347
|
} else {
|
|
8457
9348
|
self.monsterinfo.current_move = death2_move;
|
|
@@ -8488,7 +9379,7 @@ function SP_monster_brain(self, context) {
|
|
|
8488
9379
|
context.entities.sound?.(s, 2, "brain/brnsght1.wav", 1, 1, 0);
|
|
8489
9380
|
};
|
|
8490
9381
|
self.monsterinfo.search = (s) => {
|
|
8491
|
-
if (
|
|
9382
|
+
if (random5() < 0.5) {
|
|
8492
9383
|
context.entities.sound?.(s, 2, "brain/brnidle2.wav", 1, 1, 0);
|
|
8493
9384
|
} else {
|
|
8494
9385
|
context.entities.sound?.(s, 2, "brain/brnsrch1.wav", 1, 1, 0);
|
|
@@ -8506,9 +9397,10 @@ function registerBrainSpawns(registry) {
|
|
|
8506
9397
|
}
|
|
8507
9398
|
|
|
8508
9399
|
// src/entities/monsters/chick.ts
|
|
9400
|
+
init_esm();
|
|
8509
9401
|
var MONSTER_TICK4 = 0.1;
|
|
8510
9402
|
var MELEE_DISTANCE3 = 80;
|
|
8511
|
-
var
|
|
9403
|
+
var random6 = Math.random;
|
|
8512
9404
|
function monster_ai_stand4(self, dist, context) {
|
|
8513
9405
|
ai_stand(self, MONSTER_TICK4, context);
|
|
8514
9406
|
}
|
|
@@ -8556,12 +9448,12 @@ function chick_run(self) {
|
|
|
8556
9448
|
function chick_fidget(self) {
|
|
8557
9449
|
if (self.monsterinfo.aiflags & 4) return;
|
|
8558
9450
|
if (self.enemy) return;
|
|
8559
|
-
if (
|
|
9451
|
+
if (random6() <= 0.3) {
|
|
8560
9452
|
self.monsterinfo.current_move = fidget_move;
|
|
8561
9453
|
}
|
|
8562
9454
|
}
|
|
8563
9455
|
function ChickMoan(self, context) {
|
|
8564
|
-
if (
|
|
9456
|
+
if (random6() < 0.5) {
|
|
8565
9457
|
context.engine.sound?.(self, 2, "chick/chkidle1.wav", 1, 0, 0);
|
|
8566
9458
|
} else {
|
|
8567
9459
|
context.engine.sound?.(self, 2, "chick/chkidle2.wav", 1, 0, 0);
|
|
@@ -8570,7 +9462,7 @@ function ChickMoan(self, context) {
|
|
|
8570
9462
|
function chick_slash(self, context) {
|
|
8571
9463
|
const aim = { x: MELEE_DISTANCE3, y: self.mins.x, z: 10 };
|
|
8572
9464
|
context.engine.sound?.(self, 0, "chick/chkatck3.wav", 1, 1, 0);
|
|
8573
|
-
monster_fire_hit(self, aim, 10 + Math.floor(
|
|
9465
|
+
monster_fire_hit(self, aim, 10 + Math.floor(random6() * 6), 100, context);
|
|
8574
9466
|
}
|
|
8575
9467
|
function chick_rocket(self, context) {
|
|
8576
9468
|
const { forward, right } = angleVectors(self.angles);
|
|
@@ -8591,7 +9483,7 @@ function chick_rocket(self, context) {
|
|
|
8591
9483
|
}
|
|
8592
9484
|
let dir = subtractVec3(target, finalStart);
|
|
8593
9485
|
if (!blindfire && self.enemy) {
|
|
8594
|
-
if (
|
|
9486
|
+
if (random6() < 0.33 || finalStart.z < self.enemy.absmin.z) {
|
|
8595
9487
|
const tempDir = { ...dir, z: dir.z + self.enemy.viewheight };
|
|
8596
9488
|
dir = tempDir;
|
|
8597
9489
|
} else {
|
|
@@ -8626,7 +9518,7 @@ function chick_rerocket(self) {
|
|
|
8626
9518
|
return;
|
|
8627
9519
|
}
|
|
8628
9520
|
if (self.enemy && self.enemy.health > 0) {
|
|
8629
|
-
if (
|
|
9521
|
+
if (random6() <= 0.6) {
|
|
8630
9522
|
self.monsterinfo.current_move = attack1_move2;
|
|
8631
9523
|
return;
|
|
8632
9524
|
}
|
|
@@ -8635,7 +9527,7 @@ function chick_rerocket(self) {
|
|
|
8635
9527
|
}
|
|
8636
9528
|
function chick_reslash(self) {
|
|
8637
9529
|
if (self.enemy && self.enemy.health > 0) {
|
|
8638
|
-
if (
|
|
9530
|
+
if (random6() <= 0.9) {
|
|
8639
9531
|
self.monsterinfo.current_move = slash_move;
|
|
8640
9532
|
return;
|
|
8641
9533
|
}
|
|
@@ -8713,7 +9605,7 @@ function chick_pain(self, other, kick, damage, context) {
|
|
|
8713
9605
|
}
|
|
8714
9606
|
if (self.timestamp < (self.pain_debounce_time || 0)) return;
|
|
8715
9607
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8716
|
-
const r =
|
|
9608
|
+
const r = random6();
|
|
8717
9609
|
if (r < 0.33) context.engine.sound?.(self, 0, "chick/chkpain1.wav", 1, 1, 0);
|
|
8718
9610
|
else if (r < 0.66) context.engine.sound?.(self, 0, "chick/chkpain2.wav", 1, 1, 0);
|
|
8719
9611
|
else context.engine.sound?.(self, 0, "chick/chkpain3.wav", 1, 1, 0);
|
|
@@ -8742,7 +9634,7 @@ function chick_die(self, inflictor, attacker, damage, point, context) {
|
|
|
8742
9634
|
if (self.deadflag === 2 /* Dead */) return;
|
|
8743
9635
|
self.deadflag = 2 /* Dead */;
|
|
8744
9636
|
self.takedamage = true;
|
|
8745
|
-
if (
|
|
9637
|
+
if (random6() <= 0.5) {
|
|
8746
9638
|
self.monsterinfo.current_move = death1_move2;
|
|
8747
9639
|
context.engine.sound?.(self, 0, "chick/chkdeth1.wav", 1, 1, 0);
|
|
8748
9640
|
} else {
|
|
@@ -8862,7 +9754,7 @@ function registerChickSpawns(registry) {
|
|
|
8862
9754
|
var MONSTER_TICK5 = 0.1;
|
|
8863
9755
|
var MELEE_DISTANCE4 = 80;
|
|
8864
9756
|
var FLIPPER_RUN_SPEED = 24;
|
|
8865
|
-
var
|
|
9757
|
+
var random7 = Math.random;
|
|
8866
9758
|
function monster_ai_stand5(self, dist, context) {
|
|
8867
9759
|
ai_stand(self, MONSTER_TICK5, context);
|
|
8868
9760
|
}
|
|
@@ -8979,7 +9871,7 @@ function flipper_pain(self, other, kick, damage, context) {
|
|
|
8979
9871
|
return;
|
|
8980
9872
|
}
|
|
8981
9873
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8982
|
-
if (
|
|
9874
|
+
if (random7() < 0.5) {
|
|
8983
9875
|
context.engine.sound?.(self, 0, "flipper/flppain1.wav", 1, 1, 0);
|
|
8984
9876
|
self.monsterinfo.current_move = pain1_move3;
|
|
8985
9877
|
} else {
|
|
@@ -9087,6 +9979,7 @@ function registerFlipperSpawns(registry) {
|
|
|
9087
9979
|
}
|
|
9088
9980
|
|
|
9089
9981
|
// src/entities/monsters/floater.ts
|
|
9982
|
+
init_esm();
|
|
9090
9983
|
var MONSTER_TICK6 = 0.1;
|
|
9091
9984
|
function monster_ai_stand6(self, dist, context) {
|
|
9092
9985
|
ai_stand(self, MONSTER_TICK6, context);
|
|
@@ -9244,6 +10137,7 @@ function registerFloaterSpawns(registry) {
|
|
|
9244
10137
|
}
|
|
9245
10138
|
|
|
9246
10139
|
// src/entities/monsters/flyer.ts
|
|
10140
|
+
init_esm();
|
|
9247
10141
|
var MONSTER_TICK7 = 0.1;
|
|
9248
10142
|
function monster_ai_stand7(self, dist, context) {
|
|
9249
10143
|
ai_stand(self, MONSTER_TICK7, context);
|
|
@@ -9422,6 +10316,7 @@ function registerFlyerSpawns(registry) {
|
|
|
9422
10316
|
}
|
|
9423
10317
|
|
|
9424
10318
|
// src/entities/monsters/gladiator.ts
|
|
10319
|
+
init_esm();
|
|
9425
10320
|
var MONSTER_TICK8 = 0.1;
|
|
9426
10321
|
function monster_ai_stand8(self, dist, context) {
|
|
9427
10322
|
ai_stand(self, MONSTER_TICK8, context);
|
|
@@ -9621,6 +10516,7 @@ function registerGladiatorSpawns(registry) {
|
|
|
9621
10516
|
}
|
|
9622
10517
|
|
|
9623
10518
|
// src/entities/monsters/gunner.ts
|
|
10519
|
+
init_esm();
|
|
9624
10520
|
var MONSTER_TICK9 = 0.1;
|
|
9625
10521
|
function monster_ai_stand9(self, dist, context) {
|
|
9626
10522
|
ai_stand(self, MONSTER_TICK9, context);
|
|
@@ -10043,6 +10939,7 @@ function registerGunnerSpawns(registry) {
|
|
|
10043
10939
|
}
|
|
10044
10940
|
|
|
10045
10941
|
// src/entities/monsters/hover.ts
|
|
10942
|
+
init_esm();
|
|
10046
10943
|
var MONSTER_TICK10 = 0.1;
|
|
10047
10944
|
function monster_ai_stand10(self, dist, context) {
|
|
10048
10945
|
ai_stand(self, MONSTER_TICK10, context);
|
|
@@ -10200,6 +11097,7 @@ function registerHoverSpawns(registry) {
|
|
|
10200
11097
|
}
|
|
10201
11098
|
|
|
10202
11099
|
// src/entities/monsters/icarus.ts
|
|
11100
|
+
init_esm();
|
|
10203
11101
|
var MONSTER_TICK11 = 0.1;
|
|
10204
11102
|
function monster_ai_stand11(self, dist, context) {
|
|
10205
11103
|
ai_stand(self, MONSTER_TICK11, context);
|
|
@@ -10357,6 +11255,7 @@ function registerIcarusSpawns(registry) {
|
|
|
10357
11255
|
}
|
|
10358
11256
|
|
|
10359
11257
|
// src/entities/monsters/infantry.ts
|
|
11258
|
+
init_esm();
|
|
10360
11259
|
var MONSTER_TICK12 = 0.1;
|
|
10361
11260
|
function monster_ai_stand12(self, dist, context) {
|
|
10362
11261
|
ai_stand(self, MONSTER_TICK12, context);
|
|
@@ -10557,6 +11456,7 @@ function registerInfantrySpawns(registry) {
|
|
|
10557
11456
|
}
|
|
10558
11457
|
|
|
10559
11458
|
// src/entities/monsters/makron.ts
|
|
11459
|
+
init_esm();
|
|
10560
11460
|
var MONSTER_TICK13 = 0.1;
|
|
10561
11461
|
var MAKRON_BFG_OFFSET = { x: 30, y: 28, z: 24 };
|
|
10562
11462
|
var MAKRON_BLASTER_OFFSET_1 = { x: 26, y: 16, z: 24 };
|
|
@@ -10802,6 +11702,7 @@ function registerMakronSpawns(registry) {
|
|
|
10802
11702
|
}
|
|
10803
11703
|
|
|
10804
11704
|
// src/entities/monsters/jorg.ts
|
|
11705
|
+
init_esm();
|
|
10805
11706
|
var MONSTER_TICK14 = 0.1;
|
|
10806
11707
|
var JORG_MACHINEGUN_R1_OFFSET = { x: 40, y: -20, z: 20 };
|
|
10807
11708
|
var JORG_MACHINEGUN_L1_OFFSET = { x: 40, y: 20, z: 20 };
|
|
@@ -11025,7 +11926,7 @@ var SPAWNFLAG_INSANE_STAND_GROUND = 16;
|
|
|
11025
11926
|
var SPAWNFLAG_INSANE_ALWAYS_STAND = 32;
|
|
11026
11927
|
var SPAWNFLAG_INSANE_QUIET = 64;
|
|
11027
11928
|
var FRAME_stand1 = 0;
|
|
11028
|
-
var
|
|
11929
|
+
var FRAME_stand402 = 39;
|
|
11029
11930
|
var FRAME_stand41 = 40;
|
|
11030
11931
|
var FRAME_stand59 = 58;
|
|
11031
11932
|
var FRAME_stand60 = 59;
|
|
@@ -11287,7 +12188,7 @@ var frames_uptodown = [
|
|
|
11287
12188
|
];
|
|
11288
12189
|
insane_move_uptodown = {
|
|
11289
12190
|
firstframe: FRAME_stand1,
|
|
11290
|
-
lastframe:
|
|
12191
|
+
lastframe: FRAME_stand402,
|
|
11291
12192
|
frames: frames_uptodown,
|
|
11292
12193
|
endfunc: insane_onground
|
|
11293
12194
|
};
|
|
@@ -11652,7 +12553,7 @@ function SP_misc_insane(self, context) {
|
|
|
11652
12553
|
return;
|
|
11653
12554
|
}
|
|
11654
12555
|
const frame = self2.frame;
|
|
11655
|
-
if (frame >= FRAME_crawl1 && frame <= FRAME_crawl9 || frame >= FRAME_stand100 && frame <= FRAME_stand160 || frame >= FRAME_stand1 && frame <=
|
|
12556
|
+
if (frame >= FRAME_crawl1 && frame <= FRAME_crawl9 || frame >= FRAME_stand100 && frame <= FRAME_stand160 || frame >= FRAME_stand1 && frame <= FRAME_stand402) {
|
|
11656
12557
|
self2.monsterinfo.current_move = insane_move_crawl_pain;
|
|
11657
12558
|
} else {
|
|
11658
12559
|
self2.monsterinfo.current_move = insane_move_stand_pain;
|
|
@@ -11711,6 +12612,8 @@ function registerInsaneSpawns(registry) {
|
|
|
11711
12612
|
}
|
|
11712
12613
|
|
|
11713
12614
|
// src/entities/monsters/actor.ts
|
|
12615
|
+
init_esm();
|
|
12616
|
+
init_esm();
|
|
11714
12617
|
var MONSTER_TICK16 = 0.1;
|
|
11715
12618
|
var MZ2_ACTOR_MACHINEGUN_1 = 0;
|
|
11716
12619
|
var actor_names = [
|
|
@@ -11729,19 +12632,19 @@ var FRAME_walk01 = 40;
|
|
|
11729
12632
|
var FRAME_walk08 = 47;
|
|
11730
12633
|
var FRAME_run02 = 48;
|
|
11731
12634
|
var FRAME_run07 = 53;
|
|
11732
|
-
var
|
|
12635
|
+
var FRAME_pain1012 = 54;
|
|
11733
12636
|
var FRAME_pain103 = 56;
|
|
11734
|
-
var
|
|
12637
|
+
var FRAME_pain2012 = 57;
|
|
11735
12638
|
var FRAME_pain203 = 59;
|
|
11736
|
-
var
|
|
12639
|
+
var FRAME_pain3012 = 60;
|
|
11737
12640
|
var FRAME_pain303 = 62;
|
|
11738
12641
|
var FRAME_flip01 = 63;
|
|
11739
12642
|
var FRAME_flip14 = 76;
|
|
11740
12643
|
var FRAME_taunt01 = 77;
|
|
11741
12644
|
var FRAME_taunt17 = 93;
|
|
11742
|
-
var
|
|
12645
|
+
var FRAME_death1012 = 94;
|
|
11743
12646
|
var FRAME_death107 = 100;
|
|
11744
|
-
var
|
|
12647
|
+
var FRAME_death2012 = 101;
|
|
11745
12648
|
var FRAME_death213 = 113;
|
|
11746
12649
|
var FRAME_attak01 = 114;
|
|
11747
12650
|
var FRAME_attak04 = 117;
|
|
@@ -11991,7 +12894,7 @@ var frames_pain1 = [
|
|
|
11991
12894
|
m2(ai_move, 1)
|
|
11992
12895
|
];
|
|
11993
12896
|
actor_move_pain1 = {
|
|
11994
|
-
firstframe:
|
|
12897
|
+
firstframe: FRAME_pain1012,
|
|
11995
12898
|
lastframe: FRAME_pain103,
|
|
11996
12899
|
frames: frames_pain1,
|
|
11997
12900
|
endfunc: actor_run
|
|
@@ -12002,7 +12905,7 @@ var frames_pain2 = [
|
|
|
12002
12905
|
m2(ai_move)
|
|
12003
12906
|
];
|
|
12004
12907
|
actor_move_pain2 = {
|
|
12005
|
-
firstframe:
|
|
12908
|
+
firstframe: FRAME_pain2012,
|
|
12006
12909
|
lastframe: FRAME_pain203,
|
|
12007
12910
|
frames: frames_pain2,
|
|
12008
12911
|
endfunc: actor_run
|
|
@@ -12013,7 +12916,7 @@ var frames_pain3 = [
|
|
|
12013
12916
|
m2(ai_move, 0)
|
|
12014
12917
|
];
|
|
12015
12918
|
actor_move_pain3 = {
|
|
12016
|
-
firstframe:
|
|
12919
|
+
firstframe: FRAME_pain3012,
|
|
12017
12920
|
lastframe: FRAME_pain303,
|
|
12018
12921
|
frames: frames_pain3,
|
|
12019
12922
|
endfunc: actor_run
|
|
@@ -12075,7 +12978,7 @@ var frames_death1 = [
|
|
|
12075
12978
|
m2(ai_move, 1)
|
|
12076
12979
|
];
|
|
12077
12980
|
actor_move_death1 = {
|
|
12078
|
-
firstframe:
|
|
12981
|
+
firstframe: FRAME_death1012,
|
|
12079
12982
|
lastframe: FRAME_death107,
|
|
12080
12983
|
frames: frames_death1,
|
|
12081
12984
|
endfunc: actor_dead
|
|
@@ -12096,7 +12999,7 @@ var frames_death2 = [
|
|
|
12096
12999
|
m2(ai_move)
|
|
12097
13000
|
];
|
|
12098
13001
|
actor_move_death2 = {
|
|
12099
|
-
firstframe:
|
|
13002
|
+
firstframe: FRAME_death2012,
|
|
12100
13003
|
lastframe: FRAME_death213,
|
|
12101
13004
|
frames: frames_death2,
|
|
12102
13005
|
endfunc: actor_dead
|
|
@@ -12251,6 +13154,8 @@ function registerActorSpawns(registry) {
|
|
|
12251
13154
|
}
|
|
12252
13155
|
|
|
12253
13156
|
// src/entities/monsters/medic.ts
|
|
13157
|
+
init_esm();
|
|
13158
|
+
init_esm();
|
|
12254
13159
|
var MONSTER_TICK17 = 0.1;
|
|
12255
13160
|
function monster_ai_stand15(self, dist, context) {
|
|
12256
13161
|
if (self.classname === "monster_medic") {
|
|
@@ -12627,8 +13532,9 @@ function registerMedicSpawns(registry) {
|
|
|
12627
13532
|
}
|
|
12628
13533
|
|
|
12629
13534
|
// src/entities/monsters/mutant.ts
|
|
13535
|
+
init_esm();
|
|
12630
13536
|
var MONSTER_TICK18 = 0.1;
|
|
12631
|
-
var
|
|
13537
|
+
var random8 = () => Math.random();
|
|
12632
13538
|
function monster_ai_stand16(self, dist, context) {
|
|
12633
13539
|
ai_stand(self, MONSTER_TICK18, context);
|
|
12634
13540
|
}
|
|
@@ -12741,11 +13647,11 @@ function mutant_check_attack(self, context) {
|
|
|
12741
13647
|
if (self.enemy && self.enemy.health > 0) {
|
|
12742
13648
|
const diff = subtractVec3(self.enemy.origin, self.origin);
|
|
12743
13649
|
const dist = lengthVec3(diff);
|
|
12744
|
-
if (dist < 128 &&
|
|
13650
|
+
if (dist < 128 && random8() < 0.5) {
|
|
12745
13651
|
self.monsterinfo.current_move = attack_move7;
|
|
12746
13652
|
return true;
|
|
12747
13653
|
}
|
|
12748
|
-
if (dist >= 128 && dist < 512 &&
|
|
13654
|
+
if (dist >= 128 && dist < 512 && random8() < 0.3) {
|
|
12749
13655
|
self.monsterinfo.current_move = jump_move2;
|
|
12750
13656
|
return true;
|
|
12751
13657
|
}
|
|
@@ -12758,10 +13664,10 @@ function mutant_pain_func(self, other, kick, damage, context) {
|
|
|
12758
13664
|
}
|
|
12759
13665
|
if (self.timestamp < (self.pain_finished_time || 0)) return;
|
|
12760
13666
|
self.pain_finished_time = self.timestamp + 3;
|
|
12761
|
-
if (
|
|
13667
|
+
if (random8() < 0.5) {
|
|
12762
13668
|
context.engine.sound?.(self, 0, "mutant/mutpain1.wav", 1, 1, 0);
|
|
12763
13669
|
self.monsterinfo.current_move = pain1_move6;
|
|
12764
|
-
} else if (
|
|
13670
|
+
} else if (random8() < 0.5) {
|
|
12765
13671
|
context.engine.sound?.(self, 0, "mutant/mutpain2.wav", 1, 1, 0);
|
|
12766
13672
|
self.monsterinfo.current_move = pain2_move6;
|
|
12767
13673
|
} else {
|
|
@@ -13016,8 +13922,9 @@ function registerMutantSpawns(registry) {
|
|
|
13016
13922
|
}
|
|
13017
13923
|
|
|
13018
13924
|
// src/entities/monsters/parasite.ts
|
|
13925
|
+
init_esm();
|
|
13019
13926
|
var MONSTER_TICK19 = 0.1;
|
|
13020
|
-
var
|
|
13927
|
+
var random9 = () => Math.random();
|
|
13021
13928
|
function monster_ai_stand17(self, dist, context) {
|
|
13022
13929
|
ai_stand(self, MONSTER_TICK19, context);
|
|
13023
13930
|
}
|
|
@@ -13062,7 +13969,7 @@ function parasite_do_fidget(self) {
|
|
|
13062
13969
|
self.monsterinfo.current_move = fidget_move3;
|
|
13063
13970
|
}
|
|
13064
13971
|
function parasite_refidget(self) {
|
|
13065
|
-
if (
|
|
13972
|
+
if (random9() <= 0.8) {
|
|
13066
13973
|
self.monsterinfo.current_move = fidget_move3;
|
|
13067
13974
|
} else {
|
|
13068
13975
|
self.monsterinfo.current_move = end_fidget_move;
|
|
@@ -13175,7 +14082,7 @@ function parasite_pain_func(self, other, kick, damage, context) {
|
|
|
13175
14082
|
}
|
|
13176
14083
|
if (self.timestamp < (self.pain_finished_time || 0)) return;
|
|
13177
14084
|
self.pain_finished_time = self.timestamp + 3;
|
|
13178
|
-
if (
|
|
14085
|
+
if (random9() < 0.5) {
|
|
13179
14086
|
context.engine.sound?.(self, 0, "parasite/parpain1.wav", 1, 1, 0);
|
|
13180
14087
|
} else {
|
|
13181
14088
|
context.engine.sound?.(self, 0, "parasite/parpain2.wav", 1, 1, 0);
|
|
@@ -13412,6 +14319,7 @@ function registerParasiteSpawns(registry) {
|
|
|
13412
14319
|
}
|
|
13413
14320
|
|
|
13414
14321
|
// src/entities/monsters/soldier.ts
|
|
14322
|
+
init_esm();
|
|
13415
14323
|
var MONSTER_TICK20 = 0.1;
|
|
13416
14324
|
var SOLDIER_LIGHT = 1;
|
|
13417
14325
|
var SOLDIER_SSG = 2;
|
|
@@ -13750,6 +14658,7 @@ function registerMonsterSpawns(registry) {
|
|
|
13750
14658
|
}
|
|
13751
14659
|
|
|
13752
14660
|
// src/entities/monsters/supertank.ts
|
|
14661
|
+
init_esm();
|
|
13753
14662
|
var MONSTER_TICK21 = 0.1;
|
|
13754
14663
|
var SUPERTANK_MACHINEGUN_OFFSET = { x: 30, y: 30, z: 40 };
|
|
13755
14664
|
var SUPERTANK_ROCKET_OFFSET = { x: 30, y: -30, z: 40 };
|
|
@@ -13974,6 +14883,7 @@ function registerSupertankSpawns(registry) {
|
|
|
13974
14883
|
}
|
|
13975
14884
|
|
|
13976
14885
|
// src/entities/monsters/tank.ts
|
|
14886
|
+
init_esm();
|
|
13977
14887
|
var MONSTER_TICK22 = 0.1;
|
|
13978
14888
|
function M_AdjustBlindfireTarget(self, start, target, right, context) {
|
|
13979
14889
|
const tr = context.trace(start, target, ZERO_VEC3, ZERO_VEC3, self, MASK_SHOT);
|
|
@@ -14344,6 +15254,7 @@ function registerTankCommanderSpawns(registry) {
|
|
|
14344
15254
|
}
|
|
14345
15255
|
|
|
14346
15256
|
// src/entities/monsters/turret.ts
|
|
15257
|
+
init_esm();
|
|
14347
15258
|
var MONSTER_TICK23 = 0.1;
|
|
14348
15259
|
function monster_ai_stand21(self, dist, context) {
|
|
14349
15260
|
ai_stand(self, MONSTER_TICK23, context);
|
|
@@ -14495,8 +15406,9 @@ function registerTurretSpawns(registry) {
|
|
|
14495
15406
|
}
|
|
14496
15407
|
|
|
14497
15408
|
// src/entities/monsters/gekk.ts
|
|
15409
|
+
init_esm();
|
|
14498
15410
|
var MONSTER_TICK24 = 0.1;
|
|
14499
|
-
var
|
|
15411
|
+
var random10 = () => Math.random();
|
|
14500
15412
|
var frandom2 = () => Math.random();
|
|
14501
15413
|
var irandom2 = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
|
|
14502
15414
|
function monster_ai_stand22(self, dist, context) {
|
|
@@ -15005,7 +15917,7 @@ function gekk_pain(self, other, kick, damage, context) {
|
|
|
15005
15917
|
}
|
|
15006
15918
|
self.monsterinfo.current_move = gekk_move_pain;
|
|
15007
15919
|
} else {
|
|
15008
|
-
if (
|
|
15920
|
+
if (random10() > 0.5) self.monsterinfo.current_move = gekk_move_pain1;
|
|
15009
15921
|
else self.monsterinfo.current_move = gekk_move_pain2;
|
|
15010
15922
|
}
|
|
15011
15923
|
}
|
|
@@ -15137,8 +16049,9 @@ function registerGekkSpawns(registry) {
|
|
|
15137
16049
|
}
|
|
15138
16050
|
|
|
15139
16051
|
// src/entities/monsters/fixbot.ts
|
|
16052
|
+
init_esm();
|
|
15140
16053
|
var MONSTER_TICK25 = 0.1;
|
|
15141
|
-
var
|
|
16054
|
+
var random11 = () => Math.random();
|
|
15142
16055
|
var frandom3 = () => Math.random();
|
|
15143
16056
|
function monster_ai_walk21(self, dist, context) {
|
|
15144
16057
|
ai_walk(self, dist, MONSTER_TICK25, context);
|
|
@@ -15201,7 +16114,7 @@ function fixbot_search(self, context) {
|
|
|
15201
16114
|
fixbot_run(self);
|
|
15202
16115
|
fixbot_set_fly_parameters(self, true, false);
|
|
15203
16116
|
} else {
|
|
15204
|
-
if (
|
|
16117
|
+
if (random11() < 0.1) {
|
|
15205
16118
|
context.engine.sound?.(self, 0, "flyer/flysght1.wav", 1, 1, 0);
|
|
15206
16119
|
}
|
|
15207
16120
|
}
|
|
@@ -15860,6 +16773,9 @@ var LevelClock = class {
|
|
|
15860
16773
|
}
|
|
15861
16774
|
};
|
|
15862
16775
|
|
|
16776
|
+
// src/save/save.ts
|
|
16777
|
+
init_esm();
|
|
16778
|
+
|
|
15863
16779
|
// src/checksum.ts
|
|
15864
16780
|
var FNV_OFFSET_BASIS = 2166136261;
|
|
15865
16781
|
var FNV_PRIME = 16777619;
|
|
@@ -16322,6 +17238,7 @@ function applySaveFile(save, targets) {
|
|
|
16322
17238
|
}
|
|
16323
17239
|
|
|
16324
17240
|
// src/save/rerelease.ts
|
|
17241
|
+
init_esm();
|
|
16325
17242
|
function ensureObject2(value, label) {
|
|
16326
17243
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
16327
17244
|
throw new Error(`${label} must be an object`);
|
|
@@ -16734,6 +17651,9 @@ _SaveStorage.DEFAULT_STORE = "saves";
|
|
|
16734
17651
|
_SaveStorage.QUICK_SLOT = "quicksave";
|
|
16735
17652
|
var SaveStorage = _SaveStorage;
|
|
16736
17653
|
|
|
17654
|
+
// src/index.ts
|
|
17655
|
+
init_esm();
|
|
17656
|
+
|
|
16737
17657
|
// src/ai/noise.ts
|
|
16738
17658
|
var PNOISE_SELF = 0;
|
|
16739
17659
|
var PNOISE_WEAPON = 1;
|
|
@@ -16759,8 +17679,13 @@ function PlayerNoise(who, where, type, context) {
|
|
|
16759
17679
|
}
|
|
16760
17680
|
}
|
|
16761
17681
|
|
|
17682
|
+
// src/entities/player.ts
|
|
17683
|
+
init_playerInventory();
|
|
17684
|
+
|
|
16762
17685
|
// src/combat/obituary.ts
|
|
16763
|
-
|
|
17686
|
+
init_esm();
|
|
17687
|
+
init_esm();
|
|
17688
|
+
var random12 = createRandomGenerator();
|
|
16764
17689
|
var PRINT_MEDIUM = 1;
|
|
16765
17690
|
function getGender(ent) {
|
|
16766
17691
|
return "male";
|
|
@@ -16901,30 +17826,6 @@ function ClientObituary(self, inflictor, attacker, mod, sys) {
|
|
|
16901
17826
|
}
|
|
16902
17827
|
}
|
|
16903
17828
|
|
|
16904
|
-
// src/entities/player_anim.ts
|
|
16905
|
-
var FRAME_stand01 = 0;
|
|
16906
|
-
var FRAME_stand402 = 39;
|
|
16907
|
-
var FRAME_run1 = 40;
|
|
16908
|
-
var FRAME_run6 = 45;
|
|
16909
|
-
var FRAME_pain1012 = 54;
|
|
16910
|
-
var FRAME_pain104 = 57;
|
|
16911
|
-
var FRAME_pain2012 = 58;
|
|
16912
|
-
var FRAME_pain204 = 61;
|
|
16913
|
-
var FRAME_pain3012 = 62;
|
|
16914
|
-
var FRAME_pain304 = 65;
|
|
16915
|
-
var FRAME_death1012 = 66;
|
|
16916
|
-
var FRAME_death106 = 71;
|
|
16917
|
-
var FRAME_death2012 = 72;
|
|
16918
|
-
var FRAME_death206 = 77;
|
|
16919
|
-
var FRAME_death301 = 78;
|
|
16920
|
-
var FRAME_death306 = 83;
|
|
16921
|
-
var ANIM_BASIC = 0;
|
|
16922
|
-
var ANIM_PAIN = 2;
|
|
16923
|
-
var ANIM_DEATH = 3;
|
|
16924
|
-
|
|
16925
|
-
// src/combat/weapons/firing.ts
|
|
16926
|
-
var random12 = createRandomGenerator();
|
|
16927
|
-
|
|
16928
17829
|
// src/entities/player.ts
|
|
16929
17830
|
function P_PlayerThink(ent, sys) {
|
|
16930
17831
|
if (!ent.client) return;
|
|
@@ -16943,9 +17844,9 @@ function P_PlayerThink(ent, sys) {
|
|
|
16943
17844
|
animChanged = true;
|
|
16944
17845
|
}
|
|
16945
17846
|
} else {
|
|
16946
|
-
if (ent.frame >= FRAME_run1 && ent.frame <= FRAME_run6 || client.anim_priority === ANIM_BASIC && client.anim_end !==
|
|
17847
|
+
if (ent.frame >= FRAME_run1 && ent.frame <= FRAME_run6 || client.anim_priority === ANIM_BASIC && client.anim_end !== FRAME_stand40 || client.anim_priority === void 0) {
|
|
16947
17848
|
ent.frame = FRAME_stand01;
|
|
16948
|
-
client.anim_end =
|
|
17849
|
+
client.anim_end = FRAME_stand40;
|
|
16949
17850
|
client.anim_priority = ANIM_BASIC;
|
|
16950
17851
|
animChanged = true;
|
|
16951
17852
|
}
|
|
@@ -16964,7 +17865,7 @@ function P_PlayerThink(ent, sys) {
|
|
|
16964
17865
|
} else if (client.anim_end === ent.frame) {
|
|
16965
17866
|
if (client.anim_priority === ANIM_BASIC) {
|
|
16966
17867
|
if (ent.frame === FRAME_run6) ent.frame = FRAME_run1;
|
|
16967
|
-
else if (ent.frame ===
|
|
17868
|
+
else if (ent.frame === FRAME_stand40) ent.frame = FRAME_stand01;
|
|
16968
17869
|
} else {
|
|
16969
17870
|
if (client.anim_priority !== ANIM_DEATH) {
|
|
16970
17871
|
client.anim_priority = ANIM_BASIC;
|
|
@@ -16980,15 +17881,15 @@ function player_pain(self, damage) {
|
|
|
16980
17881
|
return;
|
|
16981
17882
|
}
|
|
16982
17883
|
self.client.anim_priority = ANIM_PAIN;
|
|
16983
|
-
const r =
|
|
17884
|
+
const r = random2.frandom();
|
|
16984
17885
|
if (r < 0.33) {
|
|
16985
|
-
self.frame =
|
|
17886
|
+
self.frame = FRAME_pain101;
|
|
16986
17887
|
self.client.anim_end = FRAME_pain104;
|
|
16987
17888
|
} else if (r < 0.66) {
|
|
16988
|
-
self.frame =
|
|
17889
|
+
self.frame = FRAME_pain201;
|
|
16989
17890
|
self.client.anim_end = FRAME_pain204;
|
|
16990
17891
|
} else {
|
|
16991
|
-
self.frame =
|
|
17892
|
+
self.frame = FRAME_pain301;
|
|
16992
17893
|
self.client.anim_end = FRAME_pain304;
|
|
16993
17894
|
}
|
|
16994
17895
|
}
|
|
@@ -17003,12 +17904,12 @@ function player_die(self, inflictor, attacker, damage, point, mod, sys) {
|
|
|
17003
17904
|
}
|
|
17004
17905
|
if (self.client) {
|
|
17005
17906
|
self.client.anim_priority = ANIM_DEATH;
|
|
17006
|
-
const r =
|
|
17907
|
+
const r = random2.frandom();
|
|
17007
17908
|
if (r < 0.33) {
|
|
17008
|
-
self.frame =
|
|
17909
|
+
self.frame = FRAME_death101;
|
|
17009
17910
|
self.client.anim_end = FRAME_death106;
|
|
17010
17911
|
} else if (r < 0.66) {
|
|
17011
|
-
self.frame =
|
|
17912
|
+
self.frame = FRAME_death201;
|
|
17012
17913
|
self.client.anim_end = FRAME_death206;
|
|
17013
17914
|
} else {
|
|
17014
17915
|
self.frame = FRAME_death301;
|
|
@@ -17056,6 +17957,8 @@ function player_think(self, sys) {
|
|
|
17056
17957
|
}
|
|
17057
17958
|
|
|
17058
17959
|
// src/entities/playerStats.ts
|
|
17960
|
+
init_esm();
|
|
17961
|
+
init_playerInventory();
|
|
17059
17962
|
var POWERUP_TIMERS = [
|
|
17060
17963
|
{ id: PowerupId.QuadDamage, priority: 1 },
|
|
17061
17964
|
{ id: PowerupId.Invulnerability, priority: 2 },
|
|
@@ -17121,7 +18024,11 @@ function populatePlayerStats(player, timeSeconds) {
|
|
|
17121
18024
|
return statArray;
|
|
17122
18025
|
}
|
|
17123
18026
|
|
|
18027
|
+
// src/index.ts
|
|
18028
|
+
init_esm();
|
|
18029
|
+
|
|
17124
18030
|
// src/combat/specialDamage.ts
|
|
18031
|
+
init_esm();
|
|
17125
18032
|
var ZERO2 = { x: 0, y: 0, z: 0 };
|
|
17126
18033
|
var EnvironmentalFlags = /* @__PURE__ */ ((EnvironmentalFlags2) => {
|
|
17127
18034
|
EnvironmentalFlags2[EnvironmentalFlags2["IN_WATER"] = 1] = "IN_WATER";
|
|
@@ -17442,6 +18349,13 @@ function createGame(imports, engine, options) {
|
|
|
17442
18349
|
configstring
|
|
17443
18350
|
};
|
|
17444
18351
|
const entities = new EntitySystem(engine, systemImports, gravity, void 0, void 0, deathmatch);
|
|
18352
|
+
entities._game = {
|
|
18353
|
+
// Lazy proxy or partial implementation of GameExports needed by EntitySystem consumers (like weapons)
|
|
18354
|
+
// This is circular, so we must be careful.
|
|
18355
|
+
// We will assign the full gameExports object later?
|
|
18356
|
+
// No, gameExports is const defined below.
|
|
18357
|
+
// We can use a getter or assign properties later.
|
|
18358
|
+
};
|
|
17445
18359
|
frameLoop.addStage("prep", (context) => {
|
|
17446
18360
|
levelClock.tick(context);
|
|
17447
18361
|
entities.beginFrame(levelClock.current.timeSeconds);
|
|
@@ -17728,6 +18642,7 @@ function createGame(imports, engine, options) {
|
|
|
17728
18642
|
};
|
|
17729
18643
|
const spawnRegistry = createDefaultSpawnRegistry(gameExports);
|
|
17730
18644
|
entities.setSpawnRegistry(spawnRegistry);
|
|
18645
|
+
entities._game = gameExports;
|
|
17731
18646
|
return gameExports;
|
|
17732
18647
|
}
|
|
17733
18648
|
// Annotate the CommonJS export names for ESM import in node:
|