From 6efc0d6bde0222cda31afce2d9774b5993bef6ed Mon Sep 17 00:00:00 2001 From: Magnus Date: Sun, 1 Jan 2006 22:35:59 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1753 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- quakec/fallout2/fish.qc | 181 +++++++++++ quakec/fallout2/hknight.qc | 440 ++++++++++++++++++++++++++ quakec/fallout2/mod_menus.qc | 187 +++++++++++ quakec/fallout2/mod_other.qc | 232 ++++++++++++++ quakec/fallout2/models.qc | 585 +++++++++++++++++++++++++++++++++++ quakec/fallout2/name.qc | 198 ++++++++++++ quakec/fallout2/shalrath.qc | 233 ++++++++++++++ quakec/fallout2/spectate.qc | 84 +++++ quakec/fallout2/sprites.qc | 26 ++ 9 files changed, 2166 insertions(+) create mode 100644 quakec/fallout2/fish.qc create mode 100644 quakec/fallout2/hknight.qc create mode 100644 quakec/fallout2/mod_menus.qc create mode 100644 quakec/fallout2/mod_other.qc create mode 100644 quakec/fallout2/models.qc create mode 100644 quakec/fallout2/name.qc create mode 100644 quakec/fallout2/shalrath.qc create mode 100644 quakec/fallout2/spectate.qc create mode 100644 quakec/fallout2/sprites.qc diff --git a/quakec/fallout2/fish.qc b/quakec/fallout2/fish.qc new file mode 100644 index 000000000..3b7cfb2ae --- /dev/null +++ b/quakec/fallout2/fish.qc @@ -0,0 +1,181 @@ +$cd id1/models/fish +$origin 0 0 24 +$base base +$skin skin + +$frame attack1 attack2 attack3 attack4 attack5 attack6 +$frame attack7 attack8 attack9 attack10 attack11 attack12 attack13 +$frame attack14 attack15 attack16 attack17 attack18 + +$frame death1 death2 death3 death4 death5 death6 death7 +$frame death8 death9 death10 death11 death12 death13 death14 death15 +$frame death16 death17 death18 death19 death20 death21 + +$frame swim1 swim2 swim3 swim4 swim5 swim6 swim7 swim8 +$frame swim9 swim10 swim11 swim12 swim13 swim14 swim15 swim16 swim17 +$frame swim18 + +$frame pain1 pain2 pain3 pain4 pain5 pain6 pain7 pain8 +$frame pain9 + +void() swimmonster_start; + +void() f_stand1 =[ $swim1, f_stand2 ] {ai_stand();}; +void() f_stand2 =[ $swim2, f_stand3 ] {ai_stand();}; +void() f_stand3 =[ $swim3, f_stand4 ] {ai_stand();}; +void() f_stand4 =[ $swim4, f_stand5 ] {ai_stand();}; +void() f_stand5 =[ $swim5, f_stand6 ] {ai_stand();}; +void() f_stand6 =[ $swim6, f_stand7 ] {ai_stand();}; +void() f_stand7 =[ $swim7, f_stand8 ] {ai_stand();}; +void() f_stand8 =[ $swim8, f_stand9 ] {ai_stand();}; +void() f_stand9 =[ $swim9, f_stand10 ] {ai_stand();}; +void() f_stand10 =[ $swim10, f_stand11 ] {ai_stand();}; +void() f_stand11 =[ $swim11, f_stand12 ] {ai_stand();}; +void() f_stand12 =[ $swim12, f_stand13 ] {ai_stand();}; +void() f_stand13 =[ $swim13, f_stand14 ] {ai_stand();}; +void() f_stand14 =[ $swim14, f_stand15 ] {ai_stand();}; +void() f_stand15 =[ $swim15, f_stand16 ] {ai_stand();}; +void() f_stand16 =[ $swim16, f_stand17 ] {ai_stand();}; +void() f_stand17 =[ $swim17, f_stand18 ] {ai_stand();}; +void() f_stand18 =[ $swim18, f_stand1 ] {ai_stand();}; + +void() f_walk1 =[ $swim1, f_walk2 ] {ai_walk(8);}; +void() f_walk2 =[ $swim2, f_walk3 ] {ai_walk(8);}; +void() f_walk3 =[ $swim3, f_walk4 ] {ai_walk(8);}; +void() f_walk4 =[ $swim4, f_walk5 ] {ai_walk(8);}; +void() f_walk5 =[ $swim5, f_walk6 ] {ai_walk(8);}; +void() f_walk6 =[ $swim6, f_walk7 ] {ai_walk(8);}; +void() f_walk7 =[ $swim7, f_walk8 ] {ai_walk(8);}; +void() f_walk8 =[ $swim8, f_walk9 ] {ai_walk(8);}; +void() f_walk9 =[ $swim9, f_walk10 ] {ai_walk(8);}; +void() f_walk10 =[ $swim10, f_walk11 ] {ai_walk(8);}; +void() f_walk11 =[ $swim11, f_walk12 ] {ai_walk(8);}; +void() f_walk12 =[ $swim12, f_walk13 ] {ai_walk(8);}; +void() f_walk13 =[ $swim13, f_walk14 ] {ai_walk(8);}; +void() f_walk14 =[ $swim14, f_walk15 ] {ai_walk(8);}; +void() f_walk15 =[ $swim15, f_walk16 ] {ai_walk(8);}; +void() f_walk16 =[ $swim16, f_walk17 ] {ai_walk(8);}; +void() f_walk17 =[ $swim17, f_walk18 ] {ai_walk(8);}; +void() f_walk18 =[ $swim18, f_walk1 ] {ai_walk(8);}; + +void() f_run1 =[ $swim1, f_run2 ] {ai_run(12); + if (random() < 0.5) + sound (self, CHAN_VOICE, "fish/idle.wav", 1, ATTN_NORM); +}; +void() f_run2 =[ $swim3, f_run3 ] {ai_run(12);}; +void() f_run3 =[ $swim5, f_run4 ] {ai_run(12);}; +void() f_run4 =[ $swim7, f_run5 ] {ai_run(12);}; +void() f_run5 =[ $swim9, f_run6 ] {ai_run(12);}; +void() f_run6 =[ $swim11, f_run7 ] {ai_run(12);}; +void() f_run7 =[ $swim13, f_run8 ] {ai_run(12);}; +void() f_run8 =[ $swim15, f_run9 ] {ai_run(12);}; +void() f_run9 =[ $swim17, f_run1 ] {ai_run(12);}; + +void() fish_melee = +{ + local vector delta; + local float ldmg; + + if (!self.enemy) + return; // removed before stroke + + delta = self.enemy.origin - self.origin; + + if (vlen(delta) > 60) + return; + + sound (self, CHAN_VOICE, "fish/bite.wav", 1, ATTN_NORM); + ldmg = (random() + random()) * 3; + T_Damage (self.enemy, self, self, ldmg); +}; + +void() f_attack1 =[ $attack1, f_attack2 ] {ai_charge(10);}; +void() f_attack2 =[ $attack2, f_attack3 ] {ai_charge(10);}; +void() f_attack3 =[ $attack3, f_attack4 ] {fish_melee();}; +void() f_attack4 =[ $attack4, f_attack5 ] {ai_charge(10);}; +void() f_attack5 =[ $attack5, f_attack6 ] {ai_charge(10);}; +void() f_attack6 =[ $attack6, f_attack7 ] {ai_charge(10);}; +void() f_attack7 =[ $attack7, f_attack8 ] {ai_charge(10);}; +void() f_attack8 =[ $attack8, f_attack9 ] {ai_charge(10);}; +void() f_attack9 =[ $attack9, f_attack10] {fish_melee();}; +void() f_attack10 =[ $attack10, f_attack11] {ai_charge(10);}; +void() f_attack11 =[ $attack11, f_attack12] {ai_charge(10);}; +void() f_attack12 =[ $attack12, f_attack13] {ai_charge(10);}; +void() f_attack13 =[ $attack13, f_attack14] {ai_charge(10);}; +void() f_attack14 =[ $attack14, f_attack15] {ai_charge(10);}; +void() f_attack15 =[ $attack15, f_attack16] {fish_melee();}; +void() f_attack16 =[ $attack16, f_attack17] {ai_charge(10);}; +void() f_attack17 =[ $attack17, f_attack18] {ai_charge(10);}; +void() f_attack18 =[ $attack18, f_run1 ] {ai_charge(10);}; + +void() f_death1 =[ $death1, f_death2 ] { +sound (self, CHAN_VOICE, "fish/death.wav", 1, ATTN_NORM); +}; +void() f_death2 =[ $death2, f_death3 ] {}; +void() f_death3 =[ $death3, f_death4 ] {}; +void() f_death4 =[ $death4, f_death5 ] {}; +void() f_death5 =[ $death5, f_death6 ] {}; +void() f_death6 =[ $death6, f_death7 ] {}; +void() f_death7 =[ $death7, f_death8 ] {}; +void() f_death8 =[ $death8, f_death9 ] {}; +void() f_death9 =[ $death9, f_death10 ] {}; +void() f_death10 =[ $death10, f_death11 ] {}; +void() f_death11 =[ $death11, f_death12 ] {}; +void() f_death12 =[ $death12, f_death13 ] {}; +void() f_death13 =[ $death13, f_death14 ] {}; +void() f_death14 =[ $death14, f_death15 ] {}; +void() f_death15 =[ $death15, f_death16 ] {}; +void() f_death16 =[ $death16, f_death17 ] {}; +void() f_death17 =[ $death17, f_death18 ] {}; +void() f_death18 =[ $death18, f_death19 ] {}; +void() f_death19 =[ $death19, f_death20 ] {}; +void() f_death20 =[ $death20, f_death21 ] {}; +void() f_death21 =[ $death21, f_death21 ] {self.solid = SOLID_NOT;}; + +void() f_pain1 =[ $pain1, f_pain2 ] {}; +void() f_pain2 =[ $pain2, f_pain3 ] {ai_pain(6);}; +void() f_pain3 =[ $pain3, f_pain4 ] {ai_pain(6);}; +void() f_pain4 =[ $pain4, f_pain5 ] {ai_pain(6);}; +void() f_pain5 =[ $pain5, f_pain6 ] {ai_pain(6);}; +void() f_pain6 =[ $pain6, f_pain7 ] {ai_pain(6);}; +void() f_pain7 =[ $pain7, f_pain8 ] {ai_pain(6);}; +void() f_pain8 =[ $pain8, f_pain9 ] {ai_pain(6);}; +void() f_pain9 =[ $pain9, f_run1 ] {ai_pain(6);}; + +void(entity attacker, float damage) fish_pain = +{ + +// fish allways do pain frames + f_pain1 (); +}; + +void() monster_fish = +{ + precache_model2 ("progs/fish.mdl"); + + precache_sound2 ("fish/death.wav"); + precache_sound2 ("fish/bite.wav"); + precache_sound2 ("fish/idle.wav"); + + self.solid = SOLID_SLIDEBOX; + self.movetype = MOVETYPE_STEP; + + setmodel (self, "progs/fish.mdl"); + + setsize (self, '-16 -16 -24', '16 16 24'); + self.health = 50; + self.helmet = 1; + self.corporation = 3; + self.classname = "monster"; + self.netname = "pirannah"; + + self.th_stand = f_stand1; + self.th_walk = f_walk1; + self.th_run = f_run1; + self.th_die = f_death1; + self.th_pain = fish_pain; + self.th_melee = f_attack1; + + swimmonster_start (); +}; + diff --git a/quakec/fallout2/hknight.qc b/quakec/fallout2/hknight.qc new file mode 100644 index 000000000..6680448fe --- /dev/null +++ b/quakec/fallout2/hknight.qc @@ -0,0 +1,440 @@ +/* +============================================================================== + +KNIGHT + +============================================================================== +*/ + +$cd id1/models/knight2 +$origin 0 0 24 +$base base +$skin skin + +$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9 + +$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 +$frame walk10 walk11 walk12 walk13 walk14 walk15 walk16 walk17 +$frame walk18 walk19 walk20 + +$frame run1 run2 run3 run4 run5 run6 run7 run8 + +$frame pain1 pain2 pain3 pain4 pain5 + +$frame death1 death2 death3 death4 death5 death6 death7 death8 +$frame death9 death10 death11 death12 + +$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8 +$frame deathb9 + +$frame char_a1 char_a2 char_a3 char_a4 char_a5 char_a6 char_a7 char_a8 +$frame char_a9 char_a10 char_a11 char_a12 char_a13 char_a14 char_a15 char_a16 + +$frame magica1 magica2 magica3 magica4 magica5 magica6 magica7 magica8 +$frame magica9 magica10 magica11 magica12 magica13 magica14 + +$frame magicb1 magicb2 magicb3 magicb4 magicb5 magicb6 magicb7 magicb8 +$frame magicb9 magicb10 magicb11 magicb12 magicb13 + +$frame char_b1 char_b2 char_b3 char_b4 char_b5 char_b6 + +$frame slice1 slice2 slice3 slice4 slice5 slice6 slice7 slice8 slice9 slice10 + +$frame smash1 smash2 smash3 smash4 smash5 smash6 smash7 smash8 smash9 smash10 +$frame smash11 + +$frame w_attack1 w_attack2 w_attack3 w_attack4 w_attack5 w_attack6 w_attack7 +$frame w_attack8 w_attack9 w_attack10 w_attack11 w_attack12 w_attack13 w_attack14 +$frame w_attack15 w_attack16 w_attack17 w_attack18 w_attack19 w_attack20 +$frame w_attack21 w_attack22 + +$frame magicc1 magicc2 magicc3 magicc4 magicc5 magicc6 magicc7 magicc8 +$frame magicc9 magicc10 magicc11 + + +void() hknight_char_a1; +void() hknight_run1; +void() hk_idle_sound; + +void(float offset) hknight_shot = +{ + local vector offang; + local vector org, vec; + + offang = vectoangles (self.enemy.origin - self.origin); + offang_y = offang_y + offset * 6; + + makevectors (offang); + + org = self.origin + self.mins + self.size*0.5 + v_forward * 20; + +// set missile speed + vec = normalize (v_forward); + vec_z = 0 - vec_z + (random() - 0.5)*0.1; + + launch_spike (org, vec); + newmis.classname = "knightspike"; + setmodel (newmis, "progs/k_spike.mdl"); + setsize (newmis, VEC_ORIGIN, VEC_ORIGIN); + newmis.velocity = vec*300; + sound (self, CHAN_WEAPON, "hknight/attack1.wav", 1, ATTN_NORM); +}; + +void() CheckForCharge = +{ +// check for mad charge +if (!enemy_vis) + return; +if (time < self.attack_finished) + return; +if ( fabs(self.origin_z - self.enemy.origin_z) > 20) + return; // too much height change +if ( vlen (self.origin - self.enemy.origin) < 80) + return; // use regular attack + +// charge + SUB_AttackFinished (2); + hknight_char_a1 (); + +}; + +void() CheckContinueCharge = +{ + if (time > self.attack_finished) + { + SUB_AttackFinished (3); + hknight_run1 (); + return; // done charging + } + if (random() > 0.5) + sound (self, CHAN_WEAPON, "knight/sword2.wav", 1, ATTN_NORM); + else + sound (self, CHAN_WEAPON, "knight/sword1.wav", 1, ATTN_NORM); +}; + +//=========================================================================== + +void() hknight_stand1 =[ $stand1, hknight_stand2 ] {ai_stand();}; +void() hknight_stand2 =[ $stand2, hknight_stand3 ] {ai_stand();}; +void() hknight_stand3 =[ $stand3, hknight_stand4 ] {ai_stand();}; +void() hknight_stand4 =[ $stand4, hknight_stand5 ] {ai_stand();}; +void() hknight_stand5 =[ $stand5, hknight_stand6 ] {ai_stand();}; +void() hknight_stand6 =[ $stand6, hknight_stand7 ] {ai_stand();}; +void() hknight_stand7 =[ $stand7, hknight_stand8 ] {ai_stand();}; +void() hknight_stand8 =[ $stand8, hknight_stand9 ] {ai_stand();}; +void() hknight_stand9 =[ $stand9, hknight_stand1 ] {ai_stand();}; + +//=========================================================================== + +void() hknight_walk1 =[ $walk1, hknight_walk2 ] { +hk_idle_sound(); +ai_walk(2);}; +void() hknight_walk2 =[ $walk2, hknight_walk3 ] {ai_walk(5);}; +void() hknight_walk3 =[ $walk3, hknight_walk4 ] {ai_walk(5);}; +void() hknight_walk4 =[ $walk4, hknight_walk5 ] {ai_walk(4);}; +void() hknight_walk5 =[ $walk5, hknight_walk6 ] {ai_walk(4);}; +void() hknight_walk6 =[ $walk6, hknight_walk7 ] {ai_walk(2);}; +void() hknight_walk7 =[ $walk7, hknight_walk8 ] {ai_walk(2);}; +void() hknight_walk8 =[ $walk8, hknight_walk9 ] {ai_walk(3);}; +void() hknight_walk9 =[ $walk9, hknight_walk10 ] {ai_walk(3);}; +void() hknight_walk10 =[ $walk10, hknight_walk11 ] {ai_walk(4);}; +void() hknight_walk11 =[ $walk11, hknight_walk12 ] {ai_walk(3);}; +void() hknight_walk12 =[ $walk12, hknight_walk13 ] {ai_walk(4);}; +void() hknight_walk13 =[ $walk13, hknight_walk14 ] {ai_walk(6);}; +void() hknight_walk14 =[ $walk14, hknight_walk15 ] {ai_walk(2);}; +void() hknight_walk15 =[ $walk15, hknight_walk16 ] {ai_walk(2);}; +void() hknight_walk16 =[ $walk16, hknight_walk17 ] {ai_walk(4);}; +void() hknight_walk17 =[ $walk17, hknight_walk18 ] {ai_walk(3);}; +void() hknight_walk18 =[ $walk18, hknight_walk19 ] {ai_walk(3);}; +void() hknight_walk19 =[ $walk19, hknight_walk20 ] {ai_walk(3);}; +void() hknight_walk20 =[ $walk20, hknight_walk1 ] {ai_walk(2);}; + +//=========================================================================== + +void() hknight_run1 =[ $run1, hknight_run2 ] { +hk_idle_sound(); +ai_run (20); CheckForCharge (); }; +void() hknight_run2 =[ $run2, hknight_run3 ] {ai_run(25);}; +void() hknight_run3 =[ $run3, hknight_run4 ] {ai_run(18);}; +void() hknight_run4 =[ $run4, hknight_run5 ] {ai_run(16);}; +void() hknight_run5 =[ $run5, hknight_run6 ] {ai_run(14);}; +void() hknight_run6 =[ $run6, hknight_run7 ] {ai_run(25);}; +void() hknight_run7 =[ $run7, hknight_run8 ] {ai_run(21);}; +void() hknight_run8 =[ $run8, hknight_run1 ] {ai_run(13);}; + +//============================================================================ + +void() hknight_pain1 =[ $pain1, hknight_pain2 ] {sound (self, CHAN_VOICE, "hknight/pain1.wav", 1, ATTN_NORM);}; +void() hknight_pain2 =[ $pain2, hknight_pain3 ] {}; +void() hknight_pain3 =[ $pain3, hknight_pain4 ] {}; +void() hknight_pain4 =[ $pain4, hknight_pain5 ] {}; +void() hknight_pain5 =[ $pain5, hknight_run1 ] {}; + +//============================================================================ + +void() hknight_die1 =[ $death1, hknight_die2 ] {ai_forward(10);}; +void() hknight_die2 =[ $death2, hknight_die3 ] {ai_forward(8);}; +void() hknight_die3 =[ $death3, hknight_die4 ] +{self.solid = SOLID_NOT; ai_forward(7);}; +void() hknight_die4 =[ $death4, hknight_die5 ] {}; +void() hknight_die5 =[ $death5, hknight_die6 ] {}; +void() hknight_die6 =[ $death6, hknight_die7 ] {}; +void() hknight_die7 =[ $death7, hknight_die8 ] {}; +void() hknight_die8 =[ $death8, hknight_die9 ] {ai_forward(10);}; +void() hknight_die9 =[ $death9, hknight_die10 ] {ai_forward(11);}; +void() hknight_die10 =[ $death10, hknight_die11 ] {}; +void() hknight_die11 =[ $death11, hknight_die12 ] {}; +void() hknight_die12 =[ $death12, hknight_die12 ] {}; + +void() hknight_dieb1 =[ $deathb1, hknight_dieb2 ] {}; +void() hknight_dieb2 =[ $deathb2, hknight_dieb3 ] {}; +void() hknight_dieb3 =[ $deathb3, hknight_dieb4 ] +{self.solid = SOLID_NOT;}; +void() hknight_dieb4 =[ $deathb4, hknight_dieb5 ] {}; +void() hknight_dieb5 =[ $deathb5, hknight_dieb6 ] {}; +void() hknight_dieb6 =[ $deathb6, hknight_dieb7 ] {}; +void() hknight_dieb7 =[ $deathb7, hknight_dieb8 ] {}; +void() hknight_dieb8 =[ $deathb8, hknight_dieb9 ] {}; +void() hknight_dieb9 =[ $deathb9, hknight_dieb9 ] {}; + +void() hknight_die = +{ +// check for gib + if (self.health < -40) + { + sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM); + ThrowHead ("progs/h_hellkn.mdl", self.health); + ThrowGib ("progs/gib1.mdl", self.health); + ThrowGib ("progs/gib2.mdl", self.health); + ThrowGib ("progs/gib3.mdl", self.health); + return; + } + +// regular death + sound (self, CHAN_VOICE, "hknight/death1.wav", 1, ATTN_NORM); + if (random() > 0.5) + hknight_die1 (); + else + hknight_dieb1 (); +}; + + +//============================================================================ + +void() hknight_magica1 =[ $magica1, hknight_magica2 ] {ai_face();}; +void() hknight_magica2 =[ $magica2, hknight_magica3 ] {ai_face();}; +void() hknight_magica3 =[ $magica3, hknight_magica4 ] {ai_face();}; +void() hknight_magica4 =[ $magica4, hknight_magica5 ] {ai_face();}; +void() hknight_magica5 =[ $magica5, hknight_magica6 ] {ai_face();}; +void() hknight_magica6 =[ $magica6, hknight_magica7 ] {ai_face();}; +void() hknight_magica7 =[ $magica7, hknight_magica8 ] {hknight_shot(-2);}; +void() hknight_magica8 =[ $magica8, hknight_magica9 ] {hknight_shot(-1);}; +void() hknight_magica9 =[ $magica9, hknight_magica10] {hknight_shot(0);}; +void() hknight_magica10 =[ $magica10, hknight_magica11] {hknight_shot(1);}; +void() hknight_magica11 =[ $magica11, hknight_magica12] {hknight_shot(2);}; +void() hknight_magica12 =[ $magica12, hknight_magica13] {hknight_shot(3);}; +void() hknight_magica13 =[ $magica13, hknight_magica14] {ai_face();}; +void() hknight_magica14 =[ $magica14, hknight_run1 ] {ai_face();}; + +//============================================================================ + +void() hknight_magicb1 =[ $magicb1, hknight_magicb2 ] {ai_face();}; +void() hknight_magicb2 =[ $magicb2, hknight_magicb3 ] {ai_face();}; +void() hknight_magicb3 =[ $magicb3, hknight_magicb4 ] {ai_face();}; +void() hknight_magicb4 =[ $magicb4, hknight_magicb5 ] {ai_face();}; +void() hknight_magicb5 =[ $magicb5, hknight_magicb6 ] {ai_face();}; +void() hknight_magicb6 =[ $magicb6, hknight_magicb7 ] {ai_face();}; +void() hknight_magicb7 =[ $magicb7, hknight_magicb8 ] {hknight_shot(-2);}; +void() hknight_magicb8 =[ $magicb8, hknight_magicb9 ] {hknight_shot(-1);}; +void() hknight_magicb9 =[ $magicb9, hknight_magicb10] {hknight_shot(0);}; +void() hknight_magicb10 =[ $magicb10, hknight_magicb11] {hknight_shot(1);}; +void() hknight_magicb11 =[ $magicb11, hknight_magicb12] {hknight_shot(2);}; +void() hknight_magicb12 =[ $magicb12, hknight_magicb13] {hknight_shot(3);}; +void() hknight_magicb13 =[ $magicb13, hknight_run1] {ai_face();}; + +//============================================================================ + +void() hknight_magicc1 =[ $magicc1, hknight_magicc2 ] {ai_face();}; +void() hknight_magicc2 =[ $magicc2, hknight_magicc3 ] {ai_face();}; +void() hknight_magicc3 =[ $magicc3, hknight_magicc4 ] {ai_face();}; +void() hknight_magicc4 =[ $magicc4, hknight_magicc5 ] {ai_face();}; +void() hknight_magicc5 =[ $magicc5, hknight_magicc6 ] {ai_face();}; +void() hknight_magicc6 =[ $magicc6, hknight_magicc7 ] {hknight_shot(-2);}; +void() hknight_magicc7 =[ $magicc7, hknight_magicc8 ] {hknight_shot(-1);}; +void() hknight_magicc8 =[ $magicc8, hknight_magicc9 ] {hknight_shot(0);}; +void() hknight_magicc9 =[ $magicc9, hknight_magicc10] {hknight_shot(1);}; +void() hknight_magicc10 =[ $magicc10, hknight_magicc11] {hknight_shot(2);}; +void() hknight_magicc11 =[ $magicc11, hknight_run1] {hknight_shot(3);}; + +//=========================================================================== + +void() hknight_char_a1 =[ $char_a1, hknight_char_a2 ] {ai_charge(20);}; +void() hknight_char_a2 =[ $char_a2, hknight_char_a3 ] {ai_charge(25);}; +void() hknight_char_a3 =[ $char_a3, hknight_char_a4 ] {ai_charge(18);}; +void() hknight_char_a4 =[ $char_a4, hknight_char_a5 ] {ai_charge(16);}; +void() hknight_char_a5 =[ $char_a5, hknight_char_a6 ] {ai_charge(14);}; +void() hknight_char_a6 =[ $char_a6, hknight_char_a7 ] {ai_charge(20); ai_melee();}; +void() hknight_char_a7 =[ $char_a7, hknight_char_a8 ] {ai_charge(21); ai_melee();}; +void() hknight_char_a8 =[ $char_a8, hknight_char_a9 ] {ai_charge(13); ai_melee();}; +void() hknight_char_a9 =[ $char_a9, hknight_char_a10 ] {ai_charge(20); ai_melee();}; +void() hknight_char_a10=[ $char_a10, hknight_char_a11 ] {ai_charge(20); ai_melee();}; +void() hknight_char_a11=[ $char_a11, hknight_char_a12 ] {ai_charge(18); ai_melee();}; +void() hknight_char_a12=[ $char_a12, hknight_char_a13 ] {ai_charge(16);}; +void() hknight_char_a13=[ $char_a13, hknight_char_a14 ] {ai_charge(14);}; +void() hknight_char_a14=[ $char_a14, hknight_char_a15 ] {ai_charge(25);}; +void() hknight_char_a15=[ $char_a15, hknight_char_a16 ] {ai_charge(21);}; +void() hknight_char_a16=[ $char_a16, hknight_run1 ] {ai_charge(13);}; + +//=========================================================================== + +void() hknight_char_b1 =[ $char_b1, hknight_char_b2 ] +{CheckContinueCharge (); ai_charge(23); ai_melee();}; +void() hknight_char_b2 =[ $char_b2, hknight_char_b3 ] {ai_charge(17); ai_melee();}; +void() hknight_char_b3 =[ $char_b3, hknight_char_b4 ] {ai_charge(12); ai_melee();}; +void() hknight_char_b4 =[ $char_b4, hknight_char_b5 ] {ai_charge(22); ai_melee();}; +void() hknight_char_b5 =[ $char_b5, hknight_char_b6 ] {ai_charge(18); ai_melee();}; +void() hknight_char_b6 =[ $char_b6, hknight_char_b1 ] {ai_charge(8); ai_melee();}; + +//=========================================================================== + +void() hknight_slice1 =[ $slice1, hknight_slice2 ] {ai_charge(9);}; +void() hknight_slice2 =[ $slice2, hknight_slice3 ] {ai_charge(6);}; +void() hknight_slice3 =[ $slice3, hknight_slice4 ] {ai_charge(13);}; +void() hknight_slice4 =[ $slice4, hknight_slice5 ] {ai_charge(4);}; +void() hknight_slice5 =[ $slice5, hknight_slice6 ] {ai_charge(7); ai_melee();}; +void() hknight_slice6 =[ $slice6, hknight_slice7 ] {ai_charge(15); ai_melee();}; +void() hknight_slice7 =[ $slice7, hknight_slice8 ] {ai_charge(8); ai_melee();}; +void() hknight_slice8 =[ $slice8, hknight_slice9 ] {ai_charge(2); ai_melee();}; +void() hknight_slice9 =[ $slice9, hknight_slice10 ] {ai_melee();}; +void() hknight_slice10 =[ $slice10, hknight_run1 ] {ai_charge(3);}; + +//=========================================================================== + +void() hknight_smash1 =[ $smash1, hknight_smash2 ] {ai_charge(1);}; +void() hknight_smash2 =[ $smash2, hknight_smash3 ] {ai_charge(13);}; +void() hknight_smash3 =[ $smash3, hknight_smash4 ] {ai_charge(9);}; +void() hknight_smash4 =[ $smash4, hknight_smash5 ] {ai_charge(11);}; +void() hknight_smash5 =[ $smash5, hknight_smash6 ] {ai_charge(10); ai_melee();}; +void() hknight_smash6 =[ $smash6, hknight_smash7 ] {ai_charge(7); ai_melee();}; +void() hknight_smash7 =[ $smash7, hknight_smash8 ] {ai_charge(12); ai_melee();}; +void() hknight_smash8 =[ $smash8, hknight_smash9 ] {ai_charge(2); ai_melee();}; +void() hknight_smash9 =[ $smash9, hknight_smash10 ] {ai_charge(3); ai_melee();}; +void() hknight_smash10 =[ $smash10, hknight_smash11 ] {ai_charge(0);}; +void() hknight_smash11 =[ $smash11, hknight_run1 ] {ai_charge(0);}; + +//============================================================================ + +void() hknight_watk1 =[ $w_attack1, hknight_watk2 ] {ai_charge(2);}; +void() hknight_watk2 =[ $w_attack2, hknight_watk3 ] {ai_charge(0);}; +void() hknight_watk3 =[ $w_attack3, hknight_watk4 ] {ai_charge(0);}; +void() hknight_watk4 =[ $w_attack4, hknight_watk5 ] {ai_melee();}; +void() hknight_watk5 =[ $w_attack5, hknight_watk6 ] {ai_melee();}; +void() hknight_watk6 =[ $w_attack6, hknight_watk7 ] {ai_melee();}; +void() hknight_watk7 =[ $w_attack7, hknight_watk8 ] {ai_charge(1);}; +void() hknight_watk8 =[ $w_attack8, hknight_watk9 ] {ai_charge(4);}; +void() hknight_watk9 =[ $w_attack9, hknight_watk10 ] {ai_charge(5);}; +void() hknight_watk10 =[ $w_attack10, hknight_watk11 ] {ai_charge(3); ai_melee();}; +void() hknight_watk11 =[ $w_attack11, hknight_watk12 ] {ai_charge(2); ai_melee();}; +void() hknight_watk12 =[ $w_attack12, hknight_watk13 ] {ai_charge(2); ai_melee();}; +void() hknight_watk13 =[ $w_attack13, hknight_watk14 ] {ai_charge(0);}; +void() hknight_watk14 =[ $w_attack14, hknight_watk15 ] {ai_charge(0);}; +void() hknight_watk15 =[ $w_attack15, hknight_watk16 ] {ai_charge(0);}; +void() hknight_watk16 =[ $w_attack16, hknight_watk17 ] {ai_charge(1);}; +void() hknight_watk17 =[ $w_attack17, hknight_watk18 ] {ai_charge(1); ai_melee();}; +void() hknight_watk18 =[ $w_attack18, hknight_watk19 ] {ai_charge(3); ai_melee();}; +void() hknight_watk19 =[ $w_attack19, hknight_watk20 ] {ai_charge(4); ai_melee();}; +void() hknight_watk20 =[ $w_attack20, hknight_watk21 ] {ai_charge(6);}; +void() hknight_watk21 =[ $w_attack21, hknight_watk22 ] {ai_charge(7);}; +void() hknight_watk22 =[ $w_attack22, hknight_run1 ] {ai_charge(3);}; + +//============================================================================ + +void() hk_idle_sound = +{ + if (random() < 0.2) + sound (self, CHAN_VOICE, "hknight/idle.wav", 1, ATTN_NORM); +}; + +void(entity attacker, float damage) hknight_pain = +{ + if (self.pain_finished > time) + return; + + sound (self, CHAN_VOICE, "hknight/pain1.wav", 1, ATTN_NORM); + + if (time - self.pain_finished > 5) + { // allways go into pain frame if it has been a while + hknight_pain1 (); + self.pain_finished = time + 1; + return; + } + + if ((random()*30 > damage) ) + return; // didn't flinch + + self.pain_finished = time + 1; + hknight_pain1 (); +}; + +float hknight_type; + +void() hknight_melee = +{ + hknight_type = hknight_type + 1; + + sound (self, CHAN_WEAPON, "hknight/slash1.wav", 1, ATTN_NORM); + if (hknight_type == 1) + hknight_slice1 (); + else if (hknight_type == 2) + hknight_smash1 (); + else if (hknight_type == 3) + { + hknight_watk1 (); + hknight_type = 0; + } +}; + +void() monster_hell_knight = +{ + + precache_model2 ("progs/hknight.mdl"); + precache_model2 ("progs/k_spike.mdl"); + precache_model2 ("progs/h_hellkn.mdl"); + + + precache_sound2 ("hknight/attack1.wav"); + precache_sound2 ("hknight/death1.wav"); + precache_sound2 ("hknight/pain1.wav"); + precache_sound2 ("hknight/sight1.wav"); + precache_sound ("hknight/hit.wav"); // used by C code, so don't sound2 + precache_sound2 ("hknight/slash1.wav"); + precache_sound2 ("hknight/idle.wav"); + precache_sound2 ("hknight/grunt.wav"); + + precache_sound ("knight/sword1.wav"); + precache_sound ("knight/sword2.wav"); + + self.solid = SOLID_SLIDEBOX; + self.movetype = MOVETYPE_STEP; + + setmodel (self, "progs/hknight.mdl"); + + setsize (self, '-16 -16 -24', '16 16 40'); + self.health = 250; + self.armor = 12; + self.armortype = 0.1; + self.helmet = 2; + self.corporation = 3; + self.classname = "monster"; + self.netname = "reaver"; + self.th_stand = hknight_stand1; + self.th_walk = hknight_walk1; + self.th_run = hknight_run1; + self.th_melee = hknight_melee; + self.th_missile = hknight_magicc1; + self.th_pain = hknight_pain; + self.th_die = hknight_die; + self.armornoise = "weapons/ric1.wav"; + + walkmonster_start (); +}; diff --git a/quakec/fallout2/mod_menus.qc b/quakec/fallout2/mod_menus.qc new file mode 100644 index 000000000..a424854b7 --- /dev/null +++ b/quakec/fallout2/mod_menus.qc @@ -0,0 +1,187 @@ +/* + + return (" +weaponry\n\n +1 melee \n +2 thrown \n +3 pistols&smgs \n +4 shotguns \n +5 rifles \n +6 heavy guns \n +e leave +*/ + +/* +1 1911a1 .45 01 5$\n +2 d. eagle .44 02 7$\n +3 mk23 socom .45 02 9$\n +4 h&k mp7 4mm 03 14$\n +5 h&k mp5 9mm 03 17$\n +6 alien blaster 02 21$\n + +1 pipe rifle .44 02 4$\n +2 winchester 12g 03 8$\n +3 mossberg 12g 04 14$\n +4 citykiller 12g 05 35$\n + +1 rangemaster 7mm 03 11$\n +2 ak-112 5mm 04 21$\n +3 remington .308 05 24$\n +4 ak-74 5mm 04 27$\n +5 moonlight .223 05 36$\n +6 sa-80 5mm 05 23$\n +7 plasma rifle 07 41$\n +8 gauss rifle 2mm 08 51$\n +*/ + +string () ShopString = +{ + return ("--- S H O P -------\n\n1 traits \n2 perks \n3 body armour \n4 protection \n5 weapons \n6 equipment \n7 chems \ne leave \n"); +}; + +string () WeaponString = +{ + return ("weaponry\n\n1 melee \n2 thrown \n3 pistols&smgs \n4 shotguns \n5 rifles \ne leave \n"); +}; + +string () TraitString = +{ + return ("traits\n\n1 one handed \n2 small frame \n3 bruiser \n4 heavy handed \n5 bloody mess \n6 bad luck \ne leave \n"); +}; + +string () MiscString = +{ + return ("grenades\n GRENADE | COST \n\n1 plasma grenade 11\n2 frag grenade 5\n3 emp grenade 3\n4 smoke grenade 2\n5 flash bang mark ii 2\ne exit \n"); +}; + +string () BuildString = +{ + return ("BUILD A STRUCTURE\n NAME | UPGRADE | COST \n\n1 supply depot ammo/hp 4\n2 arms lab weapons +10% 6\n3 armory armour +10% 10\n4 proto-lab gadgets/hrdwr 15\ne exit \n"); +}; + +string () HelmetString = +{ + return ("helmets\nprotect you from headshots so\nmake sure you use a decent one\n\n ABS% WT DEFLECT PRC\n1 combat helm -10% 01 5% 05\n2 combat helm 2 +0% 02 5% 20\n3 heavy-duty +20% 03 5% 20\n4 ceramic helm -20% ..."); +}; + +string () ArmorString1 = +{ + return ("body armour\n wt abs prc\n\n1 vault suit 03 1/20% 03$\n2 leather armor 07 2/30% 05$\n3 kevlar armor 10 3/35% 08$\n4 combat armor 13 4/40% 11$\n5 brotherhood armor 17 5/45% 15$"); +}; + +string () ArmorString2 = +{ + return ("body armour\n WT ABS SPEC PRC\n\n1 battle gear 08 57% NONE 50\n2 battle gear ii 09 62% !EXP 60\n3 high-tech suit 09 42% +ALL 60\n4 carbon-fiber mesh 09 56% !ENR 70\n5 pseudo-chitin suit 07..."); +}; + +string () ArmorString3 = +{ + return ("special body armour\n WT ABS SPEC PRC\n1 vsn force mail 07 %40 DFLC 95c\n2 super chitin 08 %35 DFLC 95c\n3 suit of mota 14 %70 HEAL 95c\n0 previous \ne exit ..."); +}; + +string () PlusString = +{ + return ("perks\n ABILITY | FRAGS NEEDED \n\n1 bonus movement 8\n2 weapons handling 12\n3 quick pockets 14\n4 awareness 15\n5 silent running 17\n6 better criticals 23\n7 bonus ranged damage 26\n8 strong back ..."); +}; + +string () PlusString2 = +{ + return ("perks\n ABILITY | FRAGS NEEDED \n\n1 bonus movement 8\n2 weapons handling 12\n3 quick pockets 14\n4 awareness 15\n5 silent running 17\n6 better criticals 23\n7 bonus ranged damage 26\n8 strong back ..."); +}; +/* +5 energy shield |front :25% 25 +6 protect ring |damage:15% 65 +7 dark force |deflct:15% 75 +8 efreeti module |blasts 40% 85 +9 sentient cube |regenerate 95 +0 vampire |space warp 95 +*/ + + +string () HardwareString = +{ + return ("+ protective devices +\n\n HARDWARE | SHIELDS VS | PRICE \n1 pro cloak |damage:07% 15\n2 emp shielding |emp: 100% 25\n3 force shield |front: 25% 20\n4 force field |damage:10% 25\n5 energy shield |energy:23% 255 energy shield |front :25% 256 protect ring |damage:15% 657 dark force |deflct:15% 758 efreeti module |blasts 40% 859 sentient cube |regenerate 950 vampire |space warp 95"); +}; + +string () MeleeString = +{ + return ("melee weapons\n WEAPON | TYPE | WEIGHT | PRICE \n\n1 knife melee 01 01$\n2 combat knife melee 03 03$\n3 ripper melee 03 07$\n4 power fist melee 04 11$\ne exit \n"); +}; + +/* +6 h&k mp5 9mmP 03 17$\n +7 h&k mp7 4.60mm 03 14$\n +8 fn p90 5.57mm 03 22$\n +9 h&k mp10 10mm 03 24$\n +0 thompson .45 03 20$\n + + +6 h&k mp5 9mmP 03 17$\n7 h&k mp7 4.60mm 03 14$\n8 fn p90 5.57mm 03 22$\n9 h&k mp10 10mm 03 24$\n0 thompson .45 03 20$\n +*/ + +string () SmallArmString1 = +{ + return ("Pistols and Submachineguns\n WEAPON | CAL | WEIGHT | PRICE \n\n1 1911a1 .45 01 5$\n2 d. eagle .44 02 7$\n3 mk23 socom .45 02 9$\n4 h&k mp7 4mm 03 14$\n5 h&k mp5 9mm 03 17$\n6 alien blaster 02 21$\n"); +}; + +string () SmallArmString2 = +{ + return ("shotguns\n WEAPON | TYPE | WEIGHT | PRICE \n\n1 pipe rifle .44 02 4$\n2 winchester 12g 03 8$\n3 mossberg 12g 04 14$\n4 citykiller 12g 05 35$\n"); +}; + +/* +6 dks-1 .338 bolt 08 32$\n +7 moonlight .223 auto 06 54$\n +8 xl70e3 5mm auto 08 27$\n +9 fn-fal .308 auto 04 51$\n +0 sa-80 .223 auto 07 45$\n + +*/ +string () SmallArmString3 = +{ + return ("rifles\n RIFLE | TYPE | WEIGHT | PRICE \n\n1 rangemaster 7mm 03 11$\n2 ak-112 5mm 04 21$\n3 remington .308 05 24$\n4 ak-74 5mm 04 27$\n5 moonlight .223 05 36$\n6 sa-80 5mm 05 23$\n7 plasma rifle 07 41$\n8 gauss rifle 2mm 08 51$\n"); +}; + +string () DrugString1 = +{ + return ("drugs\n DRUG | EFFECTS | PRICE\n\n1 stimpack heals 40 3$\n2 medkit+ heals 20+50 5$\n3 superstim* heals 40+60 12$\ne exit \n\n\n+ requires medic \n* requires medic with 7+ kills"); +}; + +string () DrugString2 = +{ + return ("drugs\n DRUG | EFFECTS | PRICE\n\n1 stimpack heals 40 3$\n2 adrenaline +60 speed/jump 7$\n3 psycho+ +60 hp/no pain 15$\n4 medkit* heals 20+50 12$\n5 berserk* adren+psycho 21$\ne exit \n"); +}; + +string () EnergyWeaponsString = +{ + return ("high-tech weaponry\n WEAPON | TYPE | WEIGHT | PRICE \n\n1 [*] flash gun semi 03 21$\n2 [&] plasma rifle semi 08 34$\n3 [*] laser rifle semi 11 40$\n4 [*] laser carbine auto 06 57$\n5 [?] alien blaster semi 02 72$\n"); +}; + +//6 bozar 14 81$\n7 firestorm 12 97$ + +string () HeavyGunsString = +{ + return ("heavy guns\n WEAPON | TYPE | WEIGHT | PRICE \n\n1 light support weapon 15 55$\n2 rocket launcher 11 75$\n3 50oc flamethrower 16 35$\n4 steyr amr .50 flechette 17 72$\n5 m72 gauss rifle 2mm 12 81$\n6 bozar 14 81$\n7 firestorm 12 97$"); +}; + +string () de_dust = +{ + return (" DE_DUST \n (BOMB/DEFUSE MAP) \n\nrangers have obtained two ufos\nthat have crash landed in the \ndesert. raiders must blow them\nup with c4 before its too late\n\n(activate electronic tools and\nc4 by pressing 4) ..."); +}; + +/* +4 motion sensor 20c\n +5 extra magazines 20c\n +6 electronic tools mark ii 30c\n +7 climbing gear 30c\n +8 remote camera 40c\n +9 cooling module 50c\n +0 laser defense field 50c\n +*/ + + + +string () GadgetString = +{ + return ("+ special equipment +\npress your c key to activate!\n\n1 stealth boy 20c\n2 displacer cloak 20c\n3 security alarm 20c\n4 motion sensor 20c\n5 extra magazines 20c\n6 electronic tools mark ii 30c\n7 climbing gear 30c\n8 remote camera 40c\n9 cooling module 50c\n0 laser defense field 50c\n"); +}; diff --git a/quakec/fallout2/mod_other.qc b/quakec/fallout2/mod_other.qc new file mode 100644 index 000000000..b03224ddf --- /dev/null +++ b/quakec/fallout2/mod_other.qc @@ -0,0 +1,232 @@ + + + +/* +######################################################################## +This QC file houses all of the ugly code that no one wants to deal with. +######################################################################## +*/ + +/*drain_energy - Makes energy weapons overheat*/ +/*GetWeaponName - Tells the player what weapons he is carrying*/ +/*GetWeaponWeight - Calculates the total weight for weapons*/ + + +void (vector org, entity guy, float input, float cost) spawn_station = +{ + local entity dog; + local entity te; + + if ((self.ammo_shells < cost)) + { + sprint (self, 2, "not enough money.\n"); + return; + } + self = guy; + te = find (world, classname, "station"); + while (te) + { + if (((te.track == self) && (te.skin == input))) + { + sprint (self, 2, "already have one.\n"); + return; + } + te = find (te, classname, "station"); + } + makevectors (self.v_angle); + org = ((org + (v_forward * IT_LIGHTNING)) + (v_up * EF_FLAG2)); + if ((pointcontents ((org + '0 20 0')) != CONTENT_EMPTY)) + { + sprint (self, 2, "can't build there.\n"); + return; + } + if ((pointcontents ((org + '0 -20 0')) != CONTENT_EMPTY)) + { + sprint (self, 2, "can't build there.\n"); + return; + } + if ((pointcontents ((org + '20 0 0')) != CONTENT_EMPTY)) + { + sprint (self, 2, "can't build there.\n"); + return; + } + if ((pointcontents ((org + '-20 0 0')) != CONTENT_EMPTY)) + { + sprint (self, 2, "can't build there.\n"); + return; + } + if ((pointcontents ((org + '0 0 50')) != CONTENT_EMPTY)) + { + sprint (self, 2, "can't build there.\n"); + return; + } + if ((pointcontents ((org + '0 0 -10')) != CONTENT_EMPTY)) + { + sprint (self, 2, "can't build there.\n"); + return; + } + self.impulse = 0; + te = findradius (org, 40); + while (te) + { + if (te.classname == "spawn1") + { + sprint (self, 2, "can't build at spawn.\n"); + return; + } + if (te.classname == "spawn2") + { + sprint (self, 2, "can't build at spawn.\n"); + return; + } + if (te.classname == "ghoul") + { + sprint (self, 2, "somethings in the way.\n"); + return; + } + if (((te.classname == "player") && (te.health > 0))) + { + sprint (self, 2, "can't build on players.\n"); + return; + } + if (((te.classname == "station") && (te.health > 0))) + { + sprint (self, 2, "can't build on other stations.\n"); + return; + } + te = te.chain; + } + self.ammo_shells = (self.ammo_shells - cost); + dog = spawn (); + dog.team = self.team; + dog.track = self; + self = dog; + //spawn_dot (dog); + self.origin = org; + self.takedamage = DAMAGE_YES; + self.solid = SOLID_SLIDEBOX; + self.movetype = MOVETYPE_STEP; + setsize (self, '-16 -16 0', '16 16 40'); + self.health = SVC_INTERMISSION; + self.max_health = (300 + (input * 50)); + self.th_die = station_die; + setmodel (self, "progs/station.mdl"); + self.classname = "station"; + self.think = station_think; + self.helmet = 2; + self.skin = input; + if ((self.skin == 0)) + { + self.netname = "depot"; + } + if ((self.skin == 1)) + { + self.netname = "armslab"; + } + if ((self.skin == 2)) + { + self.netname = "armory"; + } + if ((self.skin == 3)) + { + self.netname = "protolab"; + } + self.frame = WEAPON_SPIKES; +}; + +void (float dat) drain_energy = +{ + self.ammo_cells = (self.ammo_cells - dat); + if ((self.ammo_cells <= 0)) + { + self.recharge = 1; + } + if ((dat != WEAPON_SPIKES)) + { + if ((self.recharge == 1)) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n!COOLING! \n"); + } + else + { + if ((self.ammo_cells >= 200)) + { + return; + } + else + { + if ((self.ammo_cells >= (200 * 0.9))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.8))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.7))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.6))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.5))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.4))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.3))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells >= (200 * 0.2))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + if ((self.ammo_cells <= (200 * 0.1))) + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + else + { + centerprint (self, "\n\n\n\n\n\n\n\n\n\n\n\n\nH TEMP C \n \n"); + } + } + } + } + } + } + } + } + } + } + } + } +}; + + +void (entity guy, float slot) GetWeaponWeight = +{ + + return; +}; \ No newline at end of file diff --git a/quakec/fallout2/models.qc b/quakec/fallout2/models.qc new file mode 100644 index 000000000..56f474d56 --- /dev/null +++ b/quakec/fallout2/models.qc @@ -0,0 +1,585 @@ + +/* +=============================================================================== + +WORLD WEAPONS + +=============================================================================== +*/ + +$modelname g_shot +$cd /raid/quake/id1/models/g_shot +$origin 0 0 -24 +$flags 8 // client side rotate +$base base +$skin skin +$frame shot1 + + +$modelname g_nail +$cd /raid/quake/id1/models/g_nail +$flags 8 // client side rotate +$origin 0 0 -24 +$base base +$skin skin +$frame shot1 + + +$modelname g_nail2 +$cd /raid/quake/id1/models/g_nail2 +$flags 8 // client side rotate +$origin 0 0 -24 +$base base +$skin skin +$frame shot2 + + +$modelname g_rock +$cd /raid/quake/id1/models/g_rock +$flags 8 // client side rotate +$origin 0 0 -24 +$base base +$skin skin +$frame shot1 + + +$modelname g_rock2 +$cd /raid/quake/id1/models/g_rock2 +$flags 8 // client side rotate +$origin 0 0 -24 +$base base +$skin skin +$frame shot1 + +$modelname g_light +$cd /raid/quake/id1/models/g_light +$flags 8 // client side rotate +$origin 0 0 -24 +$base base +$skin skin +$frame shot1 + +/* +=============================================================================== + +VIEW WEAPONS + +=============================================================================== +*/ + +$modelname v_axe +$cd /raid/quake/id1/models/v_axe +$origin 0 5 54 +$base base +$skin skin +$frame frame1 frame2 frame3 frame4 frame5 frame6 frame7 frame8 frame9 + + +$modelname v_shot +$cd /raid/quake/id1/models/v_shot +$origin 0 0 54 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 + + +$modelname v_shot2 +$cd /raid/quake/id1/models/v_shot2 +$origin 0 0 56 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 + + +$modelname v_rock2 +$cd /raid/quake/id1/models/v_rock2 +$origin 0 0 54 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 shot6 shot6 + + +$modelname v_rock +$cd /raid/quake/id1/models/v_rock +$origin 0 0 54 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 + + +$modelname v_nail2 +$cd /raid/quake/id1/models/v_nail2 +$origin 0 0 54 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 shot8 shot9 + + +$modelname v_nail +$cd /raid/quake/id1/models/v_nail +$origin 0 0 54 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 shot8 shot9 + +$modelname v_light +$cd /raid/quake/id1/models/v_light +$origin 0 0 54 +$base base +$skin skin +$frame shot1 shot2 shot3 shot4 shot5 + + +/* +=============================================================================== + +ITEMS + +=============================================================================== +*/ + +$modelname w_g_key +$cd /raid/quake/id1/models/w_g_key +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname w_s_key +$cd /raid/quake/id1/models/w_s_key +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname m_g_key +$cd /raid/quake/id1/models/m_g_key +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname m_s_key +$cd /raid/quake/id1/models/m_s_key +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname b_g_key +$cd /raid/quake/id1/models/b_g_key +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname b_s_key +$cd /raid/quake/id1/models/b_s_key +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + + +$modelname quaddama +$cd /raid/quake/id1/models/quaddama +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname invisibl +$cd /raid/quake/id1/models/invisibl +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname invulner +$flags 8 // client side rotate +$cd /raid/quake/id1/models/invulner +$base base +$skin skin +$frame frame1 + +//modelname jetpack +//cd /raid/quake/id1/models/jetpack +//flags 8 // client side rotate +//base base +//skin skin +//frame frame1 + +$modelname cube +$cd /raid/quake/id1/models/cube +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname suit +$cd /raid/quake/id1/models/suit +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname boots +$cd /raid/quake/id1/models/boots +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname end1 +$cd /raid/quake/id1/models/end1 +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname end2 +$cd /raid/quake/id1/models/end2 +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname end3 +$cd /raid/quake/id1/models/end3 +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + +$modelname end4 +$cd /raid/quake/id1/models/end4 +$flags 8 // client side rotate +$base base +$skin skin +$frame frame1 + + +/* +=============================================================================== + +GIBS + +=============================================================================== +*/ + +$modelname gib1 +$cd /raid/quake/id1/models/gib1 +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + + +// torso +$modelname gib2 +$cd /raid/quake/id1/models/gib2 +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname gib3 +$cd /raid/quake/id1/models/gib3 +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + + +// heads + +$modelname h_player +$cd /raid/quake/id1/models/h_player +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_dog +$cd /raid/quake/id1/models/h_dog +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_mega +$cd /raid/quake/id1/models/h_mega +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_guard +$cd /raid/quake/id1/models/h_guard +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_wizard +$cd /raid/quake/id1/models/h_wizard +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_knight +$cd /raid/quake/id1/models/h_knight +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_hellkn +$cd /raid/quake/id1/models/h_hellkn +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_zombie +$cd /raid/quake/id1/models/h_zombie +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_shams +$cd /raid/quake/id1/models/h_shams +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_shal +$cd /raid/quake/id1/models/h_shal +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_ogre +$cd /raid/quake/id1/models/h_ogre +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname h_demon +$cd /raid/quake/id1/models/h_demon +$flags 4 // EF_GIB +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +/* +=============================================================================== + +MISC + +=============================================================================== +*/ + +$modelname armor +$cd /raid/quake/id1/models/armor +$flags 8 // client side rotate +$origin 0 0 -8 +$base base +$skin skin +$skin skin2 +$skin skin3 +$frame armor + +$modelname s_light // shambler lightning ready +$cd /raid/quake/id1/models/s_light +$origin 0 0 24 +$base base +$skin skin +$frame frame1 frame2 frame3 + +$modelname bolt3 // lightning towar bolts +$cd /raid/quake/id1/models/bolt2 +$origin 0 0 0 +$base base +$scale 4 +$skin skin +$frame light + +$modelname bolt2 +$cd /raid/quake/id1/models/bolt2 +$origin 0 0 0 +$base base +$skin skin +$frame light + +$modelname bolt +$cd /raid/quake/id1/models/bolt +$origin 0 0 0 +$base light +$skin light +$frame light + +$modelname laser +$cd /raid/quake/id1/models/laser +$base base +$skin skin +$scale 2 +$frame frame1 + +$modelname flame // with torch +$cd /raid/quake/id1/models/flame +$origin 0 0 12 +$base base +$skin skin +$framegroupstart +$frame flame1 0.1 +$frame flame2 0.1 +$frame flame3 0.1 +$frame flame4 0.1 +$frame flame5 0.1 +$frame flame6 0.1 +$framegroupend + +$modelname flame2 // standing flame, no torch +$cd /raid/quake/id1/models/flame2 +$origin 0 0 12 +$base base +$skin skin +$framegroupstart +$frame flame1 0.1 +$frame flame2 0.1 +$frame flame3 0.1 +$frame flame4 0.1 +$frame flame5 0.1 +$frame flame6 0.1 +$framegroupend +$framegroupstart +$frame flameb1 +$frame flameb2 +$frame flameb3 +$frame flameb4 +$frame flameb5 +$frame flameb6 +$frame flameb7 +$frame flameb8 +$frame flameb9 +$frame flameb10 +$frame flameb11 +$framegroupend + +$modelname zom_gib +$cd /raid/quake/id1/models/zom_gib +$flags 32 // EF_ZOMGIB +$base base +$skin skin +$frame frame1 + +$modelname eyes +$cd /raid/quake/id1/models/eyes +$origin 0 0 -24 +$base base +$skin skin +$frame frame1 + +$modelname spike +$cd /raid/quake/id1/models/spike +$origin 0 0 0 +$base spike +$skin skin +$frame spike + +$modelname s_spike +$cd /raid/quake/id1/models/s_spike +$origin 0 0 0 +$base spike +$skin skin +$frame spike + +$modelname v_spike +$cd /raid/quake/id1/models/v_spike +$flags 128 // EF_TRACER3 +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname w_spike +$cd /raid/quake/id1/models/w_spike +$flags 16 // EF_TRACER +$origin 0 0 0 +$base base +$skin skin +$framegroupstart +$frame frame1 0.1 +$frame frame2 0.1 +$frame frame3 0.1 +$frame frame4 0.1 +$framegroupend + +$modelname k_spike +$cd /raid/quake/id1/models/k_spike +$flags 64 // EF_TRACER2 +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname backpack +$cd /raid/quake/id1/models/backpack +$flags 8 // EF_ROTATE +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname grenade +$cd /raid/quake/id1/models/grenade2 +$flags 2 // EF_GRENADE +$origin 0 0 0 +$base base +$skin skin +$frame grenade + +$modelname missile +$cd /raid/quake/id1/models/missile +$flags 1 // EF_ROCKET +$origin 0 0 0 +$base base +$skin skin +$frame missile + +$modelname lavaball +$cd /raid/quake/id1/models/lavaball +$flags 1 // EF_ROCKET +$origin 0 0 0 +$base base +$skin skin +$frame frame1 + +$modelname teleport +$cd /raid/quake/id1/models/teleport +$origin 0 0 24 +$base base +$skin skin +$frame frame1 + diff --git a/quakec/fallout2/name.qc b/quakec/fallout2/name.qc new file mode 100644 index 000000000..4ca0ea2f9 --- /dev/null +++ b/quakec/fallout2/name.qc @@ -0,0 +1,198 @@ +string (entity guy, float slot) GetWeaponName = +{ + local string name; + + if (slot == 0) + name = "bare hands"; + if (slot == 1) + name = "knife"; + else if (slot == 2) + name = "axe"; + else if (slot == 3) + name = "ripper"; + else if (slot == 4) + name = "power axe"; + else if (slot == 5) + name = "1911"; + else if (slot == 6) + name = "desert eagle"; + else if (slot == 7) + name = "needler"; + else if (slot == 8) + name = "alien blaster"; + else if (slot == 9) + name = "pipe rifle"; + else if (slot == 10) + name = "winchester"; + else if (slot == 11) + name = "mossberg"; + else if (slot == 12) + name = "citykiller"; + else if (slot == 13) + name = "mp9"; + else if (slot == 14) + name = "grease gun"; + else if (slot == 15) + name = "rangemaster"; + else if (slot == 16) + name = "ak-112"; + else if (slot == 17) + name = "ak-74"; + else if (slot == 18) + name = "dks-1"; + else if (slot == 19) + name = "moonlight"; + else if (slot == 20) + name = "sa-80"; + else if (slot == 21) + name = "gauss rifle"; + else if (slot == 22) + name = "laser carbine"; + + return name; +}; + +string () GetArmorName = +{ + local string name; + local float slot; + + slot = self.armor; + + if (slot == 0) + name = "none"; + else if (slot == 1) + name = "bulletproof shirt"; + else if (slot == 2) + name = "leather armor"; + else if (slot == 3) + name = "kevlar armor"; + else if (slot == 4) + name = "metal armor"; + else if (slot == 5) + name = "combat armor"; + else if (slot == 6) + name = "brotherhood armor"; + else if (slot == 7) + name = "force armor"; + else if (slot == 8) + name = "light power armor"; + + return name; +}; + + +string () GetEquipmentName = +{ + local string name; + local float slot; + + slot = self.equipment; + + if (slot == 0) + name = "none"; + else if (slot == 1) + name = "medic's bag"; + else if (slot == 2) + name = "security alarm"; + else if (slot == 3) + name = "remote camera"; + else if (slot == 4) + name = "belt pouch"; + else if (slot == 5) + name = "backpack"; + else if (slot == 6) + name = "toolkit mark ii"; + else if (slot == 7) + name = "climbing gear"; + else if (slot == 8) + name = "enhanced battery"; + else if (slot == 9) + name = "stealth-boy"; + + return name; +}; + +string () GetProtectName = +{ + local string name; + local float slot; + + slot = self.protect; + + if (slot == 0) + name = "none"; + if (slot == 1) + name = ""; + else if (slot == 2) + name = "sacred talisman"; + else if (slot == 3) + name = "forcefield ring"; + else if (slot == 4) + name = ""; + else if (slot == 5) + name = ""; + + return name; +}; + +string () GetPerkName = +{ + local string name; + local float slot; + + slot = self.perk; + + if (slot == 0) + name = "none"; + if (slot == 1) + name = "medic's bag"; + else if (slot == 2) + name = "security alarm"; + else if (slot == 3) + name = "remote camera"; + else if (slot == 4) + name = "belt pouch"; + else if (slot == 5) + name = "backpack"; + else if (slot == 6) + name = "toolkit mark ii"; + else if (slot == 7) + name = "climbing gear"; + else if (slot == 8) + name = "enhanced battery"; + else if (slot == 9) + name = "stealth-boy"; + return name; +}; + +string () GetTraitName = +{ + local string name; + local float slot; + + slot = self.trait; + + if (slot == 0) + name = "none"; + else if (slot == 1) + name = "medic's bag"; + else if (slot == 2) + name = "security alarm"; + else if (slot == 3) + name = "remote camera"; + else if (slot == 4) + name = "belt pouch"; + else if (slot == 5) + name = "backpack"; + else if (slot == 6) + name = "toolkit mark ii"; + else if (slot == 7) + name = "climbing gear"; + else if (slot == 8) + name = "enhanced battery"; + else if (slot == 9) + name = "stealth-boy"; + + return name; +}; \ No newline at end of file diff --git a/quakec/fallout2/shalrath.qc b/quakec/fallout2/shalrath.qc new file mode 100644 index 000000000..c58b48e5e --- /dev/null +++ b/quakec/fallout2/shalrath.qc @@ -0,0 +1,233 @@ +/* +============================================================================== + +SHAL-RATH + +============================================================================== +*/ +$cd id1/models/shalrath +$origin 0 0 24 +$base base +$skin skin +$scale 0.7 + +$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8 +$frame attack9 attack10 attack11 + +$frame pain1 pain2 pain3 pain4 pain5 + +$frame death1 death2 death3 death4 death5 death6 death7 + +$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10 +$frame walk11 walk12 + +void() shalrath_pain; +void() ShalMissile; +void() shal_stand =[ $walk1, shal_stand ] {ai_stand();}; + +void() shal_walk1 =[ $walk2, shal_walk2 ] { +if (random() < 0.2) + sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE); +ai_walk(6);}; +void() shal_walk2 =[ $walk3, shal_walk3 ] {ai_walk(4);}; +void() shal_walk3 =[ $walk4, shal_walk4 ] {ai_walk(0);}; +void() shal_walk4 =[ $walk5, shal_walk5 ] {ai_walk(0);}; +void() shal_walk5 =[ $walk6, shal_walk6 ] {ai_walk(0);}; +void() shal_walk6 =[ $walk7, shal_walk7 ] {ai_walk(0);}; +void() shal_walk7 =[ $walk8, shal_walk8 ] {ai_walk(5);}; +void() shal_walk8 =[ $walk9, shal_walk9 ] {ai_walk(6);}; +void() shal_walk9 =[ $walk10, shal_walk10 ] {ai_walk(5);}; +void() shal_walk10 =[ $walk11, shal_walk11 ] {ai_walk(0);}; +void() shal_walk11 =[ $walk12, shal_walk12 ] {ai_walk(4);}; +void() shal_walk12 =[ $walk1, shal_walk1 ] {ai_walk(5);}; + +void() shal_run1 =[ $walk2, shal_run2 ] { +if (random() < 0.2) + sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE); +ai_run(6);}; +void() shal_run2 =[ $walk3, shal_run3 ] {ai_run(4);}; +void() shal_run3 =[ $walk4, shal_run4 ] {ai_run(0);}; +void() shal_run4 =[ $walk5, shal_run5 ] {ai_run(0);}; +void() shal_run5 =[ $walk6, shal_run6 ] {ai_run(0);}; +void() shal_run6 =[ $walk7, shal_run7 ] {ai_run(0);}; +void() shal_run7 =[ $walk8, shal_run8 ] {ai_run(5);}; +void() shal_run8 =[ $walk9, shal_run9 ] {ai_run(6);}; +void() shal_run9 =[ $walk10, shal_run10 ] {ai_run(5);}; +void() shal_run10 =[ $walk11, shal_run11 ] {ai_run(0);}; +void() shal_run11 =[ $walk12, shal_run12 ] {ai_run(4);}; +void() shal_run12 =[ $walk1, shal_run1 ] {ai_run(5);}; + +void() shal_attack1 =[ $attack1, shal_attack2 ] { +sound (self, CHAN_VOICE, "shalrath/attack.wav", 1, ATTN_NORM); +ai_face(); +}; +void() shal_attack2 =[ $attack2, shal_attack3 ] {ai_face();}; +void() shal_attack3 =[ $attack3, shal_attack4 ] {ai_face();}; +void() shal_attack4 =[ $attack4, shal_attack5 ] {ai_face();}; +void() shal_attack5 =[ $attack5, shal_attack6 ] {ai_face();}; +void() shal_attack6 =[ $attack6, shal_attack7 ] {ai_face();}; +void() shal_attack7 =[ $attack7, shal_attack8 ] {ai_face();}; +void() shal_attack8 =[ $attack8, shal_attack9 ] {ai_face();}; +void() shal_attack9 =[ $attack9, shal_attack10 ] {ShalMissile();}; +void() shal_attack10 =[ $attack10, shal_attack11 ] {ai_face();}; +void() shal_attack11 =[ $attack11, shal_run1 ] {}; + +void() shal_pain1 =[ $pain1, shal_pain2 ] {}; +void() shal_pain2 =[ $pain2, shal_pain3 ] {}; +void() shal_pain3 =[ $pain3, shal_pain4 ] {}; +void() shal_pain4 =[ $pain4, shal_pain5 ] {}; +void() shal_pain5 =[ $pain5, shal_run1 ] {}; + +void() shal_death1 =[ $death1, shal_death2 ] {}; +void() shal_death2 =[ $death2, shal_death3 ] {}; +void() shal_death3 =[ $death3, shal_death4 ] {}; +void() shal_death4 =[ $death4, shal_death5 ] {}; +void() shal_death5 =[ $death5, shal_death6 ] {}; +void() shal_death6 =[ $death6, shal_death7 ] {}; +void() shal_death7 =[ $death7, shal_death7 ] {}; + + +void() shalrath_pain = +{ + if (self.pain_finished > time) + return; + + sound (self, CHAN_VOICE, "shalrath/pain.wav", 1, ATTN_NORM); + shal_pain1(); + self.pain_finished = time + 3; +}; + +void() shalrath_die = +{ +// check for gib + if (self.health < -90) + { + sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM); + ThrowHead ("progs/h_shal.mdl", self.health); + ThrowGib ("progs/gib1.mdl", self.health); + ThrowGib ("progs/gib2.mdl", self.health); + ThrowGib ("progs/gib3.mdl", self.health); + return; + } + + sound (self, CHAN_VOICE, "shalrath/death.wav", 1, ATTN_NORM); + shal_death1(); + self.solid = SOLID_NOT; + // insert death sounds here +}; + +/* +================ +ShalMissile +================ +*/ +void() ShalMissileTouch; +void() ShalHome; +void() ShalMissile = +{ + local entity missile; + local vector dir; + 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; + + sound (self, CHAN_WEAPON, "shalrath/attack2.wav", 1, ATTN_NORM); + + missile = spawn (); + missile.owner = self; + + missile.solid = SOLID_BBOX; + missile.movetype = MOVETYPE_FLYMISSILE; + setmodel (missile, "progs/v_spike.mdl"); + + setsize (missile, '0 0 0', '0 0 0'); + + missile.origin = self.origin + '0 0 10'; + missile.velocity = dir * 400; + missile.avelocity = '300 300 300'; + missile.nextthink = flytime + time; + missile.think = ShalHome; + missile.enemy = self.enemy; + missile.touch = ShalMissileTouch; +}; + +void() ShalHome = +{ + local vector dir, vtemp; + vtemp = self.enemy.origin + '0 0 10'; + if (self.enemy.health < 1) + { + remove(self); + return; + } + dir = normalize(vtemp - self.origin); + self.velocity = dir * 350; + self.nextthink = time + 0.2; + self.think = ShalHome; +}; + +void() ShalMissileTouch = +{ + if (other == self.owner) + return; // don't explode on owner + + if (other.classname == "monster_zombie") + T_Damage (other, self, self, 110); + T_RadiusDamage (self, self.owner, 40, 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; + Explosion(2); +}; + +//================================================================= + +void() monster_shalrath = +{ + precache_model2 ("progs/shalrath.mdl"); + precache_model2 ("progs/h_shal.mdl"); + precache_model2 ("progs/v_spike.mdl"); + + precache_sound2 ("shalrath/attack.wav"); + precache_sound2 ("shalrath/attack2.wav"); + precache_sound2 ("shalrath/death.wav"); + precache_sound2 ("shalrath/idle.wav"); + precache_sound2 ("shalrath/pain.wav"); + precache_sound2 ("shalrath/sight.wav"); + + self.solid = SOLID_SLIDEBOX; + self.movetype = MOVETYPE_STEP; + + setmodel (self, "progs/shalrath.mdl"); + setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX); + self.health = 800; + self.corporation = 3; + self.armor = 9; + self.armortype = 0.2; + self.helmet = 1; + self.classname = "monster"; + self.netname = "experiment"; + self.th_stand = shal_stand; + self.th_walk = shal_walk1; + self.th_run = shal_run1; + self.th_die = shalrath_die; + self.th_pain = shalrath_pain; + self.th_missile = shal_attack1; + + self.think = walkmonster_start; + self.nextthink = time + 0.1 + random ()*0.1; + +}; diff --git a/quakec/fallout2/spectate.qc b/quakec/fallout2/spectate.qc new file mode 100644 index 000000000..81c653374 --- /dev/null +++ b/quakec/fallout2/spectate.qc @@ -0,0 +1,84 @@ +// Spectator functions +// Added Aug11'97 by Zoid +// +// These functions are called from the server if they exist. +// Note that Spectators only have one think since they movement code doesn't +// track them much. Impulse commands work as usual, but don't call +// the regular ImpulseCommand handler in weapons.qc since Spectators don't +// have any weapons and things can explode. +// +// --- Zoid. + +/* +=========== +SpectatorConnect + +called when a spectator connects to a server +============ +*/ +void() SpectatorConnect = +{ + bprint (PRINT_MEDIUM, "Spectator "); + bprint (PRINT_MEDIUM, self.netname); + bprint (PRINT_MEDIUM, " entered the game\n"); + + self.goalentity = world; // used for impulse 1 below +}; + +/* +=========== +SpectatorDisconnect + +called when a spectator disconnects from a server +============ +*/ +void() SpectatorDisconnect = +{ + bprint (PRINT_MEDIUM, "Spectator "); + bprint (PRINT_MEDIUM, self.netname); + bprint (PRINT_MEDIUM, " left the game\n"); +}; + +/* +================ +SpectatorImpulseCommand + +Called by SpectatorThink if the spectator entered an impulse +================ +*/ +void() SpectatorImpulseCommand = +{ + if (self.impulse == 1) { + // teleport the spectator to the next spawn point + // note that if the spectator is tracking, this doesn't do + // much + self.goalentity = find(self.goalentity, classname, "info_player_deathmatch"); + if (self.goalentity == world) + self.goalentity = find(self.goalentity, classname, "info_player_deathmatch"); + if (self.goalentity != world) { + setorigin(self, self.goalentity.origin); + self.angles = self.goalentity.angles; + self.fixangle = TRUE; // turn this way immediately + } + } + + self.impulse = 0; +}; + +/* +================ +SpectatorThink + +Called every frame after physics are run +================ +*/ +void() SpectatorThink = +{ + // self.origin, etc contains spectator position, so you could + // do some neat stuff here + + if (self.impulse) + SpectatorImpulseCommand(); +}; + + diff --git a/quakec/fallout2/sprites.qc b/quakec/fallout2/sprites.qc new file mode 100644 index 000000000..f1bb605f4 --- /dev/null +++ b/quakec/fallout2/sprites.qc @@ -0,0 +1,26 @@ + +// these are the only sprites still in the game... + +$spritename s_explod +$type vp_parallel +$load /raid/quake/id1/gfx/sprites/explod03.lbm +$frame 24 24 56 56 +$frame 120 24 56 56 +$frame 216 24 56 56 +$frame 24 88 56 56 +$frame 120 88 56 56 +$frame 216 88 56 56 + + +$spritename s_bubble +$type vp_parallel +$load /raid/quake/id1/gfx/sprites/bubble.lbm +$frame 16 16 16 16 +$frame 40 16 16 16 + + +$spritename s_light +$type vp_parallel +$load /raid/quake/id1/gfx/sprites/light.lbm +$frame 104 32 32 32 +