quake2ts 0.0.481 → 0.0.483
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 +16 -16
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +79 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +80 -2
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/session.d.ts +21 -1
- package/packages/client/dist/types/session.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +4 -4
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +1867 -2058
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +1547 -1745
- 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 +0 -7
- package/packages/game/dist/types/combat/weapons/animation.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/common.d.ts +7 -0
- package/packages/game/dist/types/combat/weapons/common.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/grenadelauncher.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/switching.d.ts +1 -0
- package/packages/game/dist/types/combat/weapons/switching.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts +1 -0
- package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
|
@@ -3,9 +3,6 @@ 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
|
-
};
|
|
9
6
|
var __export = (target, all) => {
|
|
10
7
|
for (var name in all)
|
|
11
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -20,7 +17,195 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
20
17
|
};
|
|
21
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
19
|
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
AIFlags: () => AIFlags,
|
|
24
|
+
AI_GetSightClient: () => AI_GetSightClient,
|
|
25
|
+
AMMO_TYPE_COUNT: () => AMMO_TYPE_COUNT,
|
|
26
|
+
ARMOR_INFO: () => ARMOR_INFO,
|
|
27
|
+
ARMOR_ITEMS: () => ARMOR_ITEMS,
|
|
28
|
+
AmmoItemId: () => AmmoItemId,
|
|
29
|
+
AmmoType: () => AmmoType,
|
|
30
|
+
ArmorType: () => ArmorType,
|
|
31
|
+
AttackState: () => AttackState,
|
|
32
|
+
BOTTOM_EMPTY: () => BOTTOM_EMPTY,
|
|
33
|
+
BOTTOM_LAVA: () => BOTTOM_LAVA,
|
|
34
|
+
BOTTOM_SLIME: () => BOTTOM_SLIME,
|
|
35
|
+
BOTTOM_SOLID: () => BOTTOM_SOLID,
|
|
36
|
+
BOTTOM_WATER: () => BOTTOM_WATER,
|
|
37
|
+
BlockedJumpResult: () => BlockedJumpResult,
|
|
38
|
+
CheckGround: () => CheckGround,
|
|
39
|
+
DamageFlags: () => DamageFlags,
|
|
40
|
+
DamageMod: () => DamageMod,
|
|
41
|
+
DeadFlag: () => DeadFlag,
|
|
42
|
+
ENTITY_FIELD_METADATA: () => ENTITY_FIELD_METADATA,
|
|
43
|
+
Entity: () => Entity,
|
|
44
|
+
EntityDamageFlags: () => EntityDamageFlags,
|
|
45
|
+
EntitySystem: () => EntitySystem,
|
|
46
|
+
EnvironmentalFlags: () => EnvironmentalFlags,
|
|
47
|
+
FLAG_ITEMS: () => FLAG_ITEMS,
|
|
48
|
+
FL_NOTARGET: () => FL_NOTARGET,
|
|
49
|
+
FL_NOVISIBLE: () => FL_NOVISIBLE,
|
|
50
|
+
G_IdealHoverPosition: () => G_IdealHoverPosition,
|
|
51
|
+
HEALTH_ITEMS: () => HEALTH_ITEMS,
|
|
52
|
+
KEY_ITEMS: () => KEY_ITEMS,
|
|
53
|
+
KeyId: () => KeyId,
|
|
54
|
+
M_CalculatePitchToFire: () => M_CalculatePitchToFire,
|
|
55
|
+
M_ChangeYaw: () => M_ChangeYaw,
|
|
56
|
+
M_CheckAttack: () => M_CheckAttack,
|
|
57
|
+
M_CheckAttack_Base: () => M_CheckAttack_Base,
|
|
58
|
+
M_CheckBottom: () => M_CheckBottom,
|
|
59
|
+
M_CheckBottomEx: () => M_CheckBottomEx,
|
|
60
|
+
M_MoveFrame: () => M_MoveFrame,
|
|
61
|
+
M_MoveStep: () => M_MoveStep,
|
|
62
|
+
M_MoveToGoal: () => M_MoveToGoal,
|
|
63
|
+
M_MoveToPath: () => M_MoveToPath,
|
|
64
|
+
M_droptofloor: () => M_droptofloor,
|
|
65
|
+
M_droptofloor_generic: () => M_droptofloor_generic,
|
|
66
|
+
M_walkmove: () => M_walkmove,
|
|
67
|
+
MonsterAttackState: () => MonsterAttackState,
|
|
68
|
+
MoveType: () => MoveType,
|
|
69
|
+
MulticastType: () => MulticastType,
|
|
70
|
+
ORDERED_DAMAGE_MODS: () => ORDERED_DAMAGE_MODS,
|
|
71
|
+
PNOISE_IMPACT: () => PNOISE_IMPACT,
|
|
72
|
+
PNOISE_SELF: () => PNOISE_SELF,
|
|
73
|
+
PNOISE_WEAPON: () => PNOISE_WEAPON,
|
|
74
|
+
POWERUP_ITEMS: () => POWERUP_ITEMS,
|
|
75
|
+
POWER_ARMOR_ITEMS: () => POWER_ARMOR_ITEMS,
|
|
76
|
+
PlayerNoise: () => PlayerNoise,
|
|
77
|
+
PowerupId: () => PowerupId,
|
|
78
|
+
PredictAim: () => PredictAim,
|
|
79
|
+
RANGE_MELEE: () => RANGE_MELEE,
|
|
80
|
+
RANGE_MID: () => RANGE_MID,
|
|
81
|
+
RANGE_NEAR: () => RANGE_NEAR,
|
|
82
|
+
Range: () => RangeCategory,
|
|
83
|
+
RangeCategory: () => RangeCategory,
|
|
84
|
+
SAVE_FORMAT_VERSION: () => SAVE_FORMAT_VERSION,
|
|
85
|
+
SPAWNFLAG_MONSTER_AMBUSH: () => SPAWNFLAG_MONSTER_AMBUSH,
|
|
86
|
+
SV_NewChaseDir: () => SV_NewChaseDir,
|
|
87
|
+
SV_StepDirection: () => SV_StepDirection,
|
|
88
|
+
SV_flystep: () => SV_flystep,
|
|
89
|
+
SaveStorage: () => SaveStorage,
|
|
90
|
+
ServerFlags: () => ServerFlags,
|
|
91
|
+
Solid: () => Solid,
|
|
92
|
+
SpawnRegistry: () => SpawnRegistry,
|
|
93
|
+
T_Damage: () => T_Damage,
|
|
94
|
+
T_RadiusDamage: () => T_RadiusDamage,
|
|
95
|
+
TraceMask: () => TraceMask,
|
|
96
|
+
WEAPONS: () => WEAPONS,
|
|
97
|
+
WEAPON_ITEMS: () => WEAPON_ITEMS,
|
|
98
|
+
WeaponId: () => WeaponId,
|
|
99
|
+
WeaponStateEnum: () => WeaponStateEnum,
|
|
100
|
+
WeaponType: () => WeaponType,
|
|
101
|
+
addAmmo: () => addAmmo,
|
|
102
|
+
addKey: () => addKey,
|
|
103
|
+
addPowerup: () => addPowerup,
|
|
104
|
+
ai_charge: () => ai_charge,
|
|
105
|
+
ai_checkattack: () => ai_checkattack,
|
|
106
|
+
ai_face: () => ai_face,
|
|
107
|
+
ai_move: () => ai_move,
|
|
108
|
+
ai_run: () => ai_run,
|
|
109
|
+
ai_run_slide: () => ai_run_slide,
|
|
110
|
+
ai_stand: () => ai_stand,
|
|
111
|
+
ai_turn: () => ai_turn,
|
|
112
|
+
ai_walk: () => ai_walk,
|
|
113
|
+
applyCrushDamage: () => applyCrushDamage,
|
|
114
|
+
applyEntityKeyValues: () => applyEntityKeyValues,
|
|
115
|
+
applyEnvironmentalDamage: () => applyEnvironmentalDamage,
|
|
116
|
+
applyFallingDamage: () => applyFallingDamage,
|
|
117
|
+
applyPowerArmor: () => applyPowerArmor,
|
|
118
|
+
applyRegularArmor: () => applyRegularArmor,
|
|
119
|
+
applySaveFile: () => applySaveFile,
|
|
120
|
+
blocked_checkjump: () => blocked_checkjump,
|
|
121
|
+
blocked_checkplat: () => blocked_checkplat,
|
|
122
|
+
calculateFallingDamage: () => calculateFallingDamage,
|
|
123
|
+
calculateSaveChecksum: () => calculateSaveChecksum,
|
|
124
|
+
canPickupHealth: () => canPickupHealth,
|
|
125
|
+
changeYaw: () => changeYaw,
|
|
126
|
+
clampAmmoCounts: () => clampAmmoCounts,
|
|
127
|
+
classifyRange: () => classifyRange,
|
|
128
|
+
clearExpiredPowerups: () => clearExpiredPowerups,
|
|
129
|
+
convertGameSaveToRereleaseLevel: () => convertGameSaveToRereleaseLevel,
|
|
130
|
+
convertRereleaseLevelToGameSave: () => convertRereleaseLevelToGameSave,
|
|
131
|
+
convertRereleaseSaveToGameSave: () => convertRereleaseSaveToGameSave,
|
|
132
|
+
createAmmoInventory: () => createAmmoInventory,
|
|
133
|
+
createAmmoPickupEntity: () => createAmmoPickupEntity,
|
|
134
|
+
createArmorPickupEntity: () => createArmorPickupEntity,
|
|
135
|
+
createBaseAmmoCaps: () => createBaseAmmoCaps,
|
|
136
|
+
createCallbackRegistry: () => createCallbackRegistry,
|
|
137
|
+
createDefaultSpawnRegistry: () => createDefaultSpawnRegistry,
|
|
138
|
+
createFoodCubePickupEntity: () => createFoodCubePickupEntity,
|
|
139
|
+
createGame: () => createGame,
|
|
140
|
+
createHealthPickupEntity: () => createHealthPickupEntity,
|
|
141
|
+
createKeyPickupEntity: () => createKeyPickupEntity,
|
|
142
|
+
createPlayerInventory: () => createPlayerInventory,
|
|
143
|
+
createPlayerWeaponStates: () => createPlayerWeaponStates,
|
|
144
|
+
createPowerupPickupEntity: () => createPowerupPickupEntity,
|
|
145
|
+
createSaveFile: () => createSaveFile,
|
|
146
|
+
createWeaponPickupEntity: () => createWeaponPickupEntity,
|
|
147
|
+
damageModName: () => damageModName,
|
|
148
|
+
deserializePlayerInventory: () => deserializePlayerInventory,
|
|
149
|
+
equipArmor: () => equipArmor,
|
|
150
|
+
facingIdeal: () => facingIdeal,
|
|
151
|
+
findTarget: () => findTarget,
|
|
152
|
+
foundTarget: () => foundTarget,
|
|
153
|
+
getAmmoItemDefinition: () => getAmmoItemDefinition,
|
|
154
|
+
getWeaponState: () => getWeaponState,
|
|
155
|
+
giveAmmoItem: () => giveAmmoItem,
|
|
156
|
+
giveWeapon: () => giveWeapon,
|
|
157
|
+
hasAnyDamageFlag: () => hasAnyDamageFlag,
|
|
158
|
+
hasItem: () => hasItem,
|
|
159
|
+
hasKey: () => hasKey,
|
|
160
|
+
hasPowerup: () => hasPowerup,
|
|
161
|
+
hasWeapon: () => hasWeapon,
|
|
162
|
+
hashEntitySystem: () => hashEntitySystem,
|
|
163
|
+
hashGameState: () => hashGameState,
|
|
164
|
+
huntTarget: () => huntTarget,
|
|
165
|
+
infront: () => infront,
|
|
166
|
+
isZeroVector: () => isZeroVector,
|
|
167
|
+
killBox: () => killBox,
|
|
168
|
+
monster_done_dodge: () => monster_done_dodge,
|
|
169
|
+
monster_jump_finished: () => monster_jump_finished,
|
|
170
|
+
monster_jump_start: () => monster_jump_start,
|
|
171
|
+
monster_think: () => monster_think,
|
|
172
|
+
parseEntityLump: () => parseEntityLump,
|
|
173
|
+
parseRereleaseSave: () => parseRereleaseSave,
|
|
174
|
+
parseSaveFile: () => parseSaveFile,
|
|
175
|
+
pickupAmmo: () => pickupAmmo,
|
|
176
|
+
pickupArmor: () => pickupArmor,
|
|
177
|
+
pickupFlag: () => pickupFlag,
|
|
178
|
+
pickupKey: () => pickupKey,
|
|
179
|
+
pickupPowerArmor: () => pickupPowerArmor,
|
|
180
|
+
pickupPowerup: () => pickupPowerup,
|
|
181
|
+
pickupWeapon: () => pickupWeapon,
|
|
182
|
+
player_noise: () => player_noise,
|
|
183
|
+
range: () => rangeTo,
|
|
184
|
+
rangeTo: () => rangeTo,
|
|
185
|
+
registerCallback: () => registerCallback,
|
|
186
|
+
registerDefaultSpawns: () => registerDefaultSpawns,
|
|
187
|
+
resetInventory: () => resetInventory,
|
|
188
|
+
selectWeapon: () => selectWeapon,
|
|
189
|
+
serializePlayerInventory: () => serializePlayerInventory,
|
|
190
|
+
serializeRereleaseSave: () => serializeRereleaseSave,
|
|
191
|
+
setMovedir: () => setMovedir,
|
|
192
|
+
spawnEntitiesFromText: () => spawnEntitiesFromText,
|
|
193
|
+
spawnEntityFromDictionary: () => spawnEntityFromDictionary,
|
|
194
|
+
summarizeRereleaseSave: () => summarizeRereleaseSave,
|
|
195
|
+
visible: () => visible,
|
|
196
|
+
walkMove: () => walkMove
|
|
197
|
+
});
|
|
198
|
+
module.exports = __toCommonJS(index_exports);
|
|
199
|
+
|
|
23
200
|
// ../shared/dist/esm/index.js
|
|
201
|
+
var __defProp2 = Object.defineProperty;
|
|
202
|
+
var __export2 = (target, all) => {
|
|
203
|
+
for (var name in all)
|
|
204
|
+
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
205
|
+
};
|
|
206
|
+
var ZERO_VEC3 = { x: 0, y: 0, z: 0 };
|
|
207
|
+
var STOP_EPSILON = 0.1;
|
|
208
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
24
209
|
function copyVec3(a) {
|
|
25
210
|
return { x: a.x, y: a.y, z: a.z };
|
|
26
211
|
}
|
|
@@ -167,6 +352,11 @@ function rotatePointAroundVector(dir, point, degrees) {
|
|
|
167
352
|
z: rot[2][0] * point.x + rot[2][1] * point.y + rot[2][2] * point.z
|
|
168
353
|
};
|
|
169
354
|
}
|
|
355
|
+
var PITCH = 0;
|
|
356
|
+
var YAW = 1;
|
|
357
|
+
var ROLL = 2;
|
|
358
|
+
var DEG2RAD_FACTOR = Math.PI / 180;
|
|
359
|
+
var RAD2DEG_FACTOR = 180 / Math.PI;
|
|
170
360
|
function axisComponent(vec, axis) {
|
|
171
361
|
switch (axis) {
|
|
172
362
|
case PITCH:
|
|
@@ -252,9 +442,413 @@ function vectorToAngles(vec) {
|
|
|
252
442
|
}
|
|
253
443
|
return { x: -pitch, y: yaw, z: 0 };
|
|
254
444
|
}
|
|
445
|
+
var ANORMS = [
|
|
446
|
+
[-0.525731, 0, 0.850651],
|
|
447
|
+
[-0.442863, 0.238856, 0.864188],
|
|
448
|
+
[-0.295242, 0, 0.955423],
|
|
449
|
+
[-0.309017, 0.5, 0.809017],
|
|
450
|
+
[-0.16246, 0.262866, 0.951056],
|
|
451
|
+
[0, 0, 1],
|
|
452
|
+
[0, 0.850651, 0.525731],
|
|
453
|
+
[-0.147621, 0.716567, 0.681718],
|
|
454
|
+
[0.147621, 0.716567, 0.681718],
|
|
455
|
+
[0, 0.525731, 0.850651],
|
|
456
|
+
[0.309017, 0.5, 0.809017],
|
|
457
|
+
[0.525731, 0, 0.850651],
|
|
458
|
+
[0.295242, 0, 0.955423],
|
|
459
|
+
[0.442863, 0.238856, 0.864188],
|
|
460
|
+
[0.16246, 0.262866, 0.951056],
|
|
461
|
+
[-0.681718, 0.147621, 0.716567],
|
|
462
|
+
[-0.809017, 0.309017, 0.5],
|
|
463
|
+
[-0.587785, 0.425325, 0.688191],
|
|
464
|
+
[-0.850651, 0.525731, 0],
|
|
465
|
+
[-0.864188, 0.442863, 0.238856],
|
|
466
|
+
[-0.716567, 0.681718, 0.147621],
|
|
467
|
+
[-0.688191, 0.587785, 0.425325],
|
|
468
|
+
[-0.5, 0.809017, 0.309017],
|
|
469
|
+
[-0.238856, 0.864188, 0.442863],
|
|
470
|
+
[-0.425325, 0.688191, 0.587785],
|
|
471
|
+
[-0.716567, 0.681718, -0.147621],
|
|
472
|
+
[-0.5, 0.809017, -0.309017],
|
|
473
|
+
[-0.525731, 0.850651, 0],
|
|
474
|
+
[0, 0.850651, -0.525731],
|
|
475
|
+
[-0.238856, 0.864188, -0.442863],
|
|
476
|
+
[0, 0.955423, -0.295242],
|
|
477
|
+
[-0.262866, 0.951056, -0.16246],
|
|
478
|
+
[0, 1, 0],
|
|
479
|
+
[0, 0.955423, 0.295242],
|
|
480
|
+
[-0.262866, 0.951056, 0.16246],
|
|
481
|
+
[0.238856, 0.864188, 0.442863],
|
|
482
|
+
[0.262866, 0.951056, 0.16246],
|
|
483
|
+
[0.5, 0.809017, 0.309017],
|
|
484
|
+
[0.238856, 0.864188, -0.442863],
|
|
485
|
+
[0.262866, 0.951056, -0.16246],
|
|
486
|
+
[0.5, 0.809017, -0.309017],
|
|
487
|
+
[0.850651, 0.525731, 0],
|
|
488
|
+
[0.716567, 0.681718, 0.147621],
|
|
489
|
+
[0.716567, 0.681718, -0.147621],
|
|
490
|
+
[0.525731, 0.850651, 0],
|
|
491
|
+
[0.425325, 0.688191, 0.587785],
|
|
492
|
+
[0.864188, 0.442863, 0.238856],
|
|
493
|
+
[0.688191, 0.587785, 0.425325],
|
|
494
|
+
[0.809017, 0.309017, 0.5],
|
|
495
|
+
[0.681718, 0.147621, 0.716567],
|
|
496
|
+
[0.587785, 0.425325, 0.688191],
|
|
497
|
+
[0.955423, 0.295242, 0],
|
|
498
|
+
[1, 0, 0],
|
|
499
|
+
[0.951056, 0.16246, 0.262866],
|
|
500
|
+
[0.850651, -0.525731, 0],
|
|
501
|
+
[0.955423, -0.295242, 0],
|
|
502
|
+
[0.864188, -0.442863, 0.238856],
|
|
503
|
+
[0.951056, -0.16246, 0.262866],
|
|
504
|
+
[0.809017, -0.309017, 0.5],
|
|
505
|
+
[0.681718, -0.147621, 0.716567],
|
|
506
|
+
[0.850651, 0, 0.525731],
|
|
507
|
+
[0.864188, 0.442863, -0.238856],
|
|
508
|
+
[0.809017, 0.309017, -0.5],
|
|
509
|
+
[0.951056, 0.16246, -0.262866],
|
|
510
|
+
[0.525731, 0, -0.850651],
|
|
511
|
+
[0.681718, 0.147621, -0.716567],
|
|
512
|
+
[0.681718, -0.147621, -0.716567],
|
|
513
|
+
[0.850651, 0, -0.525731],
|
|
514
|
+
[0.809017, -0.309017, -0.5],
|
|
515
|
+
[0.864188, -0.442863, -0.238856],
|
|
516
|
+
[0.951056, -0.16246, -0.262866],
|
|
517
|
+
[0.147621, 0.716567, -0.681718],
|
|
518
|
+
[0.309017, 0.5, -0.809017],
|
|
519
|
+
[0.425325, 0.688191, -0.587785],
|
|
520
|
+
[0.442863, 0.238856, -0.864188],
|
|
521
|
+
[0.587785, 0.425325, -0.688191],
|
|
522
|
+
[0.688191, 0.587785, -0.425325],
|
|
523
|
+
[-0.147621, 0.716567, -0.681718],
|
|
524
|
+
[-0.309017, 0.5, -0.809017],
|
|
525
|
+
[0, 0.525731, -0.850651],
|
|
526
|
+
[-0.525731, 0, -0.850651],
|
|
527
|
+
[-0.442863, 0.238856, -0.864188],
|
|
528
|
+
[-0.295242, 0, -0.955423],
|
|
529
|
+
[-0.16246, 0.262866, -0.951056],
|
|
530
|
+
[0, 0, -1],
|
|
531
|
+
[0.295242, 0, -0.955423],
|
|
532
|
+
[0.16246, 0.262866, -0.951056],
|
|
533
|
+
[-0.442863, -0.238856, -0.864188],
|
|
534
|
+
[-0.309017, -0.5, -0.809017],
|
|
535
|
+
[-0.16246, -0.262866, -0.951056],
|
|
536
|
+
[0, -0.850651, -0.525731],
|
|
537
|
+
[-0.147621, -0.716567, -0.681718],
|
|
538
|
+
[0.147621, -0.716567, -0.681718],
|
|
539
|
+
[0, -0.525731, -0.850651],
|
|
540
|
+
[0.309017, -0.5, -0.809017],
|
|
541
|
+
[0.442863, -0.238856, -0.864188],
|
|
542
|
+
[0.16246, -0.262866, -0.951056],
|
|
543
|
+
[0.238856, -0.864188, -0.442863],
|
|
544
|
+
[0.5, -0.809017, -0.309017],
|
|
545
|
+
[0.425325, -0.688191, -0.587785],
|
|
546
|
+
[0.716567, -0.681718, -0.147621],
|
|
547
|
+
[0.688191, -0.587785, -0.425325],
|
|
548
|
+
[0.587785, -0.425325, -0.688191],
|
|
549
|
+
[0, -0.955423, -0.295242],
|
|
550
|
+
[0, -1, 0],
|
|
551
|
+
[0.262866, -0.951056, -0.16246],
|
|
552
|
+
[0, -0.850651, 0.525731],
|
|
553
|
+
[0, -0.955423, 0.295242],
|
|
554
|
+
[0.238856, -0.864188, 0.442863],
|
|
555
|
+
[0.262866, -0.951056, 0.16246],
|
|
556
|
+
[0.5, -0.809017, 0.309017],
|
|
557
|
+
[0.716567, -0.681718, 0.147621],
|
|
558
|
+
[0.525731, -0.850651, 0],
|
|
559
|
+
[-0.238856, -0.864188, -0.442863],
|
|
560
|
+
[-0.5, -0.809017, -0.309017],
|
|
561
|
+
[-0.262866, -0.951056, -0.16246],
|
|
562
|
+
[-0.850651, -0.525731, 0],
|
|
563
|
+
[-0.716567, -0.681718, -0.147621],
|
|
564
|
+
[-0.716567, -0.681718, 0.147621],
|
|
565
|
+
[-0.525731, -0.850651, 0],
|
|
566
|
+
[-0.5, -0.809017, 0.309017],
|
|
567
|
+
[-0.238856, -0.864188, 0.442863],
|
|
568
|
+
[-0.262866, -0.951056, 0.16246],
|
|
569
|
+
[-0.864188, -0.442863, 0.238856],
|
|
570
|
+
[-0.809017, -0.309017, 0.5],
|
|
571
|
+
[-0.688191, -0.587785, 0.425325],
|
|
572
|
+
[-0.681718, -0.147621, 0.716567],
|
|
573
|
+
[-0.442863, -0.238856, 0.864188],
|
|
574
|
+
[-0.587785, -0.425325, 0.688191],
|
|
575
|
+
[-0.309017, -0.5, 0.809017],
|
|
576
|
+
[-0.147621, -0.716567, 0.681718],
|
|
577
|
+
[-0.425325, -0.688191, 0.587785],
|
|
578
|
+
[-0.16246, -0.262866, 0.951056],
|
|
579
|
+
[0.442863, -0.238856, 0.864188],
|
|
580
|
+
[0.16246, -0.262866, 0.951056],
|
|
581
|
+
[0.309017, -0.5, 0.809017],
|
|
582
|
+
[0.147621, -0.716567, 0.681718],
|
|
583
|
+
[0, -0.525731, 0.850651],
|
|
584
|
+
[0.425325, -0.688191, 0.587785],
|
|
585
|
+
[0.587785, -0.425325, 0.688191],
|
|
586
|
+
[0.688191, -0.587785, 0.425325],
|
|
587
|
+
[-0.955423, 0.295242, 0],
|
|
588
|
+
[-0.951056, 0.16246, 0.262866],
|
|
589
|
+
[-1, 0, 0],
|
|
590
|
+
[-0.850651, 0, 0.525731],
|
|
591
|
+
[-0.955423, -0.295242, 0],
|
|
592
|
+
[-0.951056, -0.16246, 0.262866],
|
|
593
|
+
[-0.864188, 0.442863, -0.238856],
|
|
594
|
+
[-0.951056, 0.16246, -0.262866],
|
|
595
|
+
[-0.809017, 0.309017, -0.5],
|
|
596
|
+
[-0.864188, -0.442863, -0.238856],
|
|
597
|
+
[-0.951056, -0.16246, -0.262866],
|
|
598
|
+
[-0.809017, -0.309017, -0.5],
|
|
599
|
+
[-0.681718, 0.147621, -0.716567],
|
|
600
|
+
[-0.681718, -0.147621, -0.716567],
|
|
601
|
+
[-0.850651, 0, -0.525731],
|
|
602
|
+
[-0.688191, 0.587785, -0.425325],
|
|
603
|
+
[-0.587785, 0.425325, -0.688191],
|
|
604
|
+
[-0.425325, 0.688191, -0.587785],
|
|
605
|
+
[-0.425325, -0.688191, -0.587785],
|
|
606
|
+
[-0.587785, -0.425325, -0.688191],
|
|
607
|
+
[-0.688191, -0.587785, -0.425325]
|
|
608
|
+
];
|
|
609
|
+
var STATE_SIZE = 624;
|
|
610
|
+
var MIDDLE_WORD = 397;
|
|
611
|
+
var MATRIX_A = 2567483615;
|
|
612
|
+
var UPPER_MASK = 2147483648;
|
|
613
|
+
var LOWER_MASK = 2147483647;
|
|
614
|
+
var TWO_POW_32 = 4294967296;
|
|
615
|
+
var MersenneTwister19937 = class {
|
|
616
|
+
constructor(seed = 5489) {
|
|
617
|
+
this.state = new Uint32Array(STATE_SIZE);
|
|
618
|
+
this.index = STATE_SIZE;
|
|
619
|
+
this.seed(seed);
|
|
620
|
+
}
|
|
621
|
+
seed(seed) {
|
|
622
|
+
this.state[0] = seed >>> 0;
|
|
623
|
+
for (let i = 1; i < STATE_SIZE; i++) {
|
|
624
|
+
const prev = this.state[i - 1] ^ this.state[i - 1] >>> 30;
|
|
625
|
+
const next = Math.imul(prev >>> 0, 1812433253) + i;
|
|
626
|
+
this.state[i] = next >>> 0;
|
|
627
|
+
}
|
|
628
|
+
this.index = STATE_SIZE;
|
|
629
|
+
}
|
|
630
|
+
nextUint32() {
|
|
631
|
+
if (this.index >= STATE_SIZE) {
|
|
632
|
+
this.twist();
|
|
633
|
+
}
|
|
634
|
+
let y = this.state[this.index++];
|
|
635
|
+
y ^= y >>> 11;
|
|
636
|
+
y ^= y << 7 & 2636928640;
|
|
637
|
+
y ^= y << 15 & 4022730752;
|
|
638
|
+
y ^= y >>> 18;
|
|
639
|
+
return y >>> 0;
|
|
640
|
+
}
|
|
641
|
+
twist() {
|
|
642
|
+
for (let i = 0; i < STATE_SIZE; i++) {
|
|
643
|
+
const y = this.state[i] & UPPER_MASK | this.state[(i + 1) % STATE_SIZE] & LOWER_MASK;
|
|
644
|
+
let next = this.state[(i + MIDDLE_WORD) % STATE_SIZE] ^ y >>> 1;
|
|
645
|
+
if ((y & 1) !== 0) {
|
|
646
|
+
next ^= MATRIX_A;
|
|
647
|
+
}
|
|
648
|
+
this.state[i] = next >>> 0;
|
|
649
|
+
}
|
|
650
|
+
this.index = 0;
|
|
651
|
+
}
|
|
652
|
+
getState() {
|
|
653
|
+
return {
|
|
654
|
+
index: this.index,
|
|
655
|
+
state: Array.from(this.state)
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
setState(snapshot) {
|
|
659
|
+
if (snapshot.state.length !== STATE_SIZE) {
|
|
660
|
+
throw new Error(`Expected ${STATE_SIZE} MT state values, received ${snapshot.state.length}`);
|
|
661
|
+
}
|
|
662
|
+
this.index = snapshot.index;
|
|
663
|
+
this.state = Uint32Array.from(snapshot.state, (value) => value >>> 0);
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
var RandomGenerator = class {
|
|
667
|
+
constructor(options = {}) {
|
|
668
|
+
this.mt = new MersenneTwister19937(options.seed);
|
|
669
|
+
}
|
|
670
|
+
seed(seed) {
|
|
671
|
+
this.mt.seed(seed);
|
|
672
|
+
}
|
|
673
|
+
/** Uniform float in [0, 1). */
|
|
674
|
+
frandom() {
|
|
675
|
+
return this.mt.nextUint32() / TWO_POW_32;
|
|
676
|
+
}
|
|
677
|
+
/** Uniform float in [min, max). */
|
|
678
|
+
frandomRange(minInclusive, maxExclusive) {
|
|
679
|
+
return minInclusive + (maxExclusive - minInclusive) * this.frandom();
|
|
680
|
+
}
|
|
681
|
+
/** Uniform float in [0, max). */
|
|
682
|
+
frandomMax(maxExclusive) {
|
|
683
|
+
return this.frandomRange(0, maxExclusive);
|
|
684
|
+
}
|
|
685
|
+
/** Uniform float in [-1, 1). */
|
|
686
|
+
crandom() {
|
|
687
|
+
return this.frandomRange(-1, 1);
|
|
688
|
+
}
|
|
689
|
+
/** Uniform float in (-1, 1). */
|
|
690
|
+
crandomOpen() {
|
|
691
|
+
const epsilon = Number.EPSILON;
|
|
692
|
+
return this.frandomRange(-1 + epsilon, 1);
|
|
693
|
+
}
|
|
694
|
+
/** Raw uint32 sample. */
|
|
695
|
+
irandomUint32() {
|
|
696
|
+
return this.mt.nextUint32();
|
|
697
|
+
}
|
|
698
|
+
/** Uniform integer in [min, max). */
|
|
699
|
+
irandomRange(minInclusive, maxExclusive) {
|
|
700
|
+
if (maxExclusive - minInclusive <= 1) {
|
|
701
|
+
return minInclusive;
|
|
702
|
+
}
|
|
703
|
+
const span = maxExclusive - minInclusive;
|
|
704
|
+
const limit = TWO_POW_32 - TWO_POW_32 % span;
|
|
705
|
+
let sample;
|
|
706
|
+
do {
|
|
707
|
+
sample = this.mt.nextUint32();
|
|
708
|
+
} while (sample >= limit);
|
|
709
|
+
return minInclusive + sample % span;
|
|
710
|
+
}
|
|
711
|
+
/** Uniform integer in [0, max). */
|
|
712
|
+
irandom(maxExclusive) {
|
|
713
|
+
if (maxExclusive <= 0) {
|
|
714
|
+
return 0;
|
|
715
|
+
}
|
|
716
|
+
return this.irandomRange(0, maxExclusive);
|
|
717
|
+
}
|
|
718
|
+
/** Uniform time in milliseconds [min, max). */
|
|
719
|
+
randomTimeRange(minMs, maxMs) {
|
|
720
|
+
if (maxMs <= minMs) {
|
|
721
|
+
return minMs;
|
|
722
|
+
}
|
|
723
|
+
return this.irandomRange(minMs, maxMs);
|
|
724
|
+
}
|
|
725
|
+
/** Uniform time in milliseconds [0, max). */
|
|
726
|
+
randomTime(maxMs) {
|
|
727
|
+
return this.irandom(maxMs);
|
|
728
|
+
}
|
|
729
|
+
randomIndex(container) {
|
|
730
|
+
return this.irandom(container.length);
|
|
731
|
+
}
|
|
732
|
+
getState() {
|
|
733
|
+
return { mt: this.mt.getState() };
|
|
734
|
+
}
|
|
735
|
+
setState(snapshot) {
|
|
736
|
+
this.mt.setState(snapshot.mt);
|
|
737
|
+
}
|
|
738
|
+
};
|
|
255
739
|
function createRandomGenerator(options) {
|
|
256
740
|
return new RandomGenerator(options);
|
|
257
741
|
}
|
|
742
|
+
var CONTENTS_SOLID = 1 << 0;
|
|
743
|
+
var CONTENTS_WINDOW = 1 << 1;
|
|
744
|
+
var CONTENTS_AUX = 1 << 2;
|
|
745
|
+
var CONTENTS_LAVA = 1 << 3;
|
|
746
|
+
var CONTENTS_SLIME = 1 << 4;
|
|
747
|
+
var CONTENTS_WATER = 1 << 5;
|
|
748
|
+
var CONTENTS_MIST = 1 << 6;
|
|
749
|
+
var CONTENTS_NO_WATERJUMP = 1 << 13;
|
|
750
|
+
var CONTENTS_PROJECTILECLIP = 1 << 14;
|
|
751
|
+
var CONTENTS_AREAPORTAL = 1 << 15;
|
|
752
|
+
var CONTENTS_PLAYERCLIP = 1 << 16;
|
|
753
|
+
var CONTENTS_MONSTERCLIP = 1 << 17;
|
|
754
|
+
var CONTENTS_CURRENT_0 = 1 << 18;
|
|
755
|
+
var CONTENTS_CURRENT_90 = 1 << 19;
|
|
756
|
+
var CONTENTS_CURRENT_180 = 1 << 20;
|
|
757
|
+
var CONTENTS_CURRENT_270 = 1 << 21;
|
|
758
|
+
var CONTENTS_CURRENT_UP = 1 << 22;
|
|
759
|
+
var CONTENTS_CURRENT_DOWN = 1 << 23;
|
|
760
|
+
var CONTENTS_ORIGIN = 1 << 24;
|
|
761
|
+
var CONTENTS_MONSTER = 1 << 25;
|
|
762
|
+
var CONTENTS_DEADMONSTER = 1 << 26;
|
|
763
|
+
var CONTENTS_DETAIL = 1 << 27;
|
|
764
|
+
var CONTENTS_TRANSLUCENT = 1 << 28;
|
|
765
|
+
var CONTENTS_LADDER = 1 << 29;
|
|
766
|
+
var CONTENTS_PLAYER = 1 << 30;
|
|
767
|
+
var CONTENTS_PROJECTILE = 1 << 31;
|
|
768
|
+
var SURF_LIGHT = 1 << 0;
|
|
769
|
+
var SURF_SLICK = 1 << 1;
|
|
770
|
+
var SURF_SKY = 1 << 2;
|
|
771
|
+
var SURF_WARP = 1 << 3;
|
|
772
|
+
var SURF_TRANS33 = 1 << 4;
|
|
773
|
+
var SURF_TRANS66 = 1 << 5;
|
|
774
|
+
var SURF_FLOWING = 1 << 6;
|
|
775
|
+
var SURF_NODRAW = 1 << 7;
|
|
776
|
+
var SURF_ALPHATEST = 1 << 25;
|
|
777
|
+
var SURF_N64_UV = 1 << 28;
|
|
778
|
+
var SURF_N64_SCROLL_X = 1 << 29;
|
|
779
|
+
var SURF_N64_SCROLL_Y = 1 << 30;
|
|
780
|
+
var SURF_N64_SCROLL_FLIP = 1 << 31;
|
|
781
|
+
var MASK_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
782
|
+
var MASK_PLAYERSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
783
|
+
var MASK_DEADSOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
784
|
+
var MASK_MONSTERSOLID = CONTENTS_SOLID | CONTENTS_MONSTERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
785
|
+
var MASK_WATER = CONTENTS_WATER | CONTENTS_LAVA | CONTENTS_SLIME;
|
|
786
|
+
var MASK_OPAQUE = CONTENTS_SOLID | CONTENTS_SLIME | CONTENTS_LAVA;
|
|
787
|
+
var MASK_SHOT = CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_PLAYER | CONTENTS_WINDOW | CONTENTS_DEADMONSTER;
|
|
788
|
+
var MASK_CURRENT = CONTENTS_CURRENT_0 | CONTENTS_CURRENT_90 | CONTENTS_CURRENT_180 | CONTENTS_CURRENT_270 | CONTENTS_CURRENT_UP | CONTENTS_CURRENT_DOWN;
|
|
789
|
+
var MASK_BLOCK_SIGHT = CONTENTS_SOLID | CONTENTS_LAVA | CONTENTS_SLIME | CONTENTS_MONSTER | CONTENTS_PLAYER;
|
|
790
|
+
var MASK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW;
|
|
791
|
+
var MASK_LADDER_NAV_SOLID = CONTENTS_SOLID | CONTENTS_WINDOW;
|
|
792
|
+
var MASK_WALK_NAV_SOLID = CONTENTS_SOLID | CONTENTS_PLAYERCLIP | CONTENTS_WINDOW | CONTENTS_MONSTERCLIP;
|
|
793
|
+
var MASK_PROJECTILE = MASK_SHOT | CONTENTS_PROJECTILECLIP;
|
|
794
|
+
var MAX_CHECKCOUNT = Number.MAX_SAFE_INTEGER - 1;
|
|
795
|
+
var CvarFlags = /* @__PURE__ */ ((CvarFlags2) => {
|
|
796
|
+
CvarFlags2[CvarFlags2["None"] = 0] = "None";
|
|
797
|
+
CvarFlags2[CvarFlags2["Archive"] = 1] = "Archive";
|
|
798
|
+
CvarFlags2[CvarFlags2["UserInfo"] = 2] = "UserInfo";
|
|
799
|
+
CvarFlags2[CvarFlags2["ServerInfo"] = 4] = "ServerInfo";
|
|
800
|
+
CvarFlags2[CvarFlags2["Latch"] = 8] = "Latch";
|
|
801
|
+
CvarFlags2[CvarFlags2["Cheat"] = 16] = "Cheat";
|
|
802
|
+
return CvarFlags2;
|
|
803
|
+
})(CvarFlags || {});
|
|
804
|
+
var MAX_CLIENTS = 256;
|
|
805
|
+
var MAX_LIGHTSTYLES = 256;
|
|
806
|
+
var MAX_MODELS = 8192;
|
|
807
|
+
var MAX_SOUNDS = 2048;
|
|
808
|
+
var MAX_IMAGES = 512;
|
|
809
|
+
var MAX_ITEMS = 256;
|
|
810
|
+
var MAX_GENERAL = MAX_CLIENTS * 2;
|
|
811
|
+
var MAX_SHADOW_LIGHTS = 256;
|
|
812
|
+
var MAX_WHEEL_ITEMS = 32;
|
|
813
|
+
var ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
814
|
+
ConfigStringIndex2[ConfigStringIndex2["Name"] = 0] = "Name";
|
|
815
|
+
ConfigStringIndex2[ConfigStringIndex2["CdTrack"] = 1] = "CdTrack";
|
|
816
|
+
ConfigStringIndex2[ConfigStringIndex2["Sky"] = 2] = "Sky";
|
|
817
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
818
|
+
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
819
|
+
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
820
|
+
ConfigStringIndex2[ConfigStringIndex2["HealthBarName"] = 55] = "HealthBarName";
|
|
821
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
822
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
823
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
824
|
+
ConfigStringIndex2[ConfigStringIndex2["Story"] = 54] = "Story";
|
|
825
|
+
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
826
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
827
|
+
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
828
|
+
ConfigStringIndex2[ConfigStringIndex2["Models"] = 62] = "Models";
|
|
829
|
+
ConfigStringIndex2[ConfigStringIndex2["Sounds"] = 62 + MAX_MODELS] = "Sounds";
|
|
830
|
+
ConfigStringIndex2[ConfigStringIndex2["Images"] = ConfigStringIndex2.Sounds + MAX_SOUNDS] = "Images";
|
|
831
|
+
ConfigStringIndex2[ConfigStringIndex2["Lights"] = ConfigStringIndex2.Images + MAX_IMAGES] = "Lights";
|
|
832
|
+
ConfigStringIndex2[ConfigStringIndex2["ShadowLights"] = ConfigStringIndex2.Lights + MAX_LIGHTSTYLES] = "ShadowLights";
|
|
833
|
+
ConfigStringIndex2[ConfigStringIndex2["Items"] = ConfigStringIndex2.ShadowLights + MAX_SHADOW_LIGHTS] = "Items";
|
|
834
|
+
ConfigStringIndex2[ConfigStringIndex2["PlayerSkins"] = ConfigStringIndex2.Items + MAX_ITEMS] = "PlayerSkins";
|
|
835
|
+
ConfigStringIndex2[ConfigStringIndex2["General"] = ConfigStringIndex2.PlayerSkins + MAX_CLIENTS] = "General";
|
|
836
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelWeapons"] = ConfigStringIndex2.General + MAX_GENERAL] = "WheelWeapons";
|
|
837
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
838
|
+
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
839
|
+
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
840
|
+
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
841
|
+
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
842
|
+
return ConfigStringIndex2;
|
|
843
|
+
})(ConfigStringIndex || {});
|
|
844
|
+
var MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
845
|
+
var replay_exports = {};
|
|
846
|
+
__export2(replay_exports, {
|
|
847
|
+
addReplayFrame: () => addReplayFrame,
|
|
848
|
+
createReplaySession: () => createReplaySession,
|
|
849
|
+
deserializeReplay: () => deserializeReplay,
|
|
850
|
+
serializeReplay: () => serializeReplay
|
|
851
|
+
});
|
|
258
852
|
function serializeReplay(session) {
|
|
259
853
|
return JSON.stringify(session, null, 2);
|
|
260
854
|
}
|
|
@@ -283,6 +877,14 @@ function addReplayFrame(session, cmd, serverFrame, startTime) {
|
|
|
283
877
|
timestamp: Date.now() - startTime
|
|
284
878
|
});
|
|
285
879
|
}
|
|
880
|
+
var WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
881
|
+
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
882
|
+
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
883
|
+
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
884
|
+
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
885
|
+
return WaterLevel4;
|
|
886
|
+
})(WaterLevel || {});
|
|
887
|
+
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
286
888
|
function applyPmoveFriction(params) {
|
|
287
889
|
const {
|
|
288
890
|
velocity,
|
|
@@ -381,6 +983,120 @@ function buildWaterWish(params) {
|
|
|
381
983
|
wishspeed
|
|
382
984
|
};
|
|
383
985
|
}
|
|
986
|
+
var ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
987
|
+
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
988
|
+
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
989
|
+
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
990
|
+
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
991
|
+
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
992
|
+
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
993
|
+
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
994
|
+
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
995
|
+
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
996
|
+
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
997
|
+
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
998
|
+
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
999
|
+
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
1000
|
+
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
1001
|
+
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
1002
|
+
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
1003
|
+
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
1004
|
+
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
1005
|
+
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
1006
|
+
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
1007
|
+
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
1008
|
+
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
1009
|
+
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
1010
|
+
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
1011
|
+
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
1012
|
+
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
1013
|
+
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
1014
|
+
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
1015
|
+
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
1016
|
+
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
1017
|
+
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
1018
|
+
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
1019
|
+
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
1020
|
+
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
1021
|
+
return ServerCommand22;
|
|
1022
|
+
})(ServerCommand || {});
|
|
1023
|
+
var TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
1024
|
+
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
1025
|
+
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
1026
|
+
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
1027
|
+
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
1028
|
+
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
1029
|
+
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
1030
|
+
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
1031
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
1032
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
1033
|
+
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
1034
|
+
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
1035
|
+
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
1036
|
+
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
1037
|
+
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
1038
|
+
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
1039
|
+
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
1040
|
+
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
1041
|
+
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
1042
|
+
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
1043
|
+
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
1044
|
+
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
1045
|
+
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
1046
|
+
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
1047
|
+
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
1048
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
1049
|
+
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
1050
|
+
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
1051
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
1052
|
+
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
1053
|
+
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
1054
|
+
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
1055
|
+
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
1056
|
+
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
1057
|
+
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
1058
|
+
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
1059
|
+
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
1060
|
+
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
1061
|
+
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
1062
|
+
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
1063
|
+
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
1064
|
+
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
1065
|
+
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
1066
|
+
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
1067
|
+
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
1068
|
+
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
1069
|
+
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
1070
|
+
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
1071
|
+
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
1072
|
+
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
1073
|
+
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
1074
|
+
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
1075
|
+
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
1076
|
+
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
1077
|
+
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
1078
|
+
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
1079
|
+
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
1080
|
+
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
1081
|
+
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
1082
|
+
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
1083
|
+
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
1084
|
+
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
1085
|
+
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
1086
|
+
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
1087
|
+
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
1088
|
+
return TempEntity2;
|
|
1089
|
+
})(TempEntity || {});
|
|
1090
|
+
var MZ_BLASTER = 0;
|
|
1091
|
+
var MZ_MACHINEGUN = 1;
|
|
1092
|
+
var MZ_SHOTGUN = 2;
|
|
1093
|
+
var MZ_CHAINGUN1 = 3;
|
|
1094
|
+
var MZ_RAILGUN = 6;
|
|
1095
|
+
var MZ_ROCKET = 7;
|
|
1096
|
+
var MZ_GRENADE = 8;
|
|
1097
|
+
var MZ_SSHOTGUN = 11;
|
|
1098
|
+
var MZ_BFG = 12;
|
|
1099
|
+
var MZ_HYPERBLASTER = 13;
|
|
384
1100
|
function toSigned16(val) {
|
|
385
1101
|
return val << 16 >> 16;
|
|
386
1102
|
}
|
|
@@ -426,6 +1142,191 @@ function setCompressedInteger(stats, startIndex, id, count, bitsPerValue) {
|
|
|
426
1142
|
const valueToWrite = base & ~mask | count << bitShift & mask;
|
|
427
1143
|
writeUint16LE(stats, startIndex, byteOffset, valueToWrite & 65535);
|
|
428
1144
|
}
|
|
1145
|
+
var PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
1146
|
+
PowerupId22["QuadDamage"] = "quad";
|
|
1147
|
+
PowerupId22["Invulnerability"] = "invulnerability";
|
|
1148
|
+
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
1149
|
+
PowerupId22["Rebreather"] = "rebreather";
|
|
1150
|
+
PowerupId22["Silencer"] = "silencer";
|
|
1151
|
+
PowerupId22["PowerScreen"] = "power_screen";
|
|
1152
|
+
PowerupId22["PowerShield"] = "power_shield";
|
|
1153
|
+
PowerupId22["QuadFire"] = "quad_fire";
|
|
1154
|
+
PowerupId22["Invisibility"] = "invisibility";
|
|
1155
|
+
PowerupId22["Bandolier"] = "bandolier";
|
|
1156
|
+
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
1157
|
+
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
1158
|
+
PowerupId22["DoubleDamage"] = "double_damage";
|
|
1159
|
+
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
1160
|
+
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
1161
|
+
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
1162
|
+
PowerupId22["Doppelganger"] = "doppelganger";
|
|
1163
|
+
PowerupId22["TagToken"] = "tag_token";
|
|
1164
|
+
PowerupId22["TechResistance"] = "tech_resistance";
|
|
1165
|
+
PowerupId22["TechStrength"] = "tech_strength";
|
|
1166
|
+
PowerupId22["TechHaste"] = "tech_haste";
|
|
1167
|
+
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
1168
|
+
PowerupId22["Flashlight"] = "flashlight";
|
|
1169
|
+
PowerupId22["Compass"] = "compass";
|
|
1170
|
+
return PowerupId22;
|
|
1171
|
+
})(PowerupId || {});
|
|
1172
|
+
var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
1173
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
1174
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
1175
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
1176
|
+
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
1177
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
1178
|
+
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
1179
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
1180
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
1181
|
+
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
1182
|
+
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
1183
|
+
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
1184
|
+
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
1185
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
1186
|
+
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
1187
|
+
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
1188
|
+
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
1189
|
+
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
1190
|
+
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
1191
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
1192
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
1193
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
1194
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
1195
|
+
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
1196
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
1197
|
+
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
1198
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
1199
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
1200
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
1201
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
1202
|
+
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
1203
|
+
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
1204
|
+
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
1205
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
1206
|
+
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
1207
|
+
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
1208
|
+
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
1209
|
+
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
1210
|
+
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
1211
|
+
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
1212
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
1213
|
+
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
1214
|
+
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
1215
|
+
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
1216
|
+
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
1217
|
+
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
1218
|
+
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
1219
|
+
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
1220
|
+
return PlayerStat2;
|
|
1221
|
+
})(PlayerStat || {});
|
|
1222
|
+
var AMMO_MAX = 12;
|
|
1223
|
+
var NUM_BITS_FOR_AMMO = 9;
|
|
1224
|
+
var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
1225
|
+
var POWERUP_MAX = 23;
|
|
1226
|
+
var NUM_BITS_FOR_POWERUP = 2;
|
|
1227
|
+
var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
1228
|
+
var POWERUP_STAT_MAP = {
|
|
1229
|
+
[
|
|
1230
|
+
"power_screen"
|
|
1231
|
+
/* PowerScreen */
|
|
1232
|
+
]: 0,
|
|
1233
|
+
[
|
|
1234
|
+
"power_shield"
|
|
1235
|
+
/* PowerShield */
|
|
1236
|
+
]: 1,
|
|
1237
|
+
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
1238
|
+
[
|
|
1239
|
+
"quad"
|
|
1240
|
+
/* QuadDamage */
|
|
1241
|
+
]: 3,
|
|
1242
|
+
[
|
|
1243
|
+
"quad_fire"
|
|
1244
|
+
/* QuadFire */
|
|
1245
|
+
]: 4,
|
|
1246
|
+
[
|
|
1247
|
+
"invulnerability"
|
|
1248
|
+
/* Invulnerability */
|
|
1249
|
+
]: 5,
|
|
1250
|
+
[
|
|
1251
|
+
"invisibility"
|
|
1252
|
+
/* Invisibility */
|
|
1253
|
+
]: 6,
|
|
1254
|
+
[
|
|
1255
|
+
"silencer"
|
|
1256
|
+
/* Silencer */
|
|
1257
|
+
]: 7,
|
|
1258
|
+
[
|
|
1259
|
+
"rebreather"
|
|
1260
|
+
/* Rebreather */
|
|
1261
|
+
]: 8,
|
|
1262
|
+
[
|
|
1263
|
+
"enviro_suit"
|
|
1264
|
+
/* EnviroSuit */
|
|
1265
|
+
]: 9,
|
|
1266
|
+
[
|
|
1267
|
+
"bandolier"
|
|
1268
|
+
/* Bandolier */
|
|
1269
|
+
]: 10,
|
|
1270
|
+
// Placeholder/Map mismatch handling?
|
|
1271
|
+
[
|
|
1272
|
+
"ammo_pack"
|
|
1273
|
+
/* AmmoPack */
|
|
1274
|
+
]: 10,
|
|
1275
|
+
// Original reused indices or had gaps?
|
|
1276
|
+
[
|
|
1277
|
+
"ir_goggles"
|
|
1278
|
+
/* IRGoggles */
|
|
1279
|
+
]: 11,
|
|
1280
|
+
[
|
|
1281
|
+
"double_damage"
|
|
1282
|
+
/* DoubleDamage */
|
|
1283
|
+
]: 12,
|
|
1284
|
+
[
|
|
1285
|
+
"sphere_vengeance"
|
|
1286
|
+
/* SphereVengeance */
|
|
1287
|
+
]: 13,
|
|
1288
|
+
[
|
|
1289
|
+
"sphere_hunter"
|
|
1290
|
+
/* SphereHunter */
|
|
1291
|
+
]: 14,
|
|
1292
|
+
[
|
|
1293
|
+
"sphere_defender"
|
|
1294
|
+
/* SphereDefender */
|
|
1295
|
+
]: 15,
|
|
1296
|
+
[
|
|
1297
|
+
"doppelganger"
|
|
1298
|
+
/* Doppelganger */
|
|
1299
|
+
]: 16,
|
|
1300
|
+
[
|
|
1301
|
+
"flashlight"
|
|
1302
|
+
/* Flashlight */
|
|
1303
|
+
]: 17,
|
|
1304
|
+
[
|
|
1305
|
+
"compass"
|
|
1306
|
+
/* Compass */
|
|
1307
|
+
]: 18,
|
|
1308
|
+
[
|
|
1309
|
+
"tech_resistance"
|
|
1310
|
+
/* TechResistance */
|
|
1311
|
+
]: 19,
|
|
1312
|
+
[
|
|
1313
|
+
"tech_strength"
|
|
1314
|
+
/* TechStrength */
|
|
1315
|
+
]: 20,
|
|
1316
|
+
[
|
|
1317
|
+
"tech_haste"
|
|
1318
|
+
/* TechHaste */
|
|
1319
|
+
]: 21,
|
|
1320
|
+
[
|
|
1321
|
+
"tech_regeneration"
|
|
1322
|
+
/* TechRegeneration */
|
|
1323
|
+
]: 22,
|
|
1324
|
+
// Add missing mappings to avoid runtime lookups failing for new types
|
|
1325
|
+
[
|
|
1326
|
+
"tag_token"
|
|
1327
|
+
/* TagToken */
|
|
1328
|
+
]: -1
|
|
1329
|
+
};
|
|
429
1330
|
function G_SetAmmoStat(stats, ammoId, count) {
|
|
430
1331
|
if (ammoId < 0 || ammoId >= AMMO_MAX) return;
|
|
431
1332
|
let val = count;
|
|
@@ -446,1382 +1347,666 @@ function G_SetPowerupStat(stats, powerupId, val) {
|
|
|
446
1347
|
if (safeVal < 0) safeVal = 0;
|
|
447
1348
|
setCompressedInteger(stats, 41, index, safeVal, NUM_BITS_FOR_POWERUP);
|
|
448
1349
|
}
|
|
449
|
-
var
|
|
450
|
-
|
|
451
|
-
"
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
1350
|
+
var RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
1351
|
+
RenderFx2[RenderFx2["MinLight"] = 1] = "MinLight";
|
|
1352
|
+
RenderFx2[RenderFx2["ViewerModel"] = 2] = "ViewerModel";
|
|
1353
|
+
RenderFx2[RenderFx2["WeaponModel"] = 4] = "WeaponModel";
|
|
1354
|
+
RenderFx2[RenderFx2["FullBright"] = 8] = "FullBright";
|
|
1355
|
+
RenderFx2[RenderFx2["DepthHack"] = 16] = "DepthHack";
|
|
1356
|
+
RenderFx2[RenderFx2["Translucent"] = 32] = "Translucent";
|
|
1357
|
+
RenderFx2[RenderFx2["FrameLerp"] = 64] = "FrameLerp";
|
|
1358
|
+
RenderFx2[RenderFx2["Beam"] = 128] = "Beam";
|
|
1359
|
+
RenderFx2[RenderFx2["CustomLight"] = 256] = "CustomLight";
|
|
1360
|
+
RenderFx2[RenderFx2["Glow"] = 512] = "Glow";
|
|
1361
|
+
RenderFx2[RenderFx2["ShellRed"] = 1024] = "ShellRed";
|
|
1362
|
+
RenderFx2[RenderFx2["ShellGreen"] = 2048] = "ShellGreen";
|
|
1363
|
+
RenderFx2[RenderFx2["ShellBlue"] = 4096] = "ShellBlue";
|
|
1364
|
+
RenderFx2[RenderFx2["IrVisible"] = 32768] = "IrVisible";
|
|
1365
|
+
RenderFx2[RenderFx2["ShellDouble"] = 65536] = "ShellDouble";
|
|
1366
|
+
RenderFx2[RenderFx2["ShellHalfDam"] = 131072] = "ShellHalfDam";
|
|
1367
|
+
RenderFx2[RenderFx2["MinLightPlus"] = 262144] = "MinLightPlus";
|
|
1368
|
+
RenderFx2[RenderFx2["ExtraLight"] = 524288] = "ExtraLight";
|
|
1369
|
+
RenderFx2[RenderFx2["BeamLightning"] = 1048576] = "BeamLightning";
|
|
1370
|
+
RenderFx2[RenderFx2["Flashlight"] = 2097152] = "Flashlight";
|
|
1371
|
+
return RenderFx2;
|
|
1372
|
+
})(RenderFx || {});
|
|
1373
|
+
var entityFlags_exports = {};
|
|
1374
|
+
__export2(entityFlags_exports, {
|
|
1375
|
+
U_ANGLE1: () => U_ANGLE1,
|
|
1376
|
+
U_ANGLE2: () => U_ANGLE2,
|
|
1377
|
+
U_ANGLE3: () => U_ANGLE3,
|
|
1378
|
+
U_EFFECTS: () => U_EFFECTS,
|
|
1379
|
+
U_EVENT: () => U_EVENT,
|
|
1380
|
+
U_FRAME: () => U_FRAME,
|
|
1381
|
+
U_MODEL: () => U_MODEL,
|
|
1382
|
+
U_MODEL2: () => U_MODEL2,
|
|
1383
|
+
U_MODEL3: () => U_MODEL3,
|
|
1384
|
+
U_MODEL4: () => U_MODEL4,
|
|
1385
|
+
U_MOREBITS: () => U_MOREBITS,
|
|
1386
|
+
U_NUMBER: () => U_NUMBER,
|
|
1387
|
+
U_ORIGIN1: () => U_ORIGIN1,
|
|
1388
|
+
U_ORIGIN2: () => U_ORIGIN2,
|
|
1389
|
+
U_ORIGIN3: () => U_ORIGIN3,
|
|
1390
|
+
U_REMOVE: () => U_REMOVE,
|
|
1391
|
+
U_RENDERFX: () => U_RENDERFX,
|
|
1392
|
+
U_SKIN: () => U_SKIN,
|
|
1393
|
+
U_SOLID: () => U_SOLID,
|
|
1394
|
+
U_SOUND: () => U_SOUND
|
|
1395
|
+
});
|
|
1396
|
+
var U_NUMBER = 1 << 0;
|
|
1397
|
+
var U_MODEL = 1 << 1;
|
|
1398
|
+
var U_SOUND = 1 << 2;
|
|
1399
|
+
var U_ORIGIN1 = 1 << 3;
|
|
1400
|
+
var U_ORIGIN2 = 1 << 4;
|
|
1401
|
+
var U_ORIGIN3 = 1 << 5;
|
|
1402
|
+
var U_ANGLE1 = 1 << 6;
|
|
1403
|
+
var U_ANGLE2 = 1 << 7;
|
|
1404
|
+
var U_ANGLE3 = 1 << 8;
|
|
1405
|
+
var U_FRAME = 1 << 9;
|
|
1406
|
+
var U_SKIN = 1 << 10;
|
|
1407
|
+
var U_EFFECTS = 1 << 11;
|
|
1408
|
+
var U_RENDERFX = 1 << 12;
|
|
1409
|
+
var U_SOLID = 1 << 13;
|
|
1410
|
+
var U_EVENT = 1 << 14;
|
|
1411
|
+
var U_MOREBITS = 1 << 15;
|
|
1412
|
+
var U_MODEL2 = 1 << 0;
|
|
1413
|
+
var U_MODEL3 = 1 << 1;
|
|
1414
|
+
var U_MODEL4 = 1 << 2;
|
|
1415
|
+
var U_REMOVE = 32768;
|
|
1416
|
+
var FRAMETIME2 = 0.025;
|
|
1417
|
+
var MASK_WATER2 = 33554432;
|
|
1418
|
+
var WaterLevel3 = {
|
|
1419
|
+
None: 0,
|
|
1420
|
+
Feet: 1,
|
|
1421
|
+
Waist: 2,
|
|
1422
|
+
Under: 3
|
|
1423
|
+
};
|
|
1424
|
+
var categorizePosition2 = (state, trace) => {
|
|
1425
|
+
const point = { ...state.origin };
|
|
1426
|
+
point.z -= 0.25;
|
|
1427
|
+
const traceResult = trace(state.origin, point);
|
|
1428
|
+
return {
|
|
1429
|
+
...state,
|
|
1430
|
+
onGround: traceResult.fraction < 1
|
|
1431
|
+
};
|
|
1432
|
+
};
|
|
1433
|
+
var checkWater = (state, pointContents2) => {
|
|
1434
|
+
const point = { ...state.origin };
|
|
1435
|
+
const { mins, maxs } = state;
|
|
1436
|
+
point.z = state.origin.z + mins.z + 1;
|
|
1437
|
+
const contents = pointContents2(point);
|
|
1438
|
+
if (!(contents & MASK_WATER2)) {
|
|
1439
|
+
return { ...state, waterLevel: WaterLevel3.None };
|
|
1440
|
+
}
|
|
1441
|
+
let waterLevel = WaterLevel3.Feet;
|
|
1442
|
+
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1443
|
+
point.z = waist;
|
|
1444
|
+
const waistContents = pointContents2(point);
|
|
1445
|
+
if (waistContents & MASK_WATER2) {
|
|
1446
|
+
waterLevel = WaterLevel3.Waist;
|
|
1447
|
+
const head = state.origin.z + 22;
|
|
1448
|
+
point.z = head;
|
|
1449
|
+
const headContents = pointContents2(point);
|
|
1450
|
+
if (headContents & MASK_WATER2) {
|
|
1451
|
+
waterLevel = WaterLevel3.Under;
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
return { ...state, waterLevel };
|
|
1455
|
+
};
|
|
1456
|
+
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1457
|
+
let newState = { ...state };
|
|
1458
|
+
newState = categorizePosition2(newState, trace);
|
|
1459
|
+
newState = checkWater(newState, pointContents2);
|
|
1460
|
+
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1461
|
+
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1462
|
+
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1463
|
+
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1464
|
+
y: viewAngles.y,
|
|
1465
|
+
z: viewAngles.z
|
|
1466
|
+
};
|
|
1467
|
+
const { forward, right } = angleVectors(adjustedAngles);
|
|
1468
|
+
const frictionedVelocity = applyPmoveFriction({
|
|
1469
|
+
velocity,
|
|
1470
|
+
frametime: FRAMETIME2,
|
|
1471
|
+
onGround,
|
|
1472
|
+
groundIsSlick: false,
|
|
1473
|
+
onLadder: false,
|
|
1474
|
+
waterlevel: waterLevel,
|
|
1475
|
+
pmFriction: 6,
|
|
1476
|
+
pmStopSpeed: 100,
|
|
1477
|
+
pmWaterFriction: 1
|
|
1478
|
+
});
|
|
1479
|
+
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1480
|
+
forward,
|
|
1481
|
+
right,
|
|
1482
|
+
cmd,
|
|
1483
|
+
maxSpeed: 320
|
|
1484
|
+
}) : buildAirGroundWish({
|
|
1485
|
+
forward,
|
|
1486
|
+
right,
|
|
1487
|
+
cmd,
|
|
1488
|
+
maxSpeed: 320
|
|
1489
|
+
});
|
|
1490
|
+
const finalVelocity = applyPmoveAccelerate({
|
|
1491
|
+
velocity: frictionedVelocity,
|
|
1492
|
+
wishdir: wish.wishdir,
|
|
1493
|
+
wishspeed: wish.wishspeed,
|
|
1494
|
+
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1495
|
+
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1496
|
+
frametime: FRAMETIME2
|
|
1497
|
+
});
|
|
1498
|
+
const traceResult = trace(origin, {
|
|
1499
|
+
x: origin.x + finalVelocity.x * FRAMETIME2,
|
|
1500
|
+
y: origin.y + finalVelocity.y * FRAMETIME2,
|
|
1501
|
+
z: origin.z + finalVelocity.z * FRAMETIME2
|
|
1502
|
+
});
|
|
1503
|
+
return {
|
|
1504
|
+
...newState,
|
|
1505
|
+
origin: traceResult.endpos,
|
|
1506
|
+
velocity: finalVelocity
|
|
1507
|
+
};
|
|
1508
|
+
};
|
|
1509
|
+
var BinaryWriter = class {
|
|
1510
|
+
constructor(sizeOrBuffer = 1400) {
|
|
1511
|
+
if (typeof sizeOrBuffer === "number") {
|
|
1512
|
+
this.buffer = new Uint8Array(sizeOrBuffer);
|
|
1513
|
+
this.fixed = false;
|
|
1514
|
+
} else {
|
|
1515
|
+
this.buffer = sizeOrBuffer;
|
|
1516
|
+
this.fixed = true;
|
|
1517
|
+
}
|
|
1518
|
+
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1519
|
+
this.offset = 0;
|
|
1520
|
+
}
|
|
1521
|
+
ensureSpace(bytes) {
|
|
1522
|
+
if (this.offset + bytes > this.buffer.byteLength) {
|
|
1523
|
+
if (this.fixed) {
|
|
1524
|
+
throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
|
|
1525
|
+
}
|
|
1526
|
+
const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
|
|
1527
|
+
const newBuffer = new Uint8Array(newSize);
|
|
1528
|
+
newBuffer.set(this.buffer);
|
|
1529
|
+
this.buffer = newBuffer;
|
|
1530
|
+
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
writeByte(value) {
|
|
1534
|
+
this.ensureSpace(1);
|
|
1535
|
+
this.view.setUint8(this.offset, value);
|
|
1536
|
+
this.offset += 1;
|
|
1537
|
+
}
|
|
1538
|
+
writeChar(value) {
|
|
1539
|
+
this.ensureSpace(1);
|
|
1540
|
+
this.view.setInt8(this.offset, value);
|
|
1541
|
+
this.offset += 1;
|
|
1542
|
+
}
|
|
1543
|
+
writeShort(value) {
|
|
1544
|
+
this.ensureSpace(2);
|
|
1545
|
+
this.view.setInt16(this.offset, value, true);
|
|
1546
|
+
this.offset += 2;
|
|
1547
|
+
}
|
|
1548
|
+
writeLong(value) {
|
|
1549
|
+
this.ensureSpace(4);
|
|
1550
|
+
this.view.setInt32(this.offset, value, true);
|
|
1551
|
+
this.offset += 4;
|
|
1552
|
+
}
|
|
1553
|
+
writeFloat(value) {
|
|
1554
|
+
this.ensureSpace(4);
|
|
1555
|
+
this.view.setFloat32(this.offset, value, true);
|
|
1556
|
+
this.offset += 4;
|
|
1557
|
+
}
|
|
1558
|
+
writeString(value) {
|
|
1559
|
+
const len = value.length;
|
|
1560
|
+
this.ensureSpace(len + 1);
|
|
1561
|
+
for (let i = 0; i < len; i++) {
|
|
1562
|
+
this.view.setUint8(this.offset + i, value.charCodeAt(i));
|
|
1563
|
+
}
|
|
1564
|
+
this.view.setUint8(this.offset + len, 0);
|
|
1565
|
+
this.offset += len + 1;
|
|
1566
|
+
}
|
|
1567
|
+
writeCoord(value) {
|
|
1568
|
+
this.writeShort(Math.trunc(value * 8));
|
|
1569
|
+
}
|
|
1570
|
+
writeAngle(value) {
|
|
1571
|
+
this.writeByte(Math.trunc(value * 256 / 360) & 255);
|
|
1572
|
+
}
|
|
1573
|
+
writeAngle16(value) {
|
|
1574
|
+
this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
|
|
1575
|
+
}
|
|
1576
|
+
writePos(pos) {
|
|
1577
|
+
this.writeCoord(pos.x);
|
|
1578
|
+
this.writeCoord(pos.y);
|
|
1579
|
+
this.writeCoord(pos.z);
|
|
1580
|
+
}
|
|
1581
|
+
writeDir(dir) {
|
|
1582
|
+
let maxDot = -1;
|
|
1583
|
+
let bestIndex = 0;
|
|
1584
|
+
if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
|
|
1585
|
+
this.writeByte(0);
|
|
1586
|
+
return;
|
|
1587
|
+
}
|
|
1588
|
+
for (let i = 0; i < ANORMS.length; i++) {
|
|
1589
|
+
const norm = ANORMS[i];
|
|
1590
|
+
const dot = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
|
|
1591
|
+
if (dot > maxDot) {
|
|
1592
|
+
maxDot = dot;
|
|
1593
|
+
bestIndex = i;
|
|
641
1594
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
1595
|
+
}
|
|
1596
|
+
this.writeByte(bestIndex);
|
|
1597
|
+
}
|
|
1598
|
+
getData() {
|
|
1599
|
+
return this.buffer.slice(0, this.offset);
|
|
1600
|
+
}
|
|
1601
|
+
getBuffer() {
|
|
1602
|
+
return this.buffer;
|
|
1603
|
+
}
|
|
1604
|
+
getOffset() {
|
|
1605
|
+
return this.offset;
|
|
1606
|
+
}
|
|
1607
|
+
reset() {
|
|
1608
|
+
this.offset = 0;
|
|
1609
|
+
}
|
|
1610
|
+
};
|
|
1611
|
+
var _NetChan = class _NetChan2 {
|
|
1612
|
+
constructor() {
|
|
1613
|
+
this.qport = 0;
|
|
1614
|
+
this.incomingSequence = 0;
|
|
1615
|
+
this.outgoingSequence = 0;
|
|
1616
|
+
this.incomingAcknowledged = 0;
|
|
1617
|
+
this.incomingReliableAcknowledged = false;
|
|
1618
|
+
this.incomingReliableSequence = 0;
|
|
1619
|
+
this.outgoingReliableSequence = 0;
|
|
1620
|
+
this.reliableLength = 0;
|
|
1621
|
+
this.fragmentSendOffset = 0;
|
|
1622
|
+
this.fragmentBuffer = null;
|
|
1623
|
+
this.fragmentLength = 0;
|
|
1624
|
+
this.fragmentReceived = 0;
|
|
1625
|
+
this.lastReceived = 0;
|
|
1626
|
+
this.lastSent = 0;
|
|
1627
|
+
this.remoteAddress = null;
|
|
1628
|
+
this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
|
|
1629
|
+
const now = Date.now();
|
|
1630
|
+
this.lastReceived = now;
|
|
1631
|
+
this.lastSent = now;
|
|
1632
|
+
this.qport = Math.floor(Math.random() * 65536);
|
|
1633
|
+
}
|
|
1634
|
+
/**
|
|
1635
|
+
* Setup the netchan with specific settings
|
|
1636
|
+
*/
|
|
1637
|
+
setup(qport, address = null) {
|
|
1638
|
+
this.qport = qport;
|
|
1639
|
+
this.remoteAddress = address;
|
|
1640
|
+
this.reset();
|
|
1641
|
+
}
|
|
1642
|
+
/**
|
|
1643
|
+
* Reset the netchan state
|
|
1644
|
+
*/
|
|
1645
|
+
reset() {
|
|
1646
|
+
this.incomingSequence = 0;
|
|
1647
|
+
this.outgoingSequence = 0;
|
|
1648
|
+
this.incomingAcknowledged = 0;
|
|
1649
|
+
this.incomingReliableAcknowledged = false;
|
|
1650
|
+
this.incomingReliableSequence = 0;
|
|
1651
|
+
this.outgoingReliableSequence = 0;
|
|
1652
|
+
this.reliableLength = 0;
|
|
1653
|
+
this.reliableMessage.reset();
|
|
1654
|
+
this.fragmentSendOffset = 0;
|
|
1655
|
+
this.fragmentBuffer = null;
|
|
1656
|
+
this.fragmentLength = 0;
|
|
1657
|
+
this.fragmentReceived = 0;
|
|
1658
|
+
this.lastReceived = Date.now();
|
|
1659
|
+
this.lastSent = Date.now();
|
|
1660
|
+
}
|
|
1661
|
+
/**
|
|
1662
|
+
* Transmits a packet containing reliable and unreliable data
|
|
1663
|
+
*/
|
|
1664
|
+
transmit(unreliableData) {
|
|
1665
|
+
this.outgoingSequence++;
|
|
1666
|
+
this.lastSent = Date.now();
|
|
1667
|
+
let sendReliableLength = 0;
|
|
1668
|
+
let isFragment = false;
|
|
1669
|
+
let fragmentStart = 0;
|
|
1670
|
+
if (this.reliableLength > 0) {
|
|
1671
|
+
if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
|
|
1672
|
+
isFragment = true;
|
|
1673
|
+
if (this.fragmentSendOffset >= this.reliableLength) {
|
|
1674
|
+
this.fragmentSendOffset = 0;
|
|
648
1675
|
}
|
|
649
|
-
this.
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
this.twist();
|
|
1676
|
+
const remaining = this.reliableLength - this.fragmentSendOffset;
|
|
1677
|
+
sendReliableLength = remaining;
|
|
1678
|
+
if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
|
|
1679
|
+
sendReliableLength = _NetChan2.FRAGMENT_SIZE;
|
|
654
1680
|
}
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
1681
|
+
fragmentStart = this.fragmentSendOffset;
|
|
1682
|
+
this.fragmentSendOffset += sendReliableLength;
|
|
1683
|
+
} else {
|
|
1684
|
+
sendReliableLength = this.reliableLength;
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
const headerSize = _NetChan2.PACKET_HEADER;
|
|
1688
|
+
const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
|
|
1689
|
+
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
1690
|
+
if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
|
|
1691
|
+
unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
|
|
1692
|
+
if (unreliableSize < 0) unreliableSize = 0;
|
|
1693
|
+
}
|
|
1694
|
+
const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
|
|
1695
|
+
const view = new DataView(buffer);
|
|
1696
|
+
const result = new Uint8Array(buffer);
|
|
1697
|
+
let sequence = this.outgoingSequence;
|
|
1698
|
+
if (sendReliableLength > 0) {
|
|
1699
|
+
sequence |= 2147483648;
|
|
1700
|
+
if ((this.outgoingReliableSequence & 1) !== 0) {
|
|
1701
|
+
sequence |= 1073741824;
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1704
|
+
view.setUint32(0, sequence, true);
|
|
1705
|
+
let ack = this.incomingSequence;
|
|
1706
|
+
if ((this.incomingReliableSequence & 1) !== 0) {
|
|
1707
|
+
ack |= 2147483648;
|
|
1708
|
+
}
|
|
1709
|
+
view.setUint32(4, ack, true);
|
|
1710
|
+
view.setUint16(8, this.qport, true);
|
|
1711
|
+
let offset = headerSize;
|
|
1712
|
+
if (sendReliableLength > 0) {
|
|
1713
|
+
let lengthField = sendReliableLength;
|
|
1714
|
+
if (isFragment) {
|
|
1715
|
+
lengthField |= 32768;
|
|
1716
|
+
}
|
|
1717
|
+
view.setUint16(offset, lengthField, true);
|
|
1718
|
+
offset += 2;
|
|
1719
|
+
if (isFragment) {
|
|
1720
|
+
view.setUint32(offset, fragmentStart, true);
|
|
1721
|
+
offset += 4;
|
|
1722
|
+
view.setUint32(offset, this.reliableLength, true);
|
|
1723
|
+
offset += 4;
|
|
1724
|
+
}
|
|
1725
|
+
const reliableBuffer = this.reliableMessage.getBuffer();
|
|
1726
|
+
const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
|
|
1727
|
+
result.set(reliableBytes, offset);
|
|
1728
|
+
offset += sendReliableLength;
|
|
1729
|
+
}
|
|
1730
|
+
if (unreliableData && unreliableSize > 0) {
|
|
1731
|
+
const chunk = unreliableData.slice(0, unreliableSize);
|
|
1732
|
+
result.set(chunk, offset);
|
|
1733
|
+
}
|
|
1734
|
+
return result;
|
|
1735
|
+
}
|
|
1736
|
+
/**
|
|
1737
|
+
* Processes a received packet
|
|
1738
|
+
* Returns the payload data (reliable + unreliable) to be processed, or null if discarded
|
|
1739
|
+
*/
|
|
1740
|
+
process(packet) {
|
|
1741
|
+
if (packet.length < _NetChan2.PACKET_HEADER) {
|
|
1742
|
+
return null;
|
|
1743
|
+
}
|
|
1744
|
+
this.lastReceived = Date.now();
|
|
1745
|
+
const view = new DataView(packet.buffer, packet.byteOffset, packet.byteLength);
|
|
1746
|
+
const sequence = view.getUint32(0, true);
|
|
1747
|
+
const ack = view.getUint32(4, true);
|
|
1748
|
+
const qport = view.getUint16(8, true);
|
|
1749
|
+
if (this.qport !== qport) {
|
|
1750
|
+
return null;
|
|
1751
|
+
}
|
|
1752
|
+
const seqNumberClean = sequence & ~(2147483648 | 1073741824);
|
|
1753
|
+
if ((seqNumberClean - this.incomingSequence | 0) <= 0) {
|
|
1754
|
+
return null;
|
|
1755
|
+
}
|
|
1756
|
+
this.incomingSequence = seqNumberClean;
|
|
1757
|
+
const ackNumber = ack & ~2147483648;
|
|
1758
|
+
const ackReliable = (ack & 2147483648) !== 0;
|
|
1759
|
+
if (ackNumber > this.incomingAcknowledged) {
|
|
1760
|
+
this.incomingAcknowledged = ackNumber;
|
|
1761
|
+
}
|
|
1762
|
+
if (this.reliableLength > 0) {
|
|
1763
|
+
const receivedAckBit = ackReliable ? 1 : 0;
|
|
1764
|
+
const currentReliableBit = this.outgoingReliableSequence & 1;
|
|
1765
|
+
if (receivedAckBit !== currentReliableBit) {
|
|
1766
|
+
this.reliableLength = 0;
|
|
1767
|
+
this.reliableMessage.reset();
|
|
1768
|
+
this.outgoingReliableSequence ^= 1;
|
|
1769
|
+
this.fragmentSendOffset = 0;
|
|
661
1770
|
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
1771
|
+
}
|
|
1772
|
+
const hasReliableData = (sequence & 2147483648) !== 0;
|
|
1773
|
+
const reliableSeqBit = (sequence & 1073741824) !== 0 ? 1 : 0;
|
|
1774
|
+
let payloadOffset = _NetChan2.PACKET_HEADER;
|
|
1775
|
+
let reliableData = null;
|
|
1776
|
+
if (hasReliableData) {
|
|
1777
|
+
if (payloadOffset + 2 > packet.byteLength) return null;
|
|
1778
|
+
let reliableLen = view.getUint16(payloadOffset, true);
|
|
1779
|
+
payloadOffset += 2;
|
|
1780
|
+
const isFragment = (reliableLen & 32768) !== 0;
|
|
1781
|
+
reliableLen &= 32767;
|
|
1782
|
+
const expectedBit = this.incomingReliableSequence & 1;
|
|
1783
|
+
if (reliableSeqBit === expectedBit) {
|
|
1784
|
+
if (isFragment) {
|
|
1785
|
+
if (payloadOffset + 8 > packet.byteLength) return null;
|
|
1786
|
+
const fragStart = view.getUint32(payloadOffset, true);
|
|
1787
|
+
payloadOffset += 4;
|
|
1788
|
+
const fragTotal = view.getUint32(payloadOffset, true);
|
|
1789
|
+
payloadOffset += 4;
|
|
1790
|
+
if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1791
|
+
console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
|
|
1792
|
+
return null;
|
|
668
1793
|
}
|
|
669
|
-
this.
|
|
1794
|
+
if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
|
|
1795
|
+
this.fragmentBuffer = new Uint8Array(fragTotal);
|
|
1796
|
+
this.fragmentLength = fragTotal;
|
|
1797
|
+
this.fragmentReceived = 0;
|
|
1798
|
+
}
|
|
1799
|
+
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1800
|
+
const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
|
|
1801
|
+
if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
|
|
1802
|
+
this.fragmentBuffer.set(data, fragStart);
|
|
1803
|
+
this.fragmentReceived += reliableLen;
|
|
1804
|
+
if (this.fragmentReceived >= fragTotal) {
|
|
1805
|
+
reliableData = this.fragmentBuffer;
|
|
1806
|
+
this.incomingReliableSequence++;
|
|
1807
|
+
this.fragmentBuffer = null;
|
|
1808
|
+
this.fragmentLength = 0;
|
|
1809
|
+
this.fragmentReceived = 0;
|
|
1810
|
+
}
|
|
1811
|
+
}
|
|
1812
|
+
} else {
|
|
1813
|
+
this.incomingReliableSequence++;
|
|
1814
|
+
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1815
|
+
reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
|
|
670
1816
|
}
|
|
671
|
-
this.index = 0;
|
|
672
|
-
}
|
|
673
|
-
getState() {
|
|
674
|
-
return {
|
|
675
|
-
index: this.index,
|
|
676
|
-
state: Array.from(this.state)
|
|
677
|
-
};
|
|
678
1817
|
}
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelAmmo"] = ConfigStringIndex2.WheelWeapons + MAX_WHEEL_ITEMS] = "WheelAmmo";
|
|
856
|
-
ConfigStringIndex2[ConfigStringIndex2["WheelPowerups"] = ConfigStringIndex2.WheelAmmo + MAX_WHEEL_ITEMS] = "WheelPowerups";
|
|
857
|
-
ConfigStringIndex2[ConfigStringIndex2["CdLoopCount"] = ConfigStringIndex2.WheelPowerups + MAX_WHEEL_ITEMS] = "CdLoopCount";
|
|
858
|
-
ConfigStringIndex2[ConfigStringIndex2["GameStyle"] = ConfigStringIndex2.CdLoopCount + 1] = "GameStyle";
|
|
859
|
-
ConfigStringIndex2[ConfigStringIndex2["MaxConfigStrings"] = ConfigStringIndex2.GameStyle + 1] = "MaxConfigStrings";
|
|
860
|
-
return ConfigStringIndex2;
|
|
861
|
-
})(ConfigStringIndex || {});
|
|
862
|
-
MAX_CONFIGSTRINGS = ConfigStringIndex.MaxConfigStrings;
|
|
863
|
-
replay_exports = {};
|
|
864
|
-
__export2(replay_exports, {
|
|
865
|
-
addReplayFrame: () => addReplayFrame,
|
|
866
|
-
createReplaySession: () => createReplaySession,
|
|
867
|
-
deserializeReplay: () => deserializeReplay,
|
|
868
|
-
serializeReplay: () => serializeReplay
|
|
869
|
-
});
|
|
870
|
-
WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
871
|
-
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
872
|
-
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
873
|
-
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
874
|
-
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
875
|
-
return WaterLevel4;
|
|
876
|
-
})(WaterLevel || {});
|
|
877
|
-
WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
878
|
-
ServerCommand = /* @__PURE__ */ ((ServerCommand22) => {
|
|
879
|
-
ServerCommand22[ServerCommand22["bad"] = 0] = "bad";
|
|
880
|
-
ServerCommand22[ServerCommand22["muzzleflash"] = 1] = "muzzleflash";
|
|
881
|
-
ServerCommand22[ServerCommand22["muzzleflash2"] = 2] = "muzzleflash2";
|
|
882
|
-
ServerCommand22[ServerCommand22["temp_entity"] = 3] = "temp_entity";
|
|
883
|
-
ServerCommand22[ServerCommand22["layout"] = 4] = "layout";
|
|
884
|
-
ServerCommand22[ServerCommand22["inventory"] = 5] = "inventory";
|
|
885
|
-
ServerCommand22[ServerCommand22["nop"] = 6] = "nop";
|
|
886
|
-
ServerCommand22[ServerCommand22["disconnect"] = 7] = "disconnect";
|
|
887
|
-
ServerCommand22[ServerCommand22["reconnect"] = 8] = "reconnect";
|
|
888
|
-
ServerCommand22[ServerCommand22["sound"] = 9] = "sound";
|
|
889
|
-
ServerCommand22[ServerCommand22["print"] = 10] = "print";
|
|
890
|
-
ServerCommand22[ServerCommand22["stufftext"] = 11] = "stufftext";
|
|
891
|
-
ServerCommand22[ServerCommand22["serverdata"] = 12] = "serverdata";
|
|
892
|
-
ServerCommand22[ServerCommand22["configstring"] = 13] = "configstring";
|
|
893
|
-
ServerCommand22[ServerCommand22["spawnbaseline"] = 14] = "spawnbaseline";
|
|
894
|
-
ServerCommand22[ServerCommand22["centerprint"] = 15] = "centerprint";
|
|
895
|
-
ServerCommand22[ServerCommand22["download"] = 16] = "download";
|
|
896
|
-
ServerCommand22[ServerCommand22["playerinfo"] = 17] = "playerinfo";
|
|
897
|
-
ServerCommand22[ServerCommand22["packetentities"] = 18] = "packetentities";
|
|
898
|
-
ServerCommand22[ServerCommand22["deltapacketentities"] = 19] = "deltapacketentities";
|
|
899
|
-
ServerCommand22[ServerCommand22["frame"] = 20] = "frame";
|
|
900
|
-
ServerCommand22[ServerCommand22["splitclient"] = 21] = "splitclient";
|
|
901
|
-
ServerCommand22[ServerCommand22["configblast"] = 22] = "configblast";
|
|
902
|
-
ServerCommand22[ServerCommand22["spawnbaselineblast"] = 23] = "spawnbaselineblast";
|
|
903
|
-
ServerCommand22[ServerCommand22["level_restart"] = 24] = "level_restart";
|
|
904
|
-
ServerCommand22[ServerCommand22["damage"] = 25] = "damage";
|
|
905
|
-
ServerCommand22[ServerCommand22["locprint"] = 26] = "locprint";
|
|
906
|
-
ServerCommand22[ServerCommand22["fog"] = 27] = "fog";
|
|
907
|
-
ServerCommand22[ServerCommand22["waitingforplayers"] = 28] = "waitingforplayers";
|
|
908
|
-
ServerCommand22[ServerCommand22["bot_chat"] = 29] = "bot_chat";
|
|
909
|
-
ServerCommand22[ServerCommand22["poi"] = 30] = "poi";
|
|
910
|
-
ServerCommand22[ServerCommand22["help_path"] = 31] = "help_path";
|
|
911
|
-
ServerCommand22[ServerCommand22["muzzleflash3"] = 32] = "muzzleflash3";
|
|
912
|
-
ServerCommand22[ServerCommand22["achievement"] = 33] = "achievement";
|
|
913
|
-
return ServerCommand22;
|
|
914
|
-
})(ServerCommand || {});
|
|
915
|
-
TempEntity = /* @__PURE__ */ ((TempEntity2) => {
|
|
916
|
-
TempEntity2[TempEntity2["GUNSHOT"] = 0] = "GUNSHOT";
|
|
917
|
-
TempEntity2[TempEntity2["BLOOD"] = 1] = "BLOOD";
|
|
918
|
-
TempEntity2[TempEntity2["BLASTER"] = 2] = "BLASTER";
|
|
919
|
-
TempEntity2[TempEntity2["RAILTRAIL"] = 3] = "RAILTRAIL";
|
|
920
|
-
TempEntity2[TempEntity2["SHOTGUN"] = 4] = "SHOTGUN";
|
|
921
|
-
TempEntity2[TempEntity2["EXPLOSION1"] = 5] = "EXPLOSION1";
|
|
922
|
-
TempEntity2[TempEntity2["EXPLOSION2"] = 6] = "EXPLOSION2";
|
|
923
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION"] = 7] = "ROCKET_EXPLOSION";
|
|
924
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION"] = 8] = "GRENADE_EXPLOSION";
|
|
925
|
-
TempEntity2[TempEntity2["SPARKS"] = 9] = "SPARKS";
|
|
926
|
-
TempEntity2[TempEntity2["SPLASH"] = 10] = "SPLASH";
|
|
927
|
-
TempEntity2[TempEntity2["BUBBLETRAIL"] = 11] = "BUBBLETRAIL";
|
|
928
|
-
TempEntity2[TempEntity2["SCREEN_SPARKS"] = 12] = "SCREEN_SPARKS";
|
|
929
|
-
TempEntity2[TempEntity2["SHIELD_SPARKS"] = 13] = "SHIELD_SPARKS";
|
|
930
|
-
TempEntity2[TempEntity2["BULLET_SPARKS"] = 14] = "BULLET_SPARKS";
|
|
931
|
-
TempEntity2[TempEntity2["LASER_SPARKS"] = 15] = "LASER_SPARKS";
|
|
932
|
-
TempEntity2[TempEntity2["PARASITE_ATTACK"] = 16] = "PARASITE_ATTACK";
|
|
933
|
-
TempEntity2[TempEntity2["ROCKET_EXPLOSION_WATER"] = 17] = "ROCKET_EXPLOSION_WATER";
|
|
934
|
-
TempEntity2[TempEntity2["GRENADE_EXPLOSION_WATER"] = 18] = "GRENADE_EXPLOSION_WATER";
|
|
935
|
-
TempEntity2[TempEntity2["MEDIC_CABLE_ATTACK"] = 19] = "MEDIC_CABLE_ATTACK";
|
|
936
|
-
TempEntity2[TempEntity2["BFG_EXPLOSION"] = 20] = "BFG_EXPLOSION";
|
|
937
|
-
TempEntity2[TempEntity2["BFG_BIGEXPLOSION"] = 21] = "BFG_BIGEXPLOSION";
|
|
938
|
-
TempEntity2[TempEntity2["BOSSTPORT"] = 22] = "BOSSTPORT";
|
|
939
|
-
TempEntity2[TempEntity2["BFG_LASER"] = 23] = "BFG_LASER";
|
|
940
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE"] = 24] = "GRAPPLE_CABLE";
|
|
941
|
-
TempEntity2[TempEntity2["WELDING_SPARKS"] = 25] = "WELDING_SPARKS";
|
|
942
|
-
TempEntity2[TempEntity2["GREENBLOOD"] = 26] = "GREENBLOOD";
|
|
943
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER"] = 27] = "BLUEHYPERBLASTER";
|
|
944
|
-
TempEntity2[TempEntity2["PLASMA_EXPLOSION"] = 28] = "PLASMA_EXPLOSION";
|
|
945
|
-
TempEntity2[TempEntity2["TUNNEL_SPARKS"] = 29] = "TUNNEL_SPARKS";
|
|
946
|
-
TempEntity2[TempEntity2["BLASTER2"] = 30] = "BLASTER2";
|
|
947
|
-
TempEntity2[TempEntity2["RAILTRAIL2"] = 31] = "RAILTRAIL2";
|
|
948
|
-
TempEntity2[TempEntity2["FLAME"] = 32] = "FLAME";
|
|
949
|
-
TempEntity2[TempEntity2["LIGHTNING"] = 33] = "LIGHTNING";
|
|
950
|
-
TempEntity2[TempEntity2["DEBUGTRAIL"] = 34] = "DEBUGTRAIL";
|
|
951
|
-
TempEntity2[TempEntity2["PLAIN_EXPLOSION"] = 35] = "PLAIN_EXPLOSION";
|
|
952
|
-
TempEntity2[TempEntity2["FLASHLIGHT"] = 36] = "FLASHLIGHT";
|
|
953
|
-
TempEntity2[TempEntity2["FORCEWALL"] = 37] = "FORCEWALL";
|
|
954
|
-
TempEntity2[TempEntity2["HEATBEAM"] = 38] = "HEATBEAM";
|
|
955
|
-
TempEntity2[TempEntity2["MONSTER_HEATBEAM"] = 39] = "MONSTER_HEATBEAM";
|
|
956
|
-
TempEntity2[TempEntity2["STEAM"] = 40] = "STEAM";
|
|
957
|
-
TempEntity2[TempEntity2["BUBBLETRAIL2"] = 41] = "BUBBLETRAIL2";
|
|
958
|
-
TempEntity2[TempEntity2["MOREBLOOD"] = 42] = "MOREBLOOD";
|
|
959
|
-
TempEntity2[TempEntity2["HEATBEAM_SPARKS"] = 43] = "HEATBEAM_SPARKS";
|
|
960
|
-
TempEntity2[TempEntity2["HEATBEAM_STEAM"] = 44] = "HEATBEAM_STEAM";
|
|
961
|
-
TempEntity2[TempEntity2["CHAINFIST_SMOKE"] = 45] = "CHAINFIST_SMOKE";
|
|
962
|
-
TempEntity2[TempEntity2["ELECTRIC_SPARKS"] = 46] = "ELECTRIC_SPARKS";
|
|
963
|
-
TempEntity2[TempEntity2["TRACKER_EXPLOSION"] = 47] = "TRACKER_EXPLOSION";
|
|
964
|
-
TempEntity2[TempEntity2["TELEPORT_EFFECT"] = 48] = "TELEPORT_EFFECT";
|
|
965
|
-
TempEntity2[TempEntity2["DBALL_GOAL"] = 49] = "DBALL_GOAL";
|
|
966
|
-
TempEntity2[TempEntity2["WIDOWBEAMOUT"] = 50] = "WIDOWBEAMOUT";
|
|
967
|
-
TempEntity2[TempEntity2["NUKEBLAST"] = 51] = "NUKEBLAST";
|
|
968
|
-
TempEntity2[TempEntity2["WIDOWSPLASH"] = 52] = "WIDOWSPLASH";
|
|
969
|
-
TempEntity2[TempEntity2["EXPLOSION1_BIG"] = 53] = "EXPLOSION1_BIG";
|
|
970
|
-
TempEntity2[TempEntity2["EXPLOSION1_NP"] = 54] = "EXPLOSION1_NP";
|
|
971
|
-
TempEntity2[TempEntity2["FLECHETTE"] = 55] = "FLECHETTE";
|
|
972
|
-
TempEntity2[TempEntity2["BLUEHYPERBLASTER_KEX"] = 56] = "BLUEHYPERBLASTER_KEX";
|
|
973
|
-
TempEntity2[TempEntity2["BFG_ZAP"] = 57] = "BFG_ZAP";
|
|
974
|
-
TempEntity2[TempEntity2["BERSERK_SLAM"] = 58] = "BERSERK_SLAM";
|
|
975
|
-
TempEntity2[TempEntity2["GRAPPLE_CABLE_2"] = 59] = "GRAPPLE_CABLE_2";
|
|
976
|
-
TempEntity2[TempEntity2["POWER_SPLASH"] = 60] = "POWER_SPLASH";
|
|
977
|
-
TempEntity2[TempEntity2["LIGHTNING_BEAM"] = 61] = "LIGHTNING_BEAM";
|
|
978
|
-
TempEntity2[TempEntity2["EXPLOSION1_NL"] = 62] = "EXPLOSION1_NL";
|
|
979
|
-
TempEntity2[TempEntity2["EXPLOSION2_NL"] = 63] = "EXPLOSION2_NL";
|
|
980
|
-
return TempEntity2;
|
|
981
|
-
})(TempEntity || {});
|
|
982
|
-
MZ_BLASTER = 0;
|
|
983
|
-
MZ_MACHINEGUN = 1;
|
|
984
|
-
MZ_SHOTGUN = 2;
|
|
985
|
-
MZ_CHAINGUN1 = 3;
|
|
986
|
-
MZ_RAILGUN = 6;
|
|
987
|
-
MZ_ROCKET = 7;
|
|
988
|
-
MZ_GRENADE = 8;
|
|
989
|
-
MZ_SSHOTGUN = 11;
|
|
990
|
-
MZ_BFG = 12;
|
|
991
|
-
MZ_HYPERBLASTER = 13;
|
|
992
|
-
PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
993
|
-
PowerupId22["QuadDamage"] = "quad";
|
|
994
|
-
PowerupId22["Invulnerability"] = "invulnerability";
|
|
995
|
-
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
996
|
-
PowerupId22["Rebreather"] = "rebreather";
|
|
997
|
-
PowerupId22["Silencer"] = "silencer";
|
|
998
|
-
PowerupId22["PowerScreen"] = "power_screen";
|
|
999
|
-
PowerupId22["PowerShield"] = "power_shield";
|
|
1000
|
-
PowerupId22["QuadFire"] = "quad_fire";
|
|
1001
|
-
PowerupId22["Invisibility"] = "invisibility";
|
|
1002
|
-
PowerupId22["Bandolier"] = "bandolier";
|
|
1003
|
-
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
1004
|
-
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
1005
|
-
PowerupId22["DoubleDamage"] = "double_damage";
|
|
1006
|
-
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
1007
|
-
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
1008
|
-
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
1009
|
-
PowerupId22["Doppelganger"] = "doppelganger";
|
|
1010
|
-
PowerupId22["TagToken"] = "tag_token";
|
|
1011
|
-
PowerupId22["TechResistance"] = "tech_resistance";
|
|
1012
|
-
PowerupId22["TechStrength"] = "tech_strength";
|
|
1013
|
-
PowerupId22["TechHaste"] = "tech_haste";
|
|
1014
|
-
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
1015
|
-
PowerupId22["Flashlight"] = "flashlight";
|
|
1016
|
-
PowerupId22["Compass"] = "compass";
|
|
1017
|
-
return PowerupId22;
|
|
1018
|
-
})(PowerupId || {});
|
|
1019
|
-
PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
1020
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
1021
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
1022
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_ICON"] = 2] = "STAT_AMMO_ICON";
|
|
1023
|
-
PlayerStat2[PlayerStat2["STAT_AMMO"] = 3] = "STAT_AMMO";
|
|
1024
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR_ICON"] = 4] = "STAT_ARMOR_ICON";
|
|
1025
|
-
PlayerStat2[PlayerStat2["STAT_ARMOR"] = 5] = "STAT_ARMOR";
|
|
1026
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ICON"] = 6] = "STAT_SELECTED_ICON";
|
|
1027
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_ICON"] = 7] = "STAT_PICKUP_ICON";
|
|
1028
|
-
PlayerStat2[PlayerStat2["STAT_PICKUP_STRING"] = 8] = "STAT_PICKUP_STRING";
|
|
1029
|
-
PlayerStat2[PlayerStat2["STAT_TIMER_ICON"] = 9] = "STAT_TIMER_ICON";
|
|
1030
|
-
PlayerStat2[PlayerStat2["STAT_TIMER"] = 10] = "STAT_TIMER";
|
|
1031
|
-
PlayerStat2[PlayerStat2["STAT_HELPICON"] = 11] = "STAT_HELPICON";
|
|
1032
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM"] = 12] = "STAT_SELECTED_ITEM";
|
|
1033
|
-
PlayerStat2[PlayerStat2["STAT_LAYOUTS"] = 13] = "STAT_LAYOUTS";
|
|
1034
|
-
PlayerStat2[PlayerStat2["STAT_FRAGS"] = 14] = "STAT_FRAGS";
|
|
1035
|
-
PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
|
|
1036
|
-
PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
|
|
1037
|
-
PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
|
|
1038
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
|
|
1039
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
|
|
1040
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
|
|
1041
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
|
|
1042
|
-
PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
|
|
1043
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
|
|
1044
|
-
PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
|
|
1045
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
|
|
1046
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
|
|
1047
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
|
|
1048
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
|
|
1049
|
-
PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
|
|
1050
|
-
PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
|
|
1051
|
-
PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
|
|
1052
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
|
|
1053
|
-
PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
|
|
1054
|
-
PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
|
|
1055
|
-
PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
|
|
1056
|
-
PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
|
|
1057
|
-
PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
|
|
1058
|
-
PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
|
|
1059
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
|
|
1060
|
-
PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
|
|
1061
|
-
PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
|
|
1062
|
-
PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
|
|
1063
|
-
PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
|
|
1064
|
-
PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
|
|
1065
|
-
PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
|
|
1066
|
-
PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
|
|
1067
|
-
return PlayerStat2;
|
|
1068
|
-
})(PlayerStat || {});
|
|
1069
|
-
AMMO_MAX = 12;
|
|
1070
|
-
NUM_BITS_FOR_AMMO = 9;
|
|
1071
|
-
NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
|
|
1072
|
-
POWERUP_MAX = 23;
|
|
1073
|
-
NUM_BITS_FOR_POWERUP = 2;
|
|
1074
|
-
NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
|
|
1075
|
-
POWERUP_STAT_MAP = {
|
|
1076
|
-
[
|
|
1077
|
-
"power_screen"
|
|
1078
|
-
/* PowerScreen */
|
|
1079
|
-
]: 0,
|
|
1080
|
-
[
|
|
1081
|
-
"power_shield"
|
|
1082
|
-
/* PowerShield */
|
|
1083
|
-
]: 1,
|
|
1084
|
-
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
1085
|
-
[
|
|
1086
|
-
"quad"
|
|
1087
|
-
/* QuadDamage */
|
|
1088
|
-
]: 3,
|
|
1089
|
-
[
|
|
1090
|
-
"quad_fire"
|
|
1091
|
-
/* QuadFire */
|
|
1092
|
-
]: 4,
|
|
1093
|
-
[
|
|
1094
|
-
"invulnerability"
|
|
1095
|
-
/* Invulnerability */
|
|
1096
|
-
]: 5,
|
|
1097
|
-
[
|
|
1098
|
-
"invisibility"
|
|
1099
|
-
/* Invisibility */
|
|
1100
|
-
]: 6,
|
|
1101
|
-
[
|
|
1102
|
-
"silencer"
|
|
1103
|
-
/* Silencer */
|
|
1104
|
-
]: 7,
|
|
1105
|
-
[
|
|
1106
|
-
"rebreather"
|
|
1107
|
-
/* Rebreather */
|
|
1108
|
-
]: 8,
|
|
1109
|
-
[
|
|
1110
|
-
"enviro_suit"
|
|
1111
|
-
/* EnviroSuit */
|
|
1112
|
-
]: 9,
|
|
1113
|
-
[
|
|
1114
|
-
"bandolier"
|
|
1115
|
-
/* Bandolier */
|
|
1116
|
-
]: 10,
|
|
1117
|
-
// Placeholder/Map mismatch handling?
|
|
1118
|
-
[
|
|
1119
|
-
"ammo_pack"
|
|
1120
|
-
/* AmmoPack */
|
|
1121
|
-
]: 10,
|
|
1122
|
-
// Original reused indices or had gaps?
|
|
1123
|
-
[
|
|
1124
|
-
"ir_goggles"
|
|
1125
|
-
/* IRGoggles */
|
|
1126
|
-
]: 11,
|
|
1127
|
-
[
|
|
1128
|
-
"double_damage"
|
|
1129
|
-
/* DoubleDamage */
|
|
1130
|
-
]: 12,
|
|
1131
|
-
[
|
|
1132
|
-
"sphere_vengeance"
|
|
1133
|
-
/* SphereVengeance */
|
|
1134
|
-
]: 13,
|
|
1135
|
-
[
|
|
1136
|
-
"sphere_hunter"
|
|
1137
|
-
/* SphereHunter */
|
|
1138
|
-
]: 14,
|
|
1139
|
-
[
|
|
1140
|
-
"sphere_defender"
|
|
1141
|
-
/* SphereDefender */
|
|
1142
|
-
]: 15,
|
|
1143
|
-
[
|
|
1144
|
-
"doppelganger"
|
|
1145
|
-
/* Doppelganger */
|
|
1146
|
-
]: 16,
|
|
1147
|
-
[
|
|
1148
|
-
"flashlight"
|
|
1149
|
-
/* Flashlight */
|
|
1150
|
-
]: 17,
|
|
1151
|
-
[
|
|
1152
|
-
"compass"
|
|
1153
|
-
/* Compass */
|
|
1154
|
-
]: 18,
|
|
1155
|
-
[
|
|
1156
|
-
"tech_resistance"
|
|
1157
|
-
/* TechResistance */
|
|
1158
|
-
]: 19,
|
|
1159
|
-
[
|
|
1160
|
-
"tech_strength"
|
|
1161
|
-
/* TechStrength */
|
|
1162
|
-
]: 20,
|
|
1163
|
-
[
|
|
1164
|
-
"tech_haste"
|
|
1165
|
-
/* TechHaste */
|
|
1166
|
-
]: 21,
|
|
1167
|
-
[
|
|
1168
|
-
"tech_regeneration"
|
|
1169
|
-
/* TechRegeneration */
|
|
1170
|
-
]: 22,
|
|
1171
|
-
// Add missing mappings to avoid runtime lookups failing for new types
|
|
1172
|
-
[
|
|
1173
|
-
"tag_token"
|
|
1174
|
-
/* TagToken */
|
|
1175
|
-
]: -1
|
|
1176
|
-
};
|
|
1177
|
-
RenderFx = /* @__PURE__ */ ((RenderFx2) => {
|
|
1178
|
-
RenderFx2[RenderFx2["MinLight"] = 1] = "MinLight";
|
|
1179
|
-
RenderFx2[RenderFx2["ViewerModel"] = 2] = "ViewerModel";
|
|
1180
|
-
RenderFx2[RenderFx2["WeaponModel"] = 4] = "WeaponModel";
|
|
1181
|
-
RenderFx2[RenderFx2["FullBright"] = 8] = "FullBright";
|
|
1182
|
-
RenderFx2[RenderFx2["DepthHack"] = 16] = "DepthHack";
|
|
1183
|
-
RenderFx2[RenderFx2["Translucent"] = 32] = "Translucent";
|
|
1184
|
-
RenderFx2[RenderFx2["FrameLerp"] = 64] = "FrameLerp";
|
|
1185
|
-
RenderFx2[RenderFx2["Beam"] = 128] = "Beam";
|
|
1186
|
-
RenderFx2[RenderFx2["CustomLight"] = 256] = "CustomLight";
|
|
1187
|
-
RenderFx2[RenderFx2["Glow"] = 512] = "Glow";
|
|
1188
|
-
RenderFx2[RenderFx2["ShellRed"] = 1024] = "ShellRed";
|
|
1189
|
-
RenderFx2[RenderFx2["ShellGreen"] = 2048] = "ShellGreen";
|
|
1190
|
-
RenderFx2[RenderFx2["ShellBlue"] = 4096] = "ShellBlue";
|
|
1191
|
-
RenderFx2[RenderFx2["IrVisible"] = 32768] = "IrVisible";
|
|
1192
|
-
RenderFx2[RenderFx2["ShellDouble"] = 65536] = "ShellDouble";
|
|
1193
|
-
RenderFx2[RenderFx2["ShellHalfDam"] = 131072] = "ShellHalfDam";
|
|
1194
|
-
RenderFx2[RenderFx2["MinLightPlus"] = 262144] = "MinLightPlus";
|
|
1195
|
-
RenderFx2[RenderFx2["ExtraLight"] = 524288] = "ExtraLight";
|
|
1196
|
-
RenderFx2[RenderFx2["BeamLightning"] = 1048576] = "BeamLightning";
|
|
1197
|
-
RenderFx2[RenderFx2["Flashlight"] = 2097152] = "Flashlight";
|
|
1198
|
-
return RenderFx2;
|
|
1199
|
-
})(RenderFx || {});
|
|
1200
|
-
entityFlags_exports = {};
|
|
1201
|
-
__export2(entityFlags_exports, {
|
|
1202
|
-
U_ANGLE1: () => U_ANGLE1,
|
|
1203
|
-
U_ANGLE2: () => U_ANGLE2,
|
|
1204
|
-
U_ANGLE3: () => U_ANGLE3,
|
|
1205
|
-
U_EFFECTS: () => U_EFFECTS,
|
|
1206
|
-
U_EVENT: () => U_EVENT,
|
|
1207
|
-
U_FRAME: () => U_FRAME,
|
|
1208
|
-
U_MODEL: () => U_MODEL,
|
|
1209
|
-
U_MODEL2: () => U_MODEL2,
|
|
1210
|
-
U_MODEL3: () => U_MODEL3,
|
|
1211
|
-
U_MODEL4: () => U_MODEL4,
|
|
1212
|
-
U_MOREBITS: () => U_MOREBITS,
|
|
1213
|
-
U_NUMBER: () => U_NUMBER,
|
|
1214
|
-
U_ORIGIN1: () => U_ORIGIN1,
|
|
1215
|
-
U_ORIGIN2: () => U_ORIGIN2,
|
|
1216
|
-
U_ORIGIN3: () => U_ORIGIN3,
|
|
1217
|
-
U_REMOVE: () => U_REMOVE,
|
|
1218
|
-
U_RENDERFX: () => U_RENDERFX,
|
|
1219
|
-
U_SKIN: () => U_SKIN,
|
|
1220
|
-
U_SOLID: () => U_SOLID,
|
|
1221
|
-
U_SOUND: () => U_SOUND
|
|
1222
|
-
});
|
|
1223
|
-
U_NUMBER = 1 << 0;
|
|
1224
|
-
U_MODEL = 1 << 1;
|
|
1225
|
-
U_SOUND = 1 << 2;
|
|
1226
|
-
U_ORIGIN1 = 1 << 3;
|
|
1227
|
-
U_ORIGIN2 = 1 << 4;
|
|
1228
|
-
U_ORIGIN3 = 1 << 5;
|
|
1229
|
-
U_ANGLE1 = 1 << 6;
|
|
1230
|
-
U_ANGLE2 = 1 << 7;
|
|
1231
|
-
U_ANGLE3 = 1 << 8;
|
|
1232
|
-
U_FRAME = 1 << 9;
|
|
1233
|
-
U_SKIN = 1 << 10;
|
|
1234
|
-
U_EFFECTS = 1 << 11;
|
|
1235
|
-
U_RENDERFX = 1 << 12;
|
|
1236
|
-
U_SOLID = 1 << 13;
|
|
1237
|
-
U_EVENT = 1 << 14;
|
|
1238
|
-
U_MOREBITS = 1 << 15;
|
|
1239
|
-
U_MODEL2 = 1 << 0;
|
|
1240
|
-
U_MODEL3 = 1 << 1;
|
|
1241
|
-
U_MODEL4 = 1 << 2;
|
|
1242
|
-
U_REMOVE = 32768;
|
|
1243
|
-
FRAMETIME2 = 0.025;
|
|
1244
|
-
MASK_WATER2 = 33554432;
|
|
1245
|
-
WaterLevel3 = {
|
|
1246
|
-
None: 0,
|
|
1247
|
-
Feet: 1,
|
|
1248
|
-
Waist: 2,
|
|
1249
|
-
Under: 3
|
|
1250
|
-
};
|
|
1251
|
-
categorizePosition2 = (state, trace) => {
|
|
1252
|
-
const point = { ...state.origin };
|
|
1253
|
-
point.z -= 0.25;
|
|
1254
|
-
const traceResult = trace(state.origin, point);
|
|
1255
|
-
return {
|
|
1256
|
-
...state,
|
|
1257
|
-
onGround: traceResult.fraction < 1
|
|
1258
|
-
};
|
|
1259
|
-
};
|
|
1260
|
-
checkWater = (state, pointContents2) => {
|
|
1261
|
-
const point = { ...state.origin };
|
|
1262
|
-
const { mins, maxs } = state;
|
|
1263
|
-
point.z = state.origin.z + mins.z + 1;
|
|
1264
|
-
const contents = pointContents2(point);
|
|
1265
|
-
if (!(contents & MASK_WATER2)) {
|
|
1266
|
-
return { ...state, waterLevel: WaterLevel3.None };
|
|
1267
|
-
}
|
|
1268
|
-
let waterLevel = WaterLevel3.Feet;
|
|
1269
|
-
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1270
|
-
point.z = waist;
|
|
1271
|
-
const waistContents = pointContents2(point);
|
|
1272
|
-
if (waistContents & MASK_WATER2) {
|
|
1273
|
-
waterLevel = WaterLevel3.Waist;
|
|
1274
|
-
const head = state.origin.z + 22;
|
|
1275
|
-
point.z = head;
|
|
1276
|
-
const headContents = pointContents2(point);
|
|
1277
|
-
if (headContents & MASK_WATER2) {
|
|
1278
|
-
waterLevel = WaterLevel3.Under;
|
|
1279
|
-
}
|
|
1280
|
-
}
|
|
1281
|
-
return { ...state, waterLevel };
|
|
1282
|
-
};
|
|
1283
|
-
applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1284
|
-
let newState = { ...state };
|
|
1285
|
-
newState = categorizePosition2(newState, trace);
|
|
1286
|
-
newState = checkWater(newState, pointContents2);
|
|
1287
|
-
const { origin, velocity, onGround, waterLevel, viewAngles } = newState;
|
|
1288
|
-
const adjustedAngles = waterLevel >= 2 ? viewAngles : {
|
|
1289
|
-
// For ground/air movement, reduce pitch influence (rerelease/p_move.cpp:1689)
|
|
1290
|
-
x: viewAngles.x > 180 ? (viewAngles.x - 360) / 3 : viewAngles.x / 3,
|
|
1291
|
-
y: viewAngles.y,
|
|
1292
|
-
z: viewAngles.z
|
|
1293
|
-
};
|
|
1294
|
-
const { forward, right } = angleVectors(adjustedAngles);
|
|
1295
|
-
const frictionedVelocity = applyPmoveFriction({
|
|
1296
|
-
velocity,
|
|
1297
|
-
frametime: FRAMETIME2,
|
|
1298
|
-
onGround,
|
|
1299
|
-
groundIsSlick: false,
|
|
1300
|
-
onLadder: false,
|
|
1301
|
-
waterlevel: waterLevel,
|
|
1302
|
-
pmFriction: 6,
|
|
1303
|
-
pmStopSpeed: 100,
|
|
1304
|
-
pmWaterFriction: 1
|
|
1305
|
-
});
|
|
1306
|
-
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
1307
|
-
forward,
|
|
1308
|
-
right,
|
|
1309
|
-
cmd,
|
|
1310
|
-
maxSpeed: 320
|
|
1311
|
-
}) : buildAirGroundWish({
|
|
1312
|
-
forward,
|
|
1313
|
-
right,
|
|
1314
|
-
cmd,
|
|
1315
|
-
maxSpeed: 320
|
|
1316
|
-
});
|
|
1317
|
-
const finalVelocity = applyPmoveAccelerate({
|
|
1318
|
-
velocity: frictionedVelocity,
|
|
1319
|
-
wishdir: wish.wishdir,
|
|
1320
|
-
wishspeed: wish.wishspeed,
|
|
1321
|
-
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1322
|
-
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1323
|
-
frametime: FRAMETIME2
|
|
1324
|
-
});
|
|
1325
|
-
const traceResult = trace(origin, {
|
|
1326
|
-
x: origin.x + finalVelocity.x * FRAMETIME2,
|
|
1327
|
-
y: origin.y + finalVelocity.y * FRAMETIME2,
|
|
1328
|
-
z: origin.z + finalVelocity.z * FRAMETIME2
|
|
1329
|
-
});
|
|
1330
|
-
return {
|
|
1331
|
-
...newState,
|
|
1332
|
-
origin: traceResult.endpos,
|
|
1333
|
-
velocity: finalVelocity
|
|
1334
|
-
};
|
|
1335
|
-
};
|
|
1336
|
-
BinaryWriter = class {
|
|
1337
|
-
constructor(sizeOrBuffer = 1400) {
|
|
1338
|
-
if (typeof sizeOrBuffer === "number") {
|
|
1339
|
-
this.buffer = new Uint8Array(sizeOrBuffer);
|
|
1340
|
-
this.fixed = false;
|
|
1341
|
-
} else {
|
|
1342
|
-
this.buffer = sizeOrBuffer;
|
|
1343
|
-
this.fixed = true;
|
|
1344
|
-
}
|
|
1345
|
-
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1346
|
-
this.offset = 0;
|
|
1347
|
-
}
|
|
1348
|
-
ensureSpace(bytes) {
|
|
1349
|
-
if (this.offset + bytes > this.buffer.byteLength) {
|
|
1350
|
-
if (this.fixed) {
|
|
1351
|
-
throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset + bytes}`);
|
|
1352
|
-
}
|
|
1353
|
-
const newSize = Math.max(this.buffer.byteLength * 2, this.offset + bytes);
|
|
1354
|
-
const newBuffer = new Uint8Array(newSize);
|
|
1355
|
-
newBuffer.set(this.buffer);
|
|
1356
|
-
this.buffer = newBuffer;
|
|
1357
|
-
this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
|
|
1358
|
-
}
|
|
1359
|
-
}
|
|
1360
|
-
writeByte(value) {
|
|
1361
|
-
this.ensureSpace(1);
|
|
1362
|
-
this.view.setUint8(this.offset, value);
|
|
1363
|
-
this.offset += 1;
|
|
1364
|
-
}
|
|
1365
|
-
writeChar(value) {
|
|
1366
|
-
this.ensureSpace(1);
|
|
1367
|
-
this.view.setInt8(this.offset, value);
|
|
1368
|
-
this.offset += 1;
|
|
1369
|
-
}
|
|
1370
|
-
writeShort(value) {
|
|
1371
|
-
this.ensureSpace(2);
|
|
1372
|
-
this.view.setInt16(this.offset, value, true);
|
|
1373
|
-
this.offset += 2;
|
|
1374
|
-
}
|
|
1375
|
-
writeLong(value) {
|
|
1376
|
-
this.ensureSpace(4);
|
|
1377
|
-
this.view.setInt32(this.offset, value, true);
|
|
1378
|
-
this.offset += 4;
|
|
1379
|
-
}
|
|
1380
|
-
writeFloat(value) {
|
|
1381
|
-
this.ensureSpace(4);
|
|
1382
|
-
this.view.setFloat32(this.offset, value, true);
|
|
1383
|
-
this.offset += 4;
|
|
1384
|
-
}
|
|
1385
|
-
writeString(value) {
|
|
1386
|
-
const len = value.length;
|
|
1387
|
-
this.ensureSpace(len + 1);
|
|
1388
|
-
for (let i = 0; i < len; i++) {
|
|
1389
|
-
this.view.setUint8(this.offset + i, value.charCodeAt(i));
|
|
1390
|
-
}
|
|
1391
|
-
this.view.setUint8(this.offset + len, 0);
|
|
1392
|
-
this.offset += len + 1;
|
|
1393
|
-
}
|
|
1394
|
-
writeCoord(value) {
|
|
1395
|
-
this.writeShort(Math.trunc(value * 8));
|
|
1396
|
-
}
|
|
1397
|
-
writeAngle(value) {
|
|
1398
|
-
this.writeByte(Math.trunc(value * 256 / 360) & 255);
|
|
1399
|
-
}
|
|
1400
|
-
writeAngle16(value) {
|
|
1401
|
-
this.writeShort(Math.trunc(value * 65536 / 360) & 65535);
|
|
1402
|
-
}
|
|
1403
|
-
writePos(pos) {
|
|
1404
|
-
this.writeCoord(pos.x);
|
|
1405
|
-
this.writeCoord(pos.y);
|
|
1406
|
-
this.writeCoord(pos.z);
|
|
1407
|
-
}
|
|
1408
|
-
writeDir(dir) {
|
|
1409
|
-
let maxDot = -1;
|
|
1410
|
-
let bestIndex = 0;
|
|
1411
|
-
if (dir.x === 0 && dir.y === 0 && dir.z === 0) {
|
|
1412
|
-
this.writeByte(0);
|
|
1413
|
-
return;
|
|
1414
|
-
}
|
|
1415
|
-
for (let i = 0; i < ANORMS.length; i++) {
|
|
1416
|
-
const norm = ANORMS[i];
|
|
1417
|
-
const dot = dir.x * norm[0] + dir.y * norm[1] + dir.z * norm[2];
|
|
1418
|
-
if (dot > maxDot) {
|
|
1419
|
-
maxDot = dot;
|
|
1420
|
-
bestIndex = i;
|
|
1421
|
-
}
|
|
1422
|
-
}
|
|
1423
|
-
this.writeByte(bestIndex);
|
|
1424
|
-
}
|
|
1425
|
-
getData() {
|
|
1426
|
-
return this.buffer.slice(0, this.offset);
|
|
1427
|
-
}
|
|
1428
|
-
getBuffer() {
|
|
1429
|
-
return this.buffer;
|
|
1430
|
-
}
|
|
1431
|
-
getOffset() {
|
|
1432
|
-
return this.offset;
|
|
1433
|
-
}
|
|
1434
|
-
reset() {
|
|
1435
|
-
this.offset = 0;
|
|
1436
|
-
}
|
|
1437
|
-
};
|
|
1438
|
-
_NetChan = class _NetChan2 {
|
|
1439
|
-
constructor() {
|
|
1440
|
-
this.qport = 0;
|
|
1441
|
-
this.incomingSequence = 0;
|
|
1442
|
-
this.outgoingSequence = 0;
|
|
1443
|
-
this.incomingAcknowledged = 0;
|
|
1444
|
-
this.incomingReliableAcknowledged = false;
|
|
1445
|
-
this.incomingReliableSequence = 0;
|
|
1446
|
-
this.outgoingReliableSequence = 0;
|
|
1447
|
-
this.reliableLength = 0;
|
|
1448
|
-
this.fragmentSendOffset = 0;
|
|
1449
|
-
this.fragmentBuffer = null;
|
|
1450
|
-
this.fragmentLength = 0;
|
|
1451
|
-
this.fragmentReceived = 0;
|
|
1452
|
-
this.lastReceived = 0;
|
|
1453
|
-
this.lastSent = 0;
|
|
1454
|
-
this.remoteAddress = null;
|
|
1455
|
-
this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
|
|
1456
|
-
const now = Date.now();
|
|
1457
|
-
this.lastReceived = now;
|
|
1458
|
-
this.lastSent = now;
|
|
1459
|
-
this.qport = Math.floor(Math.random() * 65536);
|
|
1460
|
-
}
|
|
1461
|
-
/**
|
|
1462
|
-
* Setup the netchan with specific settings
|
|
1463
|
-
*/
|
|
1464
|
-
setup(qport, address = null) {
|
|
1465
|
-
this.qport = qport;
|
|
1466
|
-
this.remoteAddress = address;
|
|
1467
|
-
this.reset();
|
|
1468
|
-
}
|
|
1469
|
-
/**
|
|
1470
|
-
* Reset the netchan state
|
|
1471
|
-
*/
|
|
1472
|
-
reset() {
|
|
1473
|
-
this.incomingSequence = 0;
|
|
1474
|
-
this.outgoingSequence = 0;
|
|
1475
|
-
this.incomingAcknowledged = 0;
|
|
1476
|
-
this.incomingReliableAcknowledged = false;
|
|
1477
|
-
this.incomingReliableSequence = 0;
|
|
1478
|
-
this.outgoingReliableSequence = 0;
|
|
1479
|
-
this.reliableLength = 0;
|
|
1480
|
-
this.reliableMessage.reset();
|
|
1481
|
-
this.fragmentSendOffset = 0;
|
|
1482
|
-
this.fragmentBuffer = null;
|
|
1483
|
-
this.fragmentLength = 0;
|
|
1484
|
-
this.fragmentReceived = 0;
|
|
1485
|
-
this.lastReceived = Date.now();
|
|
1486
|
-
this.lastSent = Date.now();
|
|
1487
|
-
}
|
|
1488
|
-
/**
|
|
1489
|
-
* Transmits a packet containing reliable and unreliable data
|
|
1490
|
-
*/
|
|
1491
|
-
transmit(unreliableData) {
|
|
1492
|
-
this.outgoingSequence++;
|
|
1493
|
-
this.lastSent = Date.now();
|
|
1494
|
-
let sendReliableLength = 0;
|
|
1495
|
-
let isFragment = false;
|
|
1496
|
-
let fragmentStart = 0;
|
|
1497
|
-
if (this.reliableLength > 0) {
|
|
1498
|
-
if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
|
|
1499
|
-
isFragment = true;
|
|
1500
|
-
if (this.fragmentSendOffset >= this.reliableLength) {
|
|
1501
|
-
this.fragmentSendOffset = 0;
|
|
1502
|
-
}
|
|
1503
|
-
const remaining = this.reliableLength - this.fragmentSendOffset;
|
|
1504
|
-
sendReliableLength = remaining;
|
|
1505
|
-
if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
|
|
1506
|
-
sendReliableLength = _NetChan2.FRAGMENT_SIZE;
|
|
1507
|
-
}
|
|
1508
|
-
fragmentStart = this.fragmentSendOffset;
|
|
1509
|
-
this.fragmentSendOffset += sendReliableLength;
|
|
1510
|
-
} else {
|
|
1511
|
-
sendReliableLength = this.reliableLength;
|
|
1512
|
-
}
|
|
1513
|
-
}
|
|
1514
|
-
const headerSize = _NetChan2.PACKET_HEADER;
|
|
1515
|
-
const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
|
|
1516
|
-
let unreliableSize = unreliableData ? unreliableData.length : 0;
|
|
1517
|
-
if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
|
|
1518
|
-
unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
|
|
1519
|
-
if (unreliableSize < 0) unreliableSize = 0;
|
|
1520
|
-
}
|
|
1521
|
-
const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
|
|
1522
|
-
const view = new DataView(buffer);
|
|
1523
|
-
const result = new Uint8Array(buffer);
|
|
1524
|
-
let sequence = this.outgoingSequence;
|
|
1525
|
-
if (sendReliableLength > 0) {
|
|
1526
|
-
sequence |= 2147483648;
|
|
1527
|
-
if ((this.outgoingReliableSequence & 1) !== 0) {
|
|
1528
|
-
sequence |= 1073741824;
|
|
1529
|
-
}
|
|
1530
|
-
}
|
|
1531
|
-
view.setUint32(0, sequence, true);
|
|
1532
|
-
let ack = this.incomingSequence;
|
|
1533
|
-
if ((this.incomingReliableSequence & 1) !== 0) {
|
|
1534
|
-
ack |= 2147483648;
|
|
1535
|
-
}
|
|
1536
|
-
view.setUint32(4, ack, true);
|
|
1537
|
-
view.setUint16(8, this.qport, true);
|
|
1538
|
-
let offset = headerSize;
|
|
1539
|
-
if (sendReliableLength > 0) {
|
|
1540
|
-
let lengthField = sendReliableLength;
|
|
1541
|
-
if (isFragment) {
|
|
1542
|
-
lengthField |= 32768;
|
|
1543
|
-
}
|
|
1544
|
-
view.setUint16(offset, lengthField, true);
|
|
1545
|
-
offset += 2;
|
|
1546
|
-
if (isFragment) {
|
|
1547
|
-
view.setUint32(offset, fragmentStart, true);
|
|
1548
|
-
offset += 4;
|
|
1549
|
-
view.setUint32(offset, this.reliableLength, true);
|
|
1550
|
-
offset += 4;
|
|
1551
|
-
}
|
|
1552
|
-
const reliableBuffer = this.reliableMessage.getBuffer();
|
|
1553
|
-
const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
|
|
1554
|
-
result.set(reliableBytes, offset);
|
|
1555
|
-
offset += sendReliableLength;
|
|
1556
|
-
}
|
|
1557
|
-
if (unreliableData && unreliableSize > 0) {
|
|
1558
|
-
const chunk = unreliableData.slice(0, unreliableSize);
|
|
1559
|
-
result.set(chunk, offset);
|
|
1560
|
-
}
|
|
1561
|
-
return result;
|
|
1562
|
-
}
|
|
1563
|
-
/**
|
|
1564
|
-
* Processes a received packet
|
|
1565
|
-
* Returns the payload data (reliable + unreliable) to be processed, or null if discarded
|
|
1566
|
-
*/
|
|
1567
|
-
process(packet) {
|
|
1568
|
-
if (packet.length < _NetChan2.PACKET_HEADER) {
|
|
1569
|
-
return null;
|
|
1570
|
-
}
|
|
1571
|
-
this.lastReceived = Date.now();
|
|
1572
|
-
const view = new DataView(packet.buffer, packet.byteOffset, packet.byteLength);
|
|
1573
|
-
const sequence = view.getUint32(0, true);
|
|
1574
|
-
const ack = view.getUint32(4, true);
|
|
1575
|
-
const qport = view.getUint16(8, true);
|
|
1576
|
-
if (this.qport !== qport) {
|
|
1577
|
-
return null;
|
|
1578
|
-
}
|
|
1579
|
-
const seqNumberClean = sequence & ~(2147483648 | 1073741824);
|
|
1580
|
-
if ((seqNumberClean - this.incomingSequence | 0) <= 0) {
|
|
1581
|
-
return null;
|
|
1582
|
-
}
|
|
1583
|
-
this.incomingSequence = seqNumberClean;
|
|
1584
|
-
const ackNumber = ack & ~2147483648;
|
|
1585
|
-
const ackReliable = (ack & 2147483648) !== 0;
|
|
1586
|
-
if (ackNumber > this.incomingAcknowledged) {
|
|
1587
|
-
this.incomingAcknowledged = ackNumber;
|
|
1588
|
-
}
|
|
1589
|
-
if (this.reliableLength > 0) {
|
|
1590
|
-
const receivedAckBit = ackReliable ? 1 : 0;
|
|
1591
|
-
const currentReliableBit = this.outgoingReliableSequence & 1;
|
|
1592
|
-
if (receivedAckBit !== currentReliableBit) {
|
|
1593
|
-
this.reliableLength = 0;
|
|
1594
|
-
this.reliableMessage.reset();
|
|
1595
|
-
this.outgoingReliableSequence ^= 1;
|
|
1596
|
-
this.fragmentSendOffset = 0;
|
|
1597
|
-
}
|
|
1598
|
-
}
|
|
1599
|
-
const hasReliableData = (sequence & 2147483648) !== 0;
|
|
1600
|
-
const reliableSeqBit = (sequence & 1073741824) !== 0 ? 1 : 0;
|
|
1601
|
-
let payloadOffset = _NetChan2.PACKET_HEADER;
|
|
1602
|
-
let reliableData = null;
|
|
1603
|
-
if (hasReliableData) {
|
|
1604
|
-
if (payloadOffset + 2 > packet.byteLength) return null;
|
|
1605
|
-
let reliableLen = view.getUint16(payloadOffset, true);
|
|
1606
|
-
payloadOffset += 2;
|
|
1607
|
-
const isFragment = (reliableLen & 32768) !== 0;
|
|
1608
|
-
reliableLen &= 32767;
|
|
1609
|
-
const expectedBit = this.incomingReliableSequence & 1;
|
|
1610
|
-
if (reliableSeqBit === expectedBit) {
|
|
1611
|
-
if (isFragment) {
|
|
1612
|
-
if (payloadOffset + 8 > packet.byteLength) return null;
|
|
1613
|
-
const fragStart = view.getUint32(payloadOffset, true);
|
|
1614
|
-
payloadOffset += 4;
|
|
1615
|
-
const fragTotal = view.getUint32(payloadOffset, true);
|
|
1616
|
-
payloadOffset += 4;
|
|
1617
|
-
if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1618
|
-
console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
|
|
1619
|
-
return null;
|
|
1620
|
-
}
|
|
1621
|
-
if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
|
|
1622
|
-
this.fragmentBuffer = new Uint8Array(fragTotal);
|
|
1623
|
-
this.fragmentLength = fragTotal;
|
|
1624
|
-
this.fragmentReceived = 0;
|
|
1625
|
-
}
|
|
1626
|
-
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1627
|
-
const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
|
|
1628
|
-
if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
|
|
1629
|
-
this.fragmentBuffer.set(data, fragStart);
|
|
1630
|
-
this.fragmentReceived += reliableLen;
|
|
1631
|
-
if (this.fragmentReceived >= fragTotal) {
|
|
1632
|
-
reliableData = this.fragmentBuffer;
|
|
1633
|
-
this.incomingReliableSequence++;
|
|
1634
|
-
this.fragmentBuffer = null;
|
|
1635
|
-
this.fragmentLength = 0;
|
|
1636
|
-
this.fragmentReceived = 0;
|
|
1637
|
-
}
|
|
1638
|
-
}
|
|
1639
|
-
} else {
|
|
1640
|
-
this.incomingReliableSequence++;
|
|
1641
|
-
if (payloadOffset + reliableLen > packet.byteLength) return null;
|
|
1642
|
-
reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
|
|
1643
|
-
}
|
|
1644
|
-
}
|
|
1645
|
-
payloadOffset += reliableLen;
|
|
1646
|
-
}
|
|
1647
|
-
const unreliableData = packet.slice(payloadOffset);
|
|
1648
|
-
if (reliableData && reliableData.length > 0) {
|
|
1649
|
-
const totalLen = reliableData.length + unreliableData.length;
|
|
1650
|
-
const result = new Uint8Array(totalLen);
|
|
1651
|
-
result.set(reliableData, 0);
|
|
1652
|
-
result.set(unreliableData, reliableData.length);
|
|
1653
|
-
return result;
|
|
1654
|
-
}
|
|
1655
|
-
if (unreliableData) {
|
|
1656
|
-
return unreliableData;
|
|
1657
|
-
}
|
|
1658
|
-
return new Uint8Array(0);
|
|
1659
|
-
}
|
|
1660
|
-
/**
|
|
1661
|
-
* Checks if reliable message buffer is empty and ready for new data
|
|
1662
|
-
*/
|
|
1663
|
-
canSendReliable() {
|
|
1664
|
-
return this.reliableLength === 0;
|
|
1665
|
-
}
|
|
1666
|
-
/**
|
|
1667
|
-
* Writes a byte to the reliable message buffer
|
|
1668
|
-
*/
|
|
1669
|
-
writeReliableByte(value) {
|
|
1670
|
-
if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1671
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1672
|
-
}
|
|
1673
|
-
this.reliableMessage.writeByte(value);
|
|
1674
|
-
this.reliableLength++;
|
|
1675
|
-
}
|
|
1676
|
-
/**
|
|
1677
|
-
* Writes a short to the reliable message buffer
|
|
1678
|
-
*/
|
|
1679
|
-
writeReliableShort(value) {
|
|
1680
|
-
if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1681
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1682
|
-
}
|
|
1683
|
-
this.reliableMessage.writeShort(value);
|
|
1684
|
-
this.reliableLength += 2;
|
|
1685
|
-
}
|
|
1686
|
-
/**
|
|
1687
|
-
* Writes a long to the reliable message buffer
|
|
1688
|
-
*/
|
|
1689
|
-
writeReliableLong(value) {
|
|
1690
|
-
if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1691
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1692
|
-
}
|
|
1693
|
-
this.reliableMessage.writeLong(value);
|
|
1694
|
-
this.reliableLength += 4;
|
|
1695
|
-
}
|
|
1696
|
-
/**
|
|
1697
|
-
* Writes a string to the reliable message buffer
|
|
1698
|
-
*/
|
|
1699
|
-
writeReliableString(value) {
|
|
1700
|
-
const len = value.length + 1;
|
|
1701
|
-
if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1702
|
-
throw new Error("NetChan reliable buffer overflow");
|
|
1703
|
-
}
|
|
1704
|
-
this.reliableMessage.writeString(value);
|
|
1705
|
-
this.reliableLength += len;
|
|
1706
|
-
}
|
|
1707
|
-
/**
|
|
1708
|
-
* Returns the current reliable data buffer
|
|
1709
|
-
*/
|
|
1710
|
-
getReliableData() {
|
|
1711
|
-
if (this.reliableLength === 0) {
|
|
1712
|
-
return new Uint8Array(0);
|
|
1713
|
-
}
|
|
1714
|
-
const buffer = this.reliableMessage.getBuffer();
|
|
1715
|
-
return buffer.subarray(0, this.reliableLength);
|
|
1716
|
-
}
|
|
1717
|
-
/**
|
|
1718
|
-
* Checks if we need to send a keepalive packet
|
|
1719
|
-
*/
|
|
1720
|
-
needsKeepalive(currentTime) {
|
|
1721
|
-
return currentTime - this.lastSent > 1e3;
|
|
1722
|
-
}
|
|
1723
|
-
/**
|
|
1724
|
-
* Checks if the connection has timed out
|
|
1725
|
-
*/
|
|
1726
|
-
isTimedOut(currentTime, timeoutMs = 3e4) {
|
|
1727
|
-
return currentTime - this.lastReceived > timeoutMs;
|
|
1728
|
-
}
|
|
1729
|
-
};
|
|
1730
|
-
_NetChan.MAX_MSGLEN = 1400;
|
|
1731
|
-
_NetChan.FRAGMENT_SIZE = 1024;
|
|
1732
|
-
_NetChan.PACKET_HEADER = 10;
|
|
1733
|
-
_NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
|
|
1734
|
-
_NetChan.MAX_RELIABLE_BUFFER = 262144;
|
|
1735
|
-
WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1736
|
-
WeaponId22["Blaster"] = "blaster";
|
|
1737
|
-
WeaponId22["Shotgun"] = "shotgun";
|
|
1738
|
-
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1739
|
-
WeaponId22["Machinegun"] = "machinegun";
|
|
1740
|
-
WeaponId22["Chaingun"] = "chaingun";
|
|
1741
|
-
WeaponId22["HandGrenade"] = "grenades";
|
|
1742
|
-
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1743
|
-
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1744
|
-
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1745
|
-
WeaponId22["Railgun"] = "railgun";
|
|
1746
|
-
WeaponId22["BFG10K"] = "bfg10k";
|
|
1747
|
-
WeaponId22["Grapple"] = "grapple";
|
|
1748
|
-
WeaponId22["ChainFist"] = "chainfist";
|
|
1749
|
-
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1750
|
-
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1751
|
-
WeaponId22["IonRipper"] = "ionripper";
|
|
1752
|
-
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1753
|
-
WeaponId22["Phalanx"] = "phalanx";
|
|
1754
|
-
WeaponId22["Disruptor"] = "disruptor";
|
|
1755
|
-
WeaponId22["Trap"] = "trap";
|
|
1756
|
-
return WeaponId22;
|
|
1757
|
-
})(WeaponId || {});
|
|
1758
|
-
AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1759
|
-
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1760
|
-
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1761
|
-
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1762
|
-
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1763
|
-
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1764
|
-
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1765
|
-
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1766
|
-
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1767
|
-
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1768
|
-
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1769
|
-
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1770
|
-
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1771
|
-
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1772
|
-
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1773
|
-
return AmmoType22;
|
|
1774
|
-
})(AmmoType || {});
|
|
1775
|
-
AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1776
|
-
AmmoItemId = /* @__PURE__ */ ((AmmoItemId2) => {
|
|
1777
|
-
AmmoItemId2["Shells"] = "ammo_shells";
|
|
1778
|
-
AmmoItemId2["Bullets"] = "ammo_bullets";
|
|
1779
|
-
AmmoItemId2["Rockets"] = "ammo_rockets";
|
|
1780
|
-
AmmoItemId2["Grenades"] = "ammo_grenades";
|
|
1781
|
-
AmmoItemId2["Cells"] = "ammo_cells";
|
|
1782
|
-
AmmoItemId2["Slugs"] = "ammo_slugs";
|
|
1783
|
-
AmmoItemId2["MagSlugs"] = "ammo_magslug";
|
|
1784
|
-
AmmoItemId2["Flechettes"] = "ammo_flechettes";
|
|
1785
|
-
AmmoItemId2["Disruptor"] = "ammo_disruptor";
|
|
1786
|
-
AmmoItemId2["Tesla"] = "ammo_tesla";
|
|
1787
|
-
AmmoItemId2["Trap"] = "ammo_trap";
|
|
1788
|
-
AmmoItemId2["Prox"] = "ammo_prox";
|
|
1789
|
-
return AmmoItemId2;
|
|
1790
|
-
})(AmmoItemId || {});
|
|
1791
|
-
WEAPON_WHEEL_ORDER = [
|
|
1792
|
-
"blaster",
|
|
1793
|
-
"shotgun",
|
|
1794
|
-
"supershotgun",
|
|
1795
|
-
"machinegun",
|
|
1796
|
-
"chaingun",
|
|
1797
|
-
"grenadelauncher",
|
|
1798
|
-
"rocketlauncher",
|
|
1799
|
-
"grenades",
|
|
1800
|
-
"hyperblaster",
|
|
1801
|
-
"railgun",
|
|
1802
|
-
"bfg10k"
|
|
1803
|
-
/* BFG10K */
|
|
1804
|
-
];
|
|
1805
|
-
SoundChannel = /* @__PURE__ */ ((SoundChannel2) => {
|
|
1806
|
-
SoundChannel2[SoundChannel2["Auto"] = 0] = "Auto";
|
|
1807
|
-
SoundChannel2[SoundChannel2["Weapon"] = 1] = "Weapon";
|
|
1808
|
-
SoundChannel2[SoundChannel2["Voice"] = 2] = "Voice";
|
|
1809
|
-
SoundChannel2[SoundChannel2["Item"] = 3] = "Item";
|
|
1810
|
-
SoundChannel2[SoundChannel2["Body"] = 4] = "Body";
|
|
1811
|
-
SoundChannel2[SoundChannel2["Aux"] = 5] = "Aux";
|
|
1812
|
-
SoundChannel2[SoundChannel2["Footstep"] = 6] = "Footstep";
|
|
1813
|
-
SoundChannel2[SoundChannel2["Aux3"] = 7] = "Aux3";
|
|
1814
|
-
SoundChannel2[SoundChannel2["NoPhsAdd"] = 8] = "NoPhsAdd";
|
|
1815
|
-
SoundChannel2[SoundChannel2["Reliable"] = 16] = "Reliable";
|
|
1816
|
-
SoundChannel2[SoundChannel2["ForcePos"] = 32] = "ForcePos";
|
|
1817
|
-
return SoundChannel2;
|
|
1818
|
-
})(SoundChannel || {});
|
|
1819
|
-
ATTN_NORM = 1;
|
|
1820
|
-
ATTN_IDLE = 2;
|
|
1821
|
-
}
|
|
1822
|
-
});
|
|
1818
|
+
payloadOffset += reliableLen;
|
|
1819
|
+
}
|
|
1820
|
+
const unreliableData = packet.slice(payloadOffset);
|
|
1821
|
+
if (reliableData && reliableData.length > 0) {
|
|
1822
|
+
const totalLen = reliableData.length + unreliableData.length;
|
|
1823
|
+
const result = new Uint8Array(totalLen);
|
|
1824
|
+
result.set(reliableData, 0);
|
|
1825
|
+
result.set(unreliableData, reliableData.length);
|
|
1826
|
+
return result;
|
|
1827
|
+
}
|
|
1828
|
+
if (unreliableData) {
|
|
1829
|
+
return unreliableData;
|
|
1830
|
+
}
|
|
1831
|
+
return new Uint8Array(0);
|
|
1832
|
+
}
|
|
1833
|
+
/**
|
|
1834
|
+
* Checks if reliable message buffer is empty and ready for new data
|
|
1835
|
+
*/
|
|
1836
|
+
canSendReliable() {
|
|
1837
|
+
return this.reliableLength === 0;
|
|
1838
|
+
}
|
|
1839
|
+
/**
|
|
1840
|
+
* Writes a byte to the reliable message buffer
|
|
1841
|
+
*/
|
|
1842
|
+
writeReliableByte(value) {
|
|
1843
|
+
if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1844
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1845
|
+
}
|
|
1846
|
+
this.reliableMessage.writeByte(value);
|
|
1847
|
+
this.reliableLength++;
|
|
1848
|
+
}
|
|
1849
|
+
/**
|
|
1850
|
+
* Writes a short to the reliable message buffer
|
|
1851
|
+
*/
|
|
1852
|
+
writeReliableShort(value) {
|
|
1853
|
+
if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1854
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1855
|
+
}
|
|
1856
|
+
this.reliableMessage.writeShort(value);
|
|
1857
|
+
this.reliableLength += 2;
|
|
1858
|
+
}
|
|
1859
|
+
/**
|
|
1860
|
+
* Writes a long to the reliable message buffer
|
|
1861
|
+
*/
|
|
1862
|
+
writeReliableLong(value) {
|
|
1863
|
+
if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1864
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1865
|
+
}
|
|
1866
|
+
this.reliableMessage.writeLong(value);
|
|
1867
|
+
this.reliableLength += 4;
|
|
1868
|
+
}
|
|
1869
|
+
/**
|
|
1870
|
+
* Writes a string to the reliable message buffer
|
|
1871
|
+
*/
|
|
1872
|
+
writeReliableString(value) {
|
|
1873
|
+
const len = value.length + 1;
|
|
1874
|
+
if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
|
|
1875
|
+
throw new Error("NetChan reliable buffer overflow");
|
|
1876
|
+
}
|
|
1877
|
+
this.reliableMessage.writeString(value);
|
|
1878
|
+
this.reliableLength += len;
|
|
1879
|
+
}
|
|
1880
|
+
/**
|
|
1881
|
+
* Returns the current reliable data buffer
|
|
1882
|
+
*/
|
|
1883
|
+
getReliableData() {
|
|
1884
|
+
if (this.reliableLength === 0) {
|
|
1885
|
+
return new Uint8Array(0);
|
|
1886
|
+
}
|
|
1887
|
+
const buffer = this.reliableMessage.getBuffer();
|
|
1888
|
+
return buffer.subarray(0, this.reliableLength);
|
|
1889
|
+
}
|
|
1890
|
+
/**
|
|
1891
|
+
* Checks if we need to send a keepalive packet
|
|
1892
|
+
*/
|
|
1893
|
+
needsKeepalive(currentTime) {
|
|
1894
|
+
return currentTime - this.lastSent > 1e3;
|
|
1895
|
+
}
|
|
1896
|
+
/**
|
|
1897
|
+
* Checks if the connection has timed out
|
|
1898
|
+
*/
|
|
1899
|
+
isTimedOut(currentTime, timeoutMs = 3e4) {
|
|
1900
|
+
return currentTime - this.lastReceived > timeoutMs;
|
|
1901
|
+
}
|
|
1902
|
+
};
|
|
1903
|
+
_NetChan.MAX_MSGLEN = 1400;
|
|
1904
|
+
_NetChan.FRAGMENT_SIZE = 1024;
|
|
1905
|
+
_NetChan.PACKET_HEADER = 10;
|
|
1906
|
+
_NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
|
|
1907
|
+
_NetChan.MAX_RELIABLE_BUFFER = 262144;
|
|
1908
|
+
var WeaponId = /* @__PURE__ */ ((WeaponId22) => {
|
|
1909
|
+
WeaponId22["Blaster"] = "blaster";
|
|
1910
|
+
WeaponId22["Shotgun"] = "shotgun";
|
|
1911
|
+
WeaponId22["SuperShotgun"] = "supershotgun";
|
|
1912
|
+
WeaponId22["Machinegun"] = "machinegun";
|
|
1913
|
+
WeaponId22["Chaingun"] = "chaingun";
|
|
1914
|
+
WeaponId22["HandGrenade"] = "grenades";
|
|
1915
|
+
WeaponId22["GrenadeLauncher"] = "grenadelauncher";
|
|
1916
|
+
WeaponId22["RocketLauncher"] = "rocketlauncher";
|
|
1917
|
+
WeaponId22["HyperBlaster"] = "hyperblaster";
|
|
1918
|
+
WeaponId22["Railgun"] = "railgun";
|
|
1919
|
+
WeaponId22["BFG10K"] = "bfg10k";
|
|
1920
|
+
WeaponId22["Grapple"] = "grapple";
|
|
1921
|
+
WeaponId22["ChainFist"] = "chainfist";
|
|
1922
|
+
WeaponId22["EtfRifle"] = "etf_rifle";
|
|
1923
|
+
WeaponId22["ProxLauncher"] = "prox_launcher";
|
|
1924
|
+
WeaponId22["IonRipper"] = "ionripper";
|
|
1925
|
+
WeaponId22["PlasmaBeam"] = "plasmabeam";
|
|
1926
|
+
WeaponId22["Phalanx"] = "phalanx";
|
|
1927
|
+
WeaponId22["Disruptor"] = "disruptor";
|
|
1928
|
+
WeaponId22["Trap"] = "trap";
|
|
1929
|
+
return WeaponId22;
|
|
1930
|
+
})(WeaponId || {});
|
|
1931
|
+
var AmmoType = /* @__PURE__ */ ((AmmoType22) => {
|
|
1932
|
+
AmmoType22[AmmoType22["Bullets"] = 0] = "Bullets";
|
|
1933
|
+
AmmoType22[AmmoType22["Shells"] = 1] = "Shells";
|
|
1934
|
+
AmmoType22[AmmoType22["Rockets"] = 2] = "Rockets";
|
|
1935
|
+
AmmoType22[AmmoType22["Grenades"] = 3] = "Grenades";
|
|
1936
|
+
AmmoType22[AmmoType22["Cells"] = 4] = "Cells";
|
|
1937
|
+
AmmoType22[AmmoType22["Slugs"] = 5] = "Slugs";
|
|
1938
|
+
AmmoType22[AmmoType22["MagSlugs"] = 6] = "MagSlugs";
|
|
1939
|
+
AmmoType22[AmmoType22["Trap"] = 7] = "Trap";
|
|
1940
|
+
AmmoType22[AmmoType22["Flechettes"] = 8] = "Flechettes";
|
|
1941
|
+
AmmoType22[AmmoType22["Tesla"] = 9] = "Tesla";
|
|
1942
|
+
AmmoType22[AmmoType22["Disruptor"] = 10] = "Disruptor";
|
|
1943
|
+
AmmoType22[AmmoType22["Prox"] = 11] = "Prox";
|
|
1944
|
+
AmmoType22[AmmoType22["Nuke"] = 12] = "Nuke";
|
|
1945
|
+
AmmoType22[AmmoType22["Rounds"] = 13] = "Rounds";
|
|
1946
|
+
return AmmoType22;
|
|
1947
|
+
})(AmmoType || {});
|
|
1948
|
+
var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
|
|
1949
|
+
var AmmoItemId = /* @__PURE__ */ ((AmmoItemId2) => {
|
|
1950
|
+
AmmoItemId2["Shells"] = "ammo_shells";
|
|
1951
|
+
AmmoItemId2["Bullets"] = "ammo_bullets";
|
|
1952
|
+
AmmoItemId2["Rockets"] = "ammo_rockets";
|
|
1953
|
+
AmmoItemId2["Grenades"] = "ammo_grenades";
|
|
1954
|
+
AmmoItemId2["Cells"] = "ammo_cells";
|
|
1955
|
+
AmmoItemId2["Slugs"] = "ammo_slugs";
|
|
1956
|
+
AmmoItemId2["MagSlugs"] = "ammo_magslug";
|
|
1957
|
+
AmmoItemId2["Flechettes"] = "ammo_flechettes";
|
|
1958
|
+
AmmoItemId2["Disruptor"] = "ammo_disruptor";
|
|
1959
|
+
AmmoItemId2["Tesla"] = "ammo_tesla";
|
|
1960
|
+
AmmoItemId2["Trap"] = "ammo_trap";
|
|
1961
|
+
AmmoItemId2["Prox"] = "ammo_prox";
|
|
1962
|
+
return AmmoItemId2;
|
|
1963
|
+
})(AmmoItemId || {});
|
|
1964
|
+
var WEAPON_WHEEL_ORDER = [
|
|
1965
|
+
"blaster",
|
|
1966
|
+
"shotgun",
|
|
1967
|
+
"supershotgun",
|
|
1968
|
+
"machinegun",
|
|
1969
|
+
"chaingun",
|
|
1970
|
+
"grenadelauncher",
|
|
1971
|
+
"rocketlauncher",
|
|
1972
|
+
"grenades",
|
|
1973
|
+
"hyperblaster",
|
|
1974
|
+
"railgun",
|
|
1975
|
+
"bfg10k"
|
|
1976
|
+
/* BFG10K */
|
|
1977
|
+
];
|
|
1978
|
+
var SoundChannel = /* @__PURE__ */ ((SoundChannel2) => {
|
|
1979
|
+
SoundChannel2[SoundChannel2["Auto"] = 0] = "Auto";
|
|
1980
|
+
SoundChannel2[SoundChannel2["Weapon"] = 1] = "Weapon";
|
|
1981
|
+
SoundChannel2[SoundChannel2["Voice"] = 2] = "Voice";
|
|
1982
|
+
SoundChannel2[SoundChannel2["Item"] = 3] = "Item";
|
|
1983
|
+
SoundChannel2[SoundChannel2["Body"] = 4] = "Body";
|
|
1984
|
+
SoundChannel2[SoundChannel2["Aux"] = 5] = "Aux";
|
|
1985
|
+
SoundChannel2[SoundChannel2["Footstep"] = 6] = "Footstep";
|
|
1986
|
+
SoundChannel2[SoundChannel2["Aux3"] = 7] = "Aux3";
|
|
1987
|
+
SoundChannel2[SoundChannel2["NoPhsAdd"] = 8] = "NoPhsAdd";
|
|
1988
|
+
SoundChannel2[SoundChannel2["Reliable"] = 16] = "Reliable";
|
|
1989
|
+
SoundChannel2[SoundChannel2["ForcePos"] = 32] = "ForcePos";
|
|
1990
|
+
return SoundChannel2;
|
|
1991
|
+
})(SoundChannel || {});
|
|
1992
|
+
var ATTN_NORM = 1;
|
|
1993
|
+
var ATTN_IDLE = 2;
|
|
1823
1994
|
|
|
1824
1995
|
// src/inventory/ammo.ts
|
|
1996
|
+
var AMMO_ITEM_DEFINITIONS = {
|
|
1997
|
+
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1998
|
+
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1999
|
+
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
2000
|
+
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
2001
|
+
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
2002
|
+
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
2003
|
+
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
2004
|
+
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
2005
|
+
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
2006
|
+
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
2007
|
+
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
2008
|
+
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
2009
|
+
};
|
|
1825
2010
|
function getAmmoItemDefinition(id) {
|
|
1826
2011
|
return AMMO_ITEM_DEFINITIONS[id];
|
|
1827
2012
|
}
|
|
@@ -1875,55 +2060,54 @@ function pickupAmmo(inventory, itemId, options = {}) {
|
|
|
1875
2060
|
const amount = options.countOverride ?? def.quantity;
|
|
1876
2061
|
return addAmmo(inventory, def.ammoType, amount);
|
|
1877
2062
|
}
|
|
1878
|
-
var AMMO_ITEM_DEFINITIONS;
|
|
1879
|
-
var init_ammo = __esm({
|
|
1880
|
-
"src/inventory/ammo.ts"() {
|
|
1881
|
-
"use strict";
|
|
1882
|
-
init_esm();
|
|
1883
|
-
AMMO_ITEM_DEFINITIONS = {
|
|
1884
|
-
[AmmoItemId.Shells]: { id: AmmoItemId.Shells, ammoType: AmmoType.Shells, quantity: 10, weaponAmmo: false },
|
|
1885
|
-
[AmmoItemId.Bullets]: { id: AmmoItemId.Bullets, ammoType: AmmoType.Bullets, quantity: 50, weaponAmmo: false },
|
|
1886
|
-
[AmmoItemId.Rockets]: { id: AmmoItemId.Rockets, ammoType: AmmoType.Rockets, quantity: 5, weaponAmmo: false },
|
|
1887
|
-
[AmmoItemId.Grenades]: { id: AmmoItemId.Grenades, ammoType: AmmoType.Grenades, quantity: 5, weaponAmmo: true },
|
|
1888
|
-
[AmmoItemId.Cells]: { id: AmmoItemId.Cells, ammoType: AmmoType.Cells, quantity: 50, weaponAmmo: false },
|
|
1889
|
-
[AmmoItemId.Slugs]: { id: AmmoItemId.Slugs, ammoType: AmmoType.Slugs, quantity: 10, weaponAmmo: false },
|
|
1890
|
-
[AmmoItemId.MagSlugs]: { id: AmmoItemId.MagSlugs, ammoType: AmmoType.MagSlugs, quantity: 10, weaponAmmo: false },
|
|
1891
|
-
[AmmoItemId.Flechettes]: { id: AmmoItemId.Flechettes, ammoType: AmmoType.Flechettes, quantity: 50, weaponAmmo: false },
|
|
1892
|
-
[AmmoItemId.Disruptor]: { id: AmmoItemId.Disruptor, ammoType: AmmoType.Disruptor, quantity: 15, weaponAmmo: false },
|
|
1893
|
-
[AmmoItemId.Tesla]: { id: AmmoItemId.Tesla, ammoType: AmmoType.Tesla, quantity: 5, weaponAmmo: false },
|
|
1894
|
-
[AmmoItemId.Trap]: { id: AmmoItemId.Trap, ammoType: AmmoType.Trap, quantity: 5, weaponAmmo: false },
|
|
1895
|
-
[AmmoItemId.Prox]: { id: AmmoItemId.Prox, ammoType: AmmoType.Prox, quantity: 5, weaponAmmo: false }
|
|
1896
|
-
};
|
|
1897
|
-
}
|
|
1898
|
-
});
|
|
1899
2063
|
|
|
1900
2064
|
// src/combat/damageFlags.ts
|
|
2065
|
+
var DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
2066
|
+
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
2067
|
+
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
2068
|
+
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
2069
|
+
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
2070
|
+
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
2071
|
+
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
2072
|
+
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
2073
|
+
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
2074
|
+
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
2075
|
+
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
2076
|
+
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
2077
|
+
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
2078
|
+
return DamageFlags2;
|
|
2079
|
+
})(DamageFlags || {});
|
|
1901
2080
|
function hasAnyDamageFlag(flags, mask) {
|
|
1902
2081
|
return (flags & mask) !== 0;
|
|
1903
2082
|
}
|
|
1904
|
-
var DamageFlags;
|
|
1905
|
-
var init_damageFlags = __esm({
|
|
1906
|
-
"src/combat/damageFlags.ts"() {
|
|
1907
|
-
"use strict";
|
|
1908
|
-
DamageFlags = /* @__PURE__ */ ((DamageFlags2) => {
|
|
1909
|
-
DamageFlags2[DamageFlags2["NONE"] = 0] = "NONE";
|
|
1910
|
-
DamageFlags2[DamageFlags2["RADIUS"] = 1] = "RADIUS";
|
|
1911
|
-
DamageFlags2[DamageFlags2["NO_ARMOR"] = 2] = "NO_ARMOR";
|
|
1912
|
-
DamageFlags2[DamageFlags2["ENERGY"] = 4] = "ENERGY";
|
|
1913
|
-
DamageFlags2[DamageFlags2["NO_KNOCKBACK"] = 8] = "NO_KNOCKBACK";
|
|
1914
|
-
DamageFlags2[DamageFlags2["BULLET"] = 16] = "BULLET";
|
|
1915
|
-
DamageFlags2[DamageFlags2["NO_PROTECTION"] = 32] = "NO_PROTECTION";
|
|
1916
|
-
DamageFlags2[DamageFlags2["DESTROY_ARMOR"] = 64] = "DESTROY_ARMOR";
|
|
1917
|
-
DamageFlags2[DamageFlags2["NO_REG_ARMOR"] = 128] = "NO_REG_ARMOR";
|
|
1918
|
-
DamageFlags2[DamageFlags2["NO_POWER_ARMOR"] = 256] = "NO_POWER_ARMOR";
|
|
1919
|
-
DamageFlags2[DamageFlags2["NO_INDICATOR"] = 512] = "NO_INDICATOR";
|
|
1920
|
-
DamageFlags2[DamageFlags2["NO_DAMAGE_EFFECTS"] = 1024] = "NO_DAMAGE_EFFECTS";
|
|
1921
|
-
return DamageFlags2;
|
|
1922
|
-
})(DamageFlags || {});
|
|
1923
|
-
}
|
|
1924
|
-
});
|
|
1925
2083
|
|
|
1926
2084
|
// src/combat/armor.ts
|
|
2085
|
+
var ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
2086
|
+
ArmorType2["BODY"] = "body";
|
|
2087
|
+
ArmorType2["COMBAT"] = "combat";
|
|
2088
|
+
ArmorType2["JACKET"] = "jacket";
|
|
2089
|
+
return ArmorType2;
|
|
2090
|
+
})(ArmorType || {});
|
|
2091
|
+
var ARMOR_INFO = {
|
|
2092
|
+
["jacket" /* JACKET */]: {
|
|
2093
|
+
baseCount: 25,
|
|
2094
|
+
maxCount: 50,
|
|
2095
|
+
normalProtection: 0.3,
|
|
2096
|
+
energyProtection: 0
|
|
2097
|
+
},
|
|
2098
|
+
["combat" /* COMBAT */]: {
|
|
2099
|
+
baseCount: 50,
|
|
2100
|
+
maxCount: 100,
|
|
2101
|
+
normalProtection: 0.6,
|
|
2102
|
+
energyProtection: 0.3
|
|
2103
|
+
},
|
|
2104
|
+
["body" /* BODY */]: {
|
|
2105
|
+
baseCount: 100,
|
|
2106
|
+
maxCount: 200,
|
|
2107
|
+
normalProtection: 0.8,
|
|
2108
|
+
energyProtection: 0.6
|
|
2109
|
+
}
|
|
2110
|
+
};
|
|
1927
2111
|
function applyRegularArmor(damage, flags, state) {
|
|
1928
2112
|
if (damage <= 0 || hasAnyDamageFlag(flags, 2 /* NO_ARMOR */ | 128 /* NO_REG_ARMOR */) || !state.armorType || state.armorCount <= 0) {
|
|
1929
2113
|
return { saved: 0, remainingArmor: state.armorCount };
|
|
@@ -1987,42 +2171,28 @@ function applyPowerArmor(damage, flags, hitPoint, _hitNormal, state, options = {
|
|
|
1987
2171
|
const remainingCells = Math.max(0, state.cellCount - cellsSpent);
|
|
1988
2172
|
return { saved, remainingCells };
|
|
1989
2173
|
}
|
|
1990
|
-
var ArmorType, ARMOR_INFO;
|
|
1991
|
-
var init_armor = __esm({
|
|
1992
|
-
"src/combat/armor.ts"() {
|
|
1993
|
-
"use strict";
|
|
1994
|
-
init_esm();
|
|
1995
|
-
init_damageFlags();
|
|
1996
|
-
ArmorType = /* @__PURE__ */ ((ArmorType2) => {
|
|
1997
|
-
ArmorType2["BODY"] = "body";
|
|
1998
|
-
ArmorType2["COMBAT"] = "combat";
|
|
1999
|
-
ArmorType2["JACKET"] = "jacket";
|
|
2000
|
-
return ArmorType2;
|
|
2001
|
-
})(ArmorType || {});
|
|
2002
|
-
ARMOR_INFO = {
|
|
2003
|
-
["jacket" /* JACKET */]: {
|
|
2004
|
-
baseCount: 25,
|
|
2005
|
-
maxCount: 50,
|
|
2006
|
-
normalProtection: 0.3,
|
|
2007
|
-
energyProtection: 0
|
|
2008
|
-
},
|
|
2009
|
-
["combat" /* COMBAT */]: {
|
|
2010
|
-
baseCount: 50,
|
|
2011
|
-
maxCount: 100,
|
|
2012
|
-
normalProtection: 0.6,
|
|
2013
|
-
energyProtection: 0.3
|
|
2014
|
-
},
|
|
2015
|
-
["body" /* BODY */]: {
|
|
2016
|
-
baseCount: 100,
|
|
2017
|
-
maxCount: 200,
|
|
2018
|
-
normalProtection: 0.8,
|
|
2019
|
-
energyProtection: 0.6
|
|
2020
|
-
}
|
|
2021
|
-
};
|
|
2022
|
-
}
|
|
2023
|
-
});
|
|
2024
2174
|
|
|
2025
2175
|
// src/inventory/playerInventory.ts
|
|
2176
|
+
var KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
2177
|
+
KeyId2["Blue"] = "key_blue";
|
|
2178
|
+
KeyId2["Red"] = "key_red";
|
|
2179
|
+
KeyId2["Green"] = "key_green";
|
|
2180
|
+
KeyId2["Yellow"] = "key_yellow";
|
|
2181
|
+
KeyId2["DataCD"] = "key_data_cd";
|
|
2182
|
+
KeyId2["PowerCube"] = "key_power_cube";
|
|
2183
|
+
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
2184
|
+
KeyId2["PowerCore"] = "key_power_core";
|
|
2185
|
+
KeyId2["Pyramid"] = "key_pyramid";
|
|
2186
|
+
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
2187
|
+
KeyId2["Pass"] = "key_pass";
|
|
2188
|
+
KeyId2["CommanderHead"] = "key_commander_head";
|
|
2189
|
+
KeyId2["Airstrike"] = "key_airstrike";
|
|
2190
|
+
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
2191
|
+
KeyId2["Nuke"] = "key_nuke";
|
|
2192
|
+
KeyId2["RedFlag"] = "key_red_flag";
|
|
2193
|
+
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
2194
|
+
return KeyId2;
|
|
2195
|
+
})(KeyId || {});
|
|
2026
2196
|
function createPlayerInventory(init = {}) {
|
|
2027
2197
|
const ammoCaps = init.ammoCaps;
|
|
2028
2198
|
const inv = {
|
|
@@ -2195,452 +2365,135 @@ function pickupPowerup(client, item, time) {
|
|
|
2195
2365
|
break;
|
|
2196
2366
|
case "item_rebreather":
|
|
2197
2367
|
powerupId = PowerupId.Rebreather;
|
|
2198
|
-
icon = "p_rebreather";
|
|
2199
|
-
break;
|
|
2200
|
-
case "item_enviro":
|
|
2201
|
-
powerupId = PowerupId.EnviroSuit;
|
|
2202
|
-
icon = "p_envirosuit";
|
|
2203
|
-
break;
|
|
2204
|
-
case "item_double":
|
|
2205
|
-
powerupId = PowerupId.DoubleDamage;
|
|
2206
|
-
icon = "p_double";
|
|
2207
|
-
break;
|
|
2208
|
-
}
|
|
2209
|
-
if (powerupId) {
|
|
2210
|
-
const expiresAt = inventory.powerups.get(powerupId);
|
|
2211
|
-
const newExpiresAt = expiresAt && expiresAt > time ? expiresAt + item.timer * 1e3 : time + item.timer * 1e3;
|
|
2212
|
-
inventory.powerups.set(powerupId, newExpiresAt);
|
|
2213
|
-
if (powerupId === PowerupId.QuadDamage) {
|
|
2214
|
-
client.quad_time = newExpiresAt / 1e3;
|
|
2215
|
-
} else if (powerupId === PowerupId.DoubleDamage) {
|
|
2216
|
-
client.double_time = newExpiresAt / 1e3;
|
|
2217
|
-
}
|
|
2218
|
-
setPickup(inventory, icon, time);
|
|
2219
|
-
return true;
|
|
2220
|
-
}
|
|
2221
|
-
return false;
|
|
2222
|
-
}
|
|
2223
|
-
function pickupPowerArmor(inventory, item, time) {
|
|
2224
|
-
let icon = "";
|
|
2225
|
-
if (item.armorType === "screen") {
|
|
2226
|
-
icon = "i_powerscreen";
|
|
2227
|
-
} else if (item.armorType === "shield") {
|
|
2228
|
-
icon = "i_powershield";
|
|
2229
|
-
}
|
|
2230
|
-
const hadIt = inventory.items.has(item.id);
|
|
2231
|
-
inventory.items.add(item.id);
|
|
2232
|
-
if (!hadIt) {
|
|
2233
|
-
setPickup(inventory, icon, time);
|
|
2234
|
-
return true;
|
|
2235
|
-
}
|
|
2236
|
-
return false;
|
|
2237
|
-
}
|
|
2238
|
-
function pickupKey(inventory, item, time) {
|
|
2239
|
-
let keyId = null;
|
|
2240
|
-
let icon = "";
|
|
2241
|
-
switch (item.id) {
|
|
2242
|
-
case "key_blue":
|
|
2243
|
-
keyId = "key_blue" /* Blue */;
|
|
2244
|
-
icon = "k_bluekey";
|
|
2245
|
-
break;
|
|
2246
|
-
case "key_red":
|
|
2247
|
-
keyId = "key_red" /* Red */;
|
|
2248
|
-
icon = "k_redkey";
|
|
2249
|
-
break;
|
|
2250
|
-
case "key_green":
|
|
2251
|
-
keyId = "key_green" /* Green */;
|
|
2252
|
-
icon = "k_security";
|
|
2253
|
-
break;
|
|
2254
|
-
case "key_yellow":
|
|
2255
|
-
keyId = "key_yellow" /* Yellow */;
|
|
2256
|
-
icon = "k_pyramid";
|
|
2257
|
-
break;
|
|
2258
|
-
}
|
|
2259
|
-
if (keyId) {
|
|
2260
|
-
const res = addKey(inventory, keyId);
|
|
2261
|
-
if (res) setPickup(inventory, icon, time);
|
|
2262
|
-
return res;
|
|
2263
|
-
}
|
|
2264
|
-
return false;
|
|
2265
|
-
}
|
|
2266
|
-
function pickupFlag(client, item, time) {
|
|
2267
|
-
const inventory = client.inventory;
|
|
2268
|
-
let keyId = null;
|
|
2269
|
-
let icon = "";
|
|
2270
|
-
if (item.team === "red") {
|
|
2271
|
-
keyId = "key_red_flag" /* RedFlag */;
|
|
2272
|
-
icon = "i_ctf1";
|
|
2273
|
-
} else {
|
|
2274
|
-
keyId = "key_blue_flag" /* BlueFlag */;
|
|
2275
|
-
icon = "i_ctf2";
|
|
2276
|
-
}
|
|
2277
|
-
if (keyId) {
|
|
2278
|
-
const res = addKey(inventory, keyId);
|
|
2279
|
-
if (res) setPickup(inventory, icon, time);
|
|
2280
|
-
return true;
|
|
2281
|
-
}
|
|
2282
|
-
return false;
|
|
2283
|
-
}
|
|
2284
|
-
function pickupWeapon(inventory, weaponItem, time) {
|
|
2285
|
-
const hadWeapon = hasWeapon(inventory, weaponItem.weaponId);
|
|
2286
|
-
let ammoAdded = false;
|
|
2287
|
-
if (weaponItem.ammoType) {
|
|
2288
|
-
const ammoToAdd = hadWeapon ? weaponItem.pickupAmmo : weaponItem.initialAmmo;
|
|
2289
|
-
const result = addAmmo(inventory.ammo, weaponItem.ammoType, ammoToAdd);
|
|
2290
|
-
ammoAdded = result.pickedUp;
|
|
2291
|
-
}
|
|
2292
|
-
if (hadWeapon && !ammoAdded) {
|
|
2293
|
-
return false;
|
|
2294
|
-
}
|
|
2295
|
-
giveWeapon(inventory, weaponItem.weaponId, true);
|
|
2296
|
-
const icon = `w_${weaponItem.id.substring(7)}`;
|
|
2297
|
-
setPickup(inventory, icon, time);
|
|
2298
|
-
return true;
|
|
2299
|
-
}
|
|
2300
|
-
function serializePlayerInventory(inventory) {
|
|
2301
|
-
return {
|
|
2302
|
-
ammo: inventory.ammo.counts,
|
|
2303
|
-
ownedWeapons: [...inventory.ownedWeapons],
|
|
2304
|
-
currentWeapon: inventory.currentWeapon,
|
|
2305
|
-
armor: inventory.armor ? { ...inventory.armor } : null,
|
|
2306
|
-
powerups: [...inventory.powerups.entries()],
|
|
2307
|
-
keys: [...inventory.keys],
|
|
2308
|
-
items: [...inventory.items]
|
|
2309
|
-
};
|
|
2310
|
-
}
|
|
2311
|
-
function deserializePlayerInventory(serialized, options = {}) {
|
|
2312
|
-
const ammo = createAmmoInventory(options.ammoCaps);
|
|
2313
|
-
const limit = Math.min(ammo.counts.length, serialized.ammo.length);
|
|
2314
|
-
for (let i = 0; i < limit; i++) {
|
|
2315
|
-
ammo.counts[i] = serialized.ammo[i];
|
|
2316
|
-
}
|
|
2317
|
-
return {
|
|
2318
|
-
ammo,
|
|
2319
|
-
ownedWeapons: new Set(serialized.ownedWeapons),
|
|
2320
|
-
currentWeapon: serialized.currentWeapon,
|
|
2321
|
-
armor: serialized.armor ? { ...serialized.armor } : null,
|
|
2322
|
-
powerups: new Map(serialized.powerups),
|
|
2323
|
-
keys: new Set(serialized.keys),
|
|
2324
|
-
items: new Set(serialized.items)
|
|
2325
|
-
};
|
|
2326
|
-
}
|
|
2327
|
-
var KeyId;
|
|
2328
|
-
var init_playerInventory = __esm({
|
|
2329
|
-
"src/inventory/playerInventory.ts"() {
|
|
2330
|
-
"use strict";
|
|
2331
|
-
init_ammo();
|
|
2332
|
-
init_esm();
|
|
2333
|
-
init_armor();
|
|
2334
|
-
KeyId = /* @__PURE__ */ ((KeyId2) => {
|
|
2335
|
-
KeyId2["Blue"] = "key_blue";
|
|
2336
|
-
KeyId2["Red"] = "key_red";
|
|
2337
|
-
KeyId2["Green"] = "key_green";
|
|
2338
|
-
KeyId2["Yellow"] = "key_yellow";
|
|
2339
|
-
KeyId2["DataCD"] = "key_data_cd";
|
|
2340
|
-
KeyId2["PowerCube"] = "key_power_cube";
|
|
2341
|
-
KeyId2["ExplosiveCharges"] = "key_explosive_charges";
|
|
2342
|
-
KeyId2["PowerCore"] = "key_power_core";
|
|
2343
|
-
KeyId2["Pyramid"] = "key_pyramid";
|
|
2344
|
-
KeyId2["DataSpinner"] = "key_data_spinner";
|
|
2345
|
-
KeyId2["Pass"] = "key_pass";
|
|
2346
|
-
KeyId2["CommanderHead"] = "key_commander_head";
|
|
2347
|
-
KeyId2["Airstrike"] = "key_airstrike";
|
|
2348
|
-
KeyId2["NukeContainer"] = "key_nuke_container";
|
|
2349
|
-
KeyId2["Nuke"] = "key_nuke";
|
|
2350
|
-
KeyId2["RedFlag"] = "key_red_flag";
|
|
2351
|
-
KeyId2["BlueFlag"] = "key_blue_flag";
|
|
2352
|
-
return KeyId2;
|
|
2353
|
-
})(KeyId || {});
|
|
2354
|
-
}
|
|
2355
|
-
});
|
|
2356
|
-
|
|
2357
|
-
// src/combat/weapons/state.ts
|
|
2358
|
-
function createPlayerWeaponStates() {
|
|
2359
|
-
return {
|
|
2360
|
-
states: /* @__PURE__ */ new Map()
|
|
2361
|
-
};
|
|
2362
|
-
}
|
|
2363
|
-
function getWeaponState(playerStates, weaponId) {
|
|
2364
|
-
let state = playerStates.states.get(weaponId);
|
|
2365
|
-
if (!state) {
|
|
2366
|
-
state = { lastFireTime: 0 };
|
|
2367
|
-
playerStates.states.set(weaponId, state);
|
|
2368
|
-
}
|
|
2369
|
-
return state;
|
|
2370
|
-
}
|
|
2371
|
-
var WeaponStateEnum;
|
|
2372
|
-
var init_state = __esm({
|
|
2373
|
-
"src/combat/weapons/state.ts"() {
|
|
2374
|
-
"use strict";
|
|
2375
|
-
WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
2376
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
2377
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
2378
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
2379
|
-
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
2380
|
-
return WeaponStateEnum2;
|
|
2381
|
-
})(WeaponStateEnum || {});
|
|
2382
|
-
}
|
|
2383
|
-
});
|
|
2384
|
-
|
|
2385
|
-
// src/combat/weapons/switching.ts
|
|
2386
|
-
var switching_exports = {};
|
|
2387
|
-
__export(switching_exports, {
|
|
2388
|
-
ChangeWeapon: () => ChangeWeapon,
|
|
2389
|
-
NoAmmoWeaponChange: () => NoAmmoWeaponChange,
|
|
2390
|
-
setInstantSwitch: () => setInstantSwitch,
|
|
2391
|
-
switchToBestWeapon: () => switchToBestWeapon
|
|
2392
|
-
});
|
|
2393
|
-
function setInstantSwitch(enabled) {
|
|
2394
|
-
instantSwitch = enabled;
|
|
2395
|
-
}
|
|
2396
|
-
function ChangeWeapon(ent, weaponId) {
|
|
2397
|
-
if (!ent.client) return;
|
|
2398
|
-
const client = ent.client;
|
|
2399
|
-
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
2400
|
-
return;
|
|
2401
|
-
}
|
|
2402
|
-
if (weaponId) {
|
|
2403
|
-
selectWeapon(client.inventory, weaponId);
|
|
2404
|
-
client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
2405
|
-
client.gun_frame = 0;
|
|
2406
|
-
if (instantSwitch) {
|
|
2407
|
-
client.weaponstate = 0 /* WEAPON_READY */;
|
|
2408
|
-
client.weapon_think_time = 0;
|
|
2409
|
-
return;
|
|
2410
|
-
}
|
|
2411
|
-
client.weapon_think_time = 0;
|
|
2412
|
-
}
|
|
2413
|
-
}
|
|
2414
|
-
function NoAmmoWeaponChange(ent) {
|
|
2415
|
-
if (!ent.client) return;
|
|
2416
|
-
switchToBestWeapon(ent);
|
|
2417
|
-
}
|
|
2418
|
-
function switchToBestWeapon(player) {
|
|
2419
|
-
if (!player.client) {
|
|
2420
|
-
return;
|
|
2421
|
-
}
|
|
2422
|
-
const inventory = player.client.inventory;
|
|
2423
|
-
let bestWeapon = null;
|
|
2424
|
-
if (inventory.ownedWeapons.has(WeaponId.BFG10K) && inventory.ammo.counts[AmmoType.Cells] >= 50) {
|
|
2425
|
-
bestWeapon = WeaponId.BFG10K;
|
|
2426
|
-
} else if (inventory.ownedWeapons.has(WeaponId.RocketLauncher) && inventory.ammo.counts[AmmoType.Rockets] >= 1) {
|
|
2427
|
-
bestWeapon = WeaponId.RocketLauncher;
|
|
2428
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Railgun) && inventory.ammo.counts[AmmoType.Slugs] >= 1) {
|
|
2429
|
-
bestWeapon = WeaponId.Railgun;
|
|
2430
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Chaingun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
2431
|
-
bestWeapon = WeaponId.Chaingun;
|
|
2432
|
-
} else if (inventory.ownedWeapons.has(WeaponId.SuperShotgun) && inventory.ammo.counts[AmmoType.Shells] >= 2) {
|
|
2433
|
-
bestWeapon = WeaponId.SuperShotgun;
|
|
2434
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Machinegun) && inventory.ammo.counts[AmmoType.Bullets] >= 1) {
|
|
2435
|
-
bestWeapon = WeaponId.Machinegun;
|
|
2436
|
-
} else if (inventory.ownedWeapons.has(WeaponId.Shotgun) && inventory.ammo.counts[AmmoType.Shells] >= 1) {
|
|
2437
|
-
bestWeapon = WeaponId.Shotgun;
|
|
2438
|
-
} else {
|
|
2439
|
-
bestWeapon = WeaponId.Blaster;
|
|
2440
|
-
}
|
|
2441
|
-
if (bestWeapon && bestWeapon !== inventory.currentWeapon) {
|
|
2442
|
-
selectWeapon(inventory, bestWeapon);
|
|
2443
|
-
player.client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
2444
|
-
player.client.gun_frame = 0;
|
|
2445
|
-
if (instantSwitch) {
|
|
2446
|
-
player.client.weaponstate = 0 /* WEAPON_READY */;
|
|
2447
|
-
}
|
|
2448
|
-
player.client.weapon_think_time = 0;
|
|
2449
|
-
}
|
|
2450
|
-
}
|
|
2451
|
-
var instantSwitch;
|
|
2452
|
-
var init_switching = __esm({
|
|
2453
|
-
"src/combat/weapons/switching.ts"() {
|
|
2454
|
-
"use strict";
|
|
2455
|
-
init_playerInventory();
|
|
2456
|
-
init_ammo();
|
|
2457
|
-
instantSwitch = false;
|
|
2458
|
-
}
|
|
2459
|
-
});
|
|
2460
|
-
|
|
2461
|
-
// src/index.ts
|
|
2462
|
-
var index_exports = {};
|
|
2463
|
-
__export(index_exports, {
|
|
2464
|
-
AIFlags: () => AIFlags,
|
|
2465
|
-
AI_GetSightClient: () => AI_GetSightClient,
|
|
2466
|
-
AMMO_TYPE_COUNT: () => AMMO_TYPE_COUNT,
|
|
2467
|
-
ARMOR_INFO: () => ARMOR_INFO,
|
|
2468
|
-
ARMOR_ITEMS: () => ARMOR_ITEMS,
|
|
2469
|
-
AmmoItemId: () => AmmoItemId,
|
|
2470
|
-
AmmoType: () => AmmoType,
|
|
2471
|
-
ArmorType: () => ArmorType,
|
|
2472
|
-
AttackState: () => AttackState,
|
|
2473
|
-
BOTTOM_EMPTY: () => BOTTOM_EMPTY,
|
|
2474
|
-
BOTTOM_LAVA: () => BOTTOM_LAVA,
|
|
2475
|
-
BOTTOM_SLIME: () => BOTTOM_SLIME,
|
|
2476
|
-
BOTTOM_SOLID: () => BOTTOM_SOLID,
|
|
2477
|
-
BOTTOM_WATER: () => BOTTOM_WATER,
|
|
2478
|
-
BlockedJumpResult: () => BlockedJumpResult,
|
|
2479
|
-
CheckGround: () => CheckGround,
|
|
2480
|
-
DamageFlags: () => DamageFlags,
|
|
2481
|
-
DamageMod: () => DamageMod,
|
|
2482
|
-
DeadFlag: () => DeadFlag,
|
|
2483
|
-
ENTITY_FIELD_METADATA: () => ENTITY_FIELD_METADATA,
|
|
2484
|
-
Entity: () => Entity,
|
|
2485
|
-
EntityDamageFlags: () => EntityDamageFlags,
|
|
2486
|
-
EntitySystem: () => EntitySystem,
|
|
2487
|
-
EnvironmentalFlags: () => EnvironmentalFlags,
|
|
2488
|
-
FLAG_ITEMS: () => FLAG_ITEMS,
|
|
2489
|
-
FL_NOTARGET: () => FL_NOTARGET,
|
|
2490
|
-
FL_NOVISIBLE: () => FL_NOVISIBLE,
|
|
2491
|
-
G_IdealHoverPosition: () => G_IdealHoverPosition,
|
|
2492
|
-
HEALTH_ITEMS: () => HEALTH_ITEMS,
|
|
2493
|
-
KEY_ITEMS: () => KEY_ITEMS,
|
|
2494
|
-
KeyId: () => KeyId,
|
|
2495
|
-
M_CalculatePitchToFire: () => M_CalculatePitchToFire,
|
|
2496
|
-
M_ChangeYaw: () => M_ChangeYaw,
|
|
2497
|
-
M_CheckAttack: () => M_CheckAttack,
|
|
2498
|
-
M_CheckAttack_Base: () => M_CheckAttack_Base,
|
|
2499
|
-
M_CheckBottom: () => M_CheckBottom,
|
|
2500
|
-
M_CheckBottomEx: () => M_CheckBottomEx,
|
|
2501
|
-
M_MoveFrame: () => M_MoveFrame,
|
|
2502
|
-
M_MoveStep: () => M_MoveStep,
|
|
2503
|
-
M_MoveToGoal: () => M_MoveToGoal,
|
|
2504
|
-
M_MoveToPath: () => M_MoveToPath,
|
|
2505
|
-
M_droptofloor: () => M_droptofloor,
|
|
2506
|
-
M_droptofloor_generic: () => M_droptofloor_generic,
|
|
2507
|
-
M_walkmove: () => M_walkmove,
|
|
2508
|
-
MonsterAttackState: () => MonsterAttackState,
|
|
2509
|
-
MoveType: () => MoveType,
|
|
2510
|
-
MulticastType: () => MulticastType,
|
|
2511
|
-
ORDERED_DAMAGE_MODS: () => ORDERED_DAMAGE_MODS,
|
|
2512
|
-
PNOISE_IMPACT: () => PNOISE_IMPACT,
|
|
2513
|
-
PNOISE_SELF: () => PNOISE_SELF,
|
|
2514
|
-
PNOISE_WEAPON: () => PNOISE_WEAPON,
|
|
2515
|
-
POWERUP_ITEMS: () => POWERUP_ITEMS,
|
|
2516
|
-
POWER_ARMOR_ITEMS: () => POWER_ARMOR_ITEMS,
|
|
2517
|
-
PlayerNoise: () => PlayerNoise,
|
|
2518
|
-
PowerupId: () => PowerupId,
|
|
2519
|
-
PredictAim: () => PredictAim,
|
|
2520
|
-
RANGE_MELEE: () => RANGE_MELEE,
|
|
2521
|
-
RANGE_MID: () => RANGE_MID,
|
|
2522
|
-
RANGE_NEAR: () => RANGE_NEAR,
|
|
2523
|
-
Range: () => RangeCategory,
|
|
2524
|
-
RangeCategory: () => RangeCategory,
|
|
2525
|
-
SAVE_FORMAT_VERSION: () => SAVE_FORMAT_VERSION,
|
|
2526
|
-
SPAWNFLAG_MONSTER_AMBUSH: () => SPAWNFLAG_MONSTER_AMBUSH,
|
|
2527
|
-
SV_NewChaseDir: () => SV_NewChaseDir,
|
|
2528
|
-
SV_StepDirection: () => SV_StepDirection,
|
|
2529
|
-
SV_flystep: () => SV_flystep,
|
|
2530
|
-
SaveStorage: () => SaveStorage,
|
|
2531
|
-
ServerFlags: () => ServerFlags,
|
|
2532
|
-
Solid: () => Solid,
|
|
2533
|
-
SpawnRegistry: () => SpawnRegistry,
|
|
2534
|
-
T_Damage: () => T_Damage,
|
|
2535
|
-
T_RadiusDamage: () => T_RadiusDamage,
|
|
2536
|
-
TraceMask: () => TraceMask,
|
|
2537
|
-
WEAPONS: () => WEAPONS,
|
|
2538
|
-
WEAPON_ITEMS: () => WEAPON_ITEMS,
|
|
2539
|
-
WeaponId: () => WeaponId,
|
|
2540
|
-
WeaponStateEnum: () => WeaponStateEnum,
|
|
2541
|
-
WeaponType: () => WeaponType,
|
|
2542
|
-
addAmmo: () => addAmmo,
|
|
2543
|
-
addKey: () => addKey,
|
|
2544
|
-
addPowerup: () => addPowerup,
|
|
2545
|
-
ai_charge: () => ai_charge,
|
|
2546
|
-
ai_checkattack: () => ai_checkattack,
|
|
2547
|
-
ai_face: () => ai_face,
|
|
2548
|
-
ai_move: () => ai_move,
|
|
2549
|
-
ai_run: () => ai_run,
|
|
2550
|
-
ai_run_slide: () => ai_run_slide,
|
|
2551
|
-
ai_stand: () => ai_stand,
|
|
2552
|
-
ai_turn: () => ai_turn,
|
|
2553
|
-
ai_walk: () => ai_walk,
|
|
2554
|
-
applyCrushDamage: () => applyCrushDamage,
|
|
2555
|
-
applyEntityKeyValues: () => applyEntityKeyValues,
|
|
2556
|
-
applyEnvironmentalDamage: () => applyEnvironmentalDamage,
|
|
2557
|
-
applyFallingDamage: () => applyFallingDamage,
|
|
2558
|
-
applyPowerArmor: () => applyPowerArmor,
|
|
2559
|
-
applyRegularArmor: () => applyRegularArmor,
|
|
2560
|
-
applySaveFile: () => applySaveFile,
|
|
2561
|
-
blocked_checkjump: () => blocked_checkjump,
|
|
2562
|
-
blocked_checkplat: () => blocked_checkplat,
|
|
2563
|
-
calculateFallingDamage: () => calculateFallingDamage,
|
|
2564
|
-
calculateSaveChecksum: () => calculateSaveChecksum,
|
|
2565
|
-
canPickupHealth: () => canPickupHealth,
|
|
2566
|
-
changeYaw: () => changeYaw,
|
|
2567
|
-
clampAmmoCounts: () => clampAmmoCounts,
|
|
2568
|
-
classifyRange: () => classifyRange,
|
|
2569
|
-
clearExpiredPowerups: () => clearExpiredPowerups,
|
|
2570
|
-
convertGameSaveToRereleaseLevel: () => convertGameSaveToRereleaseLevel,
|
|
2571
|
-
convertRereleaseLevelToGameSave: () => convertRereleaseLevelToGameSave,
|
|
2572
|
-
convertRereleaseSaveToGameSave: () => convertRereleaseSaveToGameSave,
|
|
2573
|
-
createAmmoInventory: () => createAmmoInventory,
|
|
2574
|
-
createAmmoPickupEntity: () => createAmmoPickupEntity,
|
|
2575
|
-
createArmorPickupEntity: () => createArmorPickupEntity,
|
|
2576
|
-
createBaseAmmoCaps: () => createBaseAmmoCaps,
|
|
2577
|
-
createCallbackRegistry: () => createCallbackRegistry,
|
|
2578
|
-
createDefaultSpawnRegistry: () => createDefaultSpawnRegistry,
|
|
2579
|
-
createFoodCubePickupEntity: () => createFoodCubePickupEntity,
|
|
2580
|
-
createGame: () => createGame,
|
|
2581
|
-
createHealthPickupEntity: () => createHealthPickupEntity,
|
|
2582
|
-
createKeyPickupEntity: () => createKeyPickupEntity,
|
|
2583
|
-
createPlayerInventory: () => createPlayerInventory,
|
|
2584
|
-
createPlayerWeaponStates: () => createPlayerWeaponStates,
|
|
2585
|
-
createPowerupPickupEntity: () => createPowerupPickupEntity,
|
|
2586
|
-
createSaveFile: () => createSaveFile,
|
|
2587
|
-
createWeaponPickupEntity: () => createWeaponPickupEntity,
|
|
2588
|
-
damageModName: () => damageModName,
|
|
2589
|
-
deserializePlayerInventory: () => deserializePlayerInventory,
|
|
2590
|
-
equipArmor: () => equipArmor,
|
|
2591
|
-
facingIdeal: () => facingIdeal,
|
|
2592
|
-
findTarget: () => findTarget,
|
|
2593
|
-
foundTarget: () => foundTarget,
|
|
2594
|
-
getAmmoItemDefinition: () => getAmmoItemDefinition,
|
|
2595
|
-
getWeaponState: () => getWeaponState,
|
|
2596
|
-
giveAmmoItem: () => giveAmmoItem,
|
|
2597
|
-
giveWeapon: () => giveWeapon,
|
|
2598
|
-
hasAnyDamageFlag: () => hasAnyDamageFlag,
|
|
2599
|
-
hasItem: () => hasItem,
|
|
2600
|
-
hasKey: () => hasKey,
|
|
2601
|
-
hasPowerup: () => hasPowerup,
|
|
2602
|
-
hasWeapon: () => hasWeapon,
|
|
2603
|
-
hashEntitySystem: () => hashEntitySystem,
|
|
2604
|
-
hashGameState: () => hashGameState,
|
|
2605
|
-
huntTarget: () => huntTarget,
|
|
2606
|
-
infront: () => infront,
|
|
2607
|
-
isZeroVector: () => isZeroVector,
|
|
2608
|
-
killBox: () => killBox,
|
|
2609
|
-
monster_done_dodge: () => monster_done_dodge,
|
|
2610
|
-
monster_jump_finished: () => monster_jump_finished,
|
|
2611
|
-
monster_jump_start: () => monster_jump_start,
|
|
2612
|
-
monster_think: () => monster_think,
|
|
2613
|
-
parseEntityLump: () => parseEntityLump,
|
|
2614
|
-
parseRereleaseSave: () => parseRereleaseSave,
|
|
2615
|
-
parseSaveFile: () => parseSaveFile,
|
|
2616
|
-
pickupAmmo: () => pickupAmmo,
|
|
2617
|
-
pickupArmor: () => pickupArmor,
|
|
2618
|
-
pickupFlag: () => pickupFlag,
|
|
2619
|
-
pickupKey: () => pickupKey,
|
|
2620
|
-
pickupPowerArmor: () => pickupPowerArmor,
|
|
2621
|
-
pickupPowerup: () => pickupPowerup,
|
|
2622
|
-
pickupWeapon: () => pickupWeapon,
|
|
2623
|
-
player_noise: () => player_noise,
|
|
2624
|
-
range: () => rangeTo,
|
|
2625
|
-
rangeTo: () => rangeTo,
|
|
2626
|
-
registerCallback: () => registerCallback,
|
|
2627
|
-
registerDefaultSpawns: () => registerDefaultSpawns,
|
|
2628
|
-
resetInventory: () => resetInventory,
|
|
2629
|
-
selectWeapon: () => selectWeapon,
|
|
2630
|
-
serializePlayerInventory: () => serializePlayerInventory,
|
|
2631
|
-
serializeRereleaseSave: () => serializeRereleaseSave,
|
|
2632
|
-
setMovedir: () => setMovedir,
|
|
2633
|
-
spawnEntitiesFromText: () => spawnEntitiesFromText,
|
|
2634
|
-
spawnEntityFromDictionary: () => spawnEntityFromDictionary,
|
|
2635
|
-
summarizeRereleaseSave: () => summarizeRereleaseSave,
|
|
2636
|
-
visible: () => visible,
|
|
2637
|
-
walkMove: () => walkMove
|
|
2638
|
-
});
|
|
2639
|
-
module.exports = __toCommonJS(index_exports);
|
|
2640
|
-
|
|
2641
|
-
// src/entities/entity.ts
|
|
2642
|
-
init_esm();
|
|
2643
|
-
init_playerInventory();
|
|
2368
|
+
icon = "p_rebreather";
|
|
2369
|
+
break;
|
|
2370
|
+
case "item_enviro":
|
|
2371
|
+
powerupId = PowerupId.EnviroSuit;
|
|
2372
|
+
icon = "p_envirosuit";
|
|
2373
|
+
break;
|
|
2374
|
+
case "item_double":
|
|
2375
|
+
powerupId = PowerupId.DoubleDamage;
|
|
2376
|
+
icon = "p_double";
|
|
2377
|
+
break;
|
|
2378
|
+
}
|
|
2379
|
+
if (powerupId) {
|
|
2380
|
+
const expiresAt = inventory.powerups.get(powerupId);
|
|
2381
|
+
const newExpiresAt = expiresAt && expiresAt > time ? expiresAt + item.timer * 1e3 : time + item.timer * 1e3;
|
|
2382
|
+
inventory.powerups.set(powerupId, newExpiresAt);
|
|
2383
|
+
if (powerupId === PowerupId.QuadDamage) {
|
|
2384
|
+
client.quad_time = newExpiresAt / 1e3;
|
|
2385
|
+
} else if (powerupId === PowerupId.DoubleDamage) {
|
|
2386
|
+
client.double_time = newExpiresAt / 1e3;
|
|
2387
|
+
}
|
|
2388
|
+
setPickup(inventory, icon, time);
|
|
2389
|
+
return true;
|
|
2390
|
+
}
|
|
2391
|
+
return false;
|
|
2392
|
+
}
|
|
2393
|
+
function pickupPowerArmor(inventory, item, time) {
|
|
2394
|
+
let icon = "";
|
|
2395
|
+
if (item.armorType === "screen") {
|
|
2396
|
+
icon = "i_powerscreen";
|
|
2397
|
+
} else if (item.armorType === "shield") {
|
|
2398
|
+
icon = "i_powershield";
|
|
2399
|
+
}
|
|
2400
|
+
const hadIt = inventory.items.has(item.id);
|
|
2401
|
+
inventory.items.add(item.id);
|
|
2402
|
+
if (!hadIt) {
|
|
2403
|
+
setPickup(inventory, icon, time);
|
|
2404
|
+
return true;
|
|
2405
|
+
}
|
|
2406
|
+
return false;
|
|
2407
|
+
}
|
|
2408
|
+
function pickupKey(inventory, item, time) {
|
|
2409
|
+
let keyId = null;
|
|
2410
|
+
let icon = "";
|
|
2411
|
+
switch (item.id) {
|
|
2412
|
+
case "key_blue":
|
|
2413
|
+
keyId = "key_blue" /* Blue */;
|
|
2414
|
+
icon = "k_bluekey";
|
|
2415
|
+
break;
|
|
2416
|
+
case "key_red":
|
|
2417
|
+
keyId = "key_red" /* Red */;
|
|
2418
|
+
icon = "k_redkey";
|
|
2419
|
+
break;
|
|
2420
|
+
case "key_green":
|
|
2421
|
+
keyId = "key_green" /* Green */;
|
|
2422
|
+
icon = "k_security";
|
|
2423
|
+
break;
|
|
2424
|
+
case "key_yellow":
|
|
2425
|
+
keyId = "key_yellow" /* Yellow */;
|
|
2426
|
+
icon = "k_pyramid";
|
|
2427
|
+
break;
|
|
2428
|
+
}
|
|
2429
|
+
if (keyId) {
|
|
2430
|
+
const res = addKey(inventory, keyId);
|
|
2431
|
+
if (res) setPickup(inventory, icon, time);
|
|
2432
|
+
return res;
|
|
2433
|
+
}
|
|
2434
|
+
return false;
|
|
2435
|
+
}
|
|
2436
|
+
function pickupFlag(client, item, time) {
|
|
2437
|
+
const inventory = client.inventory;
|
|
2438
|
+
let keyId = null;
|
|
2439
|
+
let icon = "";
|
|
2440
|
+
if (item.team === "red") {
|
|
2441
|
+
keyId = "key_red_flag" /* RedFlag */;
|
|
2442
|
+
icon = "i_ctf1";
|
|
2443
|
+
} else {
|
|
2444
|
+
keyId = "key_blue_flag" /* BlueFlag */;
|
|
2445
|
+
icon = "i_ctf2";
|
|
2446
|
+
}
|
|
2447
|
+
if (keyId) {
|
|
2448
|
+
const res = addKey(inventory, keyId);
|
|
2449
|
+
if (res) setPickup(inventory, icon, time);
|
|
2450
|
+
return true;
|
|
2451
|
+
}
|
|
2452
|
+
return false;
|
|
2453
|
+
}
|
|
2454
|
+
function pickupWeapon(inventory, weaponItem, time) {
|
|
2455
|
+
const hadWeapon = hasWeapon(inventory, weaponItem.weaponId);
|
|
2456
|
+
let ammoAdded = false;
|
|
2457
|
+
if (weaponItem.ammoType) {
|
|
2458
|
+
const ammoToAdd = hadWeapon ? weaponItem.pickupAmmo : weaponItem.initialAmmo;
|
|
2459
|
+
const result = addAmmo(inventory.ammo, weaponItem.ammoType, ammoToAdd);
|
|
2460
|
+
ammoAdded = result.pickedUp;
|
|
2461
|
+
}
|
|
2462
|
+
if (hadWeapon && !ammoAdded) {
|
|
2463
|
+
return false;
|
|
2464
|
+
}
|
|
2465
|
+
giveWeapon(inventory, weaponItem.weaponId, true);
|
|
2466
|
+
const icon = `w_${weaponItem.id.substring(7)}`;
|
|
2467
|
+
setPickup(inventory, icon, time);
|
|
2468
|
+
return true;
|
|
2469
|
+
}
|
|
2470
|
+
function serializePlayerInventory(inventory) {
|
|
2471
|
+
return {
|
|
2472
|
+
ammo: inventory.ammo.counts,
|
|
2473
|
+
ownedWeapons: [...inventory.ownedWeapons],
|
|
2474
|
+
currentWeapon: inventory.currentWeapon,
|
|
2475
|
+
armor: inventory.armor ? { ...inventory.armor } : null,
|
|
2476
|
+
powerups: [...inventory.powerups.entries()],
|
|
2477
|
+
keys: [...inventory.keys],
|
|
2478
|
+
items: [...inventory.items]
|
|
2479
|
+
};
|
|
2480
|
+
}
|
|
2481
|
+
function deserializePlayerInventory(serialized, options = {}) {
|
|
2482
|
+
const ammo = createAmmoInventory(options.ammoCaps);
|
|
2483
|
+
const limit = Math.min(ammo.counts.length, serialized.ammo.length);
|
|
2484
|
+
for (let i = 0; i < limit; i++) {
|
|
2485
|
+
ammo.counts[i] = serialized.ammo[i];
|
|
2486
|
+
}
|
|
2487
|
+
return {
|
|
2488
|
+
ammo,
|
|
2489
|
+
ownedWeapons: new Set(serialized.ownedWeapons),
|
|
2490
|
+
currentWeapon: serialized.currentWeapon,
|
|
2491
|
+
armor: serialized.armor ? { ...serialized.armor } : null,
|
|
2492
|
+
powerups: new Map(serialized.powerups),
|
|
2493
|
+
keys: new Set(serialized.keys),
|
|
2494
|
+
items: new Set(serialized.items)
|
|
2495
|
+
};
|
|
2496
|
+
}
|
|
2644
2497
|
|
|
2645
2498
|
// src/combat/damageMods.ts
|
|
2646
2499
|
var DamageMod = /* @__PURE__ */ ((DamageMod2) => {
|
|
@@ -2770,9 +2623,6 @@ function damageModName(mod) {
|
|
|
2770
2623
|
return `MOD_${DamageMod[mod]}`;
|
|
2771
2624
|
}
|
|
2772
2625
|
|
|
2773
|
-
// src/entities/entity.ts
|
|
2774
|
-
init_ammo();
|
|
2775
|
-
|
|
2776
2626
|
// src/ai/constants.ts
|
|
2777
2627
|
var RANGE_MELEE = 20;
|
|
2778
2628
|
var RANGE_NEAR = 440;
|
|
@@ -3231,19 +3081,7 @@ var ENTITY_FIELD_METADATA = [
|
|
|
3231
3081
|
{ name: "fov", type: "float", save: true }
|
|
3232
3082
|
];
|
|
3233
3083
|
|
|
3234
|
-
// src/entities/system.ts
|
|
3235
|
-
init_esm();
|
|
3236
|
-
|
|
3237
|
-
// src/physics/movement.ts
|
|
3238
|
-
init_esm();
|
|
3239
|
-
|
|
3240
|
-
// src/ai/movement.ts
|
|
3241
|
-
init_esm();
|
|
3242
|
-
init_esm();
|
|
3243
|
-
|
|
3244
3084
|
// src/ai/perception.ts
|
|
3245
|
-
init_esm();
|
|
3246
|
-
init_esm();
|
|
3247
3085
|
var RangeCategory = /* @__PURE__ */ ((RangeCategory6) => {
|
|
3248
3086
|
RangeCategory6["Melee"] = "melee";
|
|
3249
3087
|
RangeCategory6["Near"] = "near";
|
|
@@ -3303,11 +3141,7 @@ function visible(self, other, trace, options) {
|
|
|
3303
3141
|
return result.fraction === 1 || result.ent === other;
|
|
3304
3142
|
}
|
|
3305
3143
|
|
|
3306
|
-
// src/ai/targeting.ts
|
|
3307
|
-
init_esm();
|
|
3308
|
-
|
|
3309
3144
|
// src/ai/monster.ts
|
|
3310
|
-
init_esm();
|
|
3311
3145
|
function M_CheckAttack_Base(self, context, stand_ground_chance, melee_chance, near_chance, mid_chance, far_chance, strafe_scalar) {
|
|
3312
3146
|
if (self.enemy && self.enemy.flags & 1 << 24) {
|
|
3313
3147
|
return false;
|
|
@@ -4220,15 +4054,6 @@ function checkTriggers(ent, system) {
|
|
|
4220
4054
|
}
|
|
4221
4055
|
}
|
|
4222
4056
|
|
|
4223
|
-
// src/combat/specialDamage.ts
|
|
4224
|
-
init_esm();
|
|
4225
|
-
|
|
4226
|
-
// src/combat/damage.ts
|
|
4227
|
-
init_esm();
|
|
4228
|
-
init_armor();
|
|
4229
|
-
init_damageFlags();
|
|
4230
|
-
init_esm();
|
|
4231
|
-
|
|
4232
4057
|
// src/imports.ts
|
|
4233
4058
|
var MulticastType = /* @__PURE__ */ ((MulticastType2) => {
|
|
4234
4059
|
MulticastType2[MulticastType2["All"] = 0] = "All";
|
|
@@ -4548,7 +4373,6 @@ function killBox(teleporter, targets, options = {}) {
|
|
|
4548
4373
|
}
|
|
4549
4374
|
|
|
4550
4375
|
// src/physics/fluid.ts
|
|
4551
|
-
init_esm();
|
|
4552
4376
|
function checkWater2(ent, system, imports) {
|
|
4553
4377
|
const origin = ent.origin;
|
|
4554
4378
|
const mins = ent.mins;
|
|
@@ -5116,9 +4940,6 @@ var ThinkScheduler = class {
|
|
|
5116
4940
|
}
|
|
5117
4941
|
};
|
|
5118
4942
|
|
|
5119
|
-
// src/entities/system.ts
|
|
5120
|
-
init_esm();
|
|
5121
|
-
|
|
5122
4943
|
// src/entities/spatial.ts
|
|
5123
4944
|
var CELL_SIZE = 256;
|
|
5124
4945
|
function getCellKey(x, y, z) {
|
|
@@ -5861,14 +5682,7 @@ var EntitySystem = class {
|
|
|
5861
5682
|
}
|
|
5862
5683
|
};
|
|
5863
5684
|
|
|
5864
|
-
// src/entities/misc.ts
|
|
5865
|
-
init_esm();
|
|
5866
|
-
|
|
5867
|
-
// src/entities/misc/flyers.ts
|
|
5868
|
-
init_esm();
|
|
5869
|
-
|
|
5870
5685
|
// src/entities/utils.ts
|
|
5871
|
-
init_esm();
|
|
5872
5686
|
var VEC_UP = { x: 0, y: -1, z: 0 };
|
|
5873
5687
|
var MOVEDIR_UP = { x: 0, y: 0, z: 1 };
|
|
5874
5688
|
var VEC_DOWN = { x: 0, y: -2, z: 0 };
|
|
@@ -6050,15 +5864,6 @@ function registerMiscBigViper(registry) {
|
|
|
6050
5864
|
});
|
|
6051
5865
|
}
|
|
6052
5866
|
|
|
6053
|
-
// src/entities/misc/viperMissile.ts
|
|
6054
|
-
init_esm();
|
|
6055
|
-
|
|
6056
|
-
// src/entities/projectiles.ts
|
|
6057
|
-
init_esm();
|
|
6058
|
-
|
|
6059
|
-
// src/entities/projectiles/trap.ts
|
|
6060
|
-
init_esm();
|
|
6061
|
-
|
|
6062
5867
|
// src/entities/items/foodcube.ts
|
|
6063
5868
|
var EF_GIB = 8;
|
|
6064
5869
|
function createFoodCubePickupEntity(game) {
|
|
@@ -6085,7 +5890,6 @@ function createFoodCubePickupEntity(game) {
|
|
|
6085
5890
|
}
|
|
6086
5891
|
|
|
6087
5892
|
// src/entities/projectiles/trap.ts
|
|
6088
|
-
init_esm();
|
|
6089
5893
|
function clamp(val, min, max) {
|
|
6090
5894
|
return Math.max(min, Math.min(max, val));
|
|
6091
5895
|
}
|
|
@@ -6860,7 +6664,6 @@ function registerMiscViperMissile(registry) {
|
|
|
6860
6664
|
}
|
|
6861
6665
|
|
|
6862
6666
|
// src/entities/misc/decorative.ts
|
|
6863
|
-
init_esm();
|
|
6864
6667
|
var random = createRandomGenerator();
|
|
6865
6668
|
function misc_satellite_dish_think(self, context) {
|
|
6866
6669
|
self.frame++;
|
|
@@ -7358,7 +7161,6 @@ function registerMiscSpawns(registry) {
|
|
|
7358
7161
|
}
|
|
7359
7162
|
|
|
7360
7163
|
// src/entities/targets.ts
|
|
7361
|
-
init_esm();
|
|
7362
7164
|
var ATTN_NONE = 0;
|
|
7363
7165
|
var ATTN_NORM2 = 1;
|
|
7364
7166
|
var SPEAKER_SPAWNFLAGS = {
|
|
@@ -8105,11 +7907,7 @@ function registerTargetSpawns(registry) {
|
|
|
8105
7907
|
});
|
|
8106
7908
|
}
|
|
8107
7909
|
|
|
8108
|
-
// src/entities/triggers.ts
|
|
8109
|
-
init_esm();
|
|
8110
|
-
|
|
8111
7910
|
// src/entities/triggers/fog.ts
|
|
8112
|
-
init_esm();
|
|
8113
7911
|
function clamp2(value, min, max) {
|
|
8114
7912
|
return Math.min(Math.max(value, min), max);
|
|
8115
7913
|
}
|
|
@@ -8228,7 +8026,6 @@ function registerTriggerFog(registry) {
|
|
|
8228
8026
|
}
|
|
8229
8027
|
|
|
8230
8028
|
// src/entities/triggers/flashlight.ts
|
|
8231
|
-
init_esm();
|
|
8232
8029
|
var registerTriggerFlashlight = (registry) => {
|
|
8233
8030
|
registry.register("trigger_flashlight", (self, context) => {
|
|
8234
8031
|
self.solid = 1 /* Trigger */;
|
|
@@ -8843,28 +8640,32 @@ function registerBadArea(registry) {
|
|
|
8843
8640
|
});
|
|
8844
8641
|
}
|
|
8845
8642
|
|
|
8846
|
-
// src/
|
|
8847
|
-
|
|
8848
|
-
|
|
8849
|
-
|
|
8850
|
-
|
|
8851
|
-
|
|
8852
|
-
|
|
8643
|
+
// src/combat/weapons/state.ts
|
|
8644
|
+
var WeaponStateEnum = /* @__PURE__ */ ((WeaponStateEnum2) => {
|
|
8645
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_READY"] = 0] = "WEAPON_READY";
|
|
8646
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_ACTIVATING"] = 1] = "WEAPON_ACTIVATING";
|
|
8647
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_DROPPING"] = 2] = "WEAPON_DROPPING";
|
|
8648
|
+
WeaponStateEnum2[WeaponStateEnum2["WEAPON_FIRING"] = 3] = "WEAPON_FIRING";
|
|
8649
|
+
return WeaponStateEnum2;
|
|
8650
|
+
})(WeaponStateEnum || {});
|
|
8651
|
+
function createPlayerWeaponStates() {
|
|
8652
|
+
return {
|
|
8653
|
+
states: /* @__PURE__ */ new Map()
|
|
8654
|
+
};
|
|
8655
|
+
}
|
|
8656
|
+
function getWeaponState(playerStates, weaponId) {
|
|
8657
|
+
let state = playerStates.states.get(weaponId);
|
|
8658
|
+
if (!state) {
|
|
8659
|
+
state = { lastFireTime: 0 };
|
|
8660
|
+
playerStates.states.set(weaponId, state);
|
|
8661
|
+
}
|
|
8662
|
+
return state;
|
|
8663
|
+
}
|
|
8853
8664
|
|
|
8854
8665
|
// src/buttons.ts
|
|
8855
8666
|
var BUTTON_ATTACK = 1;
|
|
8856
8667
|
|
|
8857
|
-
// src/combat/weapons/animation.ts
|
|
8858
|
-
init_playerInventory();
|
|
8859
|
-
|
|
8860
|
-
// src/combat/weapons/firing.ts
|
|
8861
|
-
init_state();
|
|
8862
|
-
init_playerInventory();
|
|
8863
|
-
init_ammo();
|
|
8864
|
-
init_esm();
|
|
8865
|
-
|
|
8866
8668
|
// src/combat/weapons/projectSource.ts
|
|
8867
|
-
init_esm();
|
|
8868
8669
|
var VIEW_HEIGHT = 22;
|
|
8869
8670
|
function P_ProjectSource(game, ent, offset, forward, right, up) {
|
|
8870
8671
|
const origin = copyVec3(ent.origin);
|
|
@@ -8881,6 +8682,7 @@ function P_ProjectSource(game, ent, offset, forward, right, up) {
|
|
|
8881
8682
|
}
|
|
8882
8683
|
|
|
8883
8684
|
// src/combat/weapons/frames.ts
|
|
8685
|
+
var FRAME_GRENADE_IDLE_LAST = 48;
|
|
8884
8686
|
var FRAME_SHOTGUN_ACTIVATE_LAST = 7;
|
|
8885
8687
|
var FRAME_SHOTGUN_FIRE_LAST = 18;
|
|
8886
8688
|
var FRAME_SHOTGUN_IDLE_LAST = 36;
|
|
@@ -9347,7 +9149,79 @@ function fireBFG(game, player) {
|
|
|
9347
9149
|
}
|
|
9348
9150
|
}
|
|
9349
9151
|
|
|
9350
|
-
// src/combat/weapons/
|
|
9152
|
+
// src/combat/weapons/switching.ts
|
|
9153
|
+
var instantSwitch = false;
|
|
9154
|
+
function getWeaponIdleLastFrame(weaponId) {
|
|
9155
|
+
switch (weaponId) {
|
|
9156
|
+
case WeaponId.HandGrenade:
|
|
9157
|
+
return FRAME_GRENADE_IDLE_LAST;
|
|
9158
|
+
case WeaponId.Shotgun:
|
|
9159
|
+
return FRAME_SHOTGUN_IDLE_LAST;
|
|
9160
|
+
case WeaponId.SuperShotgun:
|
|
9161
|
+
return FRAME_SSHOTGUN_IDLE_LAST;
|
|
9162
|
+
case WeaponId.Machinegun:
|
|
9163
|
+
return FRAME_MACHINEGUN_IDLE_LAST;
|
|
9164
|
+
case WeaponId.Chaingun:
|
|
9165
|
+
return FRAME_CHAINGUN_IDLE_LAST;
|
|
9166
|
+
case WeaponId.Railgun:
|
|
9167
|
+
return FRAME_RAILGUN_IDLE_LAST;
|
|
9168
|
+
case WeaponId.RocketLauncher:
|
|
9169
|
+
return FRAME_ROCKET_IDLE_LAST;
|
|
9170
|
+
case WeaponId.HyperBlaster:
|
|
9171
|
+
return FRAME_HYPERBLASTER_IDLE_LAST;
|
|
9172
|
+
case WeaponId.BFG10K:
|
|
9173
|
+
return FRAME_BFG_IDLE_LAST;
|
|
9174
|
+
case WeaponId.GrenadeLauncher:
|
|
9175
|
+
return FRAME_GRENADELAUNCHER_IDLE_LAST;
|
|
9176
|
+
case WeaponId.Blaster:
|
|
9177
|
+
return FRAME_BLASTER_IDLE_LAST;
|
|
9178
|
+
default:
|
|
9179
|
+
return 0;
|
|
9180
|
+
}
|
|
9181
|
+
}
|
|
9182
|
+
function ChangeWeapon(ent, weaponId) {
|
|
9183
|
+
if (!ent.client) return;
|
|
9184
|
+
const client = ent.client;
|
|
9185
|
+
if (weaponId) {
|
|
9186
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
9187
|
+
client.newWeapon = weaponId;
|
|
9188
|
+
return;
|
|
9189
|
+
}
|
|
9190
|
+
if (client.weaponstate === 0 /* WEAPON_READY */ || client.weaponstate === 3 /* WEAPON_FIRING */) {
|
|
9191
|
+
client.newWeapon = weaponId;
|
|
9192
|
+
client.weaponstate = 2 /* WEAPON_DROPPING */;
|
|
9193
|
+
if (client.inventory.currentWeapon) {
|
|
9194
|
+
client.gun_frame = getWeaponIdleLastFrame(client.inventory.currentWeapon) + 1;
|
|
9195
|
+
} else {
|
|
9196
|
+
client.gun_frame = 0;
|
|
9197
|
+
}
|
|
9198
|
+
if (instantSwitch) {
|
|
9199
|
+
selectWeapon(client.inventory, weaponId);
|
|
9200
|
+
client.weaponstate = 0 /* WEAPON_READY */;
|
|
9201
|
+
client.weapon_think_time = 0;
|
|
9202
|
+
client.newWeapon = void 0;
|
|
9203
|
+
}
|
|
9204
|
+
return;
|
|
9205
|
+
}
|
|
9206
|
+
client.newWeapon = weaponId;
|
|
9207
|
+
return;
|
|
9208
|
+
}
|
|
9209
|
+
if (client.newWeapon) {
|
|
9210
|
+
selectWeapon(client.inventory, client.newWeapon);
|
|
9211
|
+
client.weaponstate = 1 /* WEAPON_ACTIVATING */;
|
|
9212
|
+
client.gun_frame = 0;
|
|
9213
|
+
client.weapon_think_time = 0;
|
|
9214
|
+
client.newWeapon = void 0;
|
|
9215
|
+
}
|
|
9216
|
+
}
|
|
9217
|
+
|
|
9218
|
+
// src/combat/weapons/common.ts
|
|
9219
|
+
function applyKick2(player, pitch, yaw = 0, kickOrigin = 0) {
|
|
9220
|
+
if (player.client) {
|
|
9221
|
+
player.client.kick_angles = { x: pitch, y: yaw, z: 0 };
|
|
9222
|
+
player.client.kick_origin = { x: kickOrigin, y: 0, z: 0 };
|
|
9223
|
+
}
|
|
9224
|
+
}
|
|
9351
9225
|
function Weapon_AnimationTime(ent) {
|
|
9352
9226
|
let time = 0.1;
|
|
9353
9227
|
if (ent.client?.inventory.powerups.has(PowerupId.TechHaste)) {
|
|
@@ -9358,6 +9232,8 @@ function Weapon_AnimationTime(ent) {
|
|
|
9358
9232
|
}
|
|
9359
9233
|
return time;
|
|
9360
9234
|
}
|
|
9235
|
+
|
|
9236
|
+
// src/combat/weapons/animation.ts
|
|
9361
9237
|
function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_DEACTIVATE_LAST, pause_frames, fire_frames, fire, sys) {
|
|
9362
9238
|
if (!ent.client) return;
|
|
9363
9239
|
const client = ent.client;
|
|
@@ -9385,9 +9261,7 @@ function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LA
|
|
|
9385
9261
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
9386
9262
|
return;
|
|
9387
9263
|
}
|
|
9388
|
-
|
|
9389
|
-
ChangeWeapon2(ent);
|
|
9390
|
-
});
|
|
9264
|
+
ChangeWeapon(ent);
|
|
9391
9265
|
return;
|
|
9392
9266
|
}
|
|
9393
9267
|
if (client.weaponstate === 0 /* WEAPON_READY */) {
|
|
@@ -9396,6 +9270,10 @@ function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LA
|
|
|
9396
9270
|
client.gun_frame = FRAME_ACTIVATE_LAST + 1;
|
|
9397
9271
|
return;
|
|
9398
9272
|
}
|
|
9273
|
+
if (client.newWeapon) {
|
|
9274
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9275
|
+
return;
|
|
9276
|
+
}
|
|
9399
9277
|
if (client.gun_frame < FRAME_IDLE_LAST) {
|
|
9400
9278
|
client.gun_frame++;
|
|
9401
9279
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
@@ -9428,6 +9306,10 @@ function Weapon_Generic(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_LA
|
|
|
9428
9306
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
9429
9307
|
return;
|
|
9430
9308
|
}
|
|
9309
|
+
if (client.newWeapon) {
|
|
9310
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9311
|
+
return;
|
|
9312
|
+
}
|
|
9431
9313
|
client.weaponstate = 0 /* WEAPON_READY */;
|
|
9432
9314
|
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
9433
9315
|
client.weapon_think_time = time + Weapon_AnimationTime(ent);
|
|
@@ -9450,6 +9332,10 @@ function Weapon_Repeating(ent, FRAME_ACTIVATE_LAST, FRAME_FIRE_LAST, FRAME_IDLE_
|
|
|
9450
9332
|
if (!(client.buttons & 1)) {
|
|
9451
9333
|
client.gun_frame = FRAME_IDLE_LAST + 1;
|
|
9452
9334
|
client.weaponstate = 0 /* WEAPON_READY */;
|
|
9335
|
+
if (client.newWeapon) {
|
|
9336
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9337
|
+
return;
|
|
9338
|
+
}
|
|
9453
9339
|
}
|
|
9454
9340
|
client.weapon_think_time = sys.timeSeconds + Weapon_AnimationTime(ent);
|
|
9455
9341
|
} else {
|
|
@@ -9474,12 +9360,20 @@ function Throw_Generic(ent, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_THROW_FIRST,
|
|
|
9474
9360
|
return;
|
|
9475
9361
|
}
|
|
9476
9362
|
client.weapon_think_time = time + 0.1;
|
|
9363
|
+
if (client.weaponstate === 2 /* WEAPON_DROPPING */) {
|
|
9364
|
+
ChangeWeapon(ent);
|
|
9365
|
+
return;
|
|
9366
|
+
}
|
|
9477
9367
|
if (client.weaponstate === 0 /* WEAPON_READY */) {
|
|
9478
9368
|
if (client.buttons & 1) {
|
|
9479
9369
|
client.weaponstate = 3 /* WEAPON_FIRING */;
|
|
9480
9370
|
client.gun_frame = FRAME_THROW_FIRST;
|
|
9481
9371
|
return;
|
|
9482
9372
|
}
|
|
9373
|
+
if (client.newWeapon) {
|
|
9374
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9375
|
+
return;
|
|
9376
|
+
}
|
|
9483
9377
|
if (client.gun_frame < FRAME_IDLE_LAST) {
|
|
9484
9378
|
client.gun_frame++;
|
|
9485
9379
|
return;
|
|
@@ -9526,6 +9420,10 @@ function Throw_Generic(ent, FRAME_FIRE_LAST, FRAME_IDLE_LAST, FRAME_THROW_FIRST,
|
|
|
9526
9420
|
client.gun_frame = FRAME_FIRE_LAST + 1;
|
|
9527
9421
|
client.grenade_time = 0;
|
|
9528
9422
|
client.grenade_blew_up = false;
|
|
9423
|
+
if (client.newWeapon) {
|
|
9424
|
+
ChangeWeapon(ent, client.newWeapon);
|
|
9425
|
+
return;
|
|
9426
|
+
}
|
|
9529
9427
|
}
|
|
9530
9428
|
}
|
|
9531
9429
|
|
|
@@ -9591,8 +9489,6 @@ function shotgunThink(player, sys) {
|
|
|
9591
9489
|
}
|
|
9592
9490
|
|
|
9593
9491
|
// src/combat/weapons/supershotgun.ts
|
|
9594
|
-
init_state();
|
|
9595
|
-
init_playerInventory();
|
|
9596
9492
|
var SSHOTGUN_PAUSE_FRAMES = [29, 42, 57];
|
|
9597
9493
|
var SSHOTGUN_FIRE_FRAMES = [22, 28];
|
|
9598
9494
|
function superShotgunThink(player, sys) {
|
|
@@ -9646,8 +9542,6 @@ function rocketLauncherThink(player, sys) {
|
|
|
9646
9542
|
}
|
|
9647
9543
|
|
|
9648
9544
|
// src/combat/weapons/hyperblaster.ts
|
|
9649
|
-
init_state();
|
|
9650
|
-
init_playerInventory();
|
|
9651
9545
|
function hyperBlasterThink(player, sys) {
|
|
9652
9546
|
const weaponState = player.client ? getWeaponState(player.client.weaponStates, WeaponId.HyperBlaster) : null;
|
|
9653
9547
|
if (weaponState && (weaponState.heat || 0) > 0) {
|
|
@@ -9817,17 +9711,6 @@ function blasterThink(player, sys) {
|
|
|
9817
9711
|
);
|
|
9818
9712
|
}
|
|
9819
9713
|
|
|
9820
|
-
// src/combat/weapons/chainfist.ts
|
|
9821
|
-
init_esm();
|
|
9822
|
-
|
|
9823
|
-
// src/combat/weapons/common.ts
|
|
9824
|
-
function applyKick2(player, pitch, yaw = 0, kickOrigin = 0) {
|
|
9825
|
-
if (player.client) {
|
|
9826
|
-
player.client.kick_angles = { x: pitch, y: yaw, z: 0 };
|
|
9827
|
-
player.client.kick_origin = { x: kickOrigin, y: 0, z: 0 };
|
|
9828
|
-
}
|
|
9829
|
-
}
|
|
9830
|
-
|
|
9831
9714
|
// src/combat/weapons/chainfist.ts
|
|
9832
9715
|
var CHAINFIST_REACH = 24;
|
|
9833
9716
|
function firePlayerMeleeBoxFilter(check, data) {
|
|
@@ -9990,8 +9873,6 @@ function Weapon_ChainFist(player, sys) {
|
|
|
9990
9873
|
}
|
|
9991
9874
|
|
|
9992
9875
|
// src/combat/weapons/trap.ts
|
|
9993
|
-
init_ammo();
|
|
9994
|
-
init_esm();
|
|
9995
9876
|
var TRAP_MINSPEED = 300;
|
|
9996
9877
|
var TRAP_MAXSPEED = 700;
|
|
9997
9878
|
function Trap_Think(player, sys) {
|
|
@@ -10374,7 +10255,6 @@ var FLAG_ITEMS = {
|
|
|
10374
10255
|
};
|
|
10375
10256
|
|
|
10376
10257
|
// src/entities/items/common.ts
|
|
10377
|
-
init_esm();
|
|
10378
10258
|
function handleItemPickup(game, self, other, respawnTime = 30) {
|
|
10379
10259
|
if (!game.deathmatch) {
|
|
10380
10260
|
game.entities.free(self);
|
|
@@ -10509,7 +10389,6 @@ function createKeyPickupEntity(game, keyItem) {
|
|
|
10509
10389
|
}
|
|
10510
10390
|
|
|
10511
10391
|
// src/entities/items/ammo.ts
|
|
10512
|
-
init_ammo();
|
|
10513
10392
|
var AMMO_DISPLAY_NAMES = {
|
|
10514
10393
|
[AmmoItemId.Shells]: "Shells",
|
|
10515
10394
|
[AmmoItemId.Bullets]: "Bullets",
|
|
@@ -10572,9 +10451,6 @@ function createPowerArmorPickupEntity(game, item) {
|
|
|
10572
10451
|
};
|
|
10573
10452
|
}
|
|
10574
10453
|
|
|
10575
|
-
// src/modes/ctf/flag.ts
|
|
10576
|
-
init_playerInventory();
|
|
10577
|
-
|
|
10578
10454
|
// src/modes/ctf/state.ts
|
|
10579
10455
|
function setFlagState(flag, newState, context) {
|
|
10580
10456
|
flag.flagState = newState;
|
|
@@ -10641,7 +10517,6 @@ function createFlagPickupEntity(game, flagItem) {
|
|
|
10641
10517
|
}
|
|
10642
10518
|
|
|
10643
10519
|
// src/entities/items.ts
|
|
10644
|
-
init_ammo();
|
|
10645
10520
|
function registerItemSpawns(game, registry) {
|
|
10646
10521
|
registry.register("item_foodcube", (entity) => {
|
|
10647
10522
|
Object.assign(entity, createFoodCubePickupEntity(game));
|
|
@@ -10688,11 +10563,7 @@ function registerItemSpawns(game, registry) {
|
|
|
10688
10563
|
}
|
|
10689
10564
|
}
|
|
10690
10565
|
|
|
10691
|
-
// src/entities/funcs.ts
|
|
10692
|
-
init_esm();
|
|
10693
|
-
|
|
10694
10566
|
// src/entities/gibs.ts
|
|
10695
|
-
init_esm();
|
|
10696
10567
|
var GIB_ORGANIC = 0;
|
|
10697
10568
|
var GIB_METALLIC = 1;
|
|
10698
10569
|
var GIB_DEBRIS = 2;
|
|
@@ -12147,14 +12018,7 @@ function registerLightSpawns(registry) {
|
|
|
12147
12018
|
});
|
|
12148
12019
|
}
|
|
12149
12020
|
|
|
12150
|
-
// src/entities/monsters/berserk.ts
|
|
12151
|
-
init_esm();
|
|
12152
|
-
|
|
12153
|
-
// src/ai/rogue.ts
|
|
12154
|
-
init_esm();
|
|
12155
|
-
|
|
12156
12021
|
// src/entities/monsters/common.ts
|
|
12157
|
-
init_esm();
|
|
12158
12022
|
var MONSTER_TICK2 = 0.1;
|
|
12159
12023
|
function generic_ai_stand(self, dist, context) {
|
|
12160
12024
|
ai_stand(self, dist, context);
|
|
@@ -12965,7 +12829,6 @@ function registerBerserkSpawns(registry) {
|
|
|
12965
12829
|
}
|
|
12966
12830
|
|
|
12967
12831
|
// src/entities/monsters/attack.ts
|
|
12968
|
-
init_esm();
|
|
12969
12832
|
function getDamageScale(skill) {
|
|
12970
12833
|
if (skill >= 3) return 1.5;
|
|
12971
12834
|
if (skill === 2) return 1.25;
|
|
@@ -13177,7 +13040,6 @@ function monster_fire_flechette(self, start, dir, damage, speed, flashtype, cont
|
|
|
13177
13040
|
}
|
|
13178
13041
|
|
|
13179
13042
|
// src/entities/monsters/boss2.ts
|
|
13180
|
-
init_esm();
|
|
13181
13043
|
var MONSTER_TICK4 = 0.1;
|
|
13182
13044
|
var BOSS2_HEALTH = 3e3;
|
|
13183
13045
|
var BOSS2_MASS = 1e3;
|
|
@@ -13382,7 +13244,6 @@ function registerBoss2Spawns(registry) {
|
|
|
13382
13244
|
}
|
|
13383
13245
|
|
|
13384
13246
|
// src/entities/monsters/brain.ts
|
|
13385
|
-
init_esm();
|
|
13386
13247
|
var MONSTER_TICK5 = 0.1;
|
|
13387
13248
|
var MELEE_DISTANCE2 = 80;
|
|
13388
13249
|
function monster_ai_stand3(self, dist, context) {
|
|
@@ -13923,7 +13784,6 @@ function registerBrainSpawns(registry) {
|
|
|
13923
13784
|
}
|
|
13924
13785
|
|
|
13925
13786
|
// src/entities/monsters/chick.ts
|
|
13926
|
-
init_esm();
|
|
13927
13787
|
var MONSTER_TICK6 = 0.1;
|
|
13928
13788
|
var MELEE_DISTANCE3 = 80;
|
|
13929
13789
|
function monster_ai_stand4(self, dist, context) {
|
|
@@ -14513,7 +14373,6 @@ function registerFlipperSpawns(registry) {
|
|
|
14513
14373
|
}
|
|
14514
14374
|
|
|
14515
14375
|
// src/entities/monsters/floater.ts
|
|
14516
|
-
init_esm();
|
|
14517
14376
|
var MONSTER_TICK8 = 0.1;
|
|
14518
14377
|
function monster_ai_stand6(self, dist, context) {
|
|
14519
14378
|
ai_stand(self, dist, context);
|
|
@@ -14674,7 +14533,6 @@ function registerFloaterSpawns(registry) {
|
|
|
14674
14533
|
}
|
|
14675
14534
|
|
|
14676
14535
|
// src/entities/monsters/flyer.ts
|
|
14677
|
-
init_esm();
|
|
14678
14536
|
var MONSTER_TICK9 = 0.1;
|
|
14679
14537
|
function monster_ai_stand7(self, dist, context) {
|
|
14680
14538
|
ai_stand(self, dist, context);
|
|
@@ -14856,7 +14714,6 @@ function registerFlyerSpawns(registry) {
|
|
|
14856
14714
|
}
|
|
14857
14715
|
|
|
14858
14716
|
// src/entities/monsters/gladiator.ts
|
|
14859
|
-
init_esm();
|
|
14860
14717
|
var MONSTER_TICK10 = 0.1;
|
|
14861
14718
|
function monster_ai_stand8(self, dist, context) {
|
|
14862
14719
|
ai_stand(self, dist, context);
|
|
@@ -15064,7 +14921,6 @@ function registerGladiatorSpawns(registry) {
|
|
|
15064
14921
|
}
|
|
15065
14922
|
|
|
15066
14923
|
// src/entities/monsters/gunner.ts
|
|
15067
|
-
init_esm();
|
|
15068
14924
|
var MONSTER_TICK11 = 0.1;
|
|
15069
14925
|
var GUNNER_HEALTH = 175;
|
|
15070
14926
|
var GUNNER_MASS = 200;
|
|
@@ -15497,7 +15353,6 @@ function registerGunnerSpawns(registry) {
|
|
|
15497
15353
|
}
|
|
15498
15354
|
|
|
15499
15355
|
// src/entities/monsters/hover.ts
|
|
15500
|
-
init_esm();
|
|
15501
15356
|
var MONSTER_TICK12 = 0.1;
|
|
15502
15357
|
function monster_ai_stand10(self, dist, context) {
|
|
15503
15358
|
ai_stand(self, dist, context);
|
|
@@ -15655,7 +15510,6 @@ function registerHoverSpawns(registry) {
|
|
|
15655
15510
|
}
|
|
15656
15511
|
|
|
15657
15512
|
// src/entities/monsters/icarus.ts
|
|
15658
|
-
init_esm();
|
|
15659
15513
|
var MONSTER_TICK13 = 0.1;
|
|
15660
15514
|
function monster_ai_stand11(self, dist, context) {
|
|
15661
15515
|
ai_stand(self, dist, context);
|
|
@@ -15813,7 +15667,6 @@ function registerIcarusSpawns(registry) {
|
|
|
15813
15667
|
}
|
|
15814
15668
|
|
|
15815
15669
|
// src/entities/monsters/infantry.ts
|
|
15816
|
-
init_esm();
|
|
15817
15670
|
var MONSTER_TICK14 = 0.1;
|
|
15818
15671
|
var INFANTRY_HEALTH = 100;
|
|
15819
15672
|
var INFANTRY_MASS = 200;
|
|
@@ -16032,7 +15885,6 @@ function registerInfantrySpawns(registry) {
|
|
|
16032
15885
|
}
|
|
16033
15886
|
|
|
16034
15887
|
// src/entities/monsters/makron.ts
|
|
16035
|
-
init_esm();
|
|
16036
15888
|
var MONSTER_TICK15 = 0.1;
|
|
16037
15889
|
var MAKRON_BFG_OFFSET = { x: 30, y: 28, z: 24 };
|
|
16038
15890
|
var MAKRON_BLASTER_OFFSET_1 = { x: 26, y: 16, z: 24 };
|
|
@@ -16282,7 +16134,6 @@ function registerMakronSpawns(registry) {
|
|
|
16282
16134
|
}
|
|
16283
16135
|
|
|
16284
16136
|
// src/entities/monsters/jorg.ts
|
|
16285
|
-
init_esm();
|
|
16286
16137
|
var MONSTER_TICK16 = 0.1;
|
|
16287
16138
|
var JORG_HEALTH = 3e3;
|
|
16288
16139
|
var JORG_MASS = 1e3;
|
|
@@ -17224,8 +17075,6 @@ function registerInsaneSpawns(registry) {
|
|
|
17224
17075
|
}
|
|
17225
17076
|
|
|
17226
17077
|
// src/entities/monsters/actor.ts
|
|
17227
|
-
init_esm();
|
|
17228
|
-
init_esm();
|
|
17229
17078
|
var MONSTER_TICK18 = 0.1;
|
|
17230
17079
|
var MZ2_ACTOR_MACHINEGUN_1 = 0;
|
|
17231
17080
|
var actor_names = [
|
|
@@ -17786,11 +17635,7 @@ function registerActorSpawns(registry) {
|
|
|
17786
17635
|
registry.register("target_actor", SP_target_actor);
|
|
17787
17636
|
}
|
|
17788
17637
|
|
|
17789
|
-
// src/entities/monsters/medic.ts
|
|
17790
|
-
init_esm();
|
|
17791
|
-
|
|
17792
17638
|
// src/ai/spawn_utils.ts
|
|
17793
|
-
init_esm();
|
|
17794
17639
|
function checkSpawnPoint(origin, mins, maxs, context) {
|
|
17795
17640
|
if (!mins || !maxs) return false;
|
|
17796
17641
|
const trace = context.trace(origin, mins, maxs, origin, null, MASK_MONSTERSOLID);
|
|
@@ -18508,7 +18353,6 @@ function registerMedicSpawns(registry) {
|
|
|
18508
18353
|
}
|
|
18509
18354
|
|
|
18510
18355
|
// src/entities/monsters/mutant.ts
|
|
18511
|
-
init_esm();
|
|
18512
18356
|
var MONSTER_TICK20 = 0.1;
|
|
18513
18357
|
function monster_ai_stand16(self, dist, context) {
|
|
18514
18358
|
ai_stand(self, dist, context);
|
|
@@ -18897,7 +18741,6 @@ function registerMutantSpawns(registry) {
|
|
|
18897
18741
|
}
|
|
18898
18742
|
|
|
18899
18743
|
// src/entities/monsters/parasite.ts
|
|
18900
|
-
init_esm();
|
|
18901
18744
|
var MONSTER_TICK21 = 0.1;
|
|
18902
18745
|
var PARASITE_HEALTH = 175;
|
|
18903
18746
|
var PARASITE_MASS = 250;
|
|
@@ -19302,7 +19145,6 @@ function registerParasiteSpawns(registry) {
|
|
|
19302
19145
|
}
|
|
19303
19146
|
|
|
19304
19147
|
// src/entities/monsters/soldier.ts
|
|
19305
|
-
init_esm();
|
|
19306
19148
|
var MONSTER_TICK22 = 0.1;
|
|
19307
19149
|
var SOLDIER_LIGHT = 1;
|
|
19308
19150
|
var SOLDIER_SSG = 2;
|
|
@@ -19650,7 +19492,6 @@ function registerMonsterSpawns(registry) {
|
|
|
19650
19492
|
}
|
|
19651
19493
|
|
|
19652
19494
|
// src/entities/monsters/supertank.ts
|
|
19653
|
-
init_esm();
|
|
19654
19495
|
var MONSTER_TICK23 = 0.1;
|
|
19655
19496
|
var SUPERTANK_MACHINEGUN_OFFSET = { x: 30, y: 30, z: 40 };
|
|
19656
19497
|
var SUPERTANK_ROCKET_OFFSET = { x: 30, y: -30, z: 40 };
|
|
@@ -19879,7 +19720,6 @@ function registerSupertankSpawns(registry) {
|
|
|
19879
19720
|
}
|
|
19880
19721
|
|
|
19881
19722
|
// src/entities/monsters/tank.ts
|
|
19882
|
-
init_esm();
|
|
19883
19723
|
var MONSTER_TICK24 = 0.1;
|
|
19884
19724
|
function tank_blind_check(self, context) {
|
|
19885
19725
|
if (self.monsterinfo.aiflags & 2048 /* ManualSteering */) {
|
|
@@ -20251,7 +20091,6 @@ function registerTankCommanderSpawns(registry) {
|
|
|
20251
20091
|
}
|
|
20252
20092
|
|
|
20253
20093
|
// src/entities/monsters/turret.ts
|
|
20254
|
-
init_esm();
|
|
20255
20094
|
var MONSTER_TICK25 = 0.1;
|
|
20256
20095
|
function monster_ai_stand21(self, dist, context) {
|
|
20257
20096
|
ai_stand(self, dist, context);
|
|
@@ -20403,7 +20242,6 @@ function registerTurretSpawns(registry) {
|
|
|
20403
20242
|
}
|
|
20404
20243
|
|
|
20405
20244
|
// src/entities/monsters/gekk.ts
|
|
20406
|
-
init_esm();
|
|
20407
20245
|
var MONSTER_TICK26 = 0.1;
|
|
20408
20246
|
function monster_ai_stand22(self, dist, context) {
|
|
20409
20247
|
ai_stand(self, dist, context);
|
|
@@ -21044,7 +20882,6 @@ function registerGekkSpawns(registry) {
|
|
|
21044
20882
|
}
|
|
21045
20883
|
|
|
21046
20884
|
// src/entities/monsters/fixbot.ts
|
|
21047
|
-
init_esm();
|
|
21048
20885
|
var MONSTER_TICK27 = 0.1;
|
|
21049
20886
|
function monster_ai_walk21(self, dist, context) {
|
|
21050
20887
|
ai_walk(self, dist, context);
|
|
@@ -21330,7 +21167,6 @@ function registerFixbotSpawns(registry) {
|
|
|
21330
21167
|
}
|
|
21331
21168
|
|
|
21332
21169
|
// src/entities/monsters/arachnid.ts
|
|
21333
|
-
init_esm();
|
|
21334
21170
|
var FRAME_rails1 = 0;
|
|
21335
21171
|
var FRAME_rails4 = 3;
|
|
21336
21172
|
var FRAME_rails8 = 7;
|
|
@@ -21712,7 +21548,6 @@ function registerArachnidSpawns(registry) {
|
|
|
21712
21548
|
}
|
|
21713
21549
|
|
|
21714
21550
|
// src/entities/monsters/gunnerCommander.ts
|
|
21715
|
-
init_esm();
|
|
21716
21551
|
var MONSTER_TICK28 = 0.1;
|
|
21717
21552
|
var MORTAR_SPEED = 850;
|
|
21718
21553
|
var GRENADE_SPEED = 600;
|
|
@@ -22575,7 +22410,6 @@ function registerGunCommanderSpawns(registry) {
|
|
|
22575
22410
|
}
|
|
22576
22411
|
|
|
22577
22412
|
// src/entities/monsters/guardian.ts
|
|
22578
|
-
init_esm();
|
|
22579
22413
|
var MONSTER_TICK29 = 0.1;
|
|
22580
22414
|
var MELEE_DISTANCE6 = 80;
|
|
22581
22415
|
var FRAME_idle12 = 76;
|
|
@@ -23021,7 +22855,6 @@ function registerGuardianSpawns(registry) {
|
|
|
23021
22855
|
}
|
|
23022
22856
|
|
|
23023
22857
|
// src/entities/monsters/rogue/stalker.ts
|
|
23024
|
-
init_esm();
|
|
23025
22858
|
function has_valid_enemy(self) {
|
|
23026
22859
|
return self.enemy !== null && self.enemy.health > 0;
|
|
23027
22860
|
}
|
|
@@ -23502,7 +23335,6 @@ function SP_monster_stalker(self, context) {
|
|
|
23502
23335
|
}
|
|
23503
23336
|
|
|
23504
23337
|
// src/entities/monsters/shambler.ts
|
|
23505
|
-
init_esm();
|
|
23506
23338
|
var MONSTER_TICK30 = 0.1;
|
|
23507
23339
|
var MODEL_SCALE2 = 1;
|
|
23508
23340
|
var MELEE_DISTANCE8 = 80;
|
|
@@ -23919,7 +23751,6 @@ function registerShamblerSpawns(registry) {
|
|
|
23919
23751
|
}
|
|
23920
23752
|
|
|
23921
23753
|
// src/entities/monsters/rogue/widow.ts
|
|
23922
|
-
init_esm();
|
|
23923
23754
|
var MODEL_SCALE3 = 1;
|
|
23924
23755
|
var RANGE_MELEE3 = 100;
|
|
23925
23756
|
var SOUND_PAIN1 = "widow/pain1.wav";
|
|
@@ -24280,7 +24111,6 @@ function registerMonsterSpawns2(registry) {
|
|
|
24280
24111
|
}
|
|
24281
24112
|
|
|
24282
24113
|
// src/entities/worldspawn.ts
|
|
24283
|
-
init_esm();
|
|
24284
24114
|
function SP_worldspawn(self, context) {
|
|
24285
24115
|
self.classname = "worldspawn";
|
|
24286
24116
|
self.movetype = 2 /* Push */;
|
|
@@ -24310,7 +24140,6 @@ function registerWorldSpawn(registry) {
|
|
|
24310
24140
|
}
|
|
24311
24141
|
|
|
24312
24142
|
// src/entities/camera.ts
|
|
24313
|
-
init_esm();
|
|
24314
24143
|
var CAMERA_TELEPORT_OUT = 2;
|
|
24315
24144
|
var CAMERA_SKIPPABLE = 64;
|
|
24316
24145
|
function camera_lookat_pathtarget(self, origin, dest, context) {
|
|
@@ -24881,9 +24710,6 @@ var LevelClock = class {
|
|
|
24881
24710
|
}
|
|
24882
24711
|
};
|
|
24883
24712
|
|
|
24884
|
-
// src/save/save.ts
|
|
24885
|
-
init_esm();
|
|
24886
|
-
|
|
24887
24713
|
// src/checksum.ts
|
|
24888
24714
|
var FNV_OFFSET_BASIS = 2166136261;
|
|
24889
24715
|
var FNV_PRIME = 16777619;
|
|
@@ -25380,7 +25206,6 @@ function applySaveFile(save, targets) {
|
|
|
25380
25206
|
}
|
|
25381
25207
|
|
|
25382
25208
|
// src/save/rerelease.ts
|
|
25383
|
-
init_esm();
|
|
25384
25209
|
function ensureObject2(value, label) {
|
|
25385
25210
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
25386
25211
|
throw new Error(`${label} must be an object`);
|
|
@@ -25803,9 +25628,6 @@ _SaveStorage.DEFAULT_STORE = "saves";
|
|
|
25803
25628
|
_SaveStorage.QUICK_SLOT = "quicksave";
|
|
25804
25629
|
var SaveStorage = _SaveStorage;
|
|
25805
25630
|
|
|
25806
|
-
// src/index.ts
|
|
25807
|
-
init_esm();
|
|
25808
|
-
|
|
25809
25631
|
// src/ai/noise.ts
|
|
25810
25632
|
var PNOISE_SELF = 0;
|
|
25811
25633
|
var PNOISE_WEAPON = 1;
|
|
@@ -25863,12 +25685,7 @@ function PlayerNoise(who, where, type, context) {
|
|
|
25863
25685
|
}
|
|
25864
25686
|
}
|
|
25865
25687
|
|
|
25866
|
-
// src/entities/player.ts
|
|
25867
|
-
init_playerInventory();
|
|
25868
|
-
|
|
25869
25688
|
// src/combat/obituary.ts
|
|
25870
|
-
init_esm();
|
|
25871
|
-
init_esm();
|
|
25872
25689
|
var random4 = createRandomGenerator();
|
|
25873
25690
|
var PRINT_MEDIUM = 1;
|
|
25874
25691
|
function getGender(ent) {
|
|
@@ -26024,9 +25841,6 @@ function ClientObituary(self, inflictor, attacker, mod, sys) {
|
|
|
26024
25841
|
}
|
|
26025
25842
|
}
|
|
26026
25843
|
|
|
26027
|
-
// src/modes/ctf/integration.ts
|
|
26028
|
-
init_playerInventory();
|
|
26029
|
-
|
|
26030
25844
|
// src/modes/ctf/drop.ts
|
|
26031
25845
|
function dropFlag(flag, origin, game, context) {
|
|
26032
25846
|
if (flag.flagState !== 1 /* CARRIED */) {
|
|
@@ -26235,8 +26049,6 @@ function player_think(self, sys) {
|
|
|
26235
26049
|
}
|
|
26236
26050
|
|
|
26237
26051
|
// src/entities/playerStats.ts
|
|
26238
|
-
init_esm();
|
|
26239
|
-
init_playerInventory();
|
|
26240
26052
|
var POWERUP_TIMERS = [
|
|
26241
26053
|
{ id: PowerupId.QuadDamage, priority: 1 },
|
|
26242
26054
|
{ id: PowerupId.Invulnerability, priority: 2 },
|
|
@@ -26302,9 +26114,6 @@ function populatePlayerStats(player, timeSeconds) {
|
|
|
26302
26114
|
return statArray;
|
|
26303
26115
|
}
|
|
26304
26116
|
|
|
26305
|
-
// src/index.ts
|
|
26306
|
-
init_esm();
|
|
26307
|
-
|
|
26308
26117
|
// src/save/adapter.ts
|
|
26309
26118
|
function createSerializedGameState(context) {
|
|
26310
26119
|
const { entitySystem, levelClock, random: random5 } = context;
|