quake2ts 0.0.224 → 0.0.225
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 +11 -11
- package/packages/client/dist/browser/index.global.js.map +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 +124 -10
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +124 -10
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/gunner.d.ts.map +1 -1
|
@@ -4882,13 +4882,63 @@ var func_door = (entity, context) => {
|
|
|
4882
4882
|
entity.pos1 = { ...entity.origin };
|
|
4883
4883
|
const move = entity.movedir.x * (Math.abs(entity.maxs.x - entity.mins.x) - entity.lip) + entity.movedir.y * (Math.abs(entity.maxs.y - entity.mins.y) - entity.lip) + entity.movedir.z * (Math.abs(entity.maxs.z - entity.mins.z) - entity.lip);
|
|
4884
4884
|
entity.pos2 = addVec3(entity.pos1, scaleVec3(entity.movedir, move));
|
|
4885
|
-
entity.
|
|
4885
|
+
if (entity.spawnflags & 1) {
|
|
4886
|
+
entity.origin = { ...entity.pos2 };
|
|
4887
|
+
entity.state = 0 /* Open */;
|
|
4888
|
+
}
|
|
4889
|
+
if (entity.health > 0) {
|
|
4890
|
+
entity.takedamage = true;
|
|
4891
|
+
entity.max_health = entity.health;
|
|
4892
|
+
entity.die = (self, inflictor, attacker, damage) => {
|
|
4893
|
+
self.health = self.max_health;
|
|
4894
|
+
self.takedamage = false;
|
|
4895
|
+
self.use?.(self, attacker, attacker);
|
|
4896
|
+
};
|
|
4897
|
+
}
|
|
4898
|
+
entity.use = (self, other, activator) => {
|
|
4899
|
+
if (entity.spawnflags & 32) {
|
|
4900
|
+
if (self.state === 2 /* Closed */) {
|
|
4901
|
+
self.state = 1 /* Opening */;
|
|
4902
|
+
self.think = door_go_up;
|
|
4903
|
+
context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
|
|
4904
|
+
} else if (self.state === 0 /* Open */) {
|
|
4905
|
+
self.state = 3 /* Closing */;
|
|
4906
|
+
self.think = door_go_down;
|
|
4907
|
+
context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
|
|
4908
|
+
}
|
|
4909
|
+
return;
|
|
4910
|
+
}
|
|
4886
4911
|
if (self.state !== 2 /* Closed */) return;
|
|
4887
4912
|
self.state = 1 /* Opening */;
|
|
4888
4913
|
self.think = door_go_up;
|
|
4889
4914
|
context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
|
|
4890
|
-
|
|
4915
|
+
let soundName = "doors/dr1_strt.wav";
|
|
4916
|
+
if (entity.sounds) {
|
|
4917
|
+
switch (entity.sounds) {
|
|
4918
|
+
case 1:
|
|
4919
|
+
soundName = "doors/dr1_strt.wav";
|
|
4920
|
+
break;
|
|
4921
|
+
case 2:
|
|
4922
|
+
soundName = "doors/dr2_strt.wav";
|
|
4923
|
+
break;
|
|
4924
|
+
case 3:
|
|
4925
|
+
soundName = "doors/dr3_strt.wav";
|
|
4926
|
+
break;
|
|
4927
|
+
case 4:
|
|
4928
|
+
soundName = "doors/dr4_strt.wav";
|
|
4929
|
+
break;
|
|
4930
|
+
default:
|
|
4931
|
+
soundName = "doors/dr1_strt.wav";
|
|
4932
|
+
}
|
|
4933
|
+
}
|
|
4934
|
+
context.entities.sound(self, 0, soundName, 1, 1, 0);
|
|
4891
4935
|
};
|
|
4936
|
+
if (entity.health <= 0 && !entity.targetname) {
|
|
4937
|
+
entity.touch = (self, other) => {
|
|
4938
|
+
if (!other || other.classname !== "player") return;
|
|
4939
|
+
self.use?.(self, other, other);
|
|
4940
|
+
};
|
|
4941
|
+
}
|
|
4892
4942
|
};
|
|
4893
4943
|
var func_button = (entity, context) => {
|
|
4894
4944
|
entity.solid = 3 /* Bsp */;
|
|
@@ -8442,6 +8492,7 @@ var pain2_move4;
|
|
|
8442
8492
|
var pain3_move3;
|
|
8443
8493
|
var death_move6;
|
|
8444
8494
|
var duck_move3;
|
|
8495
|
+
var jump_move;
|
|
8445
8496
|
function gunner_idlesound(self, context) {
|
|
8446
8497
|
context.engine.sound?.(self, 0, "gunner/gunidle1.wav", 1, 1, 0);
|
|
8447
8498
|
}
|
|
@@ -8566,6 +8617,51 @@ function gunner_dodge(self, attacker, eta, context) {
|
|
|
8566
8617
|
if (!self.enemy) self.enemy = attacker;
|
|
8567
8618
|
self.monsterinfo.current_move = duck_move3;
|
|
8568
8619
|
}
|
|
8620
|
+
function gunner_jump_takeoff(self, context) {
|
|
8621
|
+
if (!self.enemy) return;
|
|
8622
|
+
const diff = subtractVec3(self.enemy.origin, self.origin);
|
|
8623
|
+
const dist = Math.sqrt(diff.x * diff.x + diff.y * diff.y + diff.z * diff.z);
|
|
8624
|
+
const fwd_speed = 600;
|
|
8625
|
+
const forward = normalizeVec3({ x: diff.x, y: diff.y, z: 0 });
|
|
8626
|
+
const angles = vectorToAngles(forward);
|
|
8627
|
+
self.angles = { x: self.angles.x, y: angles.y, z: self.angles.z };
|
|
8628
|
+
const origin = { ...self.origin };
|
|
8629
|
+
origin.z += 1;
|
|
8630
|
+
self.origin = origin;
|
|
8631
|
+
self.velocity = {
|
|
8632
|
+
x: forward.x * fwd_speed,
|
|
8633
|
+
y: forward.y * fwd_speed,
|
|
8634
|
+
z: 270
|
|
8635
|
+
};
|
|
8636
|
+
self.groundentity = null;
|
|
8637
|
+
self.monsterinfo.aiflags |= 2048 /* Ducked */;
|
|
8638
|
+
self.monsterinfo.attack_finished = context.timeSeconds + 3;
|
|
8639
|
+
}
|
|
8640
|
+
function gunner_check_landing(self, context) {
|
|
8641
|
+
if (self.groundentity) {
|
|
8642
|
+
context.engine.sound?.(self, 0, "mutant/thud1.wav", 1, 1, 0);
|
|
8643
|
+
self.monsterinfo.attack_finished = 0;
|
|
8644
|
+
self.monsterinfo.aiflags &= ~2048 /* Ducked */;
|
|
8645
|
+
return;
|
|
8646
|
+
}
|
|
8647
|
+
if (context.timeSeconds > (self.monsterinfo.attack_finished || 0)) {
|
|
8648
|
+
self.monsterinfo.nextframe = 209 + 5;
|
|
8649
|
+
} else {
|
|
8650
|
+
self.monsterinfo.nextframe = 209 + 3;
|
|
8651
|
+
}
|
|
8652
|
+
}
|
|
8653
|
+
function gunner_jump(self, context) {
|
|
8654
|
+
if (self.spawnflags & 16) return;
|
|
8655
|
+
if (!self.enemy) return;
|
|
8656
|
+
if (!self.groundentity) return;
|
|
8657
|
+
const dist = Math.sqrt(
|
|
8658
|
+
Math.pow(self.enemy.origin.x - self.origin.x, 2) + Math.pow(self.enemy.origin.y - self.origin.y, 2)
|
|
8659
|
+
);
|
|
8660
|
+
if (dist > 256 && Math.random() < 0.02) {
|
|
8661
|
+
context.engine.sound?.(self, 0, "gunner/gunatck3.wav", 1, 1, 0);
|
|
8662
|
+
self.monsterinfo.current_move = jump_move;
|
|
8663
|
+
}
|
|
8664
|
+
}
|
|
8569
8665
|
var stand_frames8 = Array.from({ length: 30 }, (_, i) => ({
|
|
8570
8666
|
ai: monster_ai_stand9,
|
|
8571
8667
|
dist: 0,
|
|
@@ -8600,9 +8696,11 @@ walk_move7 = {
|
|
|
8600
8696
|
endfunc: null
|
|
8601
8697
|
};
|
|
8602
8698
|
var run_dists = [26, 9, 9, 9, 15, 10, 13, 6];
|
|
8603
|
-
var run_frames6 = run_dists.map((d) => ({
|
|
8699
|
+
var run_frames6 = run_dists.map((d, i) => ({
|
|
8604
8700
|
ai: monster_ai_run8,
|
|
8605
|
-
dist: d
|
|
8701
|
+
dist: d,
|
|
8702
|
+
think: i % 4 === 0 ? gunner_jump : null
|
|
8703
|
+
// Check jump periodically
|
|
8606
8704
|
}));
|
|
8607
8705
|
run_move7 = {
|
|
8608
8706
|
firstframe: 94,
|
|
@@ -8729,6 +8827,22 @@ duck_move3 = {
|
|
|
8729
8827
|
frames: duck_frames3,
|
|
8730
8828
|
endfunc: gunner_run
|
|
8731
8829
|
};
|
|
8830
|
+
var jump_frames = [
|
|
8831
|
+
{ ai: monster_ai_move9, dist: 0, think: gunner_jump_takeoff },
|
|
8832
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8833
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8834
|
+
{ ai: monster_ai_move9, dist: 0, think: gunner_check_landing },
|
|
8835
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8836
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8837
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8838
|
+
{ ai: monster_ai_move9, dist: 0 }
|
|
8839
|
+
];
|
|
8840
|
+
jump_move = {
|
|
8841
|
+
firstframe: 209,
|
|
8842
|
+
lastframe: 216,
|
|
8843
|
+
frames: jump_frames,
|
|
8844
|
+
endfunc: gunner_run
|
|
8845
|
+
};
|
|
8732
8846
|
function SP_monster_gunner(self, context) {
|
|
8733
8847
|
self.model = "models/monsters/gunner/tris.md2";
|
|
8734
8848
|
self.mins = { x: -16, y: -16, z: -24 };
|
|
@@ -10100,7 +10214,7 @@ var pain1_move6;
|
|
|
10100
10214
|
var pain2_move6;
|
|
10101
10215
|
var pain3_move5;
|
|
10102
10216
|
var death_move13;
|
|
10103
|
-
var
|
|
10217
|
+
var jump_move2;
|
|
10104
10218
|
function mutant_step(self) {
|
|
10105
10219
|
self.monsterinfo.current_move = walk_move14;
|
|
10106
10220
|
}
|
|
@@ -10191,7 +10305,7 @@ function mutant_check_attack(self, context) {
|
|
|
10191
10305
|
return true;
|
|
10192
10306
|
}
|
|
10193
10307
|
if (dist >= 128 && dist < 512 && random6() < 0.3) {
|
|
10194
|
-
self.monsterinfo.current_move =
|
|
10308
|
+
self.monsterinfo.current_move = jump_move2;
|
|
10195
10309
|
return true;
|
|
10196
10310
|
}
|
|
10197
10311
|
}
|
|
@@ -10333,7 +10447,7 @@ attack_move7 = {
|
|
|
10333
10447
|
frames: attack_frames7,
|
|
10334
10448
|
endfunc: mutant_run
|
|
10335
10449
|
};
|
|
10336
|
-
var
|
|
10450
|
+
var jump_frames2 = [
|
|
10337
10451
|
{ ai: monster_ai_face, dist: 0 },
|
|
10338
10452
|
{ ai: monster_ai_face, dist: 0 },
|
|
10339
10453
|
{ ai: monster_ai_face, dist: 0, think: mutant_jump_takeoff },
|
|
@@ -10343,14 +10457,14 @@ var jump_frames = [
|
|
|
10343
10457
|
{ ai: monster_ai_move16, dist: 0, think: mutant_check_ground },
|
|
10344
10458
|
{ ai: monster_ai_move16, dist: 0, think: mutant_check_ground }
|
|
10345
10459
|
];
|
|
10346
|
-
|
|
10460
|
+
jump_move2 = {
|
|
10347
10461
|
firstframe: 93,
|
|
10348
10462
|
lastframe: 100,
|
|
10349
|
-
frames:
|
|
10463
|
+
frames: jump_frames2,
|
|
10350
10464
|
endfunc: mutant_run
|
|
10351
10465
|
// Should loop until grounded? The C code uses a loop for the jump frames.
|
|
10352
10466
|
};
|
|
10353
|
-
|
|
10467
|
+
jump_move2.frames[3].ai = (self, dist, context) => {
|
|
10354
10468
|
mutant_check_ground(self, context);
|
|
10355
10469
|
if (self.groundentity) return;
|
|
10356
10470
|
if (self.frame === 99) {
|