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
|
@@ -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__ */ ((
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
return
|
|
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
|
|
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 = { ...
|
|
20699
|
-
let velocity = { ...
|
|
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 ??
|
|
20782
|
-
kick_origin: player?.client?.kick_origin ??
|
|
20783
|
-
gunoffset:
|
|
20784
|
-
gunangles:
|
|
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 = { ...
|
|
20799
|
-
velocity = { ...
|
|
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:
|
|
20828
|
-
kick_origin:
|
|
20829
|
-
gunoffset:
|
|
20830
|
-
gunangles:
|
|
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 } : { ...
|
|
20967
|
-
velocity = player ? { ...player.velocity } : { ...
|
|
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
|
};
|