123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- /* Copyright (C) 1996-2022 id Software LLC
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- See file, 'COPYING', for details.
- */
- // wrath.qc
- $skin wrthskin
- $frame wrthfrme
- $frame wrthwk01 wrthwk02 wrthwk03 wrthwk04 wrthwk05 wrthwk06
- $frame wrthwk07 wrthwk08 wrthwk09 wrthwk10 wrthwk11 wrthwk12
- $frame wrthaa01 wrthaa02 wrthaa03 wrthaa04 wrthaa05 wrthaa06 wrthaa07
- $frame wrthaa08 wrthaa09 wrthaa10 wrthaa11 wrthaa12 wrthaa13 wrthaa14
- $frame wrthab01 wrthab02 wrthab03 wrthab04 wrthab05 wrthab06 wrthab07
- $frame wrthab08 wrthab09 wrthab10 wrthab11 wrthab12 wrthab13
- $frame wrthac01 wrthac02 wrthac03 wrthac04 wrthac05
- $frame wrthac06 wrthac07 wrthac08 wrthac09 wrthac10
- $frame wrthac11 wrthac12 wrthac13 wrthac14 wrthac15
- $frame wrthpa01 wrthpa02 wrthpa03 wrthpa04 wrthpa05 wrthpa06
- $frame wrthpb01 wrthpb02 wrthpb03 wrthpb04 wrthpb05 wrthpb06
- $frame wrthpb07 wrthpb08 wrthpb09 wrthpb10 wrthpb11
- $frame wrthdt01 wrthdt02 wrthdt03 wrthdt04 wrthdt05
- $frame wrthdt06 wrthdt07 wrthdt08 wrthdt09 wrthdt10
- $frame wrthdt11 wrthdt12 wrthdt13 wrthdt14 wrthdt15
- void() WrathMissileTouch;
- void() WrathHome;
- void(float AttackNumber) WrathMissile;
- void() wrath_stand1 =[ $wrthwk01, wrath_stand1 ] { ai_stand();};
- void() wrath_walk01 =[ $wrthwk01, wrath_walk02 ] { ai_walk(8); };
- void() wrath_walk02 =[ $wrthwk02, wrath_walk03 ] { ai_walk(8); };
- void() wrath_walk03 =[ $wrthwk03, wrath_walk04 ] { ai_walk(8); };
- void() wrath_walk04 =[ $wrthwk04, wrath_walk05 ] { ai_walk(8); };
- void() wrath_walk05 =[ $wrthwk05, wrath_walk06 ] { ai_walk(8); };
- void() wrath_walk06 =[ $wrthwk06, wrath_walk07 ] { ai_walk(8); };
- void() wrath_walk07 =[ $wrthwk07, wrath_walk08 ] { ai_walk(8); };
- void() wrath_walk08 =[ $wrthwk08, wrath_walk09 ] { ai_walk(8); };
- void() wrath_walk09 =[ $wrthwk09, wrath_walk10 ] { ai_walk(8); };
- void() wrath_walk10 =[ $wrthwk10, wrath_walk11 ] { ai_walk(8); };
- void() wrath_walk11 =[ $wrthwk11, wrath_walk12 ] { ai_walk(8); };
- void() wrath_walk12 =[ $wrthwk12, wrath_walk01 ] { ai_walk(8); };
- void() wrath_run01 =[ $wrthwk01, wrath_run02 ] { ai_run(12); };
- void() wrath_run02 =[ $wrthwk02, wrath_run03 ] { ai_run(12); };
- void() wrath_run03 =[ $wrthwk03, wrath_run04 ] { ai_run(12); };
- void() wrath_run04 =[ $wrthwk04, wrath_run05 ] { ai_run(12); };
- void() wrath_run05 =[ $wrthwk05, wrath_run06 ] { ai_run(12); };
- void() wrath_run06 =[ $wrthwk06, wrath_run07 ] { ai_run(12); };
- void() wrath_run07 =[ $wrthwk07, wrath_run08 ] { ai_run(12); };
- void() wrath_run08 =[ $wrthwk08, wrath_run09 ] { ai_run(12); };
- void() wrath_run09 =[ $wrthwk09, wrath_run10 ] { ai_run(12); };
- void() wrath_run10 =[ $wrthwk10, wrath_run11 ] { ai_run(12); };
- void() wrath_run11 =[ $wrthwk11, wrath_run12 ] { ai_run(12); };
- void() wrath_run12 =[ $wrthwk12, wrath_run01 ] { ai_run(12); };
- void() wrath_at_a01 =[ $wrthaa01, wrath_at_a02 ] {ai_charge(12);};
- void() wrath_at_a02 =[ $wrthaa02, wrath_at_a03 ] {ai_charge(12);};
- void() wrath_at_a03 =[ $wrthaa03, wrath_at_a04 ] {ai_charge(12);};
- void() wrath_at_a04 =[ $wrthaa04, wrath_at_a05 ] {ai_charge(12);};
- void() wrath_at_a05 =[ $wrthaa05, wrath_at_a06 ] {ai_charge(12);};
- void() wrath_at_a06 =[ $wrthaa06, wrath_at_a07 ] {ai_charge(12);};
- void() wrath_at_a07 =[ $wrthaa07, wrath_at_a08 ] {ai_charge(12);};
- void() wrath_at_a08 =[ $wrthaa08, wrath_at_a09 ] {ai_charge(12);};
- void() wrath_at_a09 =[ $wrthaa09, wrath_at_a10 ] {ai_charge(12);};
- void() wrath_at_a10 =[ $wrthaa10, wrath_at_a11 ] {ai_charge(12);};
- void() wrath_at_a11 =[ $wrthaa11, wrath_at_a12 ] {WrathMissile(1);};
- void() wrath_at_a12 =[ $wrthaa12, wrath_at_a13 ] {ai_charge(12);};
- void() wrath_at_a13 =[ $wrthaa13, wrath_at_a14 ] {ai_charge(12);};
- void() wrath_at_a14 =[ $wrthaa14, wrath_run01 ] {ai_charge(12);};
- void() wrath_at_b01 =[ $wrthab01, wrath_at_b02 ] {ai_charge(12);};
- void() wrath_at_b02 =[ $wrthab02, wrath_at_b03 ] {ai_charge(12);};
- void() wrath_at_b03 =[ $wrthab03, wrath_at_b04 ] {ai_charge(12);};
- void() wrath_at_b04 =[ $wrthab04, wrath_at_b05 ] {ai_charge(12);};
- void() wrath_at_b05 =[ $wrthab05, wrath_at_b06 ] {ai_charge(12);};
- void() wrath_at_b06 =[ $wrthab06, wrath_at_b07 ] {WrathMissile(2);};
- void() wrath_at_b07 =[ $wrthab07, wrath_at_b08 ] {ai_charge(12);};
- void() wrath_at_b08 =[ $wrthab08, wrath_at_b09 ] {ai_charge(12);};
- void() wrath_at_b09 =[ $wrthab09, wrath_at_b10 ] {ai_charge(12);};
- void() wrath_at_b10 =[ $wrthab10, wrath_at_b11 ] {ai_charge(12);};
- void() wrath_at_b11 =[ $wrthab11, wrath_at_b12 ] {ai_charge(12);};
- void() wrath_at_b12 =[ $wrthab12, wrath_at_b13 ] {ai_charge(12);};
- void() wrath_at_b13 =[ $wrthab13, wrath_run01 ] {ai_charge(12);};
- void() wrath_at_c01 =[ $wrthac01, wrath_at_c02 ] {ai_charge(12);};
- void() wrath_at_c02 =[ $wrthac02, wrath_at_c03 ] {ai_charge(12);};
- void() wrath_at_c03 =[ $wrthac03, wrath_at_c04 ] {ai_charge(12);};
- void() wrath_at_c04 =[ $wrthac04, wrath_at_c05 ] {ai_charge(12);};
- void() wrath_at_c05 =[ $wrthac05, wrath_at_c06 ] {ai_charge(12);};
- void() wrath_at_c06 =[ $wrthac06, wrath_at_c07 ] {ai_charge(12);};
- void() wrath_at_c07 =[ $wrthac07, wrath_at_c08 ] {WrathMissile(3);};
- void() wrath_at_c08 =[ $wrthac08, wrath_at_c09 ] {ai_charge(12);};
- void() wrath_at_c09 =[ $wrthac09, wrath_at_c10 ] {ai_charge(12);};
- void() wrath_at_c10 =[ $wrthac10, wrath_at_c11 ] {ai_charge(12);};
- void() wrath_at_c11 =[ $wrthac11, wrath_at_c12 ] {ai_charge(12);};
- void() wrath_at_c12 =[ $wrthac12, wrath_at_c13 ] {ai_charge(12);};
- void() wrath_at_c13 =[ $wrthac13, wrath_at_c14 ] {ai_charge(12);};
- void() wrath_at_c14 =[ $wrthac14, wrath_at_c15 ] {ai_charge(12);};
- void() wrath_at_c15 =[ $wrthac15, wrath_run01 ] {ai_charge(12);};
- void() wrath_attack =
- {
- local float r;
- r = random();
- if (r < 0.25)
- {
- wrath_at_a01 ();
- }
- else if (r < 0.65)
- {
- wrath_at_b01 ();
- }
- else
- {
- wrath_at_c01 ();
- }
- sound (self, CHAN_VOICE, "wrath/watt.wav", 1, ATTN_NORM);
- };
- void() wrath_pn_a01 =[ $wrthpa01, wrath_pn_a02 ] {};
- void() wrath_pn_a02 =[ $wrthpa02, wrath_pn_a03 ] {};
- void() wrath_pn_a03 =[ $wrthpa03, wrath_pn_a04 ] {};
- void() wrath_pn_a04 =[ $wrthpa04, wrath_pn_a05 ] {};
- void() wrath_pn_a05 =[ $wrthpa05, wrath_pn_a06 ] {};
- void() wrath_pn_a06 =[ $wrthpa06, wrath_run01 ] {};
- void() wrath_pn_b01 =[ $wrthpb01, wrath_pn_b02 ] {};
- void() wrath_pn_b02 =[ $wrthpb02, wrath_pn_b03 ] {};
- void() wrath_pn_b03 =[ $wrthpb03, wrath_pn_b04 ] {};
- void() wrath_pn_b04 =[ $wrthpb04, wrath_pn_b05 ] {};
- void() wrath_pn_b05 =[ $wrthpb05, wrath_pn_b06 ] {};
- void() wrath_pn_b06 =[ $wrthpb06, wrath_pn_b07 ] {};
- void() wrath_pn_b07 =[ $wrthpb07, wrath_pn_b08 ] {};
- void() wrath_pn_b08 =[ $wrthpb08, wrath_pn_b09 ] {};
- void() wrath_pn_b09 =[ $wrthpb09, wrath_pn_b10 ] {};
- void() wrath_pn_b10 =[ $wrthpb10, wrath_pn_b11 ] {};
- void() wrath_pn_b11 =[ $wrthpb11, wrath_run01 ] {};
- void() wrath_pain =
- {
- local float r;
- if (self.pain_finished > time)
- return;
- r = random();
-
- if (r > 0.1)
- {
- self.pain_finished = time + 0.5;
- return;
- }
-
- if (r < 0.07)
- wrath_pn_a01 ();
- else
- wrath_pn_b01 ();
- self.pain_finished = time + 3;
- sound (self, CHAN_VOICE, "wrath/wpain.wav", 1, ATTN_NORM);
- };
- void() wrath_die02 =[ $wrthdt02, wrath_die03 ]
- { sound (self, CHAN_VOICE, "wrath/wdthc.wav", 1, ATTN_NORM); };
- void() wrath_die03 =[ $wrthdt03, wrath_die04 ] {};
- void() wrath_die04 =[ $wrthdt04, wrath_die05 ] {};
- void() wrath_die05 =[ $wrthdt05, wrath_die07 ] {};
- void() wrath_die07 =[ $wrthdt07, wrath_die09 ] {};
- void() wrath_die09 =[ $wrthdt09, wrath_die11 ] {};
- void() wrath_die11 =[ $wrthdt11, wrath_die13 ] {};
- void() wrath_die13 =[ $wrthdt13, wrath_die15 ] {};
- void() wrath_die15 =[ $wrthdt15, wrath_die15 ]
- {
- ThrowGib ("progs/wrthgib1.mdl", self.health);
- ThrowGib ("progs/wrthgib2.mdl", self.health);
- ThrowGib ("progs/wrthgib3.mdl", self.health);
- T_RadiusDamage (self, self, 80, world);
- self.origin = self.origin + '0 0 24';
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, TE_EXPLOSION2);
- WriteCoord (MSG_BROADCAST, self.origin_x);
- WriteCoord (MSG_BROADCAST, self.origin_y);
- WriteCoord (MSG_BROADCAST, self.origin_z);
- WriteByte (MSG_BROADCAST, 0);
- WriteByte (MSG_BROADCAST, 4);
- remove (self);
- };
- /*QUAKED monster_wrath (1 0 0) (-16 -16 -24) (16 16 32) Ambush
- */
- void() monster_wrath =
- {
- if (deathmatch)
- {
- remove(self);
- return;
- }
- precache_model ("progs/wrath.mdl");
- precache_model ("progs/w_ball.mdl");
- precache_model ("progs/wrthgib1.mdl");
- precache_model ("progs/wrthgib2.mdl");
- precache_model ("progs/wrthgib3.mdl");
-
- precache_sound ("wrath/wsee.wav");
- precache_sound ("wrath/watt.wav");
- precache_sound ("wrath/wpain.wav");
- precache_sound ("wrath/wdthc.wav");
-
- self.solid = SOLID_SLIDEBOX;
- self.movetype = MOVETYPE_STEP;
-
- setmodel (self, "progs/wrath.mdl");
- setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
- self.health = 400;
- self.yaw_speed = 35;
-
- self.th_stand = wrath_stand1;
- self.th_walk = wrath_walk01;
- self.th_run = wrath_run01;
- self.th_missile = wrath_attack;
- self.th_pain = wrath_pain;
- self.th_die = wrath_die02;
- flymonster_start ();
- };
- /*
- ================
- WrathMissile
- ================
- */
- void(float AttackNumber) WrathMissile =
- {
- local entity missile;
- local vector dir, org;
- local float dist, flytime;
- dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
- dist = vlen (self.enemy.origin - self.origin);
- flytime = dist * 0.002;
- if (flytime < 0.1)
- flytime = 0.1;
- self.effects = self.effects | EF_MUZZLEFLASH;
- makevectors (self.angles);
- missile = spawn ();
- missile.owner = self;
- missile.solid = SOLID_BBOX;
- missile.movetype = MOVETYPE_FLYMISSILE;
- setmodel (missile, "progs/w_ball.mdl");
- setsize (missile, '0 0 0', '0 0 0');
- if ( AttackNumber == 1)
- {
- org = self.origin + v_forward*20 + v_up*12; // 20 // 44;
- }
- else if ( AttackNumber == 2)
- {
- org = self.origin + v_forward*18 + v_up*10; // 18 // 42;
- }
- else if ( AttackNumber == 3)
- {
- org = self.origin + v_forward*12 + v_up*12 + v_right*20;
- // up20
- }
- else if ( AttackNumber == 4)
- {
- org = self.origin + v_forward*20 + v_up*16;
- }
- setorigin ( missile, org );
- missile.velocity = dir * 400;
- missile.avelocity = '300 300 300';
- missile.enemy = self.enemy;
- missile.touch = WrathMissileTouch;
- missile.nextthink = time + 0.1;
- missile.think = WrathHome;
-
- self.attack_finished = time + 2;
- };
- void() WrathHome =
- {
- if (self.enemy.health < 1)
- {
- remove(self);
- return;
- }
- if (skill == 3)
- ai_track (self.enemy, 550);
- else
- ai_track (self.enemy, 400);
- self.nextthink = time + 0.1;
- self.think = WrathHome;
- };
- void() WrathMissileTouch =
- {
- if (other == self.owner ||
- other.classname == "monster_wrath" ||
- other.classname == "monster_super_wrath")
- {
- remove(self);
- return; // don't explode on any wraths
- }
- if (other.classname == "monster_zombie")
- T_Damage (other, self, self, 110);
-
- T_RadiusDamage (self, self.owner, 20, world);
- sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, TE_EXPLOSION);
- WriteCoord (MSG_BROADCAST, self.origin_x);
- WriteCoord (MSG_BROADCAST, self.origin_y);
- WriteCoord (MSG_BROADCAST, self.origin_z);
- self.velocity = '0 0 0';
- self.touch = SUB_Null;
- setmodel (self, "progs/s_explod.spr");
- self.solid = SOLID_NOT;
- s_explode1 ();
- };
|