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.
@@ -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__ */ ((RangeCategory4) => {
2866
- RangeCategory4["Melee"] = "melee";
2867
- RangeCategory4["Near"] = "near";
2868
- RangeCategory4["Mid"] = "mid";
2869
- RangeCategory4["Far"] = "far";
2870
- return RangeCategory4;
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 ZERO_VEC38 = { x: 0, y: 0, z: 0 };
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 = { ...ZERO_VEC38 };
20539
- let velocity = { ...ZERO_VEC38 };
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 ?? ZERO_VEC38,
20622
- kick_origin: player?.client?.kick_origin ?? ZERO_VEC38,
20623
- gunoffset: ZERO_VEC38,
20624
- gunangles: ZERO_VEC38,
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 = { ...ZERO_VEC38 };
20639
- velocity = { ...ZERO_VEC38 };
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: ZERO_VEC38,
20668
- kick_origin: ZERO_VEC38,
20669
- gunoffset: ZERO_VEC38,
20670
- gunangles: ZERO_VEC38,
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 } : { ...ZERO_VEC38 };
20807
- velocity = player ? { ...player.velocity } : { ...ZERO_VEC38 };
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
  };