quake2ts 0.0.276 → 0.0.281
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +13 -13
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +9 -9
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/browser/index.global.js +3 -3
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +2237 -1199
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +2093 -1048
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/combat/weapons/animation.d.ts +3 -2
- package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/bfg.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/bfg.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/blaster.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/blaster.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/chaingun.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/firing.d.ts +10 -0
- package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/frames.d.ts +43 -0
- package/packages/game/dist/types/combat/weapons/frames.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/hyperblaster.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/hyperblaster.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/machinegun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/machinegun.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/railgun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/railgun.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/rocket.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/rocket.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/shotgun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/shotgun.d.ts.map +1 -0
- package/packages/game/dist/types/combat/weapons/supershotgun.d.ts +4 -0
- package/packages/game/dist/types/combat/weapons/supershotgun.d.ts.map +1 -0
- package/packages/game/dist/types/entities/entity.d.ts +17 -0
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
- package/packages/game/dist/types/entities/gibs.d.ts +10 -2
- package/packages/game/dist/types/entities/gibs.d.ts.map +1 -1
- package/packages/game/dist/types/entities/misc.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +2 -1
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/items.d.ts.map +1 -1
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +26 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +25 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/protocol/index.d.ts +1 -0
- package/packages/shared/dist/types/protocol/index.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/renderFx.d.ts +22 -0
- package/packages/shared/dist/types/protocol/renderFx.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -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";
|
|
@@ -4073,6 +4278,7 @@ function T_RadiusDamage(entities, inflictor, attacker, damage, ignore, radius, d
|
|
|
4073
4278
|
}
|
|
4074
4279
|
|
|
4075
4280
|
// src/entities/misc.ts
|
|
4281
|
+
var random = createRandomGenerator();
|
|
4076
4282
|
var SPAWNFLAGS_OBJECT_TRIGGER_SPAWN = 1;
|
|
4077
4283
|
var SPAWNFLAGS_OBJECT_ANIMATED = 2;
|
|
4078
4284
|
function func_object_touch(self, other, plane, surf) {
|
|
@@ -4124,6 +4330,24 @@ var func_object = (entity, context) => {
|
|
|
4124
4330
|
if (entity.spawnflags & SPAWNFLAGS_OBJECT_ANIMATED) {
|
|
4125
4331
|
}
|
|
4126
4332
|
};
|
|
4333
|
+
function gib_die(self, inflictor, attacker, damage) {
|
|
4334
|
+
}
|
|
4335
|
+
function spawn_gib(entity, model, context) {
|
|
4336
|
+
context.entities.modelIndex(model);
|
|
4337
|
+
entity.solid = 0 /* Not */;
|
|
4338
|
+
entity.takedamage = true;
|
|
4339
|
+
entity.die = gib_die;
|
|
4340
|
+
entity.movetype = 7 /* Toss */;
|
|
4341
|
+
entity.deadflag = 2;
|
|
4342
|
+
entity.avelocity = {
|
|
4343
|
+
x: random.frandom() * 200,
|
|
4344
|
+
y: random.frandom() * 200,
|
|
4345
|
+
z: random.frandom() * 200
|
|
4346
|
+
};
|
|
4347
|
+
entity.think = (self) => context.entities.free(self);
|
|
4348
|
+
context.entities.scheduleThink(entity, context.entities.timeSeconds + 10);
|
|
4349
|
+
context.entities.linkentity(entity);
|
|
4350
|
+
}
|
|
4127
4351
|
function registerMiscSpawns(registry) {
|
|
4128
4352
|
registry.register("misc_teleporter", (entity) => {
|
|
4129
4353
|
});
|
|
@@ -4141,14 +4365,23 @@ function registerMiscSpawns(registry) {
|
|
|
4141
4365
|
entity.movetype = 0 /* None */;
|
|
4142
4366
|
entity.solid = 3 /* Bsp */;
|
|
4143
4367
|
});
|
|
4144
|
-
registry.register("misc_gib_arm", (entity) => {
|
|
4145
|
-
entity.
|
|
4146
|
-
|
|
4368
|
+
registry.register("misc_gib_arm", (entity, context) => {
|
|
4369
|
+
spawn_gib(entity, "models/objects/gibs/arm/tris.md2", context);
|
|
4370
|
+
});
|
|
4371
|
+
registry.register("misc_gib_leg", (entity, context) => {
|
|
4372
|
+
spawn_gib(entity, "models/objects/gibs/leg/tris.md2", context);
|
|
4373
|
+
});
|
|
4374
|
+
registry.register("misc_gib_head", (entity, context) => {
|
|
4375
|
+
spawn_gib(entity, "models/objects/gibs/head/tris.md2", context);
|
|
4147
4376
|
});
|
|
4148
4377
|
registry.register("func_object", func_object);
|
|
4149
4378
|
}
|
|
4150
4379
|
|
|
4380
|
+
// src/entities/targets.ts
|
|
4381
|
+
init_esm();
|
|
4382
|
+
|
|
4151
4383
|
// src/entities/utils.ts
|
|
4384
|
+
init_esm();
|
|
4152
4385
|
var VEC_UP = { x: 0, y: -1, z: 0 };
|
|
4153
4386
|
var MOVEDIR_UP = { x: 0, y: 0, z: 1 };
|
|
4154
4387
|
var VEC_DOWN = { x: 0, y: -2, z: 0 };
|
|
@@ -4170,6 +4403,7 @@ function setMovedir(angles) {
|
|
|
4170
4403
|
}
|
|
4171
4404
|
|
|
4172
4405
|
// src/entities/projectiles.ts
|
|
4406
|
+
init_esm();
|
|
4173
4407
|
function createRocket(sys, owner, start, dir, damage, radiusDamage, speed, flashtype = 0) {
|
|
4174
4408
|
const rocket = sys.spawn();
|
|
4175
4409
|
rocket.classname = "rocket";
|
|
@@ -4625,6 +4859,7 @@ function useTargetSpawner(self, other, activator, context, registry) {
|
|
|
4625
4859
|
warn: context.warn,
|
|
4626
4860
|
free: context.free
|
|
4627
4861
|
};
|
|
4862
|
+
ent.monsterinfo.aiflags |= 1024 /* DoNotCount */;
|
|
4628
4863
|
spawnFunc(ent, spawnContext);
|
|
4629
4864
|
context.entities.finalizeSpawn(ent);
|
|
4630
4865
|
context.entities.linkentity(ent);
|
|
@@ -4632,6 +4867,7 @@ function useTargetSpawner(self, other, activator, context, registry) {
|
|
|
4632
4867
|
if (self.speed) {
|
|
4633
4868
|
ent.velocity = { ...self.movedir };
|
|
4634
4869
|
}
|
|
4870
|
+
ent.renderfx |= RenderFx.IrVisible;
|
|
4635
4871
|
}
|
|
4636
4872
|
var SPAWNFLAG_BLASTER_NOTRAIL = 1;
|
|
4637
4873
|
var SPAWNFLAG_BLASTER_NOEFFECTS = 2;
|
|
@@ -5017,6 +5253,7 @@ function registerTargetSpawns(registry) {
|
|
|
5017
5253
|
}
|
|
5018
5254
|
|
|
5019
5255
|
// src/entities/triggers.ts
|
|
5256
|
+
init_esm();
|
|
5020
5257
|
var FRAME_TIME_SECONDS = 1 / 40;
|
|
5021
5258
|
var THINK_INTERVAL = 0.1;
|
|
5022
5259
|
var HURT_INTERVAL = 0.1;
|
|
@@ -5519,91 +5756,749 @@ function triggerElevatorInit(self, entities, warn) {
|
|
|
5519
5756
|
warn(`trigger_elevator target ${self.target} is not a train`);
|
|
5520
5757
|
return;
|
|
5521
5758
|
}
|
|
5522
|
-
self.use = (entity, other, activator) => triggerElevatorUse(entity, other ?? activator ?? null, entities, warn);
|
|
5523
|
-
self.svflags |= 1 /* NoClient */;
|
|
5524
|
-
}
|
|
5525
|
-
function registerTriggerElevator(registry) {
|
|
5526
|
-
registry.register("trigger_elevator", (entity, context) => {
|
|
5527
|
-
entity.think = (self) => triggerElevatorInit(self, context.entities, context.warn);
|
|
5528
|
-
context.entities.scheduleThink(entity, context.entities.timeSeconds + FRAME_TIME_SECONDS);
|
|
5529
|
-
});
|
|
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) {
|
|
6103
|
+
return;
|
|
6104
|
+
}
|
|
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) {
|
|
6124
|
+
return;
|
|
6125
|
+
}
|
|
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) {
|
|
6140
|
+
return;
|
|
6141
|
+
}
|
|
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) {
|
|
6164
|
+
return;
|
|
6165
|
+
}
|
|
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) {
|
|
6180
|
+
return;
|
|
6181
|
+
}
|
|
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);
|
|
6189
|
+
}
|
|
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);
|
|
6202
|
+
}
|
|
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) {
|
|
6212
|
+
}
|
|
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;
|
|
6220
|
+
}
|
|
6221
|
+
if (ent.client?.inventory.powerups.has(PowerupId.QuadFire)) {
|
|
6222
|
+
time *= 0.25;
|
|
6223
|
+
}
|
|
6224
|
+
return time;
|
|
6225
|
+
}
|
|
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) {
|
|
6234
|
+
return;
|
|
6235
|
+
}
|
|
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);
|
|
6245
|
+
return;
|
|
6246
|
+
}
|
|
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
|
+
});
|
|
6256
|
+
return;
|
|
6257
|
+
}
|
|
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;
|
|
6263
|
+
}
|
|
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;
|
|
6277
|
+
}
|
|
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
|
+
}
|
|
6290
|
+
}
|
|
6291
|
+
if (client.gun_frame < FRAME_FIRE_LAST) {
|
|
6292
|
+
client.gun_frame++;
|
|
6293
|
+
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
6294
|
+
return;
|
|
6295
|
+
}
|
|
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
|
+
}
|
|
5530
6301
|
}
|
|
5531
|
-
function
|
|
5532
|
-
|
|
5533
|
-
|
|
5534
|
-
|
|
5535
|
-
if (
|
|
5536
|
-
|
|
5537
|
-
}
|
|
5538
|
-
|
|
5539
|
-
entity.speed = 200;
|
|
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++;
|
|
5540
6310
|
}
|
|
5541
|
-
|
|
5542
|
-
|
|
5543
|
-
const touchHandler = (self, other) => monsterJumpTouch(self, other);
|
|
5544
|
-
entity.touch = touchHandler;
|
|
5545
|
-
if (entity.spawnflags & MONSTERJUMP_SPAWNFLAGS.StartOff) {
|
|
5546
|
-
entity.solid = 0 /* Not */;
|
|
5547
|
-
entity.touch = void 0;
|
|
6311
|
+
if (fire) {
|
|
6312
|
+
fire(ent);
|
|
5548
6313
|
}
|
|
5549
|
-
if (
|
|
5550
|
-
|
|
5551
|
-
|
|
5552
|
-
self.touch = self.solid === 1 /* Trigger */ ? touchHandler : void 0;
|
|
5553
|
-
};
|
|
6314
|
+
if (!(client.buttons & 1)) {
|
|
6315
|
+
client.gun_frame = FRAME_IDLE_LAST + 1;
|
|
6316
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
5554
6317
|
}
|
|
5555
|
-
}
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5560
|
-
|
|
5561
|
-
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
registerTriggerGravity(registry);
|
|
5568
|
-
registerTriggerElevator(registry);
|
|
5569
|
-
registerTriggerMonsterJump(registry);
|
|
5570
|
-
}
|
|
5571
|
-
|
|
5572
|
-
// src/combat/weapons/state.ts
|
|
5573
|
-
var WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
5574
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
5575
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
5576
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
5577
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
5578
|
-
return WeaponStateEnum2;
|
|
5579
|
-
})(WeaponStateEnum || {});
|
|
5580
|
-
function createPlayerWeaponStates() {
|
|
5581
|
-
return {
|
|
5582
|
-
states: /* @__PURE__ */ new Map()
|
|
5583
|
-
};
|
|
5584
|
-
}
|
|
5585
|
-
function getWeaponState(playerStates, weaponId) {
|
|
5586
|
-
let state = playerStates.states.get(weaponId);
|
|
5587
|
-
if (!state) {
|
|
5588
|
-
state = { lastFireTime: 0 };
|
|
5589
|
-
playerStates.states.set(weaponId, state);
|
|
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
|
+
);
|
|
5590
6330
|
}
|
|
5591
|
-
return state;
|
|
5592
6331
|
}
|
|
5593
6332
|
|
|
5594
|
-
// src/buttons.ts
|
|
5595
|
-
var BUTTON_ATTACK = 1;
|
|
5596
|
-
|
|
5597
6333
|
// src/combat/weapons/chaingun.ts
|
|
5598
6334
|
function chaingunThink(player, sys) {
|
|
5599
|
-
if (!player.client) {
|
|
5600
|
-
return;
|
|
5601
|
-
}
|
|
5602
6335
|
const weaponState = getWeaponState(player.client.weaponStates, WeaponId.Chaingun);
|
|
5603
6336
|
if (!(player.client.buttons & BUTTON_ATTACK) && weaponState.spinupCount && weaponState.spinupCount > 0) {
|
|
5604
6337
|
sys.sound(player, 0, "weapons/chngnd1a.wav", 1, 0, 0);
|
|
5605
6338
|
weaponState.spinupCount = 0;
|
|
5606
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
|
+
);
|
|
5607
6502
|
}
|
|
5608
6503
|
|
|
5609
6504
|
// src/inventory/items.ts
|
|
@@ -5616,7 +6511,8 @@ var WEAPON_ITEMS = {
|
|
|
5616
6511
|
ammoType: null,
|
|
5617
6512
|
initialAmmo: 0,
|
|
5618
6513
|
pickupAmmo: 0,
|
|
5619
|
-
fireRate: 0.5
|
|
6514
|
+
fireRate: 0.5,
|
|
6515
|
+
think: blasterThink
|
|
5620
6516
|
},
|
|
5621
6517
|
"weapon_shotgun": {
|
|
5622
6518
|
type: "weapon",
|
|
@@ -5626,7 +6522,8 @@ var WEAPON_ITEMS = {
|
|
|
5626
6522
|
ammoType: AmmoType.Shells,
|
|
5627
6523
|
initialAmmo: 10,
|
|
5628
6524
|
pickupAmmo: 10,
|
|
5629
|
-
fireRate: 1
|
|
6525
|
+
fireRate: 1,
|
|
6526
|
+
think: shotgunThink
|
|
5630
6527
|
},
|
|
5631
6528
|
"weapon_supershotgun": {
|
|
5632
6529
|
type: "weapon",
|
|
@@ -5636,7 +6533,8 @@ var WEAPON_ITEMS = {
|
|
|
5636
6533
|
ammoType: AmmoType.Shells,
|
|
5637
6534
|
initialAmmo: 10,
|
|
5638
6535
|
pickupAmmo: 10,
|
|
5639
|
-
fireRate: 1
|
|
6536
|
+
fireRate: 1,
|
|
6537
|
+
think: superShotgunThink
|
|
5640
6538
|
},
|
|
5641
6539
|
"weapon_machinegun": {
|
|
5642
6540
|
type: "weapon",
|
|
@@ -5647,7 +6545,7 @@ var WEAPON_ITEMS = {
|
|
|
5647
6545
|
initialAmmo: 50,
|
|
5648
6546
|
pickupAmmo: 50,
|
|
5649
6547
|
fireRate: 0.1,
|
|
5650
|
-
think:
|
|
6548
|
+
think: machinegunThink
|
|
5651
6549
|
},
|
|
5652
6550
|
"weapon_chaingun": {
|
|
5653
6551
|
type: "weapon",
|
|
@@ -5657,7 +6555,8 @@ var WEAPON_ITEMS = {
|
|
|
5657
6555
|
ammoType: AmmoType.Bullets,
|
|
5658
6556
|
initialAmmo: 50,
|
|
5659
6557
|
pickupAmmo: 50,
|
|
5660
|
-
fireRate: 0.1
|
|
6558
|
+
fireRate: 0.1,
|
|
6559
|
+
think: chaingunThink
|
|
5661
6560
|
},
|
|
5662
6561
|
"weapon_grenades": {
|
|
5663
6562
|
type: "weapon",
|
|
@@ -5677,7 +6576,8 @@ var WEAPON_ITEMS = {
|
|
|
5677
6576
|
ammoType: AmmoType.Grenades,
|
|
5678
6577
|
initialAmmo: 10,
|
|
5679
6578
|
pickupAmmo: 10,
|
|
5680
|
-
fireRate: 1
|
|
6579
|
+
fireRate: 1,
|
|
6580
|
+
think: grenadeLauncherThink
|
|
5681
6581
|
},
|
|
5682
6582
|
"weapon_rocketlauncher": {
|
|
5683
6583
|
type: "weapon",
|
|
@@ -5687,7 +6587,8 @@ var WEAPON_ITEMS = {
|
|
|
5687
6587
|
ammoType: AmmoType.Rockets,
|
|
5688
6588
|
initialAmmo: 5,
|
|
5689
6589
|
pickupAmmo: 5,
|
|
5690
|
-
fireRate: 1
|
|
6590
|
+
fireRate: 1,
|
|
6591
|
+
think: rocketLauncherThink
|
|
5691
6592
|
},
|
|
5692
6593
|
"weapon_hyperblaster": {
|
|
5693
6594
|
type: "weapon",
|
|
@@ -5697,7 +6598,8 @@ var WEAPON_ITEMS = {
|
|
|
5697
6598
|
ammoType: AmmoType.Cells,
|
|
5698
6599
|
initialAmmo: 50,
|
|
5699
6600
|
pickupAmmo: 50,
|
|
5700
|
-
fireRate: 0.1
|
|
6601
|
+
fireRate: 0.1,
|
|
6602
|
+
think: hyperBlasterThink
|
|
5701
6603
|
},
|
|
5702
6604
|
"weapon_railgun": {
|
|
5703
6605
|
type: "weapon",
|
|
@@ -5707,7 +6609,8 @@ var WEAPON_ITEMS = {
|
|
|
5707
6609
|
ammoType: AmmoType.Slugs,
|
|
5708
6610
|
initialAmmo: 10,
|
|
5709
6611
|
pickupAmmo: 10,
|
|
5710
|
-
fireRate: 1.5
|
|
6612
|
+
fireRate: 1.5,
|
|
6613
|
+
think: railgunThink
|
|
5711
6614
|
},
|
|
5712
6615
|
"weapon_bfg": {
|
|
5713
6616
|
type: "weapon",
|
|
@@ -5717,7 +6620,8 @@ var WEAPON_ITEMS = {
|
|
|
5717
6620
|
ammoType: AmmoType.Cells,
|
|
5718
6621
|
initialAmmo: 50,
|
|
5719
6622
|
pickupAmmo: 50,
|
|
5720
|
-
fireRate: 1
|
|
6623
|
+
fireRate: 1,
|
|
6624
|
+
think: bfgThink2
|
|
5721
6625
|
},
|
|
5722
6626
|
// Rogue Weapons
|
|
5723
6627
|
"weapon_boomer": {
|
|
@@ -5772,7 +6676,6 @@ var WEAPON_ITEMS = {
|
|
|
5772
6676
|
fireRate: 0.8
|
|
5773
6677
|
// Guessing fire rate, refine if needed
|
|
5774
6678
|
}
|
|
5775
|
-
// ... add others as we implement them
|
|
5776
6679
|
};
|
|
5777
6680
|
var HEALTH_ITEMS = {
|
|
5778
6681
|
"item_health_small": {
|
|
@@ -6032,6 +6935,7 @@ function createKeyPickupEntity(game, keyItem) {
|
|
|
6032
6935
|
}
|
|
6033
6936
|
|
|
6034
6937
|
// src/entities/items/ammo.ts
|
|
6938
|
+
init_ammo();
|
|
6035
6939
|
function createAmmoPickupEntity(game, itemId) {
|
|
6036
6940
|
const def = getAmmoItemDefinition(itemId);
|
|
6037
6941
|
const respawn = (self) => {
|
|
@@ -6086,6 +6990,7 @@ function createPowerArmorPickupEntity(game, item) {
|
|
|
6086
6990
|
}
|
|
6087
6991
|
|
|
6088
6992
|
// src/entities/items.ts
|
|
6993
|
+
init_ammo();
|
|
6089
6994
|
function registerItemSpawns(game, registry) {
|
|
6090
6995
|
for (const weaponItem of Object.values(WEAPON_ITEMS)) {
|
|
6091
6996
|
registry.register(weaponItem.id, (entity) => {
|
|
@@ -6124,6 +7029,70 @@ function registerItemSpawns(game, registry) {
|
|
|
6124
7029
|
}
|
|
6125
7030
|
}
|
|
6126
7031
|
|
|
7032
|
+
// src/entities/funcs.ts
|
|
7033
|
+
init_esm();
|
|
7034
|
+
|
|
7035
|
+
// src/entities/gibs.ts
|
|
7036
|
+
init_esm();
|
|
7037
|
+
var random3 = createRandomGenerator();
|
|
7038
|
+
var GIB_METALLIC = 1;
|
|
7039
|
+
var GIB_DEBRIS = 2;
|
|
7040
|
+
function spawnGib(sys, origin, damage, model, type) {
|
|
7041
|
+
const gib = sys.spawn();
|
|
7042
|
+
gib.classname = "gib";
|
|
7043
|
+
gib.origin = {
|
|
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
|
|
7047
|
+
};
|
|
7048
|
+
gib.velocity = {
|
|
7049
|
+
x: (random3.frandom() - 0.5) * 300,
|
|
7050
|
+
y: (random3.frandom() - 0.5) * 300,
|
|
7051
|
+
z: 200 + random3.frandom() * 100
|
|
7052
|
+
};
|
|
7053
|
+
gib.movetype = 9 /* Bounce */;
|
|
7054
|
+
gib.solid = 0 /* Not */;
|
|
7055
|
+
gib.clipmask = 1;
|
|
7056
|
+
gib.avelocity = {
|
|
7057
|
+
x: random3.crandom() * 600,
|
|
7058
|
+
y: random3.crandom() * 600,
|
|
7059
|
+
z: random3.crandom() * 600
|
|
7060
|
+
};
|
|
7061
|
+
const defaultModels = [
|
|
7062
|
+
"models/objects/gibs/bone/tris.md2",
|
|
7063
|
+
"models/objects/gibs/meat/tris.md2",
|
|
7064
|
+
"models/objects/gibs/sm_meat/tris.md2"
|
|
7065
|
+
];
|
|
7066
|
+
const modelName = model || defaultModels[Math.floor(random3.frandom() * defaultModels.length)];
|
|
7067
|
+
gib.modelindex = sys.modelIndex(modelName);
|
|
7068
|
+
gib.mins = { x: -2, y: -2, z: -2 };
|
|
7069
|
+
gib.maxs = { x: 2, y: 2, z: 2 };
|
|
7070
|
+
if (type && type & GIB_METALLIC) {
|
|
7071
|
+
}
|
|
7072
|
+
gib.think = (self) => {
|
|
7073
|
+
sys.free(self);
|
|
7074
|
+
};
|
|
7075
|
+
sys.scheduleThink(gib, sys.timeSeconds + 10 + random3.frandom() * 10);
|
|
7076
|
+
sys.finalizeSpawn(gib);
|
|
7077
|
+
return gib;
|
|
7078
|
+
}
|
|
7079
|
+
function throwGibs(sys, origin, damageOrDefs) {
|
|
7080
|
+
if (typeof damageOrDefs === "number") {
|
|
7081
|
+
const damage = damageOrDefs;
|
|
7082
|
+
const count = 4 + Math.floor(random3.frandom() * 4);
|
|
7083
|
+
for (let i = 0; i < count; i++) {
|
|
7084
|
+
spawnGib(sys, origin, damage);
|
|
7085
|
+
}
|
|
7086
|
+
} else {
|
|
7087
|
+
const defs = damageOrDefs;
|
|
7088
|
+
for (const def of defs) {
|
|
7089
|
+
for (let i = 0; i < def.count; i++) {
|
|
7090
|
+
spawnGib(sys, origin, 0, def.model, def.flags);
|
|
7091
|
+
}
|
|
7092
|
+
}
|
|
7093
|
+
}
|
|
7094
|
+
}
|
|
7095
|
+
|
|
6127
7096
|
// src/entities/funcs.ts
|
|
6128
7097
|
function move_calc(ent, dest, context, done) {
|
|
6129
7098
|
const dt = 0.1;
|
|
@@ -6768,15 +7737,99 @@ var func_water = (entity, context) => {
|
|
|
6768
7737
|
entity.solid = 3 /* Bsp */;
|
|
6769
7738
|
entity.movetype = 2 /* Push */;
|
|
6770
7739
|
};
|
|
7740
|
+
var SPAWNFLAGS_EXPLOSIVE_TRIGGER_SPAWN = 1;
|
|
7741
|
+
var SPAWNFLAGS_EXPLOSIVE_ANIMATED = 2;
|
|
7742
|
+
var SPAWNFLAGS_EXPLOSIVE_ANIMATED_FAST = 4;
|
|
7743
|
+
var SPAWNFLAGS_EXPLOSIVE_INACTIVE = 8;
|
|
7744
|
+
var SPAWNFLAGS_EXPLOSIVE_ALWAYS_SHOOTABLE = 16;
|
|
6771
7745
|
var func_explosive = (entity, context) => {
|
|
6772
|
-
|
|
7746
|
+
const sys = context.entities;
|
|
6773
7747
|
entity.movetype = 2 /* Push */;
|
|
6774
|
-
|
|
6775
|
-
|
|
6776
|
-
|
|
6777
|
-
|
|
6778
|
-
|
|
7748
|
+
const func_explosive_spawn = (self, other, activator) => {
|
|
7749
|
+
self.solid = 3 /* Bsp */;
|
|
7750
|
+
self.svflags &= ~1 /* NoClient */;
|
|
7751
|
+
self.use = void 0;
|
|
7752
|
+
sys.linkentity(self);
|
|
7753
|
+
sys.killBox(self);
|
|
7754
|
+
};
|
|
7755
|
+
const func_explosive_explode = (self, inflictor, attacker, damage) => {
|
|
7756
|
+
self.takedamage = false;
|
|
7757
|
+
const ent = self;
|
|
7758
|
+
if (ent.dmg) {
|
|
7759
|
+
const radius = ent.dmg + 40;
|
|
7760
|
+
const candidates = sys.findByRadius(ent.origin, radius);
|
|
7761
|
+
const damageables = candidates;
|
|
7762
|
+
T_RadiusDamage(damageables, ent, attacker, ent.dmg, null, radius, 0 /* NONE */, 26 /* EXPLOSIVE */, sys.timeSeconds, {}, sys.multicast.bind(sys));
|
|
7763
|
+
}
|
|
7764
|
+
const mass = ent.mass || 75;
|
|
7765
|
+
if (mass >= 100) {
|
|
7766
|
+
let count2 = Math.floor(mass / 100);
|
|
7767
|
+
if (count2 > 8) count2 = 8;
|
|
7768
|
+
throwGibs(sys, ent.origin, [
|
|
7769
|
+
{ count: count2, model: "models/objects/debris1/tris.md2", flags: GIB_METALLIC | GIB_DEBRIS }
|
|
7770
|
+
]);
|
|
7771
|
+
}
|
|
7772
|
+
let count = Math.floor(mass / 25);
|
|
7773
|
+
if (count > 16) count = 16;
|
|
7774
|
+
throwGibs(sys, ent.origin, [
|
|
7775
|
+
{ count, model: "models/objects/debris2/tris.md2", flags: GIB_METALLIC | GIB_DEBRIS }
|
|
7776
|
+
]);
|
|
7777
|
+
sys.useTargets(ent, attacker);
|
|
7778
|
+
if (ent.noise_index) {
|
|
7779
|
+
sys.sound(ent, 0, ent.noise_index, 1, 1, 0);
|
|
7780
|
+
}
|
|
7781
|
+
if (ent.dmg) {
|
|
7782
|
+
sys.free(ent);
|
|
7783
|
+
} else {
|
|
7784
|
+
sys.free(ent);
|
|
7785
|
+
}
|
|
7786
|
+
};
|
|
7787
|
+
const func_explosive_use = (self, other, activator) => {
|
|
7788
|
+
func_explosive_explode(self, self, activator || null, self.health);
|
|
6779
7789
|
};
|
|
7790
|
+
const func_explosive_activate = (self, other, activator) => {
|
|
7791
|
+
let approved = false;
|
|
7792
|
+
if (other && other.target && self.targetname && other.target === self.targetname) {
|
|
7793
|
+
approved = true;
|
|
7794
|
+
}
|
|
7795
|
+
if (!approved && activator && activator.target && self.targetname && activator.target === self.targetname) {
|
|
7796
|
+
approved = true;
|
|
7797
|
+
}
|
|
7798
|
+
if (!approved) return;
|
|
7799
|
+
self.use = func_explosive_use;
|
|
7800
|
+
if (!self.health) self.health = 100;
|
|
7801
|
+
self.die = func_explosive_explode;
|
|
7802
|
+
self.takedamage = true;
|
|
7803
|
+
};
|
|
7804
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_TRIGGER_SPAWN) {
|
|
7805
|
+
entity.svflags |= 1 /* NoClient */;
|
|
7806
|
+
entity.solid = 0 /* Not */;
|
|
7807
|
+
entity.use = func_explosive_spawn;
|
|
7808
|
+
} else if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_INACTIVE) {
|
|
7809
|
+
entity.solid = 3 /* Bsp */;
|
|
7810
|
+
if (entity.targetname) {
|
|
7811
|
+
entity.use = func_explosive_activate;
|
|
7812
|
+
}
|
|
7813
|
+
} else {
|
|
7814
|
+
entity.solid = 3 /* Bsp */;
|
|
7815
|
+
if (entity.targetname) {
|
|
7816
|
+
entity.use = func_explosive_use;
|
|
7817
|
+
}
|
|
7818
|
+
}
|
|
7819
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_ANIMATED) {
|
|
7820
|
+
entity.effects |= EF_ANIM_ALL;
|
|
7821
|
+
}
|
|
7822
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_ANIMATED_FAST) {
|
|
7823
|
+
entity.effects |= EF_ANIM_ALLFAST;
|
|
7824
|
+
}
|
|
7825
|
+
if (entity.spawnflags & SPAWNFLAGS_EXPLOSIVE_ALWAYS_SHOOTABLE || entity.use !== func_explosive_use && entity.use !== func_explosive_activate) {
|
|
7826
|
+
if (!entity.health) entity.health = 100;
|
|
7827
|
+
entity.die = func_explosive_explode;
|
|
7828
|
+
entity.takedamage = true;
|
|
7829
|
+
}
|
|
7830
|
+
if (entity.sounds === 1) {
|
|
7831
|
+
entity.noise_index = "world/brkglas.wav";
|
|
7832
|
+
}
|
|
6780
7833
|
};
|
|
6781
7834
|
var func_killbox = (entity, context) => {
|
|
6782
7835
|
entity.solid = 0 /* Not */;
|
|
@@ -6873,6 +7926,9 @@ function registerLightSpawns(registry) {
|
|
|
6873
7926
|
});
|
|
6874
7927
|
}
|
|
6875
7928
|
|
|
7929
|
+
// src/entities/monsters/berserk.ts
|
|
7930
|
+
init_esm();
|
|
7931
|
+
|
|
6876
7932
|
// src/ai/monster.ts
|
|
6877
7933
|
function M_MoveFrame(self, context) {
|
|
6878
7934
|
const move = self.monsterinfo.current_move;
|
|
@@ -6912,64 +7968,19 @@ function monster_think(self, context) {
|
|
|
6912
7968
|
self.nextthink = context.timeSeconds + 0.1;
|
|
6913
7969
|
}
|
|
6914
7970
|
|
|
6915
|
-
// src/entities/gibs.ts
|
|
6916
|
-
var random = createRandomGenerator();
|
|
6917
|
-
function spawnGib(sys, origin, damage) {
|
|
6918
|
-
const gib = sys.spawn();
|
|
6919
|
-
gib.classname = "gib";
|
|
6920
|
-
gib.origin = {
|
|
6921
|
-
x: origin.x + (random.frandom() - 0.5) * 20,
|
|
6922
|
-
y: origin.y + (random.frandom() - 0.5) * 20,
|
|
6923
|
-
z: origin.z + (random.frandom() - 0.5) * 20
|
|
6924
|
-
};
|
|
6925
|
-
gib.velocity = {
|
|
6926
|
-
x: (random.frandom() - 0.5) * 300,
|
|
6927
|
-
y: (random.frandom() - 0.5) * 300,
|
|
6928
|
-
z: 200 + random.frandom() * 100
|
|
6929
|
-
};
|
|
6930
|
-
gib.movetype = 9 /* Bounce */;
|
|
6931
|
-
gib.solid = 0 /* Not */;
|
|
6932
|
-
gib.clipmask = 1;
|
|
6933
|
-
gib.avelocity = {
|
|
6934
|
-
x: random.crandom() * 600,
|
|
6935
|
-
y: random.crandom() * 600,
|
|
6936
|
-
z: random.crandom() * 600
|
|
6937
|
-
};
|
|
6938
|
-
const models = [
|
|
6939
|
-
"models/objects/gibs/bone/tris.md2",
|
|
6940
|
-
"models/objects/gibs/meat/tris.md2",
|
|
6941
|
-
"models/objects/gibs/sm_meat/tris.md2"
|
|
6942
|
-
];
|
|
6943
|
-
const modelName = models[Math.floor(random.frandom() * models.length)];
|
|
6944
|
-
gib.modelindex = sys.modelIndex(modelName);
|
|
6945
|
-
gib.mins = { x: -2, y: -2, z: -2 };
|
|
6946
|
-
gib.maxs = { x: 2, y: 2, z: 2 };
|
|
6947
|
-
gib.think = (self) => {
|
|
6948
|
-
sys.free(self);
|
|
6949
|
-
};
|
|
6950
|
-
sys.scheduleThink(gib, sys.timeSeconds + 10 + random.frandom() * 10);
|
|
6951
|
-
sys.finalizeSpawn(gib);
|
|
6952
|
-
}
|
|
6953
|
-
function throwGibs(sys, origin, damage) {
|
|
6954
|
-
const count = 4 + Math.floor(random.frandom() * 4);
|
|
6955
|
-
for (let i = 0; i < count; i++) {
|
|
6956
|
-
spawnGib(sys, origin, damage);
|
|
6957
|
-
}
|
|
6958
|
-
}
|
|
6959
|
-
|
|
6960
7971
|
// src/entities/monsters/berserk.ts
|
|
6961
7972
|
var MONSTER_TICK = 0.1;
|
|
6962
7973
|
var MELEE_DISTANCE = 80;
|
|
6963
7974
|
var SPAWNFLAG_BERSERK_NOJUMPING = 16;
|
|
6964
|
-
var
|
|
7975
|
+
var random4 = createRandomGenerator();
|
|
6965
7976
|
function frandom() {
|
|
6966
|
-
return
|
|
7977
|
+
return random4.frandom();
|
|
6967
7978
|
}
|
|
6968
7979
|
function brandom() {
|
|
6969
|
-
return
|
|
7980
|
+
return random4.frandom() > 0.5;
|
|
6970
7981
|
}
|
|
6971
7982
|
function irandom(min, max) {
|
|
6972
|
-
return Math.floor(
|
|
7983
|
+
return Math.floor(random4.frandom() * (max - min + 1) + min);
|
|
6973
7984
|
}
|
|
6974
7985
|
function monster_ai_stand(self, dist, context) {
|
|
6975
7986
|
ai_stand(self, MONSTER_TICK, context);
|
|
@@ -7465,6 +8476,7 @@ function registerBerserkSpawns(registry) {
|
|
|
7465
8476
|
}
|
|
7466
8477
|
|
|
7467
8478
|
// src/entities/monsters/attack.ts
|
|
8479
|
+
init_esm();
|
|
7468
8480
|
function crandom() {
|
|
7469
8481
|
return 2 * Math.random() - 1;
|
|
7470
8482
|
}
|
|
@@ -7655,6 +8667,7 @@ function monster_fire_dabeam(self, damage, secondary, update_func, context) {
|
|
|
7655
8667
|
}
|
|
7656
8668
|
|
|
7657
8669
|
// src/entities/monsters/boss2.ts
|
|
8670
|
+
init_esm();
|
|
7658
8671
|
var MONSTER_TICK2 = 0.1;
|
|
7659
8672
|
var BOSS2_ROCKET_OFFSET_1 = { x: 0, y: 30, z: -15 };
|
|
7660
8673
|
var BOSS2_ROCKET_OFFSET_2 = { x: 0, y: 15, z: 0 };
|
|
@@ -7842,9 +8855,10 @@ function registerBoss2Spawns(registry) {
|
|
|
7842
8855
|
}
|
|
7843
8856
|
|
|
7844
8857
|
// src/entities/monsters/brain.ts
|
|
8858
|
+
init_esm();
|
|
7845
8859
|
var MONSTER_TICK3 = 0.1;
|
|
7846
8860
|
var MELEE_DISTANCE2 = 80;
|
|
7847
|
-
var
|
|
8861
|
+
var random5 = Math.random;
|
|
7848
8862
|
function monster_ai_stand3(self, dist, context) {
|
|
7849
8863
|
ai_stand(self, MONSTER_TICK3, context);
|
|
7850
8864
|
}
|
|
@@ -7897,7 +8911,7 @@ function brain_swing_right(self, context) {
|
|
|
7897
8911
|
}
|
|
7898
8912
|
function brain_hit_right(self, context) {
|
|
7899
8913
|
const aim = { x: MELEE_DISTANCE2, y: self.maxs.x, z: 8 };
|
|
7900
|
-
if (monster_fire_hit(self, aim, 15 + Math.floor(
|
|
8914
|
+
if (monster_fire_hit(self, aim, 15 + Math.floor(random5() * 5), 40, context)) {
|
|
7901
8915
|
context.engine.sound?.(self, 0, "brain/melee3.wav", 1, 1, 0);
|
|
7902
8916
|
} else {
|
|
7903
8917
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -7908,7 +8922,7 @@ function brain_swing_left(self, context) {
|
|
|
7908
8922
|
}
|
|
7909
8923
|
function brain_hit_left(self, context) {
|
|
7910
8924
|
const aim = { x: MELEE_DISTANCE2, y: self.mins.x, z: 8 };
|
|
7911
|
-
if (monster_fire_hit(self, aim, 15 + Math.floor(
|
|
8925
|
+
if (monster_fire_hit(self, aim, 15 + Math.floor(random5() * 5), 40, context)) {
|
|
7912
8926
|
context.engine.sound?.(self, 0, "brain/melee3.wav", 1, 1, 0);
|
|
7913
8927
|
} else {
|
|
7914
8928
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -7921,7 +8935,7 @@ function brain_chest_open(self, context) {
|
|
|
7921
8935
|
}
|
|
7922
8936
|
function brain_tentacle_attack(self, context) {
|
|
7923
8937
|
const aim = { x: MELEE_DISTANCE2, y: 0, z: 8 };
|
|
7924
|
-
if (monster_fire_hit(self, aim, 10 + Math.floor(
|
|
8938
|
+
if (monster_fire_hit(self, aim, 10 + Math.floor(random5() * 5), -600, context)) {
|
|
7925
8939
|
self.count = 1;
|
|
7926
8940
|
} else {
|
|
7927
8941
|
self.monsterinfo.melee_debounce_time = context.timeSeconds + 3;
|
|
@@ -7936,7 +8950,7 @@ function brain_chest_closed(self) {
|
|
|
7936
8950
|
}
|
|
7937
8951
|
}
|
|
7938
8952
|
function brain_melee(self) {
|
|
7939
|
-
if (
|
|
8953
|
+
if (random5() <= 0.5) {
|
|
7940
8954
|
self.monsterinfo.current_move = attack1_move;
|
|
7941
8955
|
} else {
|
|
7942
8956
|
self.monsterinfo.current_move = attack2_move;
|
|
@@ -8019,7 +9033,7 @@ function brain_laserbeam(self, context) {
|
|
|
8019
9033
|
monster_fire_dabeam(self, 1, true, brain_left_eye_laser_update, context);
|
|
8020
9034
|
}
|
|
8021
9035
|
function brain_laserbeam_reattack(self) {
|
|
8022
|
-
if (
|
|
9036
|
+
if (random5() < 0.5) {
|
|
8023
9037
|
if (self.enemy && self.enemy.health > 0) {
|
|
8024
9038
|
self.frame = 0;
|
|
8025
9039
|
}
|
|
@@ -8028,7 +9042,7 @@ function brain_laserbeam_reattack(self) {
|
|
|
8028
9042
|
function brain_attack(self, context) {
|
|
8029
9043
|
const r = rangeTo(self, self.enemy);
|
|
8030
9044
|
if (r <= RANGE_NEAR) {
|
|
8031
|
-
if (
|
|
9045
|
+
if (random5() < 0.5) {
|
|
8032
9046
|
self.monsterinfo.current_move = attack3_move;
|
|
8033
9047
|
} else {
|
|
8034
9048
|
self.monsterinfo.current_move = attack4_move;
|
|
@@ -8048,7 +9062,7 @@ function brain_duck_up(self) {
|
|
|
8048
9062
|
self.monsterinfo.aiflags &= ~16;
|
|
8049
9063
|
}
|
|
8050
9064
|
function brain_dodge(self, attacker, eta) {
|
|
8051
|
-
if (
|
|
9065
|
+
if (random5() > 0.25) return;
|
|
8052
9066
|
if (!self.enemy) self.enemy = attacker;
|
|
8053
9067
|
self.monsterinfo.pausetime = self.timestamp + eta + 0.5;
|
|
8054
9068
|
self.monsterinfo.current_move = duck_move;
|
|
@@ -8304,7 +9318,7 @@ function brain_pain(self, other, kick, damage, context) {
|
|
|
8304
9318
|
return;
|
|
8305
9319
|
}
|
|
8306
9320
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8307
|
-
const r =
|
|
9321
|
+
const r = random5();
|
|
8308
9322
|
if (r < 0.33) {
|
|
8309
9323
|
context.engine.sound?.(self, 0, "brain/brnpain1.wav", 1, 1, 0);
|
|
8310
9324
|
self.monsterinfo.current_move = pain1_move;
|
|
@@ -8328,7 +9342,7 @@ function brain_die(self, inflictor, attacker, damage, point, context) {
|
|
|
8328
9342
|
context.engine.sound?.(self, 0, "brain/brndeth1.wav", 1, 1, 0);
|
|
8329
9343
|
self.deadflag = 2 /* Dead */;
|
|
8330
9344
|
self.takedamage = true;
|
|
8331
|
-
if (
|
|
9345
|
+
if (random5() <= 0.5) {
|
|
8332
9346
|
self.monsterinfo.current_move = death1_move;
|
|
8333
9347
|
} else {
|
|
8334
9348
|
self.monsterinfo.current_move = death2_move;
|
|
@@ -8365,7 +9379,7 @@ function SP_monster_brain(self, context) {
|
|
|
8365
9379
|
context.entities.sound?.(s, 2, "brain/brnsght1.wav", 1, 1, 0);
|
|
8366
9380
|
};
|
|
8367
9381
|
self.monsterinfo.search = (s) => {
|
|
8368
|
-
if (
|
|
9382
|
+
if (random5() < 0.5) {
|
|
8369
9383
|
context.entities.sound?.(s, 2, "brain/brnidle2.wav", 1, 1, 0);
|
|
8370
9384
|
} else {
|
|
8371
9385
|
context.entities.sound?.(s, 2, "brain/brnsrch1.wav", 1, 1, 0);
|
|
@@ -8383,9 +9397,10 @@ function registerBrainSpawns(registry) {
|
|
|
8383
9397
|
}
|
|
8384
9398
|
|
|
8385
9399
|
// src/entities/monsters/chick.ts
|
|
9400
|
+
init_esm();
|
|
8386
9401
|
var MONSTER_TICK4 = 0.1;
|
|
8387
9402
|
var MELEE_DISTANCE3 = 80;
|
|
8388
|
-
var
|
|
9403
|
+
var random6 = Math.random;
|
|
8389
9404
|
function monster_ai_stand4(self, dist, context) {
|
|
8390
9405
|
ai_stand(self, MONSTER_TICK4, context);
|
|
8391
9406
|
}
|
|
@@ -8433,12 +9448,12 @@ function chick_run(self) {
|
|
|
8433
9448
|
function chick_fidget(self) {
|
|
8434
9449
|
if (self.monsterinfo.aiflags & 4) return;
|
|
8435
9450
|
if (self.enemy) return;
|
|
8436
|
-
if (
|
|
9451
|
+
if (random6() <= 0.3) {
|
|
8437
9452
|
self.monsterinfo.current_move = fidget_move;
|
|
8438
9453
|
}
|
|
8439
9454
|
}
|
|
8440
9455
|
function ChickMoan(self, context) {
|
|
8441
|
-
if (
|
|
9456
|
+
if (random6() < 0.5) {
|
|
8442
9457
|
context.engine.sound?.(self, 2, "chick/chkidle1.wav", 1, 0, 0);
|
|
8443
9458
|
} else {
|
|
8444
9459
|
context.engine.sound?.(self, 2, "chick/chkidle2.wav", 1, 0, 0);
|
|
@@ -8447,7 +9462,7 @@ function ChickMoan(self, context) {
|
|
|
8447
9462
|
function chick_slash(self, context) {
|
|
8448
9463
|
const aim = { x: MELEE_DISTANCE3, y: self.mins.x, z: 10 };
|
|
8449
9464
|
context.engine.sound?.(self, 0, "chick/chkatck3.wav", 1, 1, 0);
|
|
8450
|
-
monster_fire_hit(self, aim, 10 + Math.floor(
|
|
9465
|
+
monster_fire_hit(self, aim, 10 + Math.floor(random6() * 6), 100, context);
|
|
8451
9466
|
}
|
|
8452
9467
|
function chick_rocket(self, context) {
|
|
8453
9468
|
const { forward, right } = angleVectors(self.angles);
|
|
@@ -8468,7 +9483,7 @@ function chick_rocket(self, context) {
|
|
|
8468
9483
|
}
|
|
8469
9484
|
let dir = subtractVec3(target, finalStart);
|
|
8470
9485
|
if (!blindfire && self.enemy) {
|
|
8471
|
-
if (
|
|
9486
|
+
if (random6() < 0.33 || finalStart.z < self.enemy.absmin.z) {
|
|
8472
9487
|
const tempDir = { ...dir, z: dir.z + self.enemy.viewheight };
|
|
8473
9488
|
dir = tempDir;
|
|
8474
9489
|
} else {
|
|
@@ -8503,7 +9518,7 @@ function chick_rerocket(self) {
|
|
|
8503
9518
|
return;
|
|
8504
9519
|
}
|
|
8505
9520
|
if (self.enemy && self.enemy.health > 0) {
|
|
8506
|
-
if (
|
|
9521
|
+
if (random6() <= 0.6) {
|
|
8507
9522
|
self.monsterinfo.current_move = attack1_move2;
|
|
8508
9523
|
return;
|
|
8509
9524
|
}
|
|
@@ -8512,7 +9527,7 @@ function chick_rerocket(self) {
|
|
|
8512
9527
|
}
|
|
8513
9528
|
function chick_reslash(self) {
|
|
8514
9529
|
if (self.enemy && self.enemy.health > 0) {
|
|
8515
|
-
if (
|
|
9530
|
+
if (random6() <= 0.9) {
|
|
8516
9531
|
self.monsterinfo.current_move = slash_move;
|
|
8517
9532
|
return;
|
|
8518
9533
|
}
|
|
@@ -8590,7 +9605,7 @@ function chick_pain(self, other, kick, damage, context) {
|
|
|
8590
9605
|
}
|
|
8591
9606
|
if (self.timestamp < (self.pain_debounce_time || 0)) return;
|
|
8592
9607
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8593
|
-
const r =
|
|
9608
|
+
const r = random6();
|
|
8594
9609
|
if (r < 0.33) context.engine.sound?.(self, 0, "chick/chkpain1.wav", 1, 1, 0);
|
|
8595
9610
|
else if (r < 0.66) context.engine.sound?.(self, 0, "chick/chkpain2.wav", 1, 1, 0);
|
|
8596
9611
|
else context.engine.sound?.(self, 0, "chick/chkpain3.wav", 1, 1, 0);
|
|
@@ -8619,7 +9634,7 @@ function chick_die(self, inflictor, attacker, damage, point, context) {
|
|
|
8619
9634
|
if (self.deadflag === 2 /* Dead */) return;
|
|
8620
9635
|
self.deadflag = 2 /* Dead */;
|
|
8621
9636
|
self.takedamage = true;
|
|
8622
|
-
if (
|
|
9637
|
+
if (random6() <= 0.5) {
|
|
8623
9638
|
self.monsterinfo.current_move = death1_move2;
|
|
8624
9639
|
context.engine.sound?.(self, 0, "chick/chkdeth1.wav", 1, 1, 0);
|
|
8625
9640
|
} else {
|
|
@@ -8739,7 +9754,7 @@ function registerChickSpawns(registry) {
|
|
|
8739
9754
|
var MONSTER_TICK5 = 0.1;
|
|
8740
9755
|
var MELEE_DISTANCE4 = 80;
|
|
8741
9756
|
var FLIPPER_RUN_SPEED = 24;
|
|
8742
|
-
var
|
|
9757
|
+
var random7 = Math.random;
|
|
8743
9758
|
function monster_ai_stand5(self, dist, context) {
|
|
8744
9759
|
ai_stand(self, MONSTER_TICK5, context);
|
|
8745
9760
|
}
|
|
@@ -8856,7 +9871,7 @@ function flipper_pain(self, other, kick, damage, context) {
|
|
|
8856
9871
|
return;
|
|
8857
9872
|
}
|
|
8858
9873
|
self.pain_debounce_time = self.timestamp + 3;
|
|
8859
|
-
if (
|
|
9874
|
+
if (random7() < 0.5) {
|
|
8860
9875
|
context.engine.sound?.(self, 0, "flipper/flppain1.wav", 1, 1, 0);
|
|
8861
9876
|
self.monsterinfo.current_move = pain1_move3;
|
|
8862
9877
|
} else {
|
|
@@ -8964,6 +9979,7 @@ function registerFlipperSpawns(registry) {
|
|
|
8964
9979
|
}
|
|
8965
9980
|
|
|
8966
9981
|
// src/entities/monsters/floater.ts
|
|
9982
|
+
init_esm();
|
|
8967
9983
|
var MONSTER_TICK6 = 0.1;
|
|
8968
9984
|
function monster_ai_stand6(self, dist, context) {
|
|
8969
9985
|
ai_stand(self, MONSTER_TICK6, context);
|
|
@@ -9121,6 +10137,7 @@ function registerFloaterSpawns(registry) {
|
|
|
9121
10137
|
}
|
|
9122
10138
|
|
|
9123
10139
|
// src/entities/monsters/flyer.ts
|
|
10140
|
+
init_esm();
|
|
9124
10141
|
var MONSTER_TICK7 = 0.1;
|
|
9125
10142
|
function monster_ai_stand7(self, dist, context) {
|
|
9126
10143
|
ai_stand(self, MONSTER_TICK7, context);
|
|
@@ -9299,6 +10316,7 @@ function registerFlyerSpawns(registry) {
|
|
|
9299
10316
|
}
|
|
9300
10317
|
|
|
9301
10318
|
// src/entities/monsters/gladiator.ts
|
|
10319
|
+
init_esm();
|
|
9302
10320
|
var MONSTER_TICK8 = 0.1;
|
|
9303
10321
|
function monster_ai_stand8(self, dist, context) {
|
|
9304
10322
|
ai_stand(self, MONSTER_TICK8, context);
|
|
@@ -9498,6 +10516,7 @@ function registerGladiatorSpawns(registry) {
|
|
|
9498
10516
|
}
|
|
9499
10517
|
|
|
9500
10518
|
// src/entities/monsters/gunner.ts
|
|
10519
|
+
init_esm();
|
|
9501
10520
|
var MONSTER_TICK9 = 0.1;
|
|
9502
10521
|
function monster_ai_stand9(self, dist, context) {
|
|
9503
10522
|
ai_stand(self, MONSTER_TICK9, context);
|
|
@@ -9920,6 +10939,7 @@ function registerGunnerSpawns(registry) {
|
|
|
9920
10939
|
}
|
|
9921
10940
|
|
|
9922
10941
|
// src/entities/monsters/hover.ts
|
|
10942
|
+
init_esm();
|
|
9923
10943
|
var MONSTER_TICK10 = 0.1;
|
|
9924
10944
|
function monster_ai_stand10(self, dist, context) {
|
|
9925
10945
|
ai_stand(self, MONSTER_TICK10, context);
|
|
@@ -10077,6 +11097,7 @@ function registerHoverSpawns(registry) {
|
|
|
10077
11097
|
}
|
|
10078
11098
|
|
|
10079
11099
|
// src/entities/monsters/icarus.ts
|
|
11100
|
+
init_esm();
|
|
10080
11101
|
var MONSTER_TICK11 = 0.1;
|
|
10081
11102
|
function monster_ai_stand11(self, dist, context) {
|
|
10082
11103
|
ai_stand(self, MONSTER_TICK11, context);
|
|
@@ -10234,6 +11255,7 @@ function registerIcarusSpawns(registry) {
|
|
|
10234
11255
|
}
|
|
10235
11256
|
|
|
10236
11257
|
// src/entities/monsters/infantry.ts
|
|
11258
|
+
init_esm();
|
|
10237
11259
|
var MONSTER_TICK12 = 0.1;
|
|
10238
11260
|
function monster_ai_stand12(self, dist, context) {
|
|
10239
11261
|
ai_stand(self, MONSTER_TICK12, context);
|
|
@@ -10434,6 +11456,7 @@ function registerInfantrySpawns(registry) {
|
|
|
10434
11456
|
}
|
|
10435
11457
|
|
|
10436
11458
|
// src/entities/monsters/makron.ts
|
|
11459
|
+
init_esm();
|
|
10437
11460
|
var MONSTER_TICK13 = 0.1;
|
|
10438
11461
|
var MAKRON_BFG_OFFSET = { x: 30, y: 28, z: 24 };
|
|
10439
11462
|
var MAKRON_BLASTER_OFFSET_1 = { x: 26, y: 16, z: 24 };
|
|
@@ -10679,6 +11702,7 @@ function registerMakronSpawns(registry) {
|
|
|
10679
11702
|
}
|
|
10680
11703
|
|
|
10681
11704
|
// src/entities/monsters/jorg.ts
|
|
11705
|
+
init_esm();
|
|
10682
11706
|
var MONSTER_TICK14 = 0.1;
|
|
10683
11707
|
var JORG_MACHINEGUN_R1_OFFSET = { x: 40, y: -20, z: 20 };
|
|
10684
11708
|
var JORG_MACHINEGUN_L1_OFFSET = { x: 40, y: 20, z: 20 };
|
|
@@ -10902,7 +11926,7 @@ var SPAWNFLAG_INSANE_STAND_GROUND = 16;
|
|
|
10902
11926
|
var SPAWNFLAG_INSANE_ALWAYS_STAND = 32;
|
|
10903
11927
|
var SPAWNFLAG_INSANE_QUIET = 64;
|
|
10904
11928
|
var FRAME_stand1 = 0;
|
|
10905
|
-
var
|
|
11929
|
+
var FRAME_stand402 = 39;
|
|
10906
11930
|
var FRAME_stand41 = 40;
|
|
10907
11931
|
var FRAME_stand59 = 58;
|
|
10908
11932
|
var FRAME_stand60 = 59;
|
|
@@ -11164,7 +12188,7 @@ var frames_uptodown = [
|
|
|
11164
12188
|
];
|
|
11165
12189
|
insane_move_uptodown = {
|
|
11166
12190
|
firstframe: FRAME_stand1,
|
|
11167
|
-
lastframe:
|
|
12191
|
+
lastframe: FRAME_stand402,
|
|
11168
12192
|
frames: frames_uptodown,
|
|
11169
12193
|
endfunc: insane_onground
|
|
11170
12194
|
};
|
|
@@ -11529,7 +12553,7 @@ function SP_misc_insane(self, context) {
|
|
|
11529
12553
|
return;
|
|
11530
12554
|
}
|
|
11531
12555
|
const frame = self2.frame;
|
|
11532
|
-
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) {
|
|
11533
12557
|
self2.monsterinfo.current_move = insane_move_crawl_pain;
|
|
11534
12558
|
} else {
|
|
11535
12559
|
self2.monsterinfo.current_move = insane_move_stand_pain;
|
|
@@ -11588,6 +12612,8 @@ function registerInsaneSpawns(registry) {
|
|
|
11588
12612
|
}
|
|
11589
12613
|
|
|
11590
12614
|
// src/entities/monsters/actor.ts
|
|
12615
|
+
init_esm();
|
|
12616
|
+
init_esm();
|
|
11591
12617
|
var MONSTER_TICK16 = 0.1;
|
|
11592
12618
|
var MZ2_ACTOR_MACHINEGUN_1 = 0;
|
|
11593
12619
|
var actor_names = [
|
|
@@ -11606,19 +12632,19 @@ var FRAME_walk01 = 40;
|
|
|
11606
12632
|
var FRAME_walk08 = 47;
|
|
11607
12633
|
var FRAME_run02 = 48;
|
|
11608
12634
|
var FRAME_run07 = 53;
|
|
11609
|
-
var
|
|
12635
|
+
var FRAME_pain1012 = 54;
|
|
11610
12636
|
var FRAME_pain103 = 56;
|
|
11611
|
-
var
|
|
12637
|
+
var FRAME_pain2012 = 57;
|
|
11612
12638
|
var FRAME_pain203 = 59;
|
|
11613
|
-
var
|
|
12639
|
+
var FRAME_pain3012 = 60;
|
|
11614
12640
|
var FRAME_pain303 = 62;
|
|
11615
12641
|
var FRAME_flip01 = 63;
|
|
11616
12642
|
var FRAME_flip14 = 76;
|
|
11617
12643
|
var FRAME_taunt01 = 77;
|
|
11618
12644
|
var FRAME_taunt17 = 93;
|
|
11619
|
-
var
|
|
12645
|
+
var FRAME_death1012 = 94;
|
|
11620
12646
|
var FRAME_death107 = 100;
|
|
11621
|
-
var
|
|
12647
|
+
var FRAME_death2012 = 101;
|
|
11622
12648
|
var FRAME_death213 = 113;
|
|
11623
12649
|
var FRAME_attak01 = 114;
|
|
11624
12650
|
var FRAME_attak04 = 117;
|
|
@@ -11674,8 +12700,8 @@ function actor_pain(self, other, kick, damage) {
|
|
|
11674
12700
|
if (context.timeSeconds < self.pain_debounce_time)
|
|
11675
12701
|
return;
|
|
11676
12702
|
self.pain_debounce_time = context.timeSeconds + 3;
|
|
11677
|
-
const
|
|
11678
|
-
if (other && other.client &&
|
|
12703
|
+
const random13 = Math.random();
|
|
12704
|
+
if (other && other.client && random13 < 0.4) {
|
|
11679
12705
|
const v = subtractVec3(other.origin, self.origin);
|
|
11680
12706
|
self.ideal_yaw = vectorToYaw(v);
|
|
11681
12707
|
if (Math.random() < 0.5)
|
|
@@ -11868,7 +12894,7 @@ var frames_pain1 = [
|
|
|
11868
12894
|
m2(ai_move, 1)
|
|
11869
12895
|
];
|
|
11870
12896
|
actor_move_pain1 = {
|
|
11871
|
-
firstframe:
|
|
12897
|
+
firstframe: FRAME_pain1012,
|
|
11872
12898
|
lastframe: FRAME_pain103,
|
|
11873
12899
|
frames: frames_pain1,
|
|
11874
12900
|
endfunc: actor_run
|
|
@@ -11879,7 +12905,7 @@ var frames_pain2 = [
|
|
|
11879
12905
|
m2(ai_move)
|
|
11880
12906
|
];
|
|
11881
12907
|
actor_move_pain2 = {
|
|
11882
|
-
firstframe:
|
|
12908
|
+
firstframe: FRAME_pain2012,
|
|
11883
12909
|
lastframe: FRAME_pain203,
|
|
11884
12910
|
frames: frames_pain2,
|
|
11885
12911
|
endfunc: actor_run
|
|
@@ -11890,7 +12916,7 @@ var frames_pain3 = [
|
|
|
11890
12916
|
m2(ai_move, 0)
|
|
11891
12917
|
];
|
|
11892
12918
|
actor_move_pain3 = {
|
|
11893
|
-
firstframe:
|
|
12919
|
+
firstframe: FRAME_pain3012,
|
|
11894
12920
|
lastframe: FRAME_pain303,
|
|
11895
12921
|
frames: frames_pain3,
|
|
11896
12922
|
endfunc: actor_run
|
|
@@ -11952,7 +12978,7 @@ var frames_death1 = [
|
|
|
11952
12978
|
m2(ai_move, 1)
|
|
11953
12979
|
];
|
|
11954
12980
|
actor_move_death1 = {
|
|
11955
|
-
firstframe:
|
|
12981
|
+
firstframe: FRAME_death1012,
|
|
11956
12982
|
lastframe: FRAME_death107,
|
|
11957
12983
|
frames: frames_death1,
|
|
11958
12984
|
endfunc: actor_dead
|
|
@@ -11973,7 +12999,7 @@ var frames_death2 = [
|
|
|
11973
12999
|
m2(ai_move)
|
|
11974
13000
|
];
|
|
11975
13001
|
actor_move_death2 = {
|
|
11976
|
-
firstframe:
|
|
13002
|
+
firstframe: FRAME_death2012,
|
|
11977
13003
|
lastframe: FRAME_death213,
|
|
11978
13004
|
frames: frames_death2,
|
|
11979
13005
|
endfunc: actor_dead
|
|
@@ -12128,6 +13154,8 @@ function registerActorSpawns(registry) {
|
|
|
12128
13154
|
}
|
|
12129
13155
|
|
|
12130
13156
|
// src/entities/monsters/medic.ts
|
|
13157
|
+
init_esm();
|
|
13158
|
+
init_esm();
|
|
12131
13159
|
var MONSTER_TICK17 = 0.1;
|
|
12132
13160
|
function monster_ai_stand15(self, dist, context) {
|
|
12133
13161
|
if (self.classname === "monster_medic") {
|
|
@@ -12504,8 +13532,9 @@ function registerMedicSpawns(registry) {
|
|
|
12504
13532
|
}
|
|
12505
13533
|
|
|
12506
13534
|
// src/entities/monsters/mutant.ts
|
|
13535
|
+
init_esm();
|
|
12507
13536
|
var MONSTER_TICK18 = 0.1;
|
|
12508
|
-
var
|
|
13537
|
+
var random8 = () => Math.random();
|
|
12509
13538
|
function monster_ai_stand16(self, dist, context) {
|
|
12510
13539
|
ai_stand(self, MONSTER_TICK18, context);
|
|
12511
13540
|
}
|
|
@@ -12618,11 +13647,11 @@ function mutant_check_attack(self, context) {
|
|
|
12618
13647
|
if (self.enemy && self.enemy.health > 0) {
|
|
12619
13648
|
const diff = subtractVec3(self.enemy.origin, self.origin);
|
|
12620
13649
|
const dist = lengthVec3(diff);
|
|
12621
|
-
if (dist < 128 &&
|
|
13650
|
+
if (dist < 128 && random8() < 0.5) {
|
|
12622
13651
|
self.monsterinfo.current_move = attack_move7;
|
|
12623
13652
|
return true;
|
|
12624
13653
|
}
|
|
12625
|
-
if (dist >= 128 && dist < 512 &&
|
|
13654
|
+
if (dist >= 128 && dist < 512 && random8() < 0.3) {
|
|
12626
13655
|
self.monsterinfo.current_move = jump_move2;
|
|
12627
13656
|
return true;
|
|
12628
13657
|
}
|
|
@@ -12635,10 +13664,10 @@ function mutant_pain_func(self, other, kick, damage, context) {
|
|
|
12635
13664
|
}
|
|
12636
13665
|
if (self.timestamp < (self.pain_finished_time || 0)) return;
|
|
12637
13666
|
self.pain_finished_time = self.timestamp + 3;
|
|
12638
|
-
if (
|
|
13667
|
+
if (random8() < 0.5) {
|
|
12639
13668
|
context.engine.sound?.(self, 0, "mutant/mutpain1.wav", 1, 1, 0);
|
|
12640
13669
|
self.monsterinfo.current_move = pain1_move6;
|
|
12641
|
-
} else if (
|
|
13670
|
+
} else if (random8() < 0.5) {
|
|
12642
13671
|
context.engine.sound?.(self, 0, "mutant/mutpain2.wav", 1, 1, 0);
|
|
12643
13672
|
self.monsterinfo.current_move = pain2_move6;
|
|
12644
13673
|
} else {
|
|
@@ -12893,8 +13922,9 @@ function registerMutantSpawns(registry) {
|
|
|
12893
13922
|
}
|
|
12894
13923
|
|
|
12895
13924
|
// src/entities/monsters/parasite.ts
|
|
13925
|
+
init_esm();
|
|
12896
13926
|
var MONSTER_TICK19 = 0.1;
|
|
12897
|
-
var
|
|
13927
|
+
var random9 = () => Math.random();
|
|
12898
13928
|
function monster_ai_stand17(self, dist, context) {
|
|
12899
13929
|
ai_stand(self, MONSTER_TICK19, context);
|
|
12900
13930
|
}
|
|
@@ -12939,7 +13969,7 @@ function parasite_do_fidget(self) {
|
|
|
12939
13969
|
self.monsterinfo.current_move = fidget_move3;
|
|
12940
13970
|
}
|
|
12941
13971
|
function parasite_refidget(self) {
|
|
12942
|
-
if (
|
|
13972
|
+
if (random9() <= 0.8) {
|
|
12943
13973
|
self.monsterinfo.current_move = fidget_move3;
|
|
12944
13974
|
} else {
|
|
12945
13975
|
self.monsterinfo.current_move = end_fidget_move;
|
|
@@ -13052,7 +14082,7 @@ function parasite_pain_func(self, other, kick, damage, context) {
|
|
|
13052
14082
|
}
|
|
13053
14083
|
if (self.timestamp < (self.pain_finished_time || 0)) return;
|
|
13054
14084
|
self.pain_finished_time = self.timestamp + 3;
|
|
13055
|
-
if (
|
|
14085
|
+
if (random9() < 0.5) {
|
|
13056
14086
|
context.engine.sound?.(self, 0, "parasite/parpain1.wav", 1, 1, 0);
|
|
13057
14087
|
} else {
|
|
13058
14088
|
context.engine.sound?.(self, 0, "parasite/parpain2.wav", 1, 1, 0);
|
|
@@ -13289,6 +14319,7 @@ function registerParasiteSpawns(registry) {
|
|
|
13289
14319
|
}
|
|
13290
14320
|
|
|
13291
14321
|
// src/entities/monsters/soldier.ts
|
|
14322
|
+
init_esm();
|
|
13292
14323
|
var MONSTER_TICK20 = 0.1;
|
|
13293
14324
|
var SOLDIER_LIGHT = 1;
|
|
13294
14325
|
var SOLDIER_SSG = 2;
|
|
@@ -13627,6 +14658,7 @@ function registerMonsterSpawns(registry) {
|
|
|
13627
14658
|
}
|
|
13628
14659
|
|
|
13629
14660
|
// src/entities/monsters/supertank.ts
|
|
14661
|
+
init_esm();
|
|
13630
14662
|
var MONSTER_TICK21 = 0.1;
|
|
13631
14663
|
var SUPERTANK_MACHINEGUN_OFFSET = { x: 30, y: 30, z: 40 };
|
|
13632
14664
|
var SUPERTANK_ROCKET_OFFSET = { x: 30, y: -30, z: 40 };
|
|
@@ -13851,6 +14883,7 @@ function registerSupertankSpawns(registry) {
|
|
|
13851
14883
|
}
|
|
13852
14884
|
|
|
13853
14885
|
// src/entities/monsters/tank.ts
|
|
14886
|
+
init_esm();
|
|
13854
14887
|
var MONSTER_TICK22 = 0.1;
|
|
13855
14888
|
function M_AdjustBlindfireTarget(self, start, target, right, context) {
|
|
13856
14889
|
const tr = context.trace(start, target, ZERO_VEC3, ZERO_VEC3, self, MASK_SHOT);
|
|
@@ -14221,6 +15254,7 @@ function registerTankCommanderSpawns(registry) {
|
|
|
14221
15254
|
}
|
|
14222
15255
|
|
|
14223
15256
|
// src/entities/monsters/turret.ts
|
|
15257
|
+
init_esm();
|
|
14224
15258
|
var MONSTER_TICK23 = 0.1;
|
|
14225
15259
|
function monster_ai_stand21(self, dist, context) {
|
|
14226
15260
|
ai_stand(self, MONSTER_TICK23, context);
|
|
@@ -14372,8 +15406,9 @@ function registerTurretSpawns(registry) {
|
|
|
14372
15406
|
}
|
|
14373
15407
|
|
|
14374
15408
|
// src/entities/monsters/gekk.ts
|
|
15409
|
+
init_esm();
|
|
14375
15410
|
var MONSTER_TICK24 = 0.1;
|
|
14376
|
-
var
|
|
15411
|
+
var random10 = () => Math.random();
|
|
14377
15412
|
var frandom2 = () => Math.random();
|
|
14378
15413
|
var irandom2 = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
|
|
14379
15414
|
function monster_ai_stand22(self, dist, context) {
|
|
@@ -14882,7 +15917,7 @@ function gekk_pain(self, other, kick, damage, context) {
|
|
|
14882
15917
|
}
|
|
14883
15918
|
self.monsterinfo.current_move = gekk_move_pain;
|
|
14884
15919
|
} else {
|
|
14885
|
-
if (
|
|
15920
|
+
if (random10() > 0.5) self.monsterinfo.current_move = gekk_move_pain1;
|
|
14886
15921
|
else self.monsterinfo.current_move = gekk_move_pain2;
|
|
14887
15922
|
}
|
|
14888
15923
|
}
|
|
@@ -15014,8 +16049,9 @@ function registerGekkSpawns(registry) {
|
|
|
15014
16049
|
}
|
|
15015
16050
|
|
|
15016
16051
|
// src/entities/monsters/fixbot.ts
|
|
16052
|
+
init_esm();
|
|
15017
16053
|
var MONSTER_TICK25 = 0.1;
|
|
15018
|
-
var
|
|
16054
|
+
var random11 = () => Math.random();
|
|
15019
16055
|
var frandom3 = () => Math.random();
|
|
15020
16056
|
function monster_ai_walk21(self, dist, context) {
|
|
15021
16057
|
ai_walk(self, dist, MONSTER_TICK25, context);
|
|
@@ -15078,7 +16114,7 @@ function fixbot_search(self, context) {
|
|
|
15078
16114
|
fixbot_run(self);
|
|
15079
16115
|
fixbot_set_fly_parameters(self, true, false);
|
|
15080
16116
|
} else {
|
|
15081
|
-
if (
|
|
16117
|
+
if (random11() < 0.1) {
|
|
15082
16118
|
context.engine.sound?.(self, 0, "flyer/flysght1.wav", 1, 1, 0);
|
|
15083
16119
|
}
|
|
15084
16120
|
}
|
|
@@ -15737,6 +16773,9 @@ var LevelClock = class {
|
|
|
15737
16773
|
}
|
|
15738
16774
|
};
|
|
15739
16775
|
|
|
16776
|
+
// src/save/save.ts
|
|
16777
|
+
init_esm();
|
|
16778
|
+
|
|
15740
16779
|
// src/checksum.ts
|
|
15741
16780
|
var FNV_OFFSET_BASIS = 2166136261;
|
|
15742
16781
|
var FNV_PRIME = 16777619;
|
|
@@ -16199,6 +17238,7 @@ function applySaveFile(save, targets) {
|
|
|
16199
17238
|
}
|
|
16200
17239
|
|
|
16201
17240
|
// src/save/rerelease.ts
|
|
17241
|
+
init_esm();
|
|
16202
17242
|
function ensureObject2(value, label) {
|
|
16203
17243
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
16204
17244
|
throw new Error(`${label} must be an object`);
|
|
@@ -16611,6 +17651,9 @@ _SaveStorage.DEFAULT_STORE = "saves";
|
|
|
16611
17651
|
_SaveStorage.QUICK_SLOT = "quicksave";
|
|
16612
17652
|
var SaveStorage = _SaveStorage;
|
|
16613
17653
|
|
|
17654
|
+
// src/index.ts
|
|
17655
|
+
init_esm();
|
|
17656
|
+
|
|
16614
17657
|
// src/ai/noise.ts
|
|
16615
17658
|
var PNOISE_SELF = 0;
|
|
16616
17659
|
var PNOISE_WEAPON = 1;
|
|
@@ -16636,8 +17679,13 @@ function PlayerNoise(who, where, type, context) {
|
|
|
16636
17679
|
}
|
|
16637
17680
|
}
|
|
16638
17681
|
|
|
17682
|
+
// src/entities/player.ts
|
|
17683
|
+
init_playerInventory();
|
|
17684
|
+
|
|
16639
17685
|
// src/combat/obituary.ts
|
|
16640
|
-
|
|
17686
|
+
init_esm();
|
|
17687
|
+
init_esm();
|
|
17688
|
+
var random12 = createRandomGenerator();
|
|
16641
17689
|
var PRINT_MEDIUM = 1;
|
|
16642
17690
|
function getGender(ent) {
|
|
16643
17691
|
return "male";
|
|
@@ -16778,30 +17826,6 @@ function ClientObituary(self, inflictor, attacker, mod, sys) {
|
|
|
16778
17826
|
}
|
|
16779
17827
|
}
|
|
16780
17828
|
|
|
16781
|
-
// src/entities/player_anim.ts
|
|
16782
|
-
var FRAME_stand01 = 0;
|
|
16783
|
-
var FRAME_stand402 = 39;
|
|
16784
|
-
var FRAME_run1 = 40;
|
|
16785
|
-
var FRAME_run6 = 45;
|
|
16786
|
-
var FRAME_pain1012 = 54;
|
|
16787
|
-
var FRAME_pain104 = 57;
|
|
16788
|
-
var FRAME_pain2012 = 58;
|
|
16789
|
-
var FRAME_pain204 = 61;
|
|
16790
|
-
var FRAME_pain3012 = 62;
|
|
16791
|
-
var FRAME_pain304 = 65;
|
|
16792
|
-
var FRAME_death1012 = 66;
|
|
16793
|
-
var FRAME_death106 = 71;
|
|
16794
|
-
var FRAME_death2012 = 72;
|
|
16795
|
-
var FRAME_death206 = 77;
|
|
16796
|
-
var FRAME_death301 = 78;
|
|
16797
|
-
var FRAME_death306 = 83;
|
|
16798
|
-
var ANIM_BASIC = 0;
|
|
16799
|
-
var ANIM_PAIN = 2;
|
|
16800
|
-
var ANIM_DEATH = 3;
|
|
16801
|
-
|
|
16802
|
-
// src/combat/weapons/firing.ts
|
|
16803
|
-
var random11 = createRandomGenerator();
|
|
16804
|
-
|
|
16805
17829
|
// src/entities/player.ts
|
|
16806
17830
|
function P_PlayerThink(ent, sys) {
|
|
16807
17831
|
if (!ent.client) return;
|
|
@@ -16820,9 +17844,9 @@ function P_PlayerThink(ent, sys) {
|
|
|
16820
17844
|
animChanged = true;
|
|
16821
17845
|
}
|
|
16822
17846
|
} else {
|
|
16823
|
-
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) {
|
|
16824
17848
|
ent.frame = FRAME_stand01;
|
|
16825
|
-
client.anim_end =
|
|
17849
|
+
client.anim_end = FRAME_stand40;
|
|
16826
17850
|
client.anim_priority = ANIM_BASIC;
|
|
16827
17851
|
animChanged = true;
|
|
16828
17852
|
}
|
|
@@ -16841,7 +17865,7 @@ function P_PlayerThink(ent, sys) {
|
|
|
16841
17865
|
} else if (client.anim_end === ent.frame) {
|
|
16842
17866
|
if (client.anim_priority === ANIM_BASIC) {
|
|
16843
17867
|
if (ent.frame === FRAME_run6) ent.frame = FRAME_run1;
|
|
16844
|
-
else if (ent.frame ===
|
|
17868
|
+
else if (ent.frame === FRAME_stand40) ent.frame = FRAME_stand01;
|
|
16845
17869
|
} else {
|
|
16846
17870
|
if (client.anim_priority !== ANIM_DEATH) {
|
|
16847
17871
|
client.anim_priority = ANIM_BASIC;
|
|
@@ -16857,15 +17881,15 @@ function player_pain(self, damage) {
|
|
|
16857
17881
|
return;
|
|
16858
17882
|
}
|
|
16859
17883
|
self.client.anim_priority = ANIM_PAIN;
|
|
16860
|
-
const r =
|
|
17884
|
+
const r = random2.frandom();
|
|
16861
17885
|
if (r < 0.33) {
|
|
16862
|
-
self.frame =
|
|
17886
|
+
self.frame = FRAME_pain101;
|
|
16863
17887
|
self.client.anim_end = FRAME_pain104;
|
|
16864
17888
|
} else if (r < 0.66) {
|
|
16865
|
-
self.frame =
|
|
17889
|
+
self.frame = FRAME_pain201;
|
|
16866
17890
|
self.client.anim_end = FRAME_pain204;
|
|
16867
17891
|
} else {
|
|
16868
|
-
self.frame =
|
|
17892
|
+
self.frame = FRAME_pain301;
|
|
16869
17893
|
self.client.anim_end = FRAME_pain304;
|
|
16870
17894
|
}
|
|
16871
17895
|
}
|
|
@@ -16880,12 +17904,12 @@ function player_die(self, inflictor, attacker, damage, point, mod, sys) {
|
|
|
16880
17904
|
}
|
|
16881
17905
|
if (self.client) {
|
|
16882
17906
|
self.client.anim_priority = ANIM_DEATH;
|
|
16883
|
-
const r =
|
|
17907
|
+
const r = random2.frandom();
|
|
16884
17908
|
if (r < 0.33) {
|
|
16885
|
-
self.frame =
|
|
17909
|
+
self.frame = FRAME_death101;
|
|
16886
17910
|
self.client.anim_end = FRAME_death106;
|
|
16887
17911
|
} else if (r < 0.66) {
|
|
16888
|
-
self.frame =
|
|
17912
|
+
self.frame = FRAME_death201;
|
|
16889
17913
|
self.client.anim_end = FRAME_death206;
|
|
16890
17914
|
} else {
|
|
16891
17915
|
self.frame = FRAME_death301;
|
|
@@ -16933,6 +17957,8 @@ function player_think(self, sys) {
|
|
|
16933
17957
|
}
|
|
16934
17958
|
|
|
16935
17959
|
// src/entities/playerStats.ts
|
|
17960
|
+
init_esm();
|
|
17961
|
+
init_playerInventory();
|
|
16936
17962
|
var POWERUP_TIMERS = [
|
|
16937
17963
|
{ id: PowerupId.QuadDamage, priority: 1 },
|
|
16938
17964
|
{ id: PowerupId.Invulnerability, priority: 2 },
|
|
@@ -16998,7 +18024,11 @@ function populatePlayerStats(player, timeSeconds) {
|
|
|
16998
18024
|
return statArray;
|
|
16999
18025
|
}
|
|
17000
18026
|
|
|
18027
|
+
// src/index.ts
|
|
18028
|
+
init_esm();
|
|
18029
|
+
|
|
17001
18030
|
// src/combat/specialDamage.ts
|
|
18031
|
+
init_esm();
|
|
17002
18032
|
var ZERO2 = { x: 0, y: 0, z: 0 };
|
|
17003
18033
|
var EnvironmentalFlags = /* @__PURE__ */ ((EnvironmentalFlags2) => {
|
|
17004
18034
|
EnvironmentalFlags2[EnvironmentalFlags2["IN_WATER"] = 1] = "IN_WATER";
|
|
@@ -17319,6 +18349,13 @@ function createGame(imports, engine, options) {
|
|
|
17319
18349
|
configstring
|
|
17320
18350
|
};
|
|
17321
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
|
+
};
|
|
17322
18359
|
frameLoop.addStage("prep", (context) => {
|
|
17323
18360
|
levelClock.tick(context);
|
|
17324
18361
|
entities.beginFrame(levelClock.current.timeSeconds);
|
|
@@ -17605,6 +18642,7 @@ function createGame(imports, engine, options) {
|
|
|
17605
18642
|
};
|
|
17606
18643
|
const spawnRegistry = createDefaultSpawnRegistry(gameExports);
|
|
17607
18644
|
entities.setSpawnRegistry(spawnRegistry);
|
|
18645
|
+
entities._game = gameExports;
|
|
17608
18646
|
return gameExports;
|
|
17609
18647
|
}
|
|
17610
18648
|
// Annotate the CommonJS export names for ESM import in node:
|