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.
@@ -3022,12 +3022,12 @@ var TraceMask = /* @__PURE__ */ ((TraceMask2) => {
3022
3022
  // src/ai/perception.ts
3023
3023
  init_esm();
3024
3024
  init_esm();
3025
- var RangeCategory = /* @__PURE__ */ ((RangeCategory4) => {
3026
- RangeCategory4["Melee"] = "melee";
3027
- RangeCategory4["Near"] = "near";
3028
- RangeCategory4["Mid"] = "mid";
3029
- RangeCategory4["Far"] = "far";
3030
- return RangeCategory4;
3025
+ var RangeCategory = /* @__PURE__ */ ((RangeCategory5) => {
3026
+ RangeCategory5["Melee"] = "melee";
3027
+ RangeCategory5["Near"] = "near";
3028
+ RangeCategory5["Mid"] = "mid";
3029
+ RangeCategory5["Far"] = "far";
3030
+ return RangeCategory5;
3031
3031
  })(RangeCategory || {});
3032
3032
  function absBounds(entity) {
3033
3033
  return {
@@ -18644,6 +18644,451 @@ function registerGunCommanderSpawns(registry) {
18644
18644
  registry.register("monster_guncmdr", SP_monster_guncmdr);
18645
18645
  }
18646
18646
 
18647
+ // src/entities/monsters/guardian.ts
18648
+ init_esm();
18649
+ var MONSTER_TICK29 = 0.1;
18650
+ var MELEE_DISTANCE6 = 80;
18651
+ var FRAME_idle12 = 76;
18652
+ var FRAME_idle52 = 127;
18653
+ var FRAME_walk13 = 160;
18654
+ var FRAME_walk19 = 178;
18655
+ var FRAME_pain1_1 = 68;
18656
+ var FRAME_pain1_8 = 75;
18657
+ var FRAME_atk1_out1 = 40;
18658
+ var FRAME_atk1_out3 = 42;
18659
+ var FRAME_atk1_spin1 = 184;
18660
+ var FRAME_atk1_spin12 = 195;
18661
+ var FRAME_atk1_spin15 = 198;
18662
+ var FRAME_atk1_in1 = 128;
18663
+ var FRAME_atk1_in3 = 130;
18664
+ var FRAME_atk2_out1 = 43;
18665
+ var FRAME_atk2_out7 = 49;
18666
+ var FRAME_atk2_fire1 = 199;
18667
+ var FRAME_atk2_fire4 = 202;
18668
+ var FRAME_atk2_in1 = 214;
18669
+ var FRAME_atk2_in12 = 225;
18670
+ var FRAME_kick_in1 = 131;
18671
+ var FRAME_kick_in13 = 143;
18672
+ var FRAME_death12 = 14;
18673
+ var FRAME_death26 = 39;
18674
+ var sound_step2 = "zortemp/step.wav";
18675
+ var sound_charge2 = "weapons/hyprbu1a.wav";
18676
+ var sound_laser = "weapons/laser2.wav";
18677
+ var guardian_move_stand;
18678
+ var guardian_move_walk;
18679
+ var guardian_move_run;
18680
+ var guardian_move_pain1;
18681
+ var guardian_atk1_out;
18682
+ var guardian_move_atk1_spin;
18683
+ var guardian_move_atk1_in;
18684
+ var guardian_move_atk2_out;
18685
+ var guardian_move_atk2_fire;
18686
+ var guardian_move_atk2_in;
18687
+ var guardian_move_kick;
18688
+ var guardian_move_death;
18689
+ var guardian_move_atk1_spin_loop;
18690
+ function guardian_ai_stand(self, dist, context) {
18691
+ ai_stand(self, MONSTER_TICK29, context);
18692
+ }
18693
+ function guardian_ai_walk(self, dist, context) {
18694
+ ai_walk(self, dist, MONSTER_TICK29, context);
18695
+ }
18696
+ function guardian_ai_run(self, dist, context) {
18697
+ ai_run(self, dist, MONSTER_TICK29, context);
18698
+ }
18699
+ function guardian_ai_charge(self, dist, context) {
18700
+ ai_charge(self, dist, MONSTER_TICK29, context);
18701
+ }
18702
+ function guardian_ai_move(self, dist, context) {
18703
+ ai_move(self, dist);
18704
+ }
18705
+ function guardian_stand(self, context) {
18706
+ M_SetAnimation3(self, guardian_move_stand, context);
18707
+ }
18708
+ var guardian_frames_stand = Array(52).fill({ ai: guardian_ai_stand, dist: 0 });
18709
+ guardian_move_stand = {
18710
+ firstframe: FRAME_idle12,
18711
+ lastframe: FRAME_idle52,
18712
+ frames: guardian_frames_stand,
18713
+ endfunc: null
18714
+ };
18715
+ function guardian_footstep(self, context) {
18716
+ context.sound(self, 2, sound_step2, 1, 1, 0);
18717
+ }
18718
+ var guardian_frames_walk = [
18719
+ { ai: guardian_ai_walk, dist: 8 },
18720
+ { ai: guardian_ai_walk, dist: 8 },
18721
+ { ai: guardian_ai_walk, dist: 8 },
18722
+ { ai: guardian_ai_walk, dist: 8 },
18723
+ { ai: guardian_ai_walk, dist: 8 },
18724
+ { ai: guardian_ai_walk, dist: 8 },
18725
+ { ai: guardian_ai_walk, dist: 8 },
18726
+ { ai: guardian_ai_walk, dist: 8, think: guardian_footstep },
18727
+ { ai: guardian_ai_walk, dist: 8 },
18728
+ { ai: guardian_ai_walk, dist: 8 },
18729
+ { ai: guardian_ai_walk, dist: 8 },
18730
+ { ai: guardian_ai_walk, dist: 8 },
18731
+ { ai: guardian_ai_walk, dist: 8 },
18732
+ { ai: guardian_ai_walk, dist: 8 },
18733
+ { ai: guardian_ai_walk, dist: 8 },
18734
+ { ai: guardian_ai_walk, dist: 8 },
18735
+ { ai: guardian_ai_walk, dist: 8 },
18736
+ { ai: guardian_ai_walk, dist: 8, think: guardian_footstep },
18737
+ { ai: guardian_ai_walk, dist: 8 }
18738
+ ];
18739
+ guardian_move_walk = {
18740
+ firstframe: FRAME_walk13,
18741
+ lastframe: FRAME_walk19,
18742
+ frames: guardian_frames_walk,
18743
+ endfunc: null
18744
+ };
18745
+ function guardian_walk(self, context) {
18746
+ M_SetAnimation3(self, guardian_move_walk, context);
18747
+ }
18748
+ var guardian_frames_run = [
18749
+ { ai: guardian_ai_run, dist: 8 },
18750
+ { ai: guardian_ai_run, dist: 8 },
18751
+ { ai: guardian_ai_run, dist: 8 },
18752
+ { ai: guardian_ai_run, dist: 8 },
18753
+ { ai: guardian_ai_run, dist: 8 },
18754
+ { ai: guardian_ai_run, dist: 8 },
18755
+ { ai: guardian_ai_run, dist: 8 },
18756
+ { ai: guardian_ai_run, dist: 8, think: guardian_footstep },
18757
+ { ai: guardian_ai_run, dist: 8 },
18758
+ { ai: guardian_ai_run, dist: 8 },
18759
+ { ai: guardian_ai_run, dist: 8 },
18760
+ { ai: guardian_ai_run, dist: 8 },
18761
+ { ai: guardian_ai_run, dist: 8 },
18762
+ { ai: guardian_ai_run, dist: 8 },
18763
+ { ai: guardian_ai_run, dist: 8 },
18764
+ { ai: guardian_ai_run, dist: 8 },
18765
+ { ai: guardian_ai_run, dist: 8 },
18766
+ { ai: guardian_ai_run, dist: 8, think: guardian_footstep },
18767
+ { ai: guardian_ai_run, dist: 8 }
18768
+ ];
18769
+ guardian_move_run = {
18770
+ firstframe: FRAME_walk13,
18771
+ lastframe: FRAME_walk19,
18772
+ frames: guardian_frames_run,
18773
+ endfunc: null
18774
+ };
18775
+ function guardian_run(self, context) {
18776
+ M_SetAnimation3(self, guardian_move_run, context);
18777
+ }
18778
+ var guardian_frames_pain1 = Array(8).fill({ ai: guardian_ai_move, dist: 0 });
18779
+ guardian_move_pain1 = {
18780
+ firstframe: FRAME_pain1_1,
18781
+ lastframe: FRAME_pain1_8,
18782
+ frames: guardian_frames_pain1,
18783
+ endfunc: guardian_run
18784
+ };
18785
+ function guardian_pain(self, other, kick, damage) {
18786
+ if (damage <= 10) return;
18787
+ const frame = self.frame;
18788
+ if (frame >= FRAME_atk1_spin1 && frame <= FRAME_atk1_spin15) return;
18789
+ if (frame >= FRAME_atk2_fire1 && frame <= FRAME_atk2_fire4) return;
18790
+ if (frame >= FRAME_kick_in1 && frame <= FRAME_kick_in13) return;
18791
+ if (!M_ShouldReactToPain(self)) return;
18792
+ M_SetAnimation3(self, guardian_move_pain1, null);
18793
+ }
18794
+ var guardian_frames_atk1_out = [
18795
+ { ai: guardian_ai_charge, dist: 0 },
18796
+ { ai: guardian_ai_charge, dist: 0 },
18797
+ { ai: guardian_ai_charge, dist: 0 }
18798
+ ];
18799
+ guardian_atk1_out = {
18800
+ firstframe: FRAME_atk1_out1,
18801
+ lastframe: FRAME_atk1_out3,
18802
+ frames: guardian_frames_atk1_out,
18803
+ endfunc: guardian_run
18804
+ };
18805
+ function guardian_atk1_finish(self, context) {
18806
+ M_SetAnimation3(self, guardian_atk1_out, context);
18807
+ }
18808
+ function guardian_atk1_charge(self, context) {
18809
+ context.sound(self, 1, sound_charge2, 1, 1, 0);
18810
+ }
18811
+ function guardian_fire_blaster_func(self, context) {
18812
+ if (!self.enemy) return;
18813
+ const { forward, right } = angleVectors(self.angles);
18814
+ const start = addVec3(self.origin, scaleVec3(forward, 20));
18815
+ start.z += self.viewheight ? self.viewheight - 10 : 0;
18816
+ start.x += right.x * 20;
18817
+ start.y += right.y * 20;
18818
+ const target = { ...self.enemy.origin };
18819
+ target.z += self.enemy.viewheight || 0;
18820
+ target.x += (Math.random() * 2 - 1) * 5;
18821
+ target.y += (Math.random() * 2 - 1) * 5;
18822
+ target.z += (Math.random() * 2 - 1) * 5;
18823
+ const dir = normalizeVec3(subtractVec3(target, start));
18824
+ monster_fire_blaster(self, start, dir, 2, 1e3, 0, 0, context, 10 /* HYPERBLASTER */);
18825
+ }
18826
+ function guardian_fire_blaster_loop(self, context) {
18827
+ guardian_fire_blaster_func(self, context);
18828
+ if (self.enemy && self.enemy.health > 0 && self.frame === FRAME_atk1_spin12 && self.timestamp > context.timeSeconds && visible(self, self.enemy, context.trace)) {
18829
+ M_SetAnimation3(self, guardian_move_atk1_spin_loop, context);
18830
+ }
18831
+ }
18832
+ var guardian_frames_atk1_spin = [
18833
+ { ai: guardian_ai_charge, dist: 0, think: guardian_atk1_charge },
18834
+ { ai: guardian_ai_charge, dist: 0 },
18835
+ { ai: guardian_ai_charge, dist: 0 },
18836
+ { ai: guardian_ai_charge, dist: 0 },
18837
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18838
+ // 5
18839
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18840
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18841
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18842
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18843
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18844
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_func },
18845
+ { ai: guardian_ai_charge, dist: 0, think: guardian_fire_blaster_loop },
18846
+ // 12
18847
+ { ai: guardian_ai_charge, dist: 0 },
18848
+ { ai: guardian_ai_charge, dist: 0 },
18849
+ { ai: guardian_ai_charge, dist: 0 }
18850
+ ];
18851
+ guardian_move_atk1_spin = {
18852
+ firstframe: FRAME_atk1_spin1,
18853
+ lastframe: FRAME_atk1_spin15,
18854
+ frames: guardian_frames_atk1_spin,
18855
+ endfunc: guardian_atk1_finish
18856
+ };
18857
+ guardian_move_atk1_spin_loop = {
18858
+ firstframe: FRAME_atk1_spin1 + 4,
18859
+ lastframe: FRAME_atk1_spin15,
18860
+ frames: guardian_frames_atk1_spin.slice(4),
18861
+ endfunc: guardian_atk1_finish
18862
+ };
18863
+ function guardian_atk1(self, context) {
18864
+ M_SetAnimation3(self, guardian_move_atk1_spin, context);
18865
+ self.timestamp = context.timeSeconds + 0.65 + Math.random() * 1.5;
18866
+ }
18867
+ var guardian_frames_atk1_in = [
18868
+ { ai: guardian_ai_charge, dist: 0 },
18869
+ { ai: guardian_ai_charge, dist: 0 },
18870
+ { ai: guardian_ai_charge, dist: 0 }
18871
+ ];
18872
+ guardian_move_atk1_in = {
18873
+ firstframe: FRAME_atk1_in1,
18874
+ lastframe: FRAME_atk1_in3,
18875
+ frames: guardian_frames_atk1_in,
18876
+ endfunc: guardian_atk1
18877
+ };
18878
+ var guardian_frames_atk2_out = [
18879
+ { ai: guardian_ai_charge, dist: 0 },
18880
+ { ai: guardian_ai_charge, dist: 0 },
18881
+ { ai: guardian_ai_charge, dist: 0 },
18882
+ { ai: guardian_ai_charge, dist: 0 },
18883
+ { ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
18884
+ { ai: guardian_ai_charge, dist: 0 },
18885
+ { ai: guardian_ai_charge, dist: 0 }
18886
+ ];
18887
+ guardian_move_atk2_out = {
18888
+ firstframe: FRAME_atk2_out1,
18889
+ lastframe: FRAME_atk2_out7,
18890
+ frames: guardian_frames_atk2_out,
18891
+ endfunc: guardian_run
18892
+ };
18893
+ function guardian_atk2_out(self, context) {
18894
+ M_SetAnimation3(self, guardian_move_atk2_out, context);
18895
+ }
18896
+ var laser_positions = [
18897
+ { x: 125, y: -70, z: 60 },
18898
+ { x: 112, y: -62, z: 60 }
18899
+ ];
18900
+ function guardian_fire_update(laser, context) {
18901
+ const self = laser.owner;
18902
+ if (!self || !self.inUse) {
18903
+ context.free(laser);
18904
+ return;
18905
+ }
18906
+ const { forward, right } = angleVectors(self.angles);
18907
+ const offset = laser_positions[1 - (self.frame & 1)];
18908
+ const start = addVec3(self.origin, scaleVec3(forward, offset.x));
18909
+ start.z += offset.z;
18910
+ start.x += right.x * offset.y;
18911
+ start.y += right.y * offset.y;
18912
+ start.z += right.z * offset.y;
18913
+ if (!self.enemy) return;
18914
+ const target = addVec3(self.enemy.origin, self.enemy.mins);
18915
+ target.x += Math.random() * self.enemy.size.x;
18916
+ target.y += Math.random() * self.enemy.size.y;
18917
+ target.z += Math.random() * self.enemy.size.z;
18918
+ const dir = normalizeVec3(subtractVec3(target, start));
18919
+ laser.origin = start;
18920
+ laser.movedir = dir;
18921
+ context.linkentity(laser);
18922
+ }
18923
+ function guardian_laser_fire(self, context) {
18924
+ context.sound(self, 1, sound_laser, 1, 1, 0);
18925
+ monster_fire_dabeam(self, 25, self.frame % 2 !== 0, guardian_fire_update, context);
18926
+ }
18927
+ var guardian_frames_atk2_fire = [
18928
+ { ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire },
18929
+ { ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire },
18930
+ { ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire },
18931
+ { ai: guardian_ai_charge, dist: 0, think: guardian_laser_fire }
18932
+ ];
18933
+ guardian_move_atk2_fire = {
18934
+ firstframe: FRAME_atk2_fire1,
18935
+ lastframe: FRAME_atk2_fire4,
18936
+ frames: guardian_frames_atk2_fire,
18937
+ endfunc: guardian_atk2_out
18938
+ };
18939
+ function guardian_atk2(self, context) {
18940
+ M_SetAnimation3(self, guardian_move_atk2_fire, context);
18941
+ }
18942
+ var guardian_frames_atk2_in = [
18943
+ { ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
18944
+ { ai: guardian_ai_charge, dist: 0 },
18945
+ { ai: guardian_ai_charge, dist: 0 },
18946
+ { ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
18947
+ { ai: guardian_ai_charge, dist: 0 },
18948
+ { ai: guardian_ai_charge, dist: 0 },
18949
+ { ai: guardian_ai_charge, dist: 0 },
18950
+ { ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
18951
+ { ai: guardian_ai_charge, dist: 0 },
18952
+ { ai: guardian_ai_charge, dist: 0 },
18953
+ { ai: guardian_ai_charge, dist: 0 },
18954
+ { ai: guardian_ai_charge, dist: 0 }
18955
+ ];
18956
+ guardian_move_atk2_in = {
18957
+ firstframe: FRAME_atk2_in1,
18958
+ lastframe: FRAME_atk2_in12,
18959
+ frames: guardian_frames_atk2_in,
18960
+ endfunc: guardian_atk2
18961
+ };
18962
+ function guardian_kick(self, context) {
18963
+ const aim = { x: MELEE_DISTANCE6, y: 0, z: -80 };
18964
+ if (!monster_fire_hit(self, aim, 85, 700, context)) {
18965
+ self.monsterinfo.melee_debounce_time = context.timeSeconds + 1;
18966
+ }
18967
+ }
18968
+ var guardian_frames_kick = [
18969
+ { ai: guardian_ai_charge, dist: 0 },
18970
+ { ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
18971
+ { ai: guardian_ai_charge, dist: 0 },
18972
+ { ai: guardian_ai_charge, dist: 0 },
18973
+ { ai: guardian_ai_charge, dist: 0 },
18974
+ { ai: guardian_ai_charge, dist: 0, think: guardian_kick },
18975
+ { ai: guardian_ai_charge, dist: 0 },
18976
+ { ai: guardian_ai_charge, dist: 0 },
18977
+ { ai: guardian_ai_charge, dist: 0 },
18978
+ { ai: guardian_ai_charge, dist: 0 },
18979
+ { ai: guardian_ai_charge, dist: 0, think: guardian_footstep },
18980
+ { ai: guardian_ai_charge, dist: 0 },
18981
+ { ai: guardian_ai_charge, dist: 0 }
18982
+ ];
18983
+ guardian_move_kick = {
18984
+ firstframe: FRAME_kick_in1,
18985
+ lastframe: FRAME_kick_in13,
18986
+ frames: guardian_frames_kick,
18987
+ endfunc: guardian_run
18988
+ };
18989
+ function guardian_attack(self, context) {
18990
+ if (!self.enemy || !self.enemy.inUse) return;
18991
+ const r = rangeTo(self, self.enemy);
18992
+ if (r > 500) {
18993
+ M_SetAnimation3(self, guardian_move_atk2_in, context);
18994
+ } else if (context.timeSeconds > (self.monsterinfo.melee_debounce_time ?? 0) && r < 120) {
18995
+ M_SetAnimation3(self, guardian_move_kick, context);
18996
+ } else {
18997
+ M_SetAnimation3(self, guardian_move_atk1_in, context);
18998
+ }
18999
+ }
19000
+ function guardian_explode(self, context) {
19001
+ const org = {
19002
+ x: self.origin.x + self.mins.x + Math.random() * self.size.x,
19003
+ y: self.origin.y + self.mins.y + Math.random() * self.size.y,
19004
+ z: self.origin.z + self.mins.z + Math.random() * self.size.z
19005
+ };
19006
+ context.multicast(self.origin, 0 /* All */, ServerCommand.temp_entity, TempEntity.EXPLOSION1_BIG, org);
19007
+ }
19008
+ function guardian_dead(self, context) {
19009
+ for (let i = 0; i < 3; i++) {
19010
+ guardian_explode(self, context);
19011
+ }
19012
+ throwGibs(context, self.origin, 250, GIB_METALLIC);
19013
+ self.nextthink = -1;
19014
+ }
19015
+ function BossExplode(self, context) {
19016
+ guardian_explode(self, context);
19017
+ }
19018
+ var guardian_frames_death1 = [
19019
+ { ai: guardian_ai_move, dist: 0, think: BossExplode },
19020
+ { ai: guardian_ai_move, dist: 0 },
19021
+ { ai: guardian_ai_move, dist: 0 },
19022
+ { ai: guardian_ai_move, dist: 0 },
19023
+ { ai: guardian_ai_move, dist: 0 },
19024
+ { ai: guardian_ai_move, dist: 0 },
19025
+ { ai: guardian_ai_move, dist: 0 },
19026
+ { ai: guardian_ai_move, dist: 0 },
19027
+ { ai: guardian_ai_move, dist: 0 },
19028
+ { ai: guardian_ai_move, dist: 0 },
19029
+ { ai: guardian_ai_move, dist: 0 },
19030
+ { ai: guardian_ai_move, dist: 0 },
19031
+ { ai: guardian_ai_move, dist: 0 },
19032
+ { ai: guardian_ai_move, dist: 0 },
19033
+ { ai: guardian_ai_move, dist: 0 },
19034
+ { ai: guardian_ai_move, dist: 0 },
19035
+ { ai: guardian_ai_move, dist: 0 },
19036
+ { ai: guardian_ai_move, dist: 0 },
19037
+ { ai: guardian_ai_move, dist: 0 },
19038
+ { ai: guardian_ai_move, dist: 0 },
19039
+ { ai: guardian_ai_move, dist: 0 },
19040
+ { ai: guardian_ai_move, dist: 0 },
19041
+ { ai: guardian_ai_move, dist: 0 },
19042
+ { ai: guardian_ai_move, dist: 0 },
19043
+ { ai: guardian_ai_move, dist: 0 },
19044
+ { ai: guardian_ai_move, dist: 0 }
19045
+ ];
19046
+ guardian_move_death = {
19047
+ firstframe: FRAME_death12,
19048
+ lastframe: FRAME_death26,
19049
+ frames: guardian_frames_death1,
19050
+ endfunc: guardian_dead
19051
+ };
19052
+ function SP_monster_guardian(self, context) {
19053
+ if (!M_AllowSpawn(self, context.entities)) {
19054
+ context.entities.free(self);
19055
+ return;
19056
+ }
19057
+ self.classname = "monster_guardian";
19058
+ self.model = "models/monsters/guardian/tris.md2";
19059
+ self.mins = { x: -96, y: -96, z: -66 };
19060
+ self.maxs = { x: 96, y: 96, z: 62 };
19061
+ self.movetype = 5 /* Step */;
19062
+ self.solid = 2 /* BoundingBox */;
19063
+ self.health = 2500;
19064
+ self.mass = 850;
19065
+ self.pain = (ent, other, kick, damage) => {
19066
+ guardian_pain(ent, other, kick, damage);
19067
+ };
19068
+ self.die = (ent, inflictor, attacker, damage, point, mod) => {
19069
+ ent.deadflag = 2 /* Dead */;
19070
+ ent.takedamage = true;
19071
+ if (ent.health < -200) {
19072
+ guardian_dead(ent, context.entities);
19073
+ context.entities.free(ent);
19074
+ return;
19075
+ }
19076
+ M_SetAnimation3(ent, guardian_move_death, context.entities);
19077
+ };
19078
+ self.monsterinfo.stand = guardian_stand;
19079
+ self.monsterinfo.walk = guardian_walk;
19080
+ self.monsterinfo.run = guardian_run;
19081
+ self.monsterinfo.attack = guardian_attack;
19082
+ self.monsterinfo.melee_debounce_time = 0;
19083
+ context.entities.linkentity(self);
19084
+ M_SetAnimation3(self, guardian_move_stand, context.entities);
19085
+ self.think = monster_think;
19086
+ self.nextthink = context.entities.timeSeconds + MONSTER_TICK29;
19087
+ }
19088
+ function registerGuardianSpawns(registry) {
19089
+ registry.register("monster_guardian", SP_monster_guardian);
19090
+ }
19091
+
18647
19092
  // src/entities/monsters/index.ts
18648
19093
  function registerMonsterSpawns2(registry) {
18649
19094
  registerMonsterSpawns(registry);
@@ -18674,6 +19119,7 @@ function registerMonsterSpawns2(registry) {
18674
19119
  registerFixbotSpawns(registry);
18675
19120
  registerArachnidSpawns(registry);
18676
19121
  registerGunCommanderSpawns(registry);
19122
+ registerGuardianSpawns(registry);
18677
19123
  }
18678
19124
 
18679
19125
  // src/entities/worldspawn.ts
@@ -20616,7 +21062,7 @@ var WEAPONS = {
20616
21062
  };
20617
21063
 
20618
21064
  // src/index.ts
20619
- var ZERO_VEC38 = { x: 0, y: 0, z: 0 };
21065
+ var ZERO_VEC39 = { x: 0, y: 0, z: 0 };
20620
21066
  function createGame(imports, engine, options) {
20621
21067
  const gravity = options.gravity;
20622
21068
  const deathmatch = options.deathmatch ?? false;
@@ -20695,8 +21141,8 @@ function createGame(imports, engine, options) {
20695
21141
  };
20696
21142
  entities.runFrame();
20697
21143
  });
20698
- let origin = { ...ZERO_VEC38 };
20699
- let velocity = { ...ZERO_VEC38 };
21144
+ let origin = { ...ZERO_VEC39 };
21145
+ let velocity = { ...ZERO_VEC39 };
20700
21146
  const calculateBlend = (player, time) => {
20701
21147
  const blend = [0, 0, 0, 0];
20702
21148
  if (!player || !player.client) return blend;
@@ -20778,10 +21224,10 @@ function createGame(imports, engine, options) {
20778
21224
  // TODO
20779
21225
  damageIndicators: [],
20780
21226
  stats: player ? populatePlayerStats(player, levelClock.current.timeSeconds) : [],
20781
- kick_angles: player?.client?.kick_angles ?? ZERO_VEC38,
20782
- kick_origin: player?.client?.kick_origin ?? ZERO_VEC38,
20783
- gunoffset: ZERO_VEC38,
20784
- gunangles: ZERO_VEC38,
21227
+ kick_angles: player?.client?.kick_angles ?? ZERO_VEC39,
21228
+ kick_origin: player?.client?.kick_origin ?? ZERO_VEC39,
21229
+ gunoffset: ZERO_VEC39,
21230
+ gunangles: ZERO_VEC39,
20785
21231
  gunindex: 0,
20786
21232
  gun_frame: player?.client?.gun_frame ?? 0,
20787
21233
  rdflags: player?.client?.rdflags ?? 0,
@@ -20795,8 +21241,8 @@ function createGame(imports, engine, options) {
20795
21241
  const resetState = (startTimeMs) => {
20796
21242
  frameLoop.reset(startTimeMs);
20797
21243
  levelClock.start(startTimeMs);
20798
- origin = { ...ZERO_VEC38 };
20799
- velocity = { ...ZERO_VEC38 };
21244
+ origin = { ...ZERO_VEC39 };
21245
+ velocity = { ...ZERO_VEC39 };
20800
21246
  entities.beginFrame(startTimeMs / 1e3);
20801
21247
  entities.runFrame();
20802
21248
  };
@@ -20824,10 +21270,10 @@ function createGame(imports, engine, options) {
20824
21270
  blend: [0, 0, 0, 0],
20825
21271
  // Stubs
20826
21272
  stats: populatePlayerStats(player, levelClock.current.timeSeconds),
20827
- kick_angles: ZERO_VEC38,
20828
- kick_origin: ZERO_VEC38,
20829
- gunoffset: ZERO_VEC38,
20830
- gunangles: ZERO_VEC38,
21273
+ kick_angles: ZERO_VEC39,
21274
+ kick_origin: ZERO_VEC39,
21275
+ gunoffset: ZERO_VEC39,
21276
+ gunangles: ZERO_VEC39,
20831
21277
  gunindex: 0,
20832
21278
  pm_type: 0,
20833
21279
  pm_time: 0,
@@ -20963,8 +21409,8 @@ function createGame(imports, engine, options) {
20963
21409
  rng,
20964
21410
  player: player?.client?.inventory
20965
21411
  });
20966
- origin = player ? { ...player.origin } : { ...ZERO_VEC38 };
20967
- velocity = player ? { ...player.velocity } : { ...ZERO_VEC38 };
21412
+ origin = player ? { ...player.origin } : { ...ZERO_VEC39 };
21413
+ velocity = player ? { ...player.velocity } : { ...ZERO_VEC39 };
20968
21414
  frameLoop.reset(save.level.timeSeconds * 1e3);
20969
21415
  }
20970
21416
  };