quake2ts 0.0.224 → 0.0.226
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
|
@@ -4715,13 +4715,63 @@ var func_door = (entity, context) => {
|
|
|
4715
4715
|
entity.pos1 = { ...entity.origin };
|
|
4716
4716
|
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);
|
|
4717
4717
|
entity.pos2 = addVec3(entity.pos1, scaleVec3(entity.movedir, move));
|
|
4718
|
-
entity.
|
|
4718
|
+
if (entity.spawnflags & 1) {
|
|
4719
|
+
entity.origin = { ...entity.pos2 };
|
|
4720
|
+
entity.state = 0 /* Open */;
|
|
4721
|
+
}
|
|
4722
|
+
if (entity.health > 0) {
|
|
4723
|
+
entity.takedamage = true;
|
|
4724
|
+
entity.max_health = entity.health;
|
|
4725
|
+
entity.die = (self, inflictor, attacker, damage) => {
|
|
4726
|
+
self.health = self.max_health;
|
|
4727
|
+
self.takedamage = false;
|
|
4728
|
+
self.use?.(self, attacker, attacker);
|
|
4729
|
+
};
|
|
4730
|
+
}
|
|
4731
|
+
entity.use = (self, other, activator) => {
|
|
4732
|
+
if (entity.spawnflags & 32) {
|
|
4733
|
+
if (self.state === 2 /* Closed */) {
|
|
4734
|
+
self.state = 1 /* Opening */;
|
|
4735
|
+
self.think = door_go_up;
|
|
4736
|
+
context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
|
|
4737
|
+
} else if (self.state === 0 /* Open */) {
|
|
4738
|
+
self.state = 3 /* Closing */;
|
|
4739
|
+
self.think = door_go_down;
|
|
4740
|
+
context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
|
|
4741
|
+
}
|
|
4742
|
+
return;
|
|
4743
|
+
}
|
|
4719
4744
|
if (self.state !== 2 /* Closed */) return;
|
|
4720
4745
|
self.state = 1 /* Opening */;
|
|
4721
4746
|
self.think = door_go_up;
|
|
4722
4747
|
context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
|
|
4723
|
-
|
|
4748
|
+
let soundName = "doors/dr1_strt.wav";
|
|
4749
|
+
if (entity.sounds) {
|
|
4750
|
+
switch (entity.sounds) {
|
|
4751
|
+
case 1:
|
|
4752
|
+
soundName = "doors/dr1_strt.wav";
|
|
4753
|
+
break;
|
|
4754
|
+
case 2:
|
|
4755
|
+
soundName = "doors/dr2_strt.wav";
|
|
4756
|
+
break;
|
|
4757
|
+
case 3:
|
|
4758
|
+
soundName = "doors/dr3_strt.wav";
|
|
4759
|
+
break;
|
|
4760
|
+
case 4:
|
|
4761
|
+
soundName = "doors/dr4_strt.wav";
|
|
4762
|
+
break;
|
|
4763
|
+
default:
|
|
4764
|
+
soundName = "doors/dr1_strt.wav";
|
|
4765
|
+
}
|
|
4766
|
+
}
|
|
4767
|
+
context.entities.sound(self, 0, soundName, 1, 1, 0);
|
|
4724
4768
|
};
|
|
4769
|
+
if (entity.health <= 0 && !entity.targetname) {
|
|
4770
|
+
entity.touch = (self, other) => {
|
|
4771
|
+
if (!other || other.classname !== "player") return;
|
|
4772
|
+
self.use?.(self, other, other);
|
|
4773
|
+
};
|
|
4774
|
+
}
|
|
4725
4775
|
};
|
|
4726
4776
|
var func_button = (entity, context) => {
|
|
4727
4777
|
entity.solid = 3 /* Bsp */;
|
|
@@ -8275,6 +8325,7 @@ var pain2_move4;
|
|
|
8275
8325
|
var pain3_move3;
|
|
8276
8326
|
var death_move6;
|
|
8277
8327
|
var duck_move3;
|
|
8328
|
+
var jump_move;
|
|
8278
8329
|
function gunner_idlesound(self, context) {
|
|
8279
8330
|
context.engine.sound?.(self, 0, "gunner/gunidle1.wav", 1, 1, 0);
|
|
8280
8331
|
}
|
|
@@ -8399,6 +8450,51 @@ function gunner_dodge(self, attacker, eta, context) {
|
|
|
8399
8450
|
if (!self.enemy) self.enemy = attacker;
|
|
8400
8451
|
self.monsterinfo.current_move = duck_move3;
|
|
8401
8452
|
}
|
|
8453
|
+
function gunner_jump_takeoff(self, context) {
|
|
8454
|
+
if (!self.enemy) return;
|
|
8455
|
+
const diff = subtractVec3(self.enemy.origin, self.origin);
|
|
8456
|
+
const dist = Math.sqrt(diff.x * diff.x + diff.y * diff.y + diff.z * diff.z);
|
|
8457
|
+
const fwd_speed = 600;
|
|
8458
|
+
const forward = normalizeVec3({ x: diff.x, y: diff.y, z: 0 });
|
|
8459
|
+
const angles = vectorToAngles(forward);
|
|
8460
|
+
self.angles = { x: self.angles.x, y: angles.y, z: self.angles.z };
|
|
8461
|
+
const origin = { ...self.origin };
|
|
8462
|
+
origin.z += 1;
|
|
8463
|
+
self.origin = origin;
|
|
8464
|
+
self.velocity = {
|
|
8465
|
+
x: forward.x * fwd_speed,
|
|
8466
|
+
y: forward.y * fwd_speed,
|
|
8467
|
+
z: 270
|
|
8468
|
+
};
|
|
8469
|
+
self.groundentity = null;
|
|
8470
|
+
self.monsterinfo.aiflags |= 2048 /* Ducked */;
|
|
8471
|
+
self.monsterinfo.attack_finished = context.timeSeconds + 3;
|
|
8472
|
+
}
|
|
8473
|
+
function gunner_check_landing(self, context) {
|
|
8474
|
+
if (self.groundentity) {
|
|
8475
|
+
context.engine.sound?.(self, 0, "mutant/thud1.wav", 1, 1, 0);
|
|
8476
|
+
self.monsterinfo.attack_finished = 0;
|
|
8477
|
+
self.monsterinfo.aiflags &= ~2048 /* Ducked */;
|
|
8478
|
+
return;
|
|
8479
|
+
}
|
|
8480
|
+
if (context.timeSeconds > (self.monsterinfo.attack_finished || 0)) {
|
|
8481
|
+
self.monsterinfo.nextframe = 209 + 5;
|
|
8482
|
+
} else {
|
|
8483
|
+
self.monsterinfo.nextframe = 209 + 3;
|
|
8484
|
+
}
|
|
8485
|
+
}
|
|
8486
|
+
function gunner_jump(self, context) {
|
|
8487
|
+
if (self.spawnflags & 16) return;
|
|
8488
|
+
if (!self.enemy) return;
|
|
8489
|
+
if (!self.groundentity) return;
|
|
8490
|
+
const dist = Math.sqrt(
|
|
8491
|
+
Math.pow(self.enemy.origin.x - self.origin.x, 2) + Math.pow(self.enemy.origin.y - self.origin.y, 2)
|
|
8492
|
+
);
|
|
8493
|
+
if (dist > 256 && Math.random() < 0.02) {
|
|
8494
|
+
context.engine.sound?.(self, 0, "gunner/gunatck3.wav", 1, 1, 0);
|
|
8495
|
+
self.monsterinfo.current_move = jump_move;
|
|
8496
|
+
}
|
|
8497
|
+
}
|
|
8402
8498
|
var stand_frames8 = Array.from({ length: 30 }, (_, i) => ({
|
|
8403
8499
|
ai: monster_ai_stand9,
|
|
8404
8500
|
dist: 0,
|
|
@@ -8433,9 +8529,11 @@ walk_move7 = {
|
|
|
8433
8529
|
endfunc: null
|
|
8434
8530
|
};
|
|
8435
8531
|
var run_dists = [26, 9, 9, 9, 15, 10, 13, 6];
|
|
8436
|
-
var run_frames6 = run_dists.map((d) => ({
|
|
8532
|
+
var run_frames6 = run_dists.map((d, i) => ({
|
|
8437
8533
|
ai: monster_ai_run8,
|
|
8438
|
-
dist: d
|
|
8534
|
+
dist: d,
|
|
8535
|
+
think: i % 4 === 0 ? gunner_jump : null
|
|
8536
|
+
// Check jump periodically
|
|
8439
8537
|
}));
|
|
8440
8538
|
run_move7 = {
|
|
8441
8539
|
firstframe: 94,
|
|
@@ -8562,6 +8660,22 @@ duck_move3 = {
|
|
|
8562
8660
|
frames: duck_frames3,
|
|
8563
8661
|
endfunc: gunner_run
|
|
8564
8662
|
};
|
|
8663
|
+
var jump_frames = [
|
|
8664
|
+
{ ai: monster_ai_move9, dist: 0, think: gunner_jump_takeoff },
|
|
8665
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8666
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8667
|
+
{ ai: monster_ai_move9, dist: 0, think: gunner_check_landing },
|
|
8668
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8669
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8670
|
+
{ ai: monster_ai_move9, dist: 0 },
|
|
8671
|
+
{ ai: monster_ai_move9, dist: 0 }
|
|
8672
|
+
];
|
|
8673
|
+
jump_move = {
|
|
8674
|
+
firstframe: 209,
|
|
8675
|
+
lastframe: 216,
|
|
8676
|
+
frames: jump_frames,
|
|
8677
|
+
endfunc: gunner_run
|
|
8678
|
+
};
|
|
8565
8679
|
function SP_monster_gunner(self, context) {
|
|
8566
8680
|
self.model = "models/monsters/gunner/tris.md2";
|
|
8567
8681
|
self.mins = { x: -16, y: -16, z: -24 };
|
|
@@ -9933,7 +10047,7 @@ var pain1_move6;
|
|
|
9933
10047
|
var pain2_move6;
|
|
9934
10048
|
var pain3_move5;
|
|
9935
10049
|
var death_move13;
|
|
9936
|
-
var
|
|
10050
|
+
var jump_move2;
|
|
9937
10051
|
function mutant_step(self) {
|
|
9938
10052
|
self.monsterinfo.current_move = walk_move14;
|
|
9939
10053
|
}
|
|
@@ -10024,7 +10138,7 @@ function mutant_check_attack(self, context) {
|
|
|
10024
10138
|
return true;
|
|
10025
10139
|
}
|
|
10026
10140
|
if (dist >= 128 && dist < 512 && random6() < 0.3) {
|
|
10027
|
-
self.monsterinfo.current_move =
|
|
10141
|
+
self.monsterinfo.current_move = jump_move2;
|
|
10028
10142
|
return true;
|
|
10029
10143
|
}
|
|
10030
10144
|
}
|
|
@@ -10166,7 +10280,7 @@ attack_move7 = {
|
|
|
10166
10280
|
frames: attack_frames7,
|
|
10167
10281
|
endfunc: mutant_run
|
|
10168
10282
|
};
|
|
10169
|
-
var
|
|
10283
|
+
var jump_frames2 = [
|
|
10170
10284
|
{ ai: monster_ai_face, dist: 0 },
|
|
10171
10285
|
{ ai: monster_ai_face, dist: 0 },
|
|
10172
10286
|
{ ai: monster_ai_face, dist: 0, think: mutant_jump_takeoff },
|
|
@@ -10176,14 +10290,14 @@ var jump_frames = [
|
|
|
10176
10290
|
{ ai: monster_ai_move16, dist: 0, think: mutant_check_ground },
|
|
10177
10291
|
{ ai: monster_ai_move16, dist: 0, think: mutant_check_ground }
|
|
10178
10292
|
];
|
|
10179
|
-
|
|
10293
|
+
jump_move2 = {
|
|
10180
10294
|
firstframe: 93,
|
|
10181
10295
|
lastframe: 100,
|
|
10182
|
-
frames:
|
|
10296
|
+
frames: jump_frames2,
|
|
10183
10297
|
endfunc: mutant_run
|
|
10184
10298
|
// Should loop until grounded? The C code uses a loop for the jump frames.
|
|
10185
10299
|
};
|
|
10186
|
-
|
|
10300
|
+
jump_move2.frames[3].ai = (self, dist, context) => {
|
|
10187
10301
|
mutant_check_ground(self, context);
|
|
10188
10302
|
if (self.groundentity) return;
|
|
10189
10303
|
if (self.frame === 99) {
|