quake2ts 0.0.305 → 0.0.308
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +13 -13
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +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 +467 -21
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +467 -21
- 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/guardian.d.ts +5 -0
- package/packages/game/dist/types/entities/monsters/guardian.d.ts.map +1 -0
- package/packages/game/dist/types/entities/monsters/index.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +5 -0
- package/packages/game/dist/types/index.d.ts.map +1 -1
|
@@ -2862,12 +2862,12 @@ var TraceMask = /* @__PURE__ */ ((TraceMask2) => {
|
|
|
2862
2862
|
// src/ai/perception.ts
|
|
2863
2863
|
init_esm();
|
|
2864
2864
|
init_esm();
|
|
2865
|
-
var RangeCategory = /* @__PURE__ */ ((
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
return
|
|
2865
|
+
var RangeCategory = /* @__PURE__ */ ((RangeCategory5) => {
|
|
2866
|
+
RangeCategory5["Melee"] = "melee";
|
|
2867
|
+
RangeCategory5["Near"] = "near";
|
|
2868
|
+
RangeCategory5["Mid"] = "mid";
|
|
2869
|
+
RangeCategory5["Far"] = "far";
|
|
2870
|
+
return RangeCategory5;
|
|
2871
2871
|
})(RangeCategory || {});
|
|
2872
2872
|
function absBounds(entity) {
|
|
2873
2873
|
return {
|
|
@@ -18484,6 +18484,451 @@ function registerGunCommanderSpawns(registry) {
|
|
|
18484
18484
|
registry.register("monster_guncmdr", SP_monster_guncmdr);
|
|
18485
18485
|
}
|
|
18486
18486
|
|
|
18487
|
+
// src/entities/monsters/guardian.ts
|
|
18488
|
+
init_esm();
|
|
18489
|
+
var MONSTER_TICK29 = 0.1;
|
|
18490
|
+
var MELEE_DISTANCE6 = 80;
|
|
18491
|
+
var FRAME_idle12 = 76;
|
|
18492
|
+
var FRAME_idle52 = 127;
|
|
18493
|
+
var FRAME_walk13 = 160;
|
|
18494
|
+
var FRAME_walk19 = 178;
|
|
18495
|
+
var FRAME_pain1_1 = 68;
|
|
18496
|
+
var FRAME_pain1_8 = 75;
|
|
18497
|
+
var FRAME_atk1_out1 = 40;
|
|
18498
|
+
var FRAME_atk1_out3 = 42;
|
|
18499
|
+
var FRAME_atk1_spin1 = 184;
|
|
18500
|
+
var FRAME_atk1_spin12 = 195;
|
|
18501
|
+
var FRAME_atk1_spin15 = 198;
|
|
18502
|
+
var FRAME_atk1_in1 = 128;
|
|
18503
|
+
var FRAME_atk1_in3 = 130;
|
|
18504
|
+
var FRAME_atk2_out1 = 43;
|
|
18505
|
+
var FRAME_atk2_out7 = 49;
|
|
18506
|
+
var FRAME_atk2_fire1 = 199;
|
|
18507
|
+
var FRAME_atk2_fire4 = 202;
|
|
18508
|
+
var FRAME_atk2_in1 = 214;
|
|
18509
|
+
var FRAME_atk2_in12 = 225;
|
|
18510
|
+
var FRAME_kick_in1 = 131;
|
|
18511
|
+
var FRAME_kick_in13 = 143;
|
|
18512
|
+
var FRAME_death12 = 14;
|
|
18513
|
+
var FRAME_death26 = 39;
|
|
18514
|
+
var sound_step2 = "zortemp/step.wav";
|
|
18515
|
+
var sound_charge2 = "weapons/hyprbu1a.wav";
|
|
18516
|
+
var sound_laser = "weapons/laser2.wav";
|
|
18517
|
+
var guardian_move_stand;
|
|
18518
|
+
var guardian_move_walk;
|
|
18519
|
+
var guardian_move_run;
|
|
18520
|
+
var guardian_move_pain1;
|
|
18521
|
+
var guardian_atk1_out;
|
|
18522
|
+
var guardian_move_atk1_spin;
|
|
18523
|
+
var guardian_move_atk1_in;
|
|
18524
|
+
var guardian_move_atk2_out;
|
|
18525
|
+
var guardian_move_atk2_fire;
|
|
18526
|
+
var guardian_move_atk2_in;
|
|
18527
|
+
var guardian_move_kick;
|
|
18528
|
+
var guardian_move_death;
|
|
18529
|
+
var guardian_move_atk1_spin_loop;
|
|
18530
|
+
function guardian_ai_stand(self, dist, context) {
|
|
18531
|
+
ai_stand(self, MONSTER_TICK29, context);
|
|
18532
|
+
}
|
|
18533
|
+
function guardian_ai_walk(self, dist, context) {
|
|
18534
|
+
ai_walk(self, dist, MONSTER_TICK29, context);
|
|
18535
|
+
}
|
|
18536
|
+
function guardian_ai_run(self, dist, context) {
|
|
18537
|
+
ai_run(self, dist, MONSTER_TICK29, context);
|
|
18538
|
+
}
|
|
18539
|
+
function guardian_ai_charge(self, dist, context) {
|
|
18540
|
+
ai_charge(self, dist, MONSTER_TICK29, context);
|
|
18541
|
+
}
|
|
18542
|
+
function guardian_ai_move(self, dist, context) {
|
|
18543
|
+
ai_move(self, dist);
|
|
18544
|
+
}
|
|
18545
|
+
function guardian_stand(self, context) {
|
|
18546
|
+
M_SetAnimation3(self, guardian_move_stand, context);
|
|
18547
|
+
}
|
|
18548
|
+
var guardian_frames_stand = Array(52).fill({ ai: guardian_ai_stand, dist: 0 });
|
|
18549
|
+
guardian_move_stand = {
|
|
18550
|
+
firstframe: FRAME_idle12,
|
|
18551
|
+
lastframe: FRAME_idle52,
|
|
18552
|
+
frames: guardian_frames_stand,
|
|
18553
|
+
endfunc: null
|
|
18554
|
+
};
|
|
18555
|
+
function guardian_footstep(self, context) {
|
|
18556
|
+
context.sound(self, 2, sound_step2, 1, 1, 0);
|
|
18557
|
+
}
|
|
18558
|
+
var guardian_frames_walk = [
|
|
18559
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18560
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18561
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18562
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18563
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18564
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18565
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18566
|
+
{ ai: guardian_ai_walk, dist: 8, think: guardian_footstep },
|
|
18567
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18568
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18569
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18570
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18571
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18572
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18573
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18574
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18575
|
+
{ ai: guardian_ai_walk, dist: 8 },
|
|
18576
|
+
{ ai: guardian_ai_walk, dist: 8, think: guardian_footstep },
|
|
18577
|
+
{ ai: guardian_ai_walk, dist: 8 }
|
|
18578
|
+
];
|
|
18579
|
+
guardian_move_walk = {
|
|
18580
|
+
firstframe: FRAME_walk13,
|
|
18581
|
+
lastframe: FRAME_walk19,
|
|
18582
|
+
frames: guardian_frames_walk,
|
|
18583
|
+
endfunc: null
|
|
18584
|
+
};
|
|
18585
|
+
function guardian_walk(self, context) {
|
|
18586
|
+
M_SetAnimation3(self, guardian_move_walk, context);
|
|
18587
|
+
}
|
|
18588
|
+
var guardian_frames_run = [
|
|
18589
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18590
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18591
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18592
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18593
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18594
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18595
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18596
|
+
{ ai: guardian_ai_run, dist: 8, think: guardian_footstep },
|
|
18597
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18598
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18599
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18600
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18601
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18602
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18603
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18604
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18605
|
+
{ ai: guardian_ai_run, dist: 8 },
|
|
18606
|
+
{ ai: guardian_ai_run, dist: 8, think: guardian_footstep },
|
|
18607
|
+
{ ai: guardian_ai_run, dist: 8 }
|
|
18608
|
+
];
|
|
18609
|
+
guardian_move_run = {
|
|
18610
|
+
firstframe: FRAME_walk13,
|
|
18611
|
+
lastframe: FRAME_walk19,
|
|
18612
|
+
frames: guardian_frames_run,
|
|
18613
|
+
endfunc: null
|
|
18614
|
+
};
|
|
18615
|
+
function guardian_run(self, context) {
|
|
18616
|
+
M_SetAnimation3(self, guardian_move_run, context);
|
|
18617
|
+
}
|
|
18618
|
+
var guardian_frames_pain1 = Array(8).fill({ ai: guardian_ai_move, dist: 0 });
|
|
18619
|
+
guardian_move_pain1 = {
|
|
18620
|
+
firstframe: FRAME_pain1_1,
|
|
18621
|
+
lastframe: FRAME_pain1_8,
|
|
18622
|
+
frames: guardian_frames_pain1,
|
|
18623
|
+
endfunc: guardian_run
|
|
18624
|
+
};
|
|
18625
|
+
function guardian_pain(self, other, kick, damage) {
|
|
18626
|
+
if (damage <= 10) return;
|
|
18627
|
+
const frame = self.frame;
|
|
18628
|
+
if (frame >= FRAME_atk1_spin1 && frame <= FRAME_atk1_spin15) return;
|
|
18629
|
+
if (frame >= FRAME_atk2_fire1 && frame <= FRAME_atk2_fire4) return;
|
|
18630
|
+
if (frame >= FRAME_kick_in1 && frame <= FRAME_kick_in13) return;
|
|
18631
|
+
if (!M_ShouldReactToPain(self)) return;
|
|
18632
|
+
M_SetAnimation3(self, guardian_move_pain1, null);
|
|
18633
|
+
}
|
|
18634
|
+
var guardian_frames_atk1_out = [
|
|
18635
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18636
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18637
|
+
{ ai: guardian_ai_charge, dist: 0 }
|
|
18638
|
+
];
|
|
18639
|
+
guardian_atk1_out = {
|
|
18640
|
+
firstframe: FRAME_atk1_out1,
|
|
18641
|
+
lastframe: FRAME_atk1_out3,
|
|
18642
|
+
frames: guardian_frames_atk1_out,
|
|
18643
|
+
endfunc: guardian_run
|
|
18644
|
+
};
|
|
18645
|
+
function guardian_atk1_finish(self, context) {
|
|
18646
|
+
M_SetAnimation3(self, guardian_atk1_out, context);
|
|
18647
|
+
}
|
|
18648
|
+
function guardian_atk1_charge(self, context) {
|
|
18649
|
+
context.sound(self, 1, sound_charge2, 1, 1, 0);
|
|
18650
|
+
}
|
|
18651
|
+
function guardian_fire_blaster_func(self, context) {
|
|
18652
|
+
if (!self.enemy) return;
|
|
18653
|
+
const { forward, right } = angleVectors(self.angles);
|
|
18654
|
+
const start = addVec3(self.origin, scaleVec3(forward, 20));
|
|
18655
|
+
start.z += self.viewheight ? self.viewheight - 10 : 0;
|
|
18656
|
+
start.x += right.x * 20;
|
|
18657
|
+
start.y += right.y * 20;
|
|
18658
|
+
const target = { ...self.enemy.origin };
|
|
18659
|
+
target.z += self.enemy.viewheight || 0;
|
|
18660
|
+
target.x += (Math.random() * 2 - 1) * 5;
|
|
18661
|
+
target.y += (Math.random() * 2 - 1) * 5;
|
|
18662
|
+
target.z += (Math.random() * 2 - 1) * 5;
|
|
18663
|
+
const dir = normalizeVec3(subtractVec3(target, start));
|
|
18664
|
+
monster_fire_blaster(self, start, dir, 2, 1e3, 0, 0, context, 10 /* HYPERBLASTER */);
|
|
18665
|
+
}
|
|
18666
|
+
function guardian_fire_blaster_loop(self, context) {
|
|
18667
|
+
guardian_fire_blaster_func(self, context);
|
|
18668
|
+
if (self.enemy && self.enemy.health > 0 && self.frame === FRAME_atk1_spin12 && self.timestamp > context.timeSeconds && visible(self, self.enemy, context.trace)) {
|
|
18669
|
+
M_SetAnimation3(self, guardian_move_atk1_spin_loop, context);
|
|
18670
|
+
}
|
|
18671
|
+
}
|
|
18672
|
+
var guardian_frames_atk1_spin = [
|
|
18673
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_atk1_charge },
|
|
18674
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18675
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18676
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18677
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18678
|
+
// 5
|
|
18679
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18680
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18681
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18682
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18683
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18684
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
|
|
18685
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_loop },
|
|
18686
|
+
// 12
|
|
18687
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18688
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18689
|
+
{ ai: guardian_ai_charge, dist: 0 }
|
|
18690
|
+
];
|
|
18691
|
+
guardian_move_atk1_spin = {
|
|
18692
|
+
firstframe: FRAME_atk1_spin1,
|
|
18693
|
+
lastframe: FRAME_atk1_spin15,
|
|
18694
|
+
frames: guardian_frames_atk1_spin,
|
|
18695
|
+
endfunc: guardian_atk1_finish
|
|
18696
|
+
};
|
|
18697
|
+
guardian_move_atk1_spin_loop = {
|
|
18698
|
+
firstframe: FRAME_atk1_spin1 + 4,
|
|
18699
|
+
lastframe: FRAME_atk1_spin15,
|
|
18700
|
+
frames: guardian_frames_atk1_spin.slice(4),
|
|
18701
|
+
endfunc: guardian_atk1_finish
|
|
18702
|
+
};
|
|
18703
|
+
function guardian_atk1(self, context) {
|
|
18704
|
+
M_SetAnimation3(self, guardian_move_atk1_spin, context);
|
|
18705
|
+
self.timestamp = context.timeSeconds + 0.65 + Math.random() * 1.5;
|
|
18706
|
+
}
|
|
18707
|
+
var guardian_frames_atk1_in = [
|
|
18708
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18709
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18710
|
+
{ ai: guardian_ai_charge, dist: 0 }
|
|
18711
|
+
];
|
|
18712
|
+
guardian_move_atk1_in = {
|
|
18713
|
+
firstframe: FRAME_atk1_in1,
|
|
18714
|
+
lastframe: FRAME_atk1_in3,
|
|
18715
|
+
frames: guardian_frames_atk1_in,
|
|
18716
|
+
endfunc: guardian_atk1
|
|
18717
|
+
};
|
|
18718
|
+
var guardian_frames_atk2_out = [
|
|
18719
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18720
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18721
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18722
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18723
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
|
|
18724
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18725
|
+
{ ai: guardian_ai_charge, dist: 0 }
|
|
18726
|
+
];
|
|
18727
|
+
guardian_move_atk2_out = {
|
|
18728
|
+
firstframe: FRAME_atk2_out1,
|
|
18729
|
+
lastframe: FRAME_atk2_out7,
|
|
18730
|
+
frames: guardian_frames_atk2_out,
|
|
18731
|
+
endfunc: guardian_run
|
|
18732
|
+
};
|
|
18733
|
+
function guardian_atk2_out(self, context) {
|
|
18734
|
+
M_SetAnimation3(self, guardian_move_atk2_out, context);
|
|
18735
|
+
}
|
|
18736
|
+
var laser_positions = [
|
|
18737
|
+
{ x: 125, y: -70, z: 60 },
|
|
18738
|
+
{ x: 112, y: -62, z: 60 }
|
|
18739
|
+
];
|
|
18740
|
+
function guardian_fire_update(laser, context) {
|
|
18741
|
+
const self = laser.owner;
|
|
18742
|
+
if (!self || !self.inUse) {
|
|
18743
|
+
context.free(laser);
|
|
18744
|
+
return;
|
|
18745
|
+
}
|
|
18746
|
+
const { forward, right } = angleVectors(self.angles);
|
|
18747
|
+
const offset = laser_positions[1 - (self.frame & 1)];
|
|
18748
|
+
const start = addVec3(self.origin, scaleVec3(forward, offset.x));
|
|
18749
|
+
start.z += offset.z;
|
|
18750
|
+
start.x += right.x * offset.y;
|
|
18751
|
+
start.y += right.y * offset.y;
|
|
18752
|
+
start.z += right.z * offset.y;
|
|
18753
|
+
if (!self.enemy) return;
|
|
18754
|
+
const target = addVec3(self.enemy.origin, self.enemy.mins);
|
|
18755
|
+
target.x += Math.random() * self.enemy.size.x;
|
|
18756
|
+
target.y += Math.random() * self.enemy.size.y;
|
|
18757
|
+
target.z += Math.random() * self.enemy.size.z;
|
|
18758
|
+
const dir = normalizeVec3(subtractVec3(target, start));
|
|
18759
|
+
laser.origin = start;
|
|
18760
|
+
laser.movedir = dir;
|
|
18761
|
+
context.linkentity(laser);
|
|
18762
|
+
}
|
|
18763
|
+
function guardian_laser_fire(self, context) {
|
|
18764
|
+
context.sound(self, 1, sound_laser, 1, 1, 0);
|
|
18765
|
+
monster_fire_dabeam(self, 25, self.frame % 2 !== 0, guardian_fire_update, context);
|
|
18766
|
+
}
|
|
18767
|
+
var guardian_frames_atk2_fire = [
|
|
18768
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire },
|
|
18769
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire },
|
|
18770
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire },
|
|
18771
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire }
|
|
18772
|
+
];
|
|
18773
|
+
guardian_move_atk2_fire = {
|
|
18774
|
+
firstframe: FRAME_atk2_fire1,
|
|
18775
|
+
lastframe: FRAME_atk2_fire4,
|
|
18776
|
+
frames: guardian_frames_atk2_fire,
|
|
18777
|
+
endfunc: guardian_atk2_out
|
|
18778
|
+
};
|
|
18779
|
+
function guardian_atk2(self, context) {
|
|
18780
|
+
M_SetAnimation3(self, guardian_move_atk2_fire, context);
|
|
18781
|
+
}
|
|
18782
|
+
var guardian_frames_atk2_in = [
|
|
18783
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
|
|
18784
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18785
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18786
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
|
|
18787
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18788
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18789
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18790
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
|
|
18791
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18792
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18793
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18794
|
+
{ ai: guardian_ai_charge, dist: 0 }
|
|
18795
|
+
];
|
|
18796
|
+
guardian_move_atk2_in = {
|
|
18797
|
+
firstframe: FRAME_atk2_in1,
|
|
18798
|
+
lastframe: FRAME_atk2_in12,
|
|
18799
|
+
frames: guardian_frames_atk2_in,
|
|
18800
|
+
endfunc: guardian_atk2
|
|
18801
|
+
};
|
|
18802
|
+
function guardian_kick(self, context) {
|
|
18803
|
+
const aim = { x: MELEE_DISTANCE6, y: 0, z: -80 };
|
|
18804
|
+
if (!monster_fire_hit(self, aim, 85, 700, context)) {
|
|
18805
|
+
self.monsterinfo.melee_debounce_time = context.timeSeconds + 1;
|
|
18806
|
+
}
|
|
18807
|
+
}
|
|
18808
|
+
var guardian_frames_kick = [
|
|
18809
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18810
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
|
|
18811
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18812
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18813
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18814
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_kick },
|
|
18815
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18816
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18817
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18818
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18819
|
+
{ ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
|
|
18820
|
+
{ ai: guardian_ai_charge, dist: 0 },
|
|
18821
|
+
{ ai: guardian_ai_charge, dist: 0 }
|
|
18822
|
+
];
|
|
18823
|
+
guardian_move_kick = {
|
|
18824
|
+
firstframe: FRAME_kick_in1,
|
|
18825
|
+
lastframe: FRAME_kick_in13,
|
|
18826
|
+
frames: guardian_frames_kick,
|
|
18827
|
+
endfunc: guardian_run
|
|
18828
|
+
};
|
|
18829
|
+
function guardian_attack(self, context) {
|
|
18830
|
+
if (!self.enemy || !self.enemy.inUse) return;
|
|
18831
|
+
const r = rangeTo(self, self.enemy);
|
|
18832
|
+
if (r > 500) {
|
|
18833
|
+
M_SetAnimation3(self, guardian_move_atk2_in, context);
|
|
18834
|
+
} else if (context.timeSeconds > (self.monsterinfo.melee_debounce_time ?? 0) && r < 120) {
|
|
18835
|
+
M_SetAnimation3(self, guardian_move_kick, context);
|
|
18836
|
+
} else {
|
|
18837
|
+
M_SetAnimation3(self, guardian_move_atk1_in, context);
|
|
18838
|
+
}
|
|
18839
|
+
}
|
|
18840
|
+
function guardian_explode(self, context) {
|
|
18841
|
+
const org = {
|
|
18842
|
+
x: self.origin.x + self.mins.x + Math.random() * self.size.x,
|
|
18843
|
+
y: self.origin.y + self.mins.y + Math.random() * self.size.y,
|
|
18844
|
+
z: self.origin.z + self.mins.z + Math.random() * self.size.z
|
|
18845
|
+
};
|
|
18846
|
+
context.multicast(self.origin, 0 /* All */, ServerCommand.temp_entity, TempEntity.EXPLOSION1_BIG, org);
|
|
18847
|
+
}
|
|
18848
|
+
function guardian_dead(self, context) {
|
|
18849
|
+
for (let i = 0; i < 3; i++) {
|
|
18850
|
+
guardian_explode(self, context);
|
|
18851
|
+
}
|
|
18852
|
+
throwGibs(context, self.origin, 250, GIB_METALLIC);
|
|
18853
|
+
self.nextthink = -1;
|
|
18854
|
+
}
|
|
18855
|
+
function BossExplode(self, context) {
|
|
18856
|
+
guardian_explode(self, context);
|
|
18857
|
+
}
|
|
18858
|
+
var guardian_frames_death1 = [
|
|
18859
|
+
{ ai: guardian_ai_move, dist: 0, think: BossExplode },
|
|
18860
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18861
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18862
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18863
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18864
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18865
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18866
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18867
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18868
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18869
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18870
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18871
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18872
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18873
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18874
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18875
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18876
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18877
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18878
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18879
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18880
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18881
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18882
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18883
|
+
{ ai: guardian_ai_move, dist: 0 },
|
|
18884
|
+
{ ai: guardian_ai_move, dist: 0 }
|
|
18885
|
+
];
|
|
18886
|
+
guardian_move_death = {
|
|
18887
|
+
firstframe: FRAME_death12,
|
|
18888
|
+
lastframe: FRAME_death26,
|
|
18889
|
+
frames: guardian_frames_death1,
|
|
18890
|
+
endfunc: guardian_dead
|
|
18891
|
+
};
|
|
18892
|
+
function SP_monster_guardian(self, context) {
|
|
18893
|
+
if (!M_AllowSpawn(self, context.entities)) {
|
|
18894
|
+
context.entities.free(self);
|
|
18895
|
+
return;
|
|
18896
|
+
}
|
|
18897
|
+
self.classname = "monster_guardian";
|
|
18898
|
+
self.model = "models/monsters/guardian/tris.md2";
|
|
18899
|
+
self.mins = { x: -96, y: -96, z: -66 };
|
|
18900
|
+
self.maxs = { x: 96, y: 96, z: 62 };
|
|
18901
|
+
self.movetype = 5 /* Step */;
|
|
18902
|
+
self.solid = 2 /* BoundingBox */;
|
|
18903
|
+
self.health = 2500;
|
|
18904
|
+
self.mass = 850;
|
|
18905
|
+
self.pain = (ent, other, kick, damage) => {
|
|
18906
|
+
guardian_pain(ent, other, kick, damage);
|
|
18907
|
+
};
|
|
18908
|
+
self.die = (ent, inflictor, attacker, damage, point, mod) => {
|
|
18909
|
+
ent.deadflag = 2 /* Dead */;
|
|
18910
|
+
ent.takedamage = true;
|
|
18911
|
+
if (ent.health < -200) {
|
|
18912
|
+
guardian_dead(ent, context.entities);
|
|
18913
|
+
context.entities.free(ent);
|
|
18914
|
+
return;
|
|
18915
|
+
}
|
|
18916
|
+
M_SetAnimation3(ent, guardian_move_death, context.entities);
|
|
18917
|
+
};
|
|
18918
|
+
self.monsterinfo.stand = guardian_stand;
|
|
18919
|
+
self.monsterinfo.walk = guardian_walk;
|
|
18920
|
+
self.monsterinfo.run = guardian_run;
|
|
18921
|
+
self.monsterinfo.attack = guardian_attack;
|
|
18922
|
+
self.monsterinfo.melee_debounce_time = 0;
|
|
18923
|
+
context.entities.linkentity(self);
|
|
18924
|
+
M_SetAnimation3(self, guardian_move_stand, context.entities);
|
|
18925
|
+
self.think = monster_think;
|
|
18926
|
+
self.nextthink = context.entities.timeSeconds + MONSTER_TICK29;
|
|
18927
|
+
}
|
|
18928
|
+
function registerGuardianSpawns(registry) {
|
|
18929
|
+
registry.register("monster_guardian", SP_monster_guardian);
|
|
18930
|
+
}
|
|
18931
|
+
|
|
18487
18932
|
// src/entities/monsters/index.ts
|
|
18488
18933
|
function registerMonsterSpawns2(registry) {
|
|
18489
18934
|
registerMonsterSpawns(registry);
|
|
@@ -18514,6 +18959,7 @@ function registerMonsterSpawns2(registry) {
|
|
|
18514
18959
|
registerFixbotSpawns(registry);
|
|
18515
18960
|
registerArachnidSpawns(registry);
|
|
18516
18961
|
registerGunCommanderSpawns(registry);
|
|
18962
|
+
registerGuardianSpawns(registry);
|
|
18517
18963
|
}
|
|
18518
18964
|
|
|
18519
18965
|
// src/entities/worldspawn.ts
|
|
@@ -20456,7 +20902,7 @@ var WEAPONS = {
|
|
|
20456
20902
|
};
|
|
20457
20903
|
|
|
20458
20904
|
// src/index.ts
|
|
20459
|
-
var
|
|
20905
|
+
var ZERO_VEC39 = { x: 0, y: 0, z: 0 };
|
|
20460
20906
|
function createGame(imports, engine, options) {
|
|
20461
20907
|
const gravity = options.gravity;
|
|
20462
20908
|
const deathmatch = options.deathmatch ?? false;
|
|
@@ -20535,8 +20981,8 @@ function createGame(imports, engine, options) {
|
|
|
20535
20981
|
};
|
|
20536
20982
|
entities.runFrame();
|
|
20537
20983
|
});
|
|
20538
|
-
let origin = { ...
|
|
20539
|
-
let velocity = { ...
|
|
20984
|
+
let origin = { ...ZERO_VEC39 };
|
|
20985
|
+
let velocity = { ...ZERO_VEC39 };
|
|
20540
20986
|
const calculateBlend = (player, time) => {
|
|
20541
20987
|
const blend = [0, 0, 0, 0];
|
|
20542
20988
|
if (!player || !player.client) return blend;
|
|
@@ -20618,10 +21064,10 @@ function createGame(imports, engine, options) {
|
|
|
20618
21064
|
// TODO
|
|
20619
21065
|
damageIndicators: [],
|
|
20620
21066
|
stats: player ? populatePlayerStats(player, levelClock.current.timeSeconds) : [],
|
|
20621
|
-
kick_angles: player?.client?.kick_angles ??
|
|
20622
|
-
kick_origin: player?.client?.kick_origin ??
|
|
20623
|
-
gunoffset:
|
|
20624
|
-
gunangles:
|
|
21067
|
+
kick_angles: player?.client?.kick_angles ?? ZERO_VEC39,
|
|
21068
|
+
kick_origin: player?.client?.kick_origin ?? ZERO_VEC39,
|
|
21069
|
+
gunoffset: ZERO_VEC39,
|
|
21070
|
+
gunangles: ZERO_VEC39,
|
|
20625
21071
|
gunindex: 0,
|
|
20626
21072
|
gun_frame: player?.client?.gun_frame ?? 0,
|
|
20627
21073
|
rdflags: player?.client?.rdflags ?? 0,
|
|
@@ -20635,8 +21081,8 @@ function createGame(imports, engine, options) {
|
|
|
20635
21081
|
const resetState = (startTimeMs) => {
|
|
20636
21082
|
frameLoop.reset(startTimeMs);
|
|
20637
21083
|
levelClock.start(startTimeMs);
|
|
20638
|
-
origin = { ...
|
|
20639
|
-
velocity = { ...
|
|
21084
|
+
origin = { ...ZERO_VEC39 };
|
|
21085
|
+
velocity = { ...ZERO_VEC39 };
|
|
20640
21086
|
entities.beginFrame(startTimeMs / 1e3);
|
|
20641
21087
|
entities.runFrame();
|
|
20642
21088
|
};
|
|
@@ -20664,10 +21110,10 @@ function createGame(imports, engine, options) {
|
|
|
20664
21110
|
blend: [0, 0, 0, 0],
|
|
20665
21111
|
// Stubs
|
|
20666
21112
|
stats: populatePlayerStats(player, levelClock.current.timeSeconds),
|
|
20667
|
-
kick_angles:
|
|
20668
|
-
kick_origin:
|
|
20669
|
-
gunoffset:
|
|
20670
|
-
gunangles:
|
|
21113
|
+
kick_angles: ZERO_VEC39,
|
|
21114
|
+
kick_origin: ZERO_VEC39,
|
|
21115
|
+
gunoffset: ZERO_VEC39,
|
|
21116
|
+
gunangles: ZERO_VEC39,
|
|
20671
21117
|
gunindex: 0,
|
|
20672
21118
|
pm_type: 0,
|
|
20673
21119
|
pm_time: 0,
|
|
@@ -20803,8 +21249,8 @@ function createGame(imports, engine, options) {
|
|
|
20803
21249
|
rng,
|
|
20804
21250
|
player: player?.client?.inventory
|
|
20805
21251
|
});
|
|
20806
|
-
origin = player ? { ...player.origin } : { ...
|
|
20807
|
-
velocity = player ? { ...player.velocity } : { ...
|
|
21252
|
+
origin = player ? { ...player.origin } : { ...ZERO_VEC39 };
|
|
21253
|
+
velocity = player ? { ...player.velocity } : { ...ZERO_VEC39 };
|
|
20808
21254
|
frameLoop.reset(save.level.timeSeconds * 1e3);
|
|
20809
21255
|
}
|
|
20810
21256
|
};
|