quake2ts 0.0.185 → 0.0.187
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/cgame/dist/index.d.mts +3 -0
- package/packages/cgame/dist/index.d.ts +3 -0
- package/packages/cgame/dist/index.js +32 -0
- package/packages/cgame/dist/index.mjs +7 -0
- package/packages/client/dist/browser/index.global.js +5 -5
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +6 -0
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +6 -0
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +1 -1
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +3 -0
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +3 -0
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/browser/index.global.js +2 -2
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +95 -19
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +95 -19
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/monsters/medic.d.ts +1 -0
- package/packages/game/dist/types/entities/monsters/medic.d.ts.map +1 -1
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +3 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +3 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/pmove/config.d.ts +5 -0
- package/packages/shared/dist/types/pmove/config.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/configstrings.d.ts +3 -0
- package/packages/shared/dist/types/protocol/configstrings.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/layout.d.ts +9 -0
- package/packages/shared/dist/types/protocol/layout.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/stats.d.ts +28 -0
- package/packages/shared/dist/types/protocol/stats.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -457,6 +457,9 @@ var ConfigStringIndex = ((ConfigStringIndex2) => {
|
|
|
457
457
|
ConfigStringIndex2[ConfigStringIndex2["SkyAxis"] = 3] = "SkyAxis";
|
|
458
458
|
ConfigStringIndex2[ConfigStringIndex2["SkyRotate"] = 4] = "SkyRotate";
|
|
459
459
|
ConfigStringIndex2[ConfigStringIndex2["StatusBar"] = 5] = "StatusBar";
|
|
460
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_N64_PHYSICS"] = 56] = "CONFIG_N64_PHYSICS";
|
|
461
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_CTF_TEAMS"] = 57] = "CONFIG_CTF_TEAMS";
|
|
462
|
+
ConfigStringIndex2[ConfigStringIndex2["CONFIG_COOP_RESPAWN_STRING"] = 58] = "CONFIG_COOP_RESPAWN_STRING";
|
|
460
463
|
ConfigStringIndex2[ConfigStringIndex2["AirAccel"] = 59] = "AirAccel";
|
|
461
464
|
ConfigStringIndex2[ConfigStringIndex2["MaxClients"] = 60] = "MaxClients";
|
|
462
465
|
ConfigStringIndex2[ConfigStringIndex2["MapChecksum"] = 61] = "MapChecksum";
|
|
@@ -9014,9 +9017,11 @@ function registerMakronSpawns(registry) {
|
|
|
9014
9017
|
// src/entities/monsters/medic.ts
|
|
9015
9018
|
var MONSTER_TICK15 = 0.1;
|
|
9016
9019
|
function monster_ai_stand15(self, dist, context) {
|
|
9017
|
-
if (
|
|
9018
|
-
self
|
|
9019
|
-
|
|
9020
|
+
if (self.classname === "monster_medic") {
|
|
9021
|
+
if (medic_find_dead(self, context)) {
|
|
9022
|
+
self.monsterinfo.current_move = run_move13;
|
|
9023
|
+
return;
|
|
9024
|
+
}
|
|
9020
9025
|
}
|
|
9021
9026
|
ai_stand(self, MONSTER_TICK15, context);
|
|
9022
9027
|
}
|
|
@@ -9024,8 +9029,12 @@ function monster_ai_walk15(self, dist, context) {
|
|
|
9024
9029
|
ai_walk(self, dist, MONSTER_TICK15, context);
|
|
9025
9030
|
}
|
|
9026
9031
|
function monster_ai_run14(self, dist, context) {
|
|
9027
|
-
if (
|
|
9028
|
-
self
|
|
9032
|
+
if (self.classname === "monster_medic") {
|
|
9033
|
+
if (medic_find_dead(self, context)) {
|
|
9034
|
+
self.monsterinfo.current_move = run_move13;
|
|
9035
|
+
} else {
|
|
9036
|
+
ai_run(self, dist, MONSTER_TICK15, context);
|
|
9037
|
+
}
|
|
9029
9038
|
} else {
|
|
9030
9039
|
ai_run(self, dist, MONSTER_TICK15, context);
|
|
9031
9040
|
}
|
|
@@ -9041,6 +9050,7 @@ var walk_move13;
|
|
|
9041
9050
|
var run_move13;
|
|
9042
9051
|
var attack_hyper_move;
|
|
9043
9052
|
var attack_cable_move;
|
|
9053
|
+
var spawn_move;
|
|
9044
9054
|
var pain_move8;
|
|
9045
9055
|
var death_move12;
|
|
9046
9056
|
function medic_stand(self) {
|
|
@@ -9050,11 +9060,13 @@ function medic_walk(self) {
|
|
|
9050
9060
|
self.monsterinfo.current_move = walk_move13;
|
|
9051
9061
|
}
|
|
9052
9062
|
function medic_run(self) {
|
|
9053
|
-
if (self.
|
|
9054
|
-
|
|
9055
|
-
|
|
9056
|
-
|
|
9057
|
-
|
|
9063
|
+
if (self.classname === "monster_medic") {
|
|
9064
|
+
if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
|
|
9065
|
+
const dist = rangeTo(self, self.enemy);
|
|
9066
|
+
if (dist < 80) {
|
|
9067
|
+
self.monsterinfo.current_move = attack_cable_move;
|
|
9068
|
+
return;
|
|
9069
|
+
}
|
|
9058
9070
|
}
|
|
9059
9071
|
}
|
|
9060
9072
|
if (self.enemy && self.enemy.health > 0) {
|
|
@@ -9064,10 +9076,16 @@ function medic_run(self) {
|
|
|
9064
9076
|
}
|
|
9065
9077
|
}
|
|
9066
9078
|
function medic_attack(self) {
|
|
9067
|
-
if (self.enemy && self.enemy.deadflag === 2 /* Dead */) {
|
|
9079
|
+
if (self.classname === "monster_medic" && self.enemy && self.enemy.deadflag === 2 /* Dead */) {
|
|
9068
9080
|
self.monsterinfo.current_move = attack_cable_move;
|
|
9069
9081
|
return;
|
|
9070
9082
|
}
|
|
9083
|
+
if (self.classname === "monster_medic_commander") {
|
|
9084
|
+
if (Math.random() < 0.2) {
|
|
9085
|
+
self.monsterinfo.current_move = spawn_move;
|
|
9086
|
+
return;
|
|
9087
|
+
}
|
|
9088
|
+
}
|
|
9071
9089
|
self.monsterinfo.current_move = attack_hyper_move;
|
|
9072
9090
|
}
|
|
9073
9091
|
function medic_fire_blaster(self, context) {
|
|
@@ -9106,7 +9124,6 @@ function medic_cable_attack(self, context) {
|
|
|
9106
9124
|
te: TempEntity.MEDIC_CABLE_ATTACK,
|
|
9107
9125
|
entId: self.index,
|
|
9108
9126
|
targetId: self.enemy.index,
|
|
9109
|
-
// Assuming targetId for the beam target
|
|
9110
9127
|
start,
|
|
9111
9128
|
end
|
|
9112
9129
|
});
|
|
@@ -9134,14 +9151,13 @@ function medic_hook_retract(self, context) {
|
|
|
9134
9151
|
if (ent.monsterinfo && ent.monsterinfo.stand) {
|
|
9135
9152
|
ent.monsterinfo.stand(ent, context);
|
|
9136
9153
|
}
|
|
9154
|
+
ent.bad_medic = self;
|
|
9137
9155
|
} else {
|
|
9138
9156
|
const spawnContext = {
|
|
9139
9157
|
entities: context,
|
|
9140
9158
|
keyValues: { classname: ent.classname },
|
|
9141
|
-
// Minimal keyvalues
|
|
9142
9159
|
warn: (msg) => {
|
|
9143
9160
|
},
|
|
9144
|
-
// Suppress warnings
|
|
9145
9161
|
free: (e) => context.free(e)
|
|
9146
9162
|
};
|
|
9147
9163
|
const origin = { ...ent.origin };
|
|
@@ -9189,6 +9205,44 @@ function medic_find_dead(self, context) {
|
|
|
9189
9205
|
}
|
|
9190
9206
|
return false;
|
|
9191
9207
|
}
|
|
9208
|
+
function medic_call_reinforcements(self, context) {
|
|
9209
|
+
const r = Math.random();
|
|
9210
|
+
let chosenClass = "monster_soldier_light";
|
|
9211
|
+
if (r > 0.8) {
|
|
9212
|
+
chosenClass = "monster_soldier_ssg";
|
|
9213
|
+
} else if (r > 0.5) {
|
|
9214
|
+
chosenClass = "monster_soldier";
|
|
9215
|
+
}
|
|
9216
|
+
const spawnFunc = context.getSpawnFunction(chosenClass);
|
|
9217
|
+
if (spawnFunc) {
|
|
9218
|
+
const vectors = angleVectors(self.angles);
|
|
9219
|
+
const forwardDist = scaleVec3(vectors.forward, 64);
|
|
9220
|
+
const spawnOrigin = addVec3(self.origin, forwardDist);
|
|
9221
|
+
const adjustedOrigin = { ...spawnOrigin, z: spawnOrigin.z + 8 };
|
|
9222
|
+
const tr = context.trace(self.origin, { x: -16, y: -16, z: -24 }, { x: 16, y: 16, z: 32 }, adjustedOrigin, self, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_DEADMONSTER);
|
|
9223
|
+
if (tr.fraction < 1 || tr.startsolid || tr.allsolid) {
|
|
9224
|
+
return;
|
|
9225
|
+
}
|
|
9226
|
+
const ent = context.spawn();
|
|
9227
|
+
ent.origin = adjustedOrigin;
|
|
9228
|
+
ent.angles = { ...self.angles };
|
|
9229
|
+
const spawnContext = {
|
|
9230
|
+
entities: context,
|
|
9231
|
+
keyValues: { classname: chosenClass },
|
|
9232
|
+
warn: () => {
|
|
9233
|
+
},
|
|
9234
|
+
free: (e) => context.free(e)
|
|
9235
|
+
};
|
|
9236
|
+
spawnFunc(ent, spawnContext);
|
|
9237
|
+
ent.enemy = self.enemy;
|
|
9238
|
+
context.multicast(adjustedOrigin, 1 /* Pvs */, ServerCommand.muzzleflash, {
|
|
9239
|
+
entId: ent.index,
|
|
9240
|
+
flash_number: 0
|
|
9241
|
+
// generic flash
|
|
9242
|
+
});
|
|
9243
|
+
context.engine.sound?.(self, 0, "medic/medatck2.wav", 1, 1, 0);
|
|
9244
|
+
}
|
|
9245
|
+
}
|
|
9192
9246
|
function medic_die(self) {
|
|
9193
9247
|
self.monsterinfo.current_move = death_move12;
|
|
9194
9248
|
}
|
|
@@ -9250,8 +9304,6 @@ var attack_cable_frames = [
|
|
|
9250
9304
|
];
|
|
9251
9305
|
attack_cable_move = {
|
|
9252
9306
|
firstframe: 106,
|
|
9253
|
-
// FRAME_attack42 (starts at 0+30+40+20+16 = 106) ... wait, check original counts.
|
|
9254
|
-
// stand=30, walk=40, run=20, hyper=16. 30+40+20+16 = 106. Correct.
|
|
9255
9307
|
lastframe: 114,
|
|
9256
9308
|
frames: attack_cable_frames,
|
|
9257
9309
|
endfunc: medic_run
|
|
@@ -9266,13 +9318,25 @@ pain_move8 = {
|
|
|
9266
9318
|
frames: pain_frames8,
|
|
9267
9319
|
endfunc: medic_run
|
|
9268
9320
|
};
|
|
9269
|
-
var
|
|
9321
|
+
var spawn_frames = Array.from({ length: 23 }, (_, i) => ({
|
|
9322
|
+
ai: monster_ai_move15,
|
|
9323
|
+
dist: 0,
|
|
9324
|
+
think: i === 11 ? medic_call_reinforcements : null
|
|
9325
|
+
// Trigger halfway
|
|
9326
|
+
}));
|
|
9327
|
+
spawn_move = {
|
|
9328
|
+
firstframe: 122,
|
|
9329
|
+
lastframe: 144,
|
|
9330
|
+
frames: spawn_frames,
|
|
9331
|
+
endfunc: medic_run
|
|
9332
|
+
};
|
|
9333
|
+
var death_frames12 = Array.from({ length: 30 }, () => ({
|
|
9270
9334
|
ai: monster_ai_move15,
|
|
9271
9335
|
dist: 0
|
|
9272
9336
|
}));
|
|
9273
9337
|
death_move12 = {
|
|
9274
|
-
firstframe:
|
|
9275
|
-
lastframe:
|
|
9338
|
+
firstframe: 161,
|
|
9339
|
+
lastframe: 190,
|
|
9276
9340
|
frames: death_frames12,
|
|
9277
9341
|
endfunc: medic_dead
|
|
9278
9342
|
};
|
|
@@ -9290,6 +9354,10 @@ function SP_monster_medic(self, context) {
|
|
|
9290
9354
|
self.pain = (self2, other, kick, damage) => {
|
|
9291
9355
|
if (self2.health < self2.max_health / 2) {
|
|
9292
9356
|
self2.monsterinfo.current_move = pain_move8;
|
|
9357
|
+
if (Math.random() < 0.5) {
|
|
9358
|
+
const sound = self2.classname === "monster_medic_commander" ? "medic/medpain2.wav" : "medic/medpain1.wav";
|
|
9359
|
+
context.entities.sound?.(self2, 0, sound, 1, 1, 0);
|
|
9360
|
+
}
|
|
9293
9361
|
}
|
|
9294
9362
|
};
|
|
9295
9363
|
self.die = (self2, inflictor, attacker, damage, point) => {
|
|
@@ -9310,8 +9378,16 @@ function SP_monster_medic(self, context) {
|
|
|
9310
9378
|
medic_stand(self);
|
|
9311
9379
|
self.nextthink = self.timestamp + MONSTER_TICK15;
|
|
9312
9380
|
}
|
|
9381
|
+
function SP_monster_medic_commander(self, context) {
|
|
9382
|
+
SP_monster_medic(self, context);
|
|
9383
|
+
self.classname = "monster_medic_commander";
|
|
9384
|
+
self.health = 600;
|
|
9385
|
+
self.max_health = 600;
|
|
9386
|
+
self.skin = 1;
|
|
9387
|
+
}
|
|
9313
9388
|
function registerMedicSpawns(registry) {
|
|
9314
9389
|
registry.register("monster_medic", SP_monster_medic);
|
|
9390
|
+
registry.register("monster_medic_commander", SP_monster_medic_commander);
|
|
9315
9391
|
}
|
|
9316
9392
|
|
|
9317
9393
|
// src/entities/monsters/mutant.ts
|