icculus quake2 doxygen  1.0 dev
m_insane.c
Go to the documentation of this file.
1 /*
2 Copyright (C) 1997-2001 Id Software, Inc.
3 
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13 See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 
19 */
20 /*
21 ==============================================================================
22 
23 insane
24 
25 ==============================================================================
26 */
27 
28 #include "g_local.h"
29 #include "m_insane.h"
30 
31 
32 static int sound_fist;
33 static int sound_shake;
34 static int sound_moan;
35 static int sound_scream[8];
36 
37 void insane_fist (edict_t *self)
38 {
39  gi.sound (self, CHAN_VOICE, sound_fist, 1, ATTN_IDLE, 0);
40 }
41 
42 void insane_shake (edict_t *self)
43 {
44  gi.sound (self, CHAN_VOICE, sound_shake, 1, ATTN_IDLE, 0);
45 }
46 
47 void insane_moan (edict_t *self)
48 {
49  gi.sound (self, CHAN_VOICE, sound_moan, 1, ATTN_IDLE, 0);
50 }
51 
52 void insane_scream (edict_t *self)
53 {
54  gi.sound (self, CHAN_VOICE, sound_scream[rand()%8], 1, ATTN_IDLE, 0);
55 }
56 
57 
58 void insane_stand (edict_t *self);
59 void insane_dead (edict_t *self);
60 void insane_cross (edict_t *self);
61 void insane_walk (edict_t *self);
62 void insane_run (edict_t *self);
63 void insane_checkdown (edict_t *self);
64 void insane_checkup (edict_t *self);
65 void insane_onground (edict_t *self);
66 
67 
69 {
70  {ai_stand, 0, NULL},
71  {ai_stand, 0, NULL},
72  {ai_stand, 0, NULL},
73  {ai_stand, 0, NULL},
74  {ai_stand, 0, NULL},
76 };
78 
80 {
81  {ai_stand, 0, insane_shake},
82  {ai_stand, 0, NULL},
83  {ai_stand, 0, NULL},
84  {ai_stand, 0, NULL},
85  {ai_stand, 0, NULL},
86  {ai_stand, 0, NULL},
87  {ai_stand, 0, NULL},
88  {ai_stand, 0, NULL},
89  {ai_stand, 0, NULL},
90  {ai_stand, 0, NULL},
91  {ai_stand, 0, NULL},
92  {ai_stand, 0, NULL},
93  {ai_stand, 0, NULL},
94  {ai_stand, 0, NULL},
95  {ai_stand, 0, NULL},
96  {ai_stand, 0, NULL},
97  {ai_stand, 0, NULL},
98  {ai_stand, 0, NULL},
99  {ai_stand, 0, NULL},
100  {ai_stand, 0, NULL},
101  {ai_stand, 0, NULL},
102  {ai_stand, 0, NULL},
103  {ai_stand, 0, NULL},
104  {ai_stand, 0, NULL},
105  {ai_stand, 0, NULL},
106  {ai_stand, 0, NULL},
107  {ai_stand, 0, NULL},
108  {ai_stand, 0, NULL},
109  {ai_stand, 0, NULL},
111 };
113 
115 {
116  {ai_move, 0, NULL},
117  {ai_move, 0, NULL},
118  {ai_move, 0, NULL},
119  {ai_move, 0, NULL},
120  {ai_move, 0, NULL},
121  {ai_move, 0, NULL},
122  {ai_move, 0, NULL},
123  {ai_move, 0, insane_moan},
124  {ai_move, 0, NULL},
125  {ai_move, 0, NULL},
126 
127  {ai_move, 0, NULL},
128  {ai_move, 0, NULL},
129  {ai_move, 0, NULL},
130  {ai_move, 0, NULL},
131  {ai_move, 0, NULL},
132  {ai_move, 0, NULL},
133  {ai_move, 0, NULL},
134  {ai_move, 0, NULL},
135  {ai_move, 0, NULL},
136  {ai_move, 0, NULL},
137 
138  {ai_move, 2.7, NULL},
139  {ai_move, 4.1, NULL},
140  {ai_move, 6, NULL},
141  {ai_move, 7.6, NULL},
142  {ai_move, 3.6, NULL},
143  {ai_move, 0, NULL},
144  {ai_move, 0, NULL},
145  {ai_move, 0, insane_fist},
146  {ai_move, 0, NULL},
147  {ai_move, 0, NULL},
148 
149  {ai_move, 0, NULL},
150  {ai_move, 0, NULL},
151  {ai_move, 0, NULL},
152  {ai_move, 0, insane_fist},
153  {ai_move, 0, NULL},
154  {ai_move, 0, NULL},
155  {ai_move, 0, NULL},
156  {ai_move, 0, NULL},
157  {ai_move, 0, NULL},
158  {ai_move, 0, NULL}
159 };
161 
162 
164 {
165  {ai_move, -0.7, NULL}, // 41
166  {ai_move, -1.2, NULL}, // 42
167  {ai_move, -1.5, NULL}, // 43
168  {ai_move, -4.5, NULL}, // 44
169  {ai_move, -3.5, NULL}, // 45
170  {ai_move, -0.2, NULL}, // 46
171  {ai_move, 0, NULL}, // 47
172  {ai_move, -1.3, NULL}, // 48
173  {ai_move, -3, NULL}, // 49
174  {ai_move, -2, NULL}, // 50
175  {ai_move, 0, NULL}, // 51
176  {ai_move, 0, NULL}, // 52
177  {ai_move, 0, NULL}, // 53
178  {ai_move, -3.3, NULL}, // 54
179  {ai_move, -1.6, NULL}, // 55
180  {ai_move, -0.3, NULL}, // 56
181  {ai_move, 0, NULL}, // 57
182  {ai_move, 0, NULL}, // 58
183  {ai_move, 0, NULL} // 59
184 };
186 
188 {
189  {ai_move, 0.2, NULL},
190  {ai_move, 11.5, NULL},
191  {ai_move, 5.1, NULL},
192  {ai_move, 7.1, NULL},
193  {ai_move, 0, NULL}
194 };
196 
197 
199 {
200  {ai_move, 0, NULL}, // 100
201  {ai_move, 0, NULL},
202  {ai_move, 0, NULL},
203  {ai_move, 0, NULL},
204  {ai_move, 0, NULL},
205  {ai_move, 0, NULL},
206  {ai_move, 0, NULL},
207  {ai_move, 0, NULL},
208  {ai_move, 0, NULL},
209  {ai_move, 0, NULL},
210  {ai_move, 0, NULL}, // 110
211  {ai_move, -1.7, NULL},
212  {ai_move, -1.6, NULL},
213  {ai_move, 0, NULL},
214  {ai_move, 0, NULL},
215  {ai_move, 0, NULL},
216  {ai_move, 0, insane_fist},
217  {ai_move, 0, NULL},
218  {ai_move, 0, NULL},
219  {ai_move, 0, NULL},
220  {ai_move, 0, NULL}, // 120
221  {ai_move, 0, NULL},
222  {ai_move, 0, NULL},
223  {ai_move, 0, NULL},
224  {ai_move, 0, NULL},
225  {ai_move, 0, NULL},
226  {ai_move, 0, NULL},
227  {ai_move, 0, NULL},
228  {ai_move, 0, NULL},
229  {ai_move, 0, NULL},
230  {ai_move, 0, NULL}, // 130
231  {ai_move, 0, NULL},
232  {ai_move, 0, NULL},
233  {ai_move, 0, insane_moan},
234  {ai_move, 0, NULL},
235  {ai_move, 0, NULL},
236  {ai_move, 0, NULL},
237  {ai_move, 0, NULL},
238  {ai_move, 0, NULL},
239  {ai_move, 0, NULL},
240  {ai_move, 0, NULL}, // 140
241  {ai_move, 0, NULL},
242  {ai_move, 0, NULL},
243  {ai_move, 0, NULL},
244  {ai_move, 0, NULL},
245  {ai_move, 0, NULL},
246  {ai_move, 0, NULL},
247  {ai_move, 0, NULL},
248  {ai_move, 0, NULL},
249  {ai_move, 0, NULL},
250  {ai_move, 0, NULL}, // 150
251  {ai_move, 0.5, NULL},
252  {ai_move, 0, NULL},
253  {ai_move, -0.2, insane_scream},
254  {ai_move, 0, NULL},
255  {ai_move, 0.2, NULL},
256  {ai_move, 0.4, NULL},
257  {ai_move, 0.6, NULL},
258  {ai_move, 0.8, NULL},
259  {ai_move, 0.7, NULL},
260  {ai_move, 0, insane_checkup} // 160
261 };
263 
265 {
266  {ai_walk, 0, insane_scream},
267  {ai_walk, 2.5, NULL},
268  {ai_walk, 3.5, NULL},
269  {ai_walk, 1.7, NULL},
270  {ai_walk, 2.3, NULL},
271  {ai_walk, 2.4, NULL},
272  {ai_walk, 2.2, NULL},
273  {ai_walk, 4.2, NULL},
274  {ai_walk, 5.6, NULL},
275  {ai_walk, 3.3, NULL},
276  {ai_walk, 2.4, NULL},
277  {ai_walk, 0.9, NULL},
278  {ai_walk, 0, NULL}
279 };
282 
284 {
285  {ai_walk, 0, insane_scream}, // walk 1
286  {ai_walk, 3.4, NULL}, // walk 2
287  {ai_walk, 3.6, NULL}, // 3
288  {ai_walk, 2.9, NULL}, // 4
289  {ai_walk, 2.2, NULL}, // 5
290  {ai_walk, 2.6, NULL}, // 6
291  {ai_walk, 0, NULL}, // 7
292  {ai_walk, 0.7, NULL}, // 8
293  {ai_walk, 4.8, NULL}, // 9
294  {ai_walk, 5.3, NULL}, // 10
295  {ai_walk, 1.1, NULL}, // 11
296  {ai_walk, 2, NULL}, // 12
297  {ai_walk, 0.5, NULL}, // 13
298  {ai_walk, 0, NULL}, // 14
299  {ai_walk, 0, NULL}, // 15
300  {ai_walk, 4.9, NULL}, // 16
301  {ai_walk, 6.7, NULL}, // 17
302  {ai_walk, 3.8, NULL}, // 18
303  {ai_walk, 2, NULL}, // 19
304  {ai_walk, 0.2, NULL}, // 20
305  {ai_walk, 0, NULL}, // 21
306  {ai_walk, 3.4, NULL}, // 22
307  {ai_walk, 6.4, NULL}, // 23
308  {ai_walk, 5, NULL}, // 24
309  {ai_walk, 1.8, NULL}, // 25
310  {ai_walk, 0, NULL} // 26
311 };
314 
316 {
317  {ai_move, 0, NULL},
318  {ai_move, 0, NULL},
319  {ai_move, 0, NULL},
320  {ai_move, 0, NULL},
321  {ai_move, 0, NULL},
322  {ai_move, 0, NULL},
323  {ai_move, 0, NULL},
324  {ai_move, 0, NULL},
325  {ai_move, 0, NULL},
326  {ai_move, 0, NULL},
327  {ai_move, 0, NULL}
328 };
330 
332 {
333  {ai_move, 0, NULL},
334  {ai_move, 0, NULL},
335  {ai_move, 0, NULL},
336  {ai_move, 0, NULL},
337  {ai_move, 0, NULL},
338  {ai_move, 0, NULL},
339  {ai_move, 0, NULL},
340  {ai_move, 0, NULL},
341  {ai_move, 0, NULL},
342  {ai_move, 0, NULL},
343  {ai_move, 0, NULL},
344  {ai_move, 0, NULL},
345  {ai_move, 0, NULL},
346  {ai_move, 0, NULL},
347  {ai_move, 0, NULL},
348  {ai_move, 0, NULL},
349  {ai_move, 0, NULL}
350 };
352 
354 {
355  {ai_walk, 0, insane_scream},
356  {ai_walk, 1.5, NULL},
357  {ai_walk, 2.1, NULL},
358  {ai_walk, 3.6, NULL},
359  {ai_walk, 2, NULL},
360  {ai_walk, 0.9, NULL},
361  {ai_walk, 3, NULL},
362  {ai_walk, 3.4, NULL},
363  {ai_walk, 2.4, NULL}
364 };
367 
369 {
370  {ai_move, 0, NULL},
371  {ai_move, 0, NULL},
372  {ai_move, 0, NULL},
373  {ai_move, 0, NULL},
374  {ai_move, 0, NULL},
375  {ai_move, 0, NULL},
376  {ai_move, 0, NULL},
377  {ai_move, 0, NULL},
378  {ai_move, 0, NULL}
379 };
381 
383 {
384  {ai_move, 0, NULL},
385  {ai_move, 0, NULL},
386  {ai_move, 0, NULL},
387  {ai_move, 0, NULL},
388  {ai_move, 0, NULL},
389  {ai_move, 0, NULL},
390  {ai_move, 0, NULL}
391 };
393 
395 {
396  {ai_move, 0, insane_moan},
397  {ai_move, 0, NULL},
398  {ai_move, 0, NULL},
399  {ai_move, 0, NULL},
400  {ai_move, 0, NULL},
401  {ai_move, 0, NULL},
402  {ai_move, 0, NULL},
403  {ai_move, 0, NULL},
404  {ai_move, 0, NULL},
405  {ai_move, 0, NULL},
406  {ai_move, 0, NULL},
407  {ai_move, 0, NULL},
408  {ai_move, 0, NULL},
409  {ai_move, 0, NULL},
410  {ai_move, 0, NULL}
411 };
413 
415 {
416  {ai_move, 0, insane_scream},
417  {ai_move, 0, NULL},
418  {ai_move, 0, NULL},
419  {ai_move, 0, NULL},
420  {ai_move, 0, NULL},
421  {ai_move, 0, NULL},
422  {ai_move, 0, NULL},
423  {ai_move, 0, NULL},
424  {ai_move, 0, NULL},
425  {ai_move, 0, NULL},
426  {ai_move, 0, NULL},
427  {ai_move, 0, NULL},
428  {ai_move, 0, NULL},
429  {ai_move, 0, NULL},
430  {ai_move, 0, NULL}
431 };
433 
434 void insane_cross (edict_t *self)
435 {
436  if (random() < 0.8)
437  self->monsterinfo.currentmove = &insane_move_cross;
438  else
439  self->monsterinfo.currentmove = &insane_move_struggle_cross;
440 }
441 
442 void insane_walk (edict_t *self)
443 {
444  if ( self->spawnflags & 16 ) // Hold Ground?
445  if (self->s.frame == FRAME_cr_pain10)
446  {
447  self->monsterinfo.currentmove = &insane_move_down;
448  return;
449  }
450  if (self->spawnflags & 4)
451  self->monsterinfo.currentmove = &insane_move_crawl;
452  else
453  if (random() <= 0.5)
454  self->monsterinfo.currentmove = &insane_move_walk_normal;
455  else
456  self->monsterinfo.currentmove = &insane_move_walk_insane;
457 }
458 
459 void insane_run (edict_t *self)
460 {
461  if ( self->spawnflags & 16 ) // Hold Ground?
462  if (self->s.frame == FRAME_cr_pain10)
463  {
464  self->monsterinfo.currentmove = &insane_move_down;
465  return;
466  }
467  if (self->spawnflags & 4) // Crawling?
468  self->monsterinfo.currentmove = &insane_move_runcrawl;
469  else
470  if (random() <= 0.5) // Else, mix it up
471  self->monsterinfo.currentmove = &insane_move_run_normal;
472  else
473  self->monsterinfo.currentmove = &insane_move_run_insane;
474 }
475 
476 
477 void insane_pain (edict_t *self, edict_t *other, float kick, int damage)
478 {
479  int l,r;
480 
481 // if (self->health < (self->max_health / 2))
482 // self->s.skinnum = 1;
483 
484  if (level.time < self->pain_debounce_time)
485  return;
486 
487  self->pain_debounce_time = level.time + 3;
488 
489  r = 1 + (rand()&1);
490  if (self->health < 25)
491  l = 25;
492  else if (self->health < 50)
493  l = 50;
494  else if (self->health < 75)
495  l = 75;
496  else
497  l = 100;
498  gi.sound (self, CHAN_VOICE, gi.soundindex (va("player/male/pain%i_%i.wav", l, r)), 1, ATTN_IDLE, 0);
499 
500  if (skill->value == 3)
501  return; // no pain anims in nightmare
502 
503  // Don't go into pain frames if crucified.
504  if (self->spawnflags & 8)
505  {
506  self->monsterinfo.currentmove = &insane_move_struggle_cross;
507  return;
508  }
509 
510  if ( ((self->s.frame >= FRAME_crawl1) && (self->s.frame <= FRAME_crawl9)) || ((self->s.frame >= FRAME_stand99) && (self->s.frame <= FRAME_stand160)) )
511  {
512  self->monsterinfo.currentmove = &insane_move_crawl_pain;
513  }
514  else
515  self->monsterinfo.currentmove = &insane_move_stand_pain;
516 
517 }
518 
520 {
521  self->monsterinfo.currentmove = &insane_move_down;
522 }
523 
525 {
526 // if ( (self->s.frame == FRAME_stand94) || (self->s.frame == FRAME_stand65) )
527  if (self->spawnflags & 32) // Always stand
528  return;
529  if (random() < 0.3)
530  {
531  if (random() < 0.5)
532  self->monsterinfo.currentmove = &insane_move_uptodown;
533  else
534  self->monsterinfo.currentmove = &insane_move_jumpdown;
535  }
536 }
537 
539 {
540  // If Hold_Ground and Crawl are set
541  if ( (self->spawnflags & 4) && (self->spawnflags & 16) )
542  return;
543  if (random() < 0.5)
544  self->monsterinfo.currentmove = &insane_move_downtoup;
545 
546 }
547 
548 void insane_stand (edict_t *self)
549 {
550  if (self->spawnflags & 8) // If crucified
551  {
552  self->monsterinfo.currentmove = &insane_move_cross;
553  self->monsterinfo.aiflags |= AI_STAND_GROUND;
554  }
555  // If Hold_Ground and Crawl are set
556  else if ( (self->spawnflags & 4) && (self->spawnflags & 16) )
557  self->monsterinfo.currentmove = &insane_move_down;
558  else
559  if (random() < 0.5)
560  self->monsterinfo.currentmove = &insane_move_stand_normal;
561  else
562  self->monsterinfo.currentmove = &insane_move_stand_insane;
563 }
564 
565 void insane_dead (edict_t *self)
566 {
567  if (self->spawnflags & 8)
568  {
569  self->flags |= FL_FLY;
570  }
571  else
572  {
573  VectorSet (self->mins, -16, -16, -24);
574  VectorSet (self->maxs, 16, 16, -8);
575  self->movetype = MOVETYPE_TOSS;
576  }
577  self->svflags |= SVF_DEADMONSTER;
578  self->nextthink = 0;
579  gi.linkentity (self);
580 }
581 
582 
583 void insane_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
584 {
585  int n;
586 
587  if (self->health <= self->gib_health)
588  {
589  gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_IDLE, 0);
590  for (n= 0; n < 2; n++)
591  ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
592  for (n= 0; n < 4; n++)
593  ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
594  ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
595  self->deadflag = DEAD_DEAD;
596  return;
597  }
598 
599  if (self->deadflag == DEAD_DEAD)
600  return;
601 
602  gi.sound (self, CHAN_VOICE, gi.soundindex(va("player/male/death%i.wav", (rand()%4)+1)), 1, ATTN_IDLE, 0);
603 
604  self->deadflag = DEAD_DEAD;
605  self->takedamage = DAMAGE_YES;
606 
607  if (self->spawnflags & 8)
608  {
609  insane_dead (self);
610  }
611  else
612  {
613  if ( ((self->s.frame >= FRAME_crawl1) && (self->s.frame <= FRAME_crawl9)) || ((self->s.frame >= FRAME_stand99) && (self->s.frame <= FRAME_stand160)) )
614  self->monsterinfo.currentmove = &insane_move_crawl_death;
615  else
616  self->monsterinfo.currentmove = &insane_move_stand_death;
617  }
618 }
619 
620 
621 /*QUAKED misc_insane (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn CRAWL CRUCIFIED STAND_GROUND ALWAYS_STAND
622 */
624 {
625 // static int skin = 0; //@@
626 
627  if (deathmatch->value)
628  {
629  G_FreeEdict (self);
630  return;
631  }
632 
633  sound_fist = gi.soundindex ("insane/insane11.wav");
634  sound_shake = gi.soundindex ("insane/insane5.wav");
635  sound_moan = gi.soundindex ("insane/insane7.wav");
636  sound_scream[0] = gi.soundindex ("insane/insane1.wav");
637  sound_scream[1] = gi.soundindex ("insane/insane2.wav");
638  sound_scream[2] = gi.soundindex ("insane/insane3.wav");
639  sound_scream[3] = gi.soundindex ("insane/insane4.wav");
640  sound_scream[4] = gi.soundindex ("insane/insane6.wav");
641  sound_scream[5] = gi.soundindex ("insane/insane8.wav");
642  sound_scream[6] = gi.soundindex ("insane/insane9.wav");
643  sound_scream[7] = gi.soundindex ("insane/insane10.wav");
644 
645  self->movetype = MOVETYPE_STEP;
646  self->solid = SOLID_BBOX;
647  self->s.modelindex = gi.modelindex("models/monsters/insane/tris.md2");
648 
649  VectorSet (self->mins, -16, -16, -24);
650  VectorSet (self->maxs, 16, 16, 32);
651 
652  self->health = 100;
653  self->gib_health = -50;
654  self->mass = 300;
655 
656  self->pain = insane_pain;
657  self->die = insane_die;
658 
659  self->monsterinfo.stand = insane_stand;
660  self->monsterinfo.walk = insane_walk;
661  self->monsterinfo.run = insane_run;
662  self->monsterinfo.dodge = NULL;
663  self->monsterinfo.attack = NULL;
664  self->monsterinfo.melee = NULL;
665  self->monsterinfo.sight = NULL;
666  self->monsterinfo.aiflags |= AI_GOOD_GUY;
667 
668 //@@
669 // self->s.skinnum = skin;
670 // skin++;
671 // if (skin > 12)
672 // skin = 0;
673 
674  gi.linkentity (self);
675 
676  if (self->spawnflags & 16) // Stand Ground
677  self->monsterinfo.aiflags |= AI_STAND_GROUND;
678 
679  self->monsterinfo.currentmove = &insane_move_stand_normal;
680 
681  self->monsterinfo.scale = MODEL_SCALE;
682 
683  if (self->spawnflags & 8) // Crucified ?
684  {
685  VectorSet (self->mins, -16, 0, 0);
686  VectorSet (self->maxs, 16, 8, 32);
687  self->flags |= FL_NO_KNOCKBACK;
688  flymonster_start (self);
689  }
690  else
691  {
692  walkmonster_start (self);
693  self->s.skinnum = rand()%3;
694  }
695 }
gi
game_import_t gi
Definition: g_main.c:25
insane_frames_struggle_cross
mframe_t insane_frames_struggle_cross[]
Definition: m_insane.c:414
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
insane_walk
void insane_walk(edict_t *self)
Definition: m_insane.c:442
insane_frames_crawl_death
mframe_t insane_frames_crawl_death[]
Definition: m_insane.c:382
insane_moan
void insane_moan(edict_t *self)
Definition: m_insane.c:47
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:113
insane_move_walk_insane
mmove_t insane_move_walk_insane
Definition: m_insane.c:312
insane_pain
void insane_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_insane.c:477
sound_scream
static int sound_scream[8]
Definition: m_insane.c:35
insane_frames_stand_death
mframe_t insane_frames_stand_death[]
Definition: m_insane.c:331
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:135
AI_GOOD_GUY
#define AI_GOOD_GUY
Definition: g_local.h:135
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
insane_frames_down
mframe_t insane_frames_down[]
Definition: m_insane.c:198
FRAME_stand96
#define FRAME_stand96
Definition: m_insane.h:119
insane_move_crawl_death
mmove_t insane_move_crawl_death
Definition: m_insane.c:392
insane_scream
void insane_scream(edict_t *self)
Definition: m_insane.c:52
sound_fist
static int sound_fist
Definition: m_insane.c:32
insane_frames_cross
mframe_t insane_frames_cross[]
Definition: m_insane.c:394
FRAME_cr_death10
#define FRAME_cr_death10
Definition: m_insane.h:269
insane_move_stand_death
mmove_t insane_move_stand_death
Definition: m_insane.c:351
FRAME_stand100
#define FRAME_stand100
Definition: m_insane.h:123
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:127
insane_move_crawl
mmove_t insane_move_crawl
Definition: m_insane.c:365
FRAME_cross15
#define FRAME_cross15
Definition: m_insane.h:290
insane_move_walk_normal
mmove_t insane_move_walk_normal
Definition: m_insane.c:280
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
insane_frames_downtoup
mframe_t insane_frames_downtoup[]
Definition: m_insane.c:163
sound_shake
static int sound_shake
Definition: m_insane.c:33
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:87
game_import_t::sound
void(* sound)(edict_t *ent, int channel, int soundindex, float volume, float attenuation, float timeofs)
Definition: game.h:109
ATTN_IDLE
#define ATTN_IDLE
Definition: q_shared.h:1020
m_insane.h
FL_NO_KNOCKBACK
#define FL_NO_KNOCKBACK
Definition: g_local.h:68
FRAME_cr_death16
#define FRAME_cr_death16
Definition: m_insane.h:275
FRAME_walk27
#define FRAME_walk27
Definition: m_chick.h:231
SP_misc_insane
void SP_misc_insane(edict_t *self)
Definition: m_insane.c:623
insane_checkup
void insane_checkup(edict_t *self)
Definition: m_insane.c:538
insane_die
void insane_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_insane.c:583
FRAME_cross16
#define FRAME_cross16
Definition: m_insane.h:291
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:692
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:194
insane_move_run_insane
mmove_t insane_move_run_insane
Definition: m_insane.c:313
FRAME_walk39
#define FRAME_walk39
Definition: m_insane.h:196
va
char * va(char *format,...)
Definition: q_shared.c:1050
SVF_DEADMONSTER
#define SVF_DEADMONSTER
Definition: game.h:28
FRAME_stand59
#define FRAME_stand59
Definition: m_brain.h:244
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:1009
insane_cross
void insane_cross(edict_t *self)
Definition: m_insane.c:434
edict_s
Definition: g_local.h:962
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
r
GLdouble GLdouble r
Definition: qgl_win.c:336
FRAME_st_death18
#define FRAME_st_death18
Definition: m_insane.h:250
insane_move_down
mmove_t insane_move_down
Definition: m_insane.c:262
FRAME_cr_pain10
#define FRAME_cr_pain10
Definition: m_insane.h:268
game_import_t::soundindex
int(* soundindex)(char *name)
Definition: game.h:122
FRAME_cross1
#define FRAME_cross1
Definition: m_insane.h:276
insane_frames_crawl
mframe_t insane_frames_crawl[]
Definition: m_insane.c:353
insane_shake
void insane_shake(edict_t *self)
Definition: m_insane.c:42
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
FRAME_stand99
#define FRAME_stand99
Definition: m_insane.h:122
FRAME_st_pain12
#define FRAME_st_pain12
Definition: m_insane.h:233
mframe_t
Definition: g_local.h:401
insane_dead
void insane_dead(edict_t *self)
Definition: m_insane.c:565
mmove_t
Definition: g_local.h:408
FRAME_crawl1
#define FRAME_crawl1
Definition: m_insane.h:251
insane_frames_uptodown
mframe_t insane_frames_uptodown[]
Definition: m_insane.c:114
cvar_s::value
float value
Definition: q_shared.h:324
FRAME_stand60
#define FRAME_stand60
Definition: m_brain.h:245
insane_move_downtoup
mmove_t insane_move_downtoup
Definition: m_insane.c:185
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:163
insane_move_cross
mmove_t insane_move_cross
Definition: m_insane.c:412
random
#define random()
Definition: g_local.h:509
FRAME_stand94
#define FRAME_stand94
Definition: m_insane.h:117
FRAME_cross30
#define FRAME_cross30
Definition: m_insane.h:305
FRAME_stand1
#define FRAME_stand1
Definition: m_berserk.h:24
NULL
#define NULL
Definition: q_shared.h:60
FRAME_stand65
#define FRAME_stand65
Definition: m_gunner.h:88
insane_onground
void insane_onground(edict_t *self)
Definition: m_insane.c:519
skill
cvar_t * skill
Definition: g_main.c:38
FRAME_stand160
#define FRAME_stand160
Definition: m_insane.h:183
insane_frames_walk_insane
mframe_t insane_frames_walk_insane[]
Definition: m_insane.c:283
insane_frames_stand_normal
mframe_t insane_frames_stand_normal[]
Definition: m_insane.c:68
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
FRAME_walk1
#define FRAME_walk1
Definition: m_boss2.h:74
insane_frames_jumpdown
mframe_t insane_frames_jumpdown[]
Definition: m_insane.c:187
insane_move_crawl_pain
mmove_t insane_move_crawl_pain
Definition: m_insane.c:380
FRAME_stand40
#define FRAME_stand40
Definition: m_boss2.h:34
FRAME_stand41
#define FRAME_stand41
Definition: m_boss2.h:35
FRAME_st_pain2
#define FRAME_st_pain2
Definition: m_insane.h:223
insane_move_run_normal
mmove_t insane_move_run_normal
Definition: m_insane.c:281
level
GLint level
Definition: qgl_win.c:116
insane_stand
void insane_stand(edict_t *self)
Definition: m_insane.c:548
insane_frames_walk_normal
mframe_t insane_frames_walk_normal[]
Definition: m_insane.c:264
insane_frames_stand_insane
mframe_t insane_frames_stand_insane[]
Definition: m_insane.c:79
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:123
insane_move_runcrawl
mmove_t insane_move_runcrawl
Definition: m_insane.c:366
FRAME_cr_pain2
#define FRAME_cr_pain2
Definition: m_insane.h:260
insane_move_stand_insane
mmove_t insane_move_stand_insane
Definition: m_insane.c:112
FL_FLY
#define FL_FLY
Definition: g_local.h:57
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:183
insane_move_struggle_cross
mmove_t insane_move_struggle_cross
Definition: m_insane.c:432
FRAME_walk26
#define FRAME_walk26
Definition: m_chick.h:230
insane_checkdown
void insane_checkdown(edict_t *self)
Definition: m_insane.c:524
insane_move_stand_normal
mmove_t insane_move_stand_normal
Definition: m_insane.c:77
FRAME_st_death2
#define FRAME_st_death2
Definition: m_insane.h:234
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:196
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:161
insane_run
void insane_run(edict_t *self)
Definition: m_insane.c:459
insane_move_uptodown
mmove_t insane_move_uptodown
Definition: m_insane.c:160
insane_fist
void insane_fist(edict_t *self)
Definition: m_insane.c:37
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
insane_move_jumpdown
mmove_t insane_move_jumpdown
Definition: m_insane.c:195
FRAME_crawl9
#define FRAME_crawl9
Definition: m_insane.h:259
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:127
insane_frames_stand_pain
mframe_t insane_frames_stand_pain[]
Definition: m_insane.c:315
sound_moan
static int sound_moan
Definition: m_insane.c:34
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:106
g_local.h
flymonster_start
void flymonster_start(edict_t *self)
Definition: g_monster.c:715
insane_frames_crawl_pain
mframe_t insane_frames_crawl_pain[]
Definition: m_insane.c:368
insane_move_stand_pain
mmove_t insane_move_stand_pain
Definition: m_insane.c:329