fish.qc 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. /* Copyright (C) 1996-2022 id Software LLC
  2. This program is free software; you can redistribute it and/or modify
  3. it under the terms of the GNU General Public License as published by
  4. the Free Software Foundation; either version 2 of the License, or
  5. (at your option) any later version.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  9. GNU General Public License for more details.
  10. You should have received a copy of the GNU General Public License
  11. along with this program; if not, write to the Free Software
  12. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  13. See file, 'COPYING', for details.
  14. */
  15. $cd /raid/quake/id1/models/fish
  16. $origin 0 0 24
  17. $base base
  18. $skin skin
  19. $frame attack1 attack2 attack3 attack4 attack5 attack6
  20. $frame attack7 attack8 attack9 attack10 attack11 attack12 attack13
  21. $frame attack14 attack15 attack16 attack17 attack18
  22. $frame death1 death2 death3 death4 death5 death6 death7
  23. $frame death8 death9 death10 death11 death12 death13 death14 death15
  24. $frame death16 death17 death18 death19 death20 death21
  25. $frame swim1 swim2 swim3 swim4 swim5 swim6 swim7 swim8
  26. $frame swim9 swim10 swim11 swim12 swim13 swim14 swim15 swim16 swim17
  27. $frame swim18
  28. $frame pain1 pain2 pain3 pain4 pain5 pain6 pain7 pain8
  29. $frame pain9
  30. void() swimmonster_start;
  31. void() f_stand1 =[ $swim1, f_stand2 ] {ai_stand();};
  32. void() f_stand2 =[ $swim2, f_stand3 ] {ai_stand();};
  33. void() f_stand3 =[ $swim3, f_stand4 ] {ai_stand();};
  34. void() f_stand4 =[ $swim4, f_stand5 ] {ai_stand();};
  35. void() f_stand5 =[ $swim5, f_stand6 ] {ai_stand();};
  36. void() f_stand6 =[ $swim6, f_stand7 ] {ai_stand();};
  37. void() f_stand7 =[ $swim7, f_stand8 ] {ai_stand();};
  38. void() f_stand8 =[ $swim8, f_stand9 ] {ai_stand();};
  39. void() f_stand9 =[ $swim9, f_stand10 ] {ai_stand();};
  40. void() f_stand10 =[ $swim10, f_stand11 ] {ai_stand();};
  41. void() f_stand11 =[ $swim11, f_stand12 ] {ai_stand();};
  42. void() f_stand12 =[ $swim12, f_stand13 ] {ai_stand();};
  43. void() f_stand13 =[ $swim13, f_stand14 ] {ai_stand();};
  44. void() f_stand14 =[ $swim14, f_stand15 ] {ai_stand();};
  45. void() f_stand15 =[ $swim15, f_stand16 ] {ai_stand();};
  46. void() f_stand16 =[ $swim16, f_stand17 ] {ai_stand();};
  47. void() f_stand17 =[ $swim17, f_stand18 ] {ai_stand();};
  48. void() f_stand18 =[ $swim18, f_stand1 ] {ai_stand();};
  49. void() f_walk1 =[ $swim1, f_walk2 ] {ai_walk(8);};
  50. void() f_walk2 =[ $swim2, f_walk3 ] {ai_walk(8);};
  51. void() f_walk3 =[ $swim3, f_walk4 ] {ai_walk(8);};
  52. void() f_walk4 =[ $swim4, f_walk5 ] {ai_walk(8);};
  53. void() f_walk5 =[ $swim5, f_walk6 ] {ai_walk(8);};
  54. void() f_walk6 =[ $swim6, f_walk7 ] {ai_walk(8);};
  55. void() f_walk7 =[ $swim7, f_walk8 ] {ai_walk(8);};
  56. void() f_walk8 =[ $swim8, f_walk9 ] {ai_walk(8);};
  57. void() f_walk9 =[ $swim9, f_walk10 ] {ai_walk(8);};
  58. void() f_walk10 =[ $swim10, f_walk11 ] {ai_walk(8);};
  59. void() f_walk11 =[ $swim11, f_walk12 ] {ai_walk(8);};
  60. void() f_walk12 =[ $swim12, f_walk13 ] {ai_walk(8);};
  61. void() f_walk13 =[ $swim13, f_walk14 ] {ai_walk(8);};
  62. void() f_walk14 =[ $swim14, f_walk15 ] {ai_walk(8);};
  63. void() f_walk15 =[ $swim15, f_walk16 ] {ai_walk(8);};
  64. void() f_walk16 =[ $swim16, f_walk17 ] {ai_walk(8);};
  65. void() f_walk17 =[ $swim17, f_walk18 ] {ai_walk(8);};
  66. void() f_walk18 =[ $swim18, f_walk1 ] {ai_walk(8);};
  67. void() f_run1 =[ $swim1, f_run2 ] {ai_run(12);
  68. if (random() < 0.5)
  69. sound (self, CHAN_VOICE, "fish/idle.wav", 1, ATTN_NORM);
  70. };
  71. void() f_run2 =[ $swim3, f_run3 ] {ai_run(12);};
  72. void() f_run3 =[ $swim5, f_run4 ] {ai_run(12);};
  73. void() f_run4 =[ $swim7, f_run5 ] {ai_run(12);};
  74. void() f_run5 =[ $swim9, f_run6 ] {ai_run(12);};
  75. void() f_run6 =[ $swim11, f_run7 ] {ai_run(12);};
  76. void() f_run7 =[ $swim13, f_run8 ] {ai_run(12);};
  77. void() f_run8 =[ $swim15, f_run9 ] {ai_run(12);};
  78. void() f_run9 =[ $swim17, f_run1 ] {ai_run(12);};
  79. void() fish_melee =
  80. {
  81. local vector delta;
  82. local float ldmg;
  83. if (!self.enemy)
  84. return; // removed before stroke
  85. delta = self.enemy.origin - self.origin;
  86. if (vlen(delta) > 60)
  87. return;
  88. sound (self, CHAN_VOICE, "fish/bite.wav", 1, ATTN_NORM);
  89. ldmg = (random() + random()) * 3;
  90. T_Damage (self.enemy, self, self, ldmg);
  91. };
  92. void() f_attack1 =[ $attack1, f_attack2 ] {ai_charge(10);};
  93. void() f_attack2 =[ $attack2, f_attack3 ] {ai_charge(10);};
  94. void() f_attack3 =[ $attack3, f_attack4 ] {fish_melee();};
  95. void() f_attack4 =[ $attack4, f_attack5 ] {ai_charge(10);};
  96. void() f_attack5 =[ $attack5, f_attack6 ] {ai_charge(10);};
  97. void() f_attack6 =[ $attack6, f_attack7 ] {ai_charge(10);};
  98. void() f_attack7 =[ $attack7, f_attack8 ] {ai_charge(10);};
  99. void() f_attack8 =[ $attack8, f_attack9 ] {ai_charge(10);};
  100. void() f_attack9 =[ $attack9, f_attack10] {fish_melee();};
  101. void() f_attack10 =[ $attack10, f_attack11] {ai_charge(10);};
  102. void() f_attack11 =[ $attack11, f_attack12] {ai_charge(10);};
  103. void() f_attack12 =[ $attack12, f_attack13] {ai_charge(10);};
  104. void() f_attack13 =[ $attack13, f_attack14] {ai_charge(10);};
  105. void() f_attack14 =[ $attack14, f_attack15] {ai_charge(10);};
  106. void() f_attack15 =[ $attack15, f_attack16] {fish_melee();};
  107. void() f_attack16 =[ $attack16, f_attack17] {ai_charge(10);};
  108. void() f_attack17 =[ $attack17, f_attack18] {ai_charge(10);};
  109. void() f_attack18 =[ $attack18, f_run1 ] {ai_charge(10);};
  110. void() f_death1 =[ $death1, f_death2 ] {
  111. sound (self, CHAN_VOICE, "fish/death.wav", 1, ATTN_NORM);
  112. };
  113. void() f_death2 =[ $death2, f_death3 ] {};
  114. void() f_death3 =[ $death3, f_death4 ] {};
  115. void() f_death4 =[ $death4, f_death5 ] {};
  116. void() f_death5 =[ $death5, f_death6 ] {};
  117. void() f_death6 =[ $death6, f_death7 ] {};
  118. void() f_death7 =[ $death7, f_death8 ] {};
  119. void() f_death8 =[ $death8, f_death9 ] {};
  120. void() f_death9 =[ $death9, f_death10 ] {};
  121. void() f_death10 =[ $death10, f_death11 ] {};
  122. void() f_death11 =[ $death11, f_death12 ] {};
  123. void() f_death12 =[ $death12, f_death13 ] {};
  124. void() f_death13 =[ $death13, f_death14 ] {};
  125. void() f_death14 =[ $death14, f_death15 ] {};
  126. void() f_death15 =[ $death15, f_death16 ] {};
  127. void() f_death16 =[ $death16, f_death17 ] {};
  128. void() f_death17 =[ $death17, f_death18 ] {};
  129. void() f_death18 =[ $death18, f_death19 ] {};
  130. void() f_death19 =[ $death19, f_death20 ] {};
  131. void() f_death20 =[ $death20, f_death21 ] {};
  132. void() f_death21 =[ $death21, f_death21 ] {self.solid = SOLID_NOT;};
  133. void() f_pain1 =[ $pain1, f_pain2 ] {};
  134. void() f_pain2 =[ $pain2, f_pain3 ] {ai_pain(6);};
  135. void() f_pain3 =[ $pain3, f_pain4 ] {ai_pain(6);};
  136. void() f_pain4 =[ $pain4, f_pain5 ] {ai_pain(6);};
  137. void() f_pain5 =[ $pain5, f_pain6 ] {ai_pain(6);};
  138. void() f_pain6 =[ $pain6, f_pain7 ] {ai_pain(6);};
  139. void() f_pain7 =[ $pain7, f_pain8 ] {ai_pain(6);};
  140. void() f_pain8 =[ $pain8, f_pain9 ] {ai_pain(6);};
  141. void() f_pain9 =[ $pain9, f_run1 ] {ai_pain(6);};
  142. void(entity attacker, float damage) fish_pain =
  143. {
  144. // fish allways do pain frames
  145. f_pain1 ();
  146. };
  147. //(-16 -16 -24) (16 16 24)
  148. /*QUAKED monster_fish (1 0 0) (-16 -16 -24) (16 16 32) Ambush
  149. */
  150. void() monster_fish =
  151. {
  152. if (deathmatch)
  153. {
  154. remove(self);
  155. return;
  156. }
  157. precache_model2 ("progs/fish.mdl");
  158. precache_sound2 ("fish/death.wav");
  159. precache_sound2 ("fish/bite.wav");
  160. precache_sound2 ("fish/idle.wav");
  161. self.solid = SOLID_SLIDEBOX;
  162. self.movetype = MOVETYPE_STEP;
  163. setmodel (self, "progs/fish.mdl");
  164. // setsize (self, '-16 -16 -24', '16 16 24');
  165. setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
  166. self.health = 25;
  167. self.th_stand = f_stand1;
  168. self.th_walk = f_walk1;
  169. self.th_run = f_run1;
  170. self.th_die = f_death1;
  171. self.th_pain = fish_pain;
  172. self.th_melee = f_attack1;
  173. swimmonster_start ();
  174. };