vkQuake2 doxygen  1.0 dev
m_chick.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 chick
24 
25 ==============================================================================
26 */
27 
28 #include "g_local.h"
29 #include "m_chick.h"
30 
31 qboolean visible (edict_t *self, edict_t *other);
32 
33 void chick_stand (edict_t *self);
34 void chick_run (edict_t *self);
35 void chick_reslash(edict_t *self);
36 void chick_rerocket(edict_t *self);
37 void chick_attack1(edict_t *self);
38 
41 static int sound_melee_swing;
42 static int sound_melee_hit;
44 static int sound_death1;
45 static int sound_death2;
46 static int sound_fall_down;
47 static int sound_idle1;
48 static int sound_idle2;
49 static int sound_pain1;
50 static int sound_pain2;
51 static int sound_pain3;
52 static int sound_sight;
53 static int sound_search;
54 
55 
56 void ChickMoan (edict_t *self)
57 {
58  if (random() < 0.5)
59  gi.sound (self, CHAN_VOICE, sound_idle1, 1, ATTN_IDLE, 0);
60  else
61  gi.sound (self, CHAN_VOICE, sound_idle2, 1, ATTN_IDLE, 0);
62 }
63 
65 {
66  ai_stand, 0, NULL,
67  ai_stand, 0, NULL,
68  ai_stand, 0, NULL,
69  ai_stand, 0, NULL,
70  ai_stand, 0, NULL,
71  ai_stand, 0, NULL,
72  ai_stand, 0, NULL,
73  ai_stand, 0, NULL,
74  ai_stand, 0, ChickMoan,
75  ai_stand, 0, NULL,
76  ai_stand, 0, NULL,
77  ai_stand, 0, NULL,
78  ai_stand, 0, NULL,
79  ai_stand, 0, NULL,
80  ai_stand, 0, NULL,
81  ai_stand, 0, NULL,
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 };
98 
99 void chick_fidget (edict_t *self)
100 {
101  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
102  return;
103  if (random() <= 0.3)
104  self->monsterinfo.currentmove = &chick_move_fidget;
105 }
106 
108 {
109  ai_stand, 0, NULL,
110  ai_stand, 0, NULL,
111  ai_stand, 0, NULL,
112  ai_stand, 0, NULL,
113  ai_stand, 0, NULL,
114  ai_stand, 0, NULL,
115  ai_stand, 0, NULL,
116  ai_stand, 0, NULL,
117  ai_stand, 0, NULL,
118  ai_stand, 0, NULL,
119  ai_stand, 0, NULL,
120  ai_stand, 0, NULL,
121  ai_stand, 0, NULL,
122  ai_stand, 0, NULL,
123  ai_stand, 0, NULL,
124  ai_stand, 0, NULL,
125  ai_stand, 0, NULL,
126  ai_stand, 0, NULL,
127  ai_stand, 0, NULL,
128  ai_stand, 0, NULL,
129  ai_stand, 0, NULL,
130  ai_stand, 0, NULL,
131  ai_stand, 0, NULL,
132  ai_stand, 0, NULL,
133  ai_stand, 0, NULL,
134  ai_stand, 0, NULL,
135  ai_stand, 0, NULL,
136  ai_stand, 0, NULL,
137  ai_stand, 0, NULL,
139 
140 };
142 
143 void chick_stand (edict_t *self)
144 {
145  self->monsterinfo.currentmove = &chick_move_stand;
146 }
147 
149 {
150  ai_run, 1, NULL,
151  ai_run, 0, NULL,
152  ai_run, 0, NULL,
153  ai_run, -1, NULL,
154  ai_run, -1, NULL,
155  ai_run, 0, NULL,
156  ai_run, 1, NULL,
157  ai_run, 3, NULL,
158  ai_run, 6, NULL,
159  ai_run, 3, NULL
160 };
162 
164 {
165  ai_run, 6, NULL,
166  ai_run, 8, NULL,
167  ai_run, 13, NULL,
168  ai_run, 5, NULL,
169  ai_run, 7, NULL,
170  ai_run, 4, NULL,
171  ai_run, 11, NULL,
172  ai_run, 5, NULL,
173  ai_run, 9, NULL,
174  ai_run, 7, NULL
175 
176 };
177 
179 
181 {
182  ai_walk, 6, NULL,
183  ai_walk, 8, NULL,
184  ai_walk, 13, NULL,
185  ai_walk, 5, NULL,
186  ai_walk, 7, NULL,
187  ai_walk, 4, NULL,
188  ai_walk, 11, NULL,
189  ai_walk, 5, NULL,
190  ai_walk, 9, NULL,
191  ai_walk, 7, NULL
192 };
193 
195 
196 void chick_walk (edict_t *self)
197 {
198  self->monsterinfo.currentmove = &chick_move_walk;
199 }
200 
201 void chick_run (edict_t *self)
202 {
203  if (self->monsterinfo.aiflags & AI_STAND_GROUND)
204  {
205  self->monsterinfo.currentmove = &chick_move_stand;
206  return;
207  }
208 
209  if (self->monsterinfo.currentmove == &chick_move_walk ||
210  self->monsterinfo.currentmove == &chick_move_start_run)
211  {
212  self->monsterinfo.currentmove = &chick_move_run;
213  }
214  else
215  {
216  self->monsterinfo.currentmove = &chick_move_start_run;
217  }
218 }
219 
221 {
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 };
229 
231 {
232  ai_move, 0, NULL,
233  ai_move, 0, NULL,
234  ai_move, 0, NULL,
235  ai_move, 0, NULL,
236  ai_move, 0, NULL
237 };
239 
241 {
242  ai_move, 0, NULL,
243  ai_move, 0, NULL,
244  ai_move, -6, NULL,
245  ai_move, 3, NULL,
246  ai_move, 11, NULL,
247  ai_move, 3, NULL,
248  ai_move, 0, NULL,
249  ai_move, 0, NULL,
250  ai_move, 4, NULL,
251  ai_move, 1, NULL,
252  ai_move, 0, NULL,
253  ai_move, -3, NULL,
254  ai_move, -4, NULL,
255  ai_move, 5, NULL,
256  ai_move, 7, NULL,
257  ai_move, -2, NULL,
258  ai_move, 3, NULL,
259  ai_move, -5, NULL,
260  ai_move, -2, NULL,
261  ai_move, -8, NULL,
262  ai_move, 2, NULL
263 };
265 
266 void chick_pain (edict_t *self, edict_t *other, float kick, int damage)
267 {
268  float r;
269 
270  if (self->health < (self->max_health / 2))
271  self->s.skinnum = 1;
272 
273  if (level.time < self->pain_debounce_time)
274  return;
275 
276  self->pain_debounce_time = level.time + 3;
277 
278  r = random();
279  if (r < 0.33)
280  gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
281  else if (r < 0.66)
282  gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
283  else
284  gi.sound (self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM, 0);
285 
286  if (skill->value == 3)
287  return; // no pain anims in nightmare
288 
289  if (damage <= 10)
290  self->monsterinfo.currentmove = &chick_move_pain1;
291  else if (damage <= 25)
292  self->monsterinfo.currentmove = &chick_move_pain2;
293  else
294  self->monsterinfo.currentmove = &chick_move_pain3;
295 }
296 
297 void chick_dead (edict_t *self)
298 {
299  VectorSet (self->mins, -16, -16, 0);
300  VectorSet (self->maxs, 16, 16, 16);
301  self->movetype = MOVETYPE_TOSS;
302  self->svflags |= SVF_DEADMONSTER;
303  self->nextthink = 0;
304  gi.linkentity (self);
305 }
306 
308 {
309  ai_move, -6, NULL,
310  ai_move, 0, NULL,
311  ai_move, -1, NULL,
312  ai_move, -5, NULL,
313  ai_move, 0, NULL,
314  ai_move, -1, NULL,
315  ai_move, -2, NULL,
316  ai_move, 1, NULL,
317  ai_move, 10, NULL,
318  ai_move, 2, NULL,
319  ai_move, 3, NULL,
320  ai_move, 1, NULL,
321  ai_move, 2, NULL,
322  ai_move, 0, NULL,
323  ai_move, 3, NULL,
324  ai_move, 3, NULL,
325  ai_move, 1, NULL,
326  ai_move, -3, NULL,
327  ai_move, -5, NULL,
328  ai_move, 4, NULL,
329  ai_move, 15, NULL,
330  ai_move, 14, NULL,
331  ai_move, 1, NULL
332 };
334 
336 {
337  ai_move, 0, NULL,
338  ai_move, 0, NULL,
339  ai_move, -7, NULL,
340  ai_move, 4, NULL,
341  ai_move, 11, 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 
350 };
352 
353 void chick_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
354 {
355  int n;
356 
357 // check for gib
358  if (self->health <= self->gib_health)
359  {
360  gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
361  for (n= 0; n < 2; n++)
362  ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
363  for (n= 0; n < 4; n++)
364  ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
365  ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
366  self->deadflag = DEAD_DEAD;
367  return;
368  }
369 
370  if (self->deadflag == DEAD_DEAD)
371  return;
372 
373 // regular death
374  self->deadflag = DEAD_DEAD;
375  self->takedamage = DAMAGE_YES;
376 
377  n = rand() % 2;
378  if (n == 0)
379  {
380  self->monsterinfo.currentmove = &chick_move_death1;
381  gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0);
382  }
383  else
384  {
385  self->monsterinfo.currentmove = &chick_move_death2;
386  gi.sound (self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0);
387  }
388 }
389 
390 
392 {
393  if (self->monsterinfo.aiflags & AI_DUCKED)
394  return;
395  self->monsterinfo.aiflags |= AI_DUCKED;
396  self->maxs[2] -= 32;
397  self->takedamage = DAMAGE_YES;
398  self->monsterinfo.pausetime = level.time + 1;
399  gi.linkentity (self);
400 }
401 
403 {
404  if (level.time >= self->monsterinfo.pausetime)
405  self->monsterinfo.aiflags &= ~AI_HOLD_FRAME;
406  else
407  self->monsterinfo.aiflags |= AI_HOLD_FRAME;
408 }
409 
410 void chick_duck_up (edict_t *self)
411 {
412  self->monsterinfo.aiflags &= ~AI_DUCKED;
413  self->maxs[2] += 32;
414  self->takedamage = DAMAGE_AIM;
415  gi.linkentity (self);
416 }
417 
419 {
421  ai_move, 1, NULL,
423  ai_move, -4, NULL,
424  ai_move, -5, chick_duck_up,
425  ai_move, 3, NULL,
426  ai_move, 1, NULL
427 };
429 
430 void chick_dodge (edict_t *self, edict_t *attacker, float eta)
431 {
432  if (random() > 0.25)
433  return;
434 
435  if (!self->enemy)
436  self->enemy = attacker;
437 
439 }
440 
441 void ChickSlash (edict_t *self)
442 {
443  vec3_t aim;
444 
445  VectorSet (aim, MELEE_DISTANCE, self->mins[0], 10);
447  fire_hit (self, aim, (10 + (rand() %6)), 100);
448 }
449 
450 
451 void ChickRocket (edict_t *self)
452 {
454  vec3_t start;
455  vec3_t dir;
456  vec3_t vec;
457 
458  AngleVectors (self->s.angles, forward, right, NULL);
460 
461  VectorCopy (self->enemy->s.origin, vec);
462  vec[2] += self->enemy->viewheight;
463  VectorSubtract (vec, start, dir);
464  VectorNormalize (dir);
465 
466  monster_fire_rocket (self, start, dir, 50, 500, MZ2_CHICK_ROCKET_1);
467 }
468 
470 {
472 }
473 
474 void ChickReload (edict_t *self)
475 {
477 }
478 
479 
481 {
483  ai_charge, 0, NULL,
484  ai_charge, 0, NULL,
485  ai_charge, 4, NULL,
486  ai_charge, 0, NULL,
487  ai_charge, -3, NULL,
488  ai_charge, 3, NULL,
489  ai_charge, 5, NULL,
490  ai_charge, 7, NULL,
491  ai_charge, 0, NULL,
492  ai_charge, 0, NULL,
493  ai_charge, 0, NULL,
495 };
497 
498 
500 {
501  ai_charge, 19, ChickRocket,
502  ai_charge, -6, NULL,
503  ai_charge, -5, NULL,
504  ai_charge, -2, NULL,
505  ai_charge, -7, NULL,
506  ai_charge, 0, NULL,
507  ai_charge, 1, NULL,
508  ai_charge, 10, ChickReload,
509  ai_charge, 4, NULL,
510  ai_charge, 5, NULL,
511  ai_charge, 6, NULL,
512  ai_charge, 6, NULL,
513  ai_charge, 4, NULL,
515 
516 };
518 
520 {
521  ai_charge, -3, NULL,
522  ai_charge, 0, NULL,
523  ai_charge, -6, NULL,
524  ai_charge, -4, NULL,
525  ai_charge, -2, NULL
526 };
528 
530 {
531  if (self->enemy->health > 0)
532  {
533  if (range (self, self->enemy) > RANGE_MELEE)
534  if ( visible (self, self->enemy) )
535  if (random() <= 0.6)
536  {
537  self->monsterinfo.currentmove = &chick_move_attack1;
538  return;
539  }
540  }
541  self->monsterinfo.currentmove = &chick_move_end_attack1;
542 }
543 
545 {
546  self->monsterinfo.currentmove = &chick_move_attack1;
547 }
548 
550 {
551  ai_charge, 1, NULL,
552  ai_charge, 7, ChickSlash,
553  ai_charge, -7, NULL,
554  ai_charge, 1, NULL,
555  ai_charge, -1, NULL,
556  ai_charge, 1, NULL,
557  ai_charge, 0, NULL,
558  ai_charge, 1, NULL,
560 };
562 
564 {
565  ai_charge, -6, NULL,
566  ai_charge, -1, NULL,
567  ai_charge, -6, NULL,
568  ai_charge, 0, NULL
569 };
571 
572 
574 {
575  if (self->enemy->health > 0)
576  {
577  if (range (self, self->enemy) == RANGE_MELEE)
578  if (random() <= 0.9)
579  {
580  self->monsterinfo.currentmove = &chick_move_slash;
581  return;
582  }
583  else
584  {
585  self->monsterinfo.currentmove = &chick_move_end_slash;
586  return;
587  }
588  }
589  self->monsterinfo.currentmove = &chick_move_end_slash;
590 }
591 
592 void chick_slash(edict_t *self)
593 {
594  self->monsterinfo.currentmove = &chick_move_slash;
595 }
596 
597 
599 {
600  ai_charge, 1, NULL,
601  ai_charge, 8, NULL,
602  ai_charge, 3, NULL
603 };
605 
606 
607 
608 void chick_melee(edict_t *self)
609 {
610  self->monsterinfo.currentmove = &chick_move_start_slash;
611 }
612 
613 
615 {
616  self->monsterinfo.currentmove = &chick_move_start_attack1;
617 }
618 
619 void chick_sight(edict_t *self, edict_t *other)
620 {
621  gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
622 }
623 
624 /*QUAKED monster_chick (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
625 */
627 {
628  if (deathmatch->value)
629  {
630  G_FreeEdict (self);
631  return;
632  }
633 
634  sound_missile_prelaunch = gi.soundindex ("chick/chkatck1.wav");
635  sound_missile_launch = gi.soundindex ("chick/chkatck2.wav");
636  sound_melee_swing = gi.soundindex ("chick/chkatck3.wav");
637  sound_melee_hit = gi.soundindex ("chick/chkatck4.wav");
638  sound_missile_reload = gi.soundindex ("chick/chkatck5.wav");
639  sound_death1 = gi.soundindex ("chick/chkdeth1.wav");
640  sound_death2 = gi.soundindex ("chick/chkdeth2.wav");
641  sound_fall_down = gi.soundindex ("chick/chkfall1.wav");
642  sound_idle1 = gi.soundindex ("chick/chkidle1.wav");
643  sound_idle2 = gi.soundindex ("chick/chkidle2.wav");
644  sound_pain1 = gi.soundindex ("chick/chkpain1.wav");
645  sound_pain2 = gi.soundindex ("chick/chkpain2.wav");
646  sound_pain3 = gi.soundindex ("chick/chkpain3.wav");
647  sound_sight = gi.soundindex ("chick/chksght1.wav");
648  sound_search = gi.soundindex ("chick/chksrch1.wav");
649 
650  self->movetype = MOVETYPE_STEP;
651  self->solid = SOLID_BBOX;
652  self->s.modelindex = gi.modelindex ("models/monsters/bitch/tris.md2");
653  VectorSet (self->mins, -16, -16, 0);
654  VectorSet (self->maxs, 16, 16, 56);
655 
656  self->health = 175;
657  self->gib_health = -70;
658  self->mass = 200;
659 
660  self->pain = chick_pain;
661  self->die = chick_die;
662 
663  self->monsterinfo.stand = chick_stand;
664  self->monsterinfo.walk = chick_walk;
665  self->monsterinfo.run = chick_run;
666  self->monsterinfo.dodge = chick_dodge;
667  self->monsterinfo.attack = chick_attack;
668  self->monsterinfo.melee = chick_melee;
669  self->monsterinfo.sight = chick_sight;
670 
671  gi.linkentity (self);
672 
673  self->monsterinfo.currentmove = &chick_move_stand;
674  self->monsterinfo.scale = MODEL_SCALE;
675 
676  walkmonster_start (self);
677 }
chick_slash
void chick_slash(edict_t *self)
Definition: m_chick.c:592
gi
game_import_t gi
Definition: g_main.c:25
FRAME_attak132
#define FRAME_attak132
Definition: m_chick.h:55
G_ProjectSource
void G_ProjectSource(vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result)
Definition: g_utils.c:25
chick_sight
void chick_sight(edict_t *self, edict_t *other)
Definition: m_chick.c:619
FRAME_death201
#define FRAME_death201
Definition: m_actor.h:35
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
FRAME_duck01
#define FRAME_duck01
Definition: m_brain.h:170
FRAME_pain205
#define FRAME_pain205
Definition: m_brain.h:137
DEAD_DEAD
#define DEAD_DEAD
Definition: g_local.h:115
FRAME_attak213
#define FRAME_attak213
Definition: m_boss31.h:54
visible
qboolean visible(edict_t *self, edict_t *other)
Definition: g_ai.c:287
FRAME_pain301
#define FRAME_pain301
Definition: m_actor.h:104
sound_missile_reload
static int sound_missile_reload
Definition: m_chick.c:43
ThrowGib
void ThrowGib(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:135
MELEE_DISTANCE
#define MELEE_DISTANCE
Definition: g_local.h:82
VectorSubtract
#define VectorSubtract(a, b, c)
Definition: q_shared.h:163
ai_charge
void ai_charge(edict_t *self, float dist)
Definition: g_ai.c:194
SOLID_BBOX
@ SOLID_BBOX
Definition: game.h:37
chick_reslash
void chick_reslash(edict_t *self)
Definition: m_chick.c:573
chick_frames_death1
mframe_t chick_frames_death1[]
Definition: m_chick.c:335
FRAME_stand101
#define FRAME_stand101
Definition: m_actor.h:152
sound_idle1
static int sound_idle1
Definition: m_chick.c:47
FRAME_attak204
#define FRAME_attak204
Definition: m_boss31.h:45
chick_frames_pain1
mframe_t chick_frames_pain1[]
Definition: m_chick.c:220
chick_frames_walk
mframe_t chick_frames_walk[]
Definition: m_chick.c:180
FRAME_attak114
#define FRAME_attak114
Definition: m_boss31.h:37
chick_frames_stand
mframe_t chick_frames_stand[]
Definition: m_chick.c:107
chick_move_death2
mmove_t chick_move_death2
Definition: m_chick.c:333
ChickRocket
void ChickRocket(edict_t *self)
Definition: m_chick.c:451
chick_frames_start_attack1
mframe_t chick_frames_start_attack1[]
Definition: m_chick.c:480
chick_stand
void chick_stand(edict_t *self)
Definition: m_chick.c:143
FRAME_stand201
#define FRAME_stand201
Definition: m_actor.h:192
FRAME_death101
#define FRAME_death101
Definition: m_actor.h:28
AI_STAND_GROUND
#define AI_STAND_GROUND
Definition: g_local.h:129
sound_pain3
static int sound_pain3
Definition: m_chick.c:51
chick_move_start_slash
mmove_t chick_move_start_slash
Definition: m_chick.c:604
qboolean
qboolean
Definition: q_shared.h:63
sound_missile_prelaunch
static int sound_missile_prelaunch
Definition: m_chick.c:39
MODEL_SCALE
#define MODEL_SCALE
Definition: m_actor.h:506
FRAME_stand230
#define FRAME_stand230
Definition: m_boss32.h:467
DAMAGE_YES
@ DAMAGE_YES
Definition: g_local.h:89
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:996
FRAME_attak216
#define FRAME_attak216
Definition: m_brain.h:110
chick_frames_start_slash
mframe_t chick_frames_start_slash[]
Definition: m_chick.c:598
range
GLsizei range
Definition: qgl_win.c:121
monsterinfo_t::currentmove
mmove_t * currentmove
Definition: g_local.h:420
fire_hit
qboolean fire_hit(edict_t *self, vec3_t aim, int damage, int kick)
Definition: g_weapon.c:63
ATTN_NORM
#define ATTN_NORM
Definition: q_shared.h:995
ChickMoan
void ChickMoan(edict_t *self)
Definition: m_chick.c:56
FRAME_pain101
#define FRAME_pain101
Definition: m_actor.h:98
sound_search
static int sound_search
Definition: m_chick.c:53
chick_rerocket
void chick_rerocket(edict_t *self)
Definition: m_chick.c:529
walkmonster_start
void walkmonster_start(edict_t *self)
Definition: g_monster.c:692
MOVETYPE_STEP
@ MOVETYPE_STEP
Definition: g_local.h:196
FRAME_attak127
#define FRAME_attak127
Definition: m_chick.h:50
FRAME_attak201
#define FRAME_attak201
Definition: m_boss31.h:42
chick_frames_end_attack1
mframe_t chick_frames_end_attack1[]
Definition: m_chick.c:519
SVF_DEADMONSTER
#define SVF_DEADMONSTER
Definition: game.h:28
AngleVectors
void AngleVectors(vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition: q_shared.c:93
chick_duck_down
void chick_duck_down(edict_t *self)
Definition: m_chick.c:391
chick_dead
void chick_dead(edict_t *self)
Definition: m_chick.c:297
FRAME_death223
#define FRAME_death223
Definition: m_boss32.h:297
monster_flash_offset
vec3_t monster_flash_offset[]
Definition: m_flash.c:27
CHAN_VOICE
#define CHAN_VOICE
Definition: q_shared.h:985
FRAME_attak212
#define FRAME_attak212
Definition: m_boss31.h:53
ChickSlash
void ChickSlash(edict_t *self)
Definition: m_chick.c:441
chick_move_pain1
mmove_t chick_move_pain1
Definition: m_chick.c:228
sound_death1
static int sound_death1
Definition: m_chick.c:44
edict_s
Definition: g_local.h:968
FRAME_pain321
#define FRAME_pain321
Definition: m_boss31.h:131
chick_move_attack1
mmove_t chick_move_attack1
Definition: m_chick.c:517
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
chick_frames_pain3
mframe_t chick_frames_pain3[]
Definition: m_chick.c:240
chick_move_start_attack1
mmove_t chick_move_start_attack1
Definition: m_chick.c:496
chick_move_start_run
mmove_t chick_move_start_run
Definition: m_chick.c:161
r
GLdouble GLdouble r
Definition: qgl_win.c:336
MZ2_CHICK_ROCKET_1
#define MZ2_CHICK_ROCKET_1
Definition: q_shared.h:730
sound_missile_launch
static int sound_missile_launch
Definition: m_chick.c:40
SP_monster_chick
void SP_monster_chick(edict_t *self)
Definition: m_chick.c:626
sound_idle2
static int sound_idle2
Definition: m_chick.c:48
chick_move_death1
mmove_t chick_move_death1
Definition: m_chick.c:351
game_import_t::soundindex
int(* soundindex)(char *name)
Definition: game.h:122
forward
static vec3_t forward
Definition: p_view.c:29
chick_pain
void chick_pain(edict_t *self, edict_t *other, float kick, int damage)
Definition: m_chick.c:266
chick_move_fidget
mmove_t chick_move_fidget
Definition: m_chick.c:97
AI_HOLD_FRAME
#define AI_HOLD_FRAME
Definition: g_local.h:136
sound_fall_down
static int sound_fall_down
Definition: m_chick.c:46
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
ChickReload
void ChickReload(edict_t *self)
Definition: m_chick.c:474
sound_pain2
static int sound_pain2
Definition: m_chick.c:50
mframe_t
Definition: g_local.h:403
mmove_t
Definition: g_local.h:410
chick_frames_start_run
mframe_t chick_frames_start_run[]
Definition: m_chick.c:148
chick_duck_hold
void chick_duck_hold(edict_t *self)
Definition: m_chick.c:402
cvar_s::value
float value
Definition: q_shared.h:331
ai_walk
void ai_walk(edict_t *self, float dist)
Definition: g_ai.c:163
chick_move_pain2
mmove_t chick_move_pain2
Definition: m_chick.c:238
random
#define random()
Definition: g_local.h:515
chick_walk
void chick_walk(edict_t *self)
Definition: m_chick.c:196
VectorNormalize
vec_t VectorNormalize(vec3_t v)
Definition: q_shared.c:681
NULL
#define NULL
Definition: q_shared.h:67
Chick_PreAttack1
void Chick_PreAttack1(edict_t *self)
Definition: m_chick.c:469
FRAME_death112
#define FRAME_death112
Definition: m_brain.h:158
chick_frames_run
mframe_t chick_frames_run[]
Definition: m_chick.c:163
FRAME_walk20
#define FRAME_walk20
Definition: m_boss2.h:93
FRAME_pain105
#define FRAME_pain105
Definition: m_brain.h:116
chick_move_end_slash
mmove_t chick_move_end_slash
Definition: m_chick.c:570
chick_duck_up
void chick_duck_up(edict_t *self)
Definition: m_chick.c:410
chick_die
void chick_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
Definition: m_chick.c:353
chick_attack
void chick_attack(edict_t *self)
Definition: m_chick.c:614
monster_fire_rocket
void monster_fire_rocket(edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype)
Definition: g_monster.c:71
m_chick.h
skill
cvar_t * skill
Definition: g_main.c:38
chick_move_slash
mmove_t chick_move_slash
Definition: m_chick.c:561
sound_death2
static int sound_death2
Definition: m_chick.c:45
chick_move_walk
mmove_t chick_move_walk
Definition: m_chick.c:194
ai_move
void ai_move(edict_t *self, float dist)
Definition: g_ai.c:92
chick_move_pain3
mmove_t chick_move_pain3
Definition: m_chick.c:264
sound_melee_hit
static int sound_melee_hit
Definition: m_chick.c:42
VectorCopy
#define VectorCopy(a, b)
Definition: q_shared.h:165
FRAME_walk10
#define FRAME_walk10
Definition: m_actor.h:284
edict_s::monsterinfo
monsterinfo_t monsterinfo
Definition: g_local.h:1114
chick_move_duck
mmove_t chick_move_duck
Definition: m_chick.c:428
RANGE_MELEE
#define RANGE_MELEE
Definition: g_local.h:119
FRAME_stand130
#define FRAME_stand130
Definition: m_actor.h:181
FRAME_attak128
#define FRAME_attak128
Definition: m_chick.h:51
chick_melee
void chick_melee(edict_t *self)
Definition: m_chick.c:608
DAMAGE_AIM
@ DAMAGE_AIM
Definition: g_local.h:90
CHAN_WEAPON
#define CHAN_WEAPON
Definition: q_shared.h:984
sound_sight
static int sound_sight
Definition: m_chick.c:52
level
GLint level
Definition: qgl_win.c:116
ai_run
void ai_run(edict_t *self, float dist)
Definition: g_ai.c:914
FRAME_walk01
#define FRAME_walk01
Definition: m_actor.h:275
GIB_ORGANIC
#define GIB_ORGANIC
Definition: g_local.h:125
chick_frames_fidget
mframe_t chick_frames_fidget[]
Definition: m_chick.c:64
chick_move_stand
mmove_t chick_move_stand
Definition: m_chick.c:141
FRAME_attak203
#define FRAME_attak203
Definition: m_boss31.h:44
FRAME_duck07
#define FRAME_duck07
Definition: m_brain.h:176
chick_frames_attack1
mframe_t chick_frames_attack1[]
Definition: m_chick.c:499
sound_melee_swing
static int sound_melee_swing
Definition: m_chick.c:41
chick_move_run
mmove_t chick_move_run
Definition: m_chick.c:178
ThrowHead
void ThrowHead(edict_t *self, char *gibname, int damage, int type)
Definition: g_misc.c:183
sound_pain1
static int sound_pain1
Definition: m_chick.c:49
FRAME_walk11
#define FRAME_walk11
Definition: m_actor.h:285
chick_dodge
void chick_dodge(edict_t *self, edict_t *attacker, float eta)
Definition: m_chick.c:430
FRAME_pain201
#define FRAME_pain201
Definition: m_actor.h:101
chick_frames_duck
mframe_t chick_frames_duck[]
Definition: m_chick.c:418
MOVETYPE_TOSS
@ MOVETYPE_TOSS
Definition: g_local.h:198
chick_move_end_attack1
mmove_t chick_move_end_attack1
Definition: m_chick.c:527
VectorSet
#define VectorSet(v, x, y, z)
Definition: q_shared.h:168
chick_attack1
void chick_attack1(edict_t *self)
Definition: m_chick.c:544
right
GLdouble right
Definition: qgl_win.c:159
AI_DUCKED
#define AI_DUCKED
Definition: g_local.h:140
game_import_t::linkentity
void(* linkentity)(edict_t *ent)
Definition: game.h:138
chick_run
void chick_run(edict_t *self)
Definition: m_chick.c:201
chick_fidget
void chick_fidget(edict_t *self)
Definition: m_chick.c:99
FRAME_attak113
#define FRAME_attak113
Definition: m_boss31.h:36
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:134
chick_frames_slash
mframe_t chick_frames_slash[]
Definition: m_chick.c:549
chick_frames_end_slash
mframe_t chick_frames_end_slash[]
Definition: m_chick.c:563
chick_frames_death2
mframe_t chick_frames_death2[]
Definition: m_chick.c:307
ai_stand
void ai_stand(edict_t *self, float dist)
Definition: g_ai.c:106
chick_frames_pain2
mframe_t chick_frames_pain2[]
Definition: m_chick.c:230
FRAME_attak101
#define FRAME_attak101
Definition: m_boss31.h:24
g_local.h