]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/monsters/monster/bruiser.qc
Properly fix monsters thinking they're fish
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / monsters / monster / bruiser.qc
1 #ifdef REGISTER_MONSTER
2 REGISTER_MONSTER(
3 /* MON_##id   */ BRUISER,
4 /* function   */ m_bruiser,
5 /* spawnflags */ MONSTER_SIZE_BROKEN,
6 /* mins,maxs  */ '-20 -20 -31', '20 20 53',
7 /* model      */ "knight.mdl",
8 /* netname    */ "bruiser",
9 /* fullname   */ _("Bruiser")
10 );
11
12 #else
13 #ifdef SVQC
14 float autocvar_g_monster_bruiser;
15 float autocvar_g_monster_bruiser_health;
16 float autocvar_g_monster_bruiser_melee_damage;
17 float autocvar_g_monster_bruiser_speed_walk;
18 float autocvar_g_monster_bruiser_speed_run;
19
20 const float bruiser_anim_stand          = 0;
21 const float bruiser_anim_run            = 1;
22 const float bruiser_anim_runattack      = 2;
23 const float bruiser_anim_pain1          = 3;
24 const float bruiser_anim_pain2          = 4;
25 const float bruiser_anim_attack         = 5;
26 const float bruiser_anim_walk           = 6;
27 const float bruiser_anim_kneel          = 7;
28 const float bruiser_anim_standing       = 8;
29 const float bruiser_anim_death1         = 9;
30 const float bruiser_anim_death2         = 10;
31
32 float bruiser_attack(float attack_type)
33 {
34         switch(attack_type)
35         {
36                 case MONSTER_ATTACK_MELEE:
37                 {
38                         float len = vlen(self.velocity);
39                         monsters_setframe((len < 50) ? bruiser_anim_attack : bruiser_anim_runattack);
40                         self.attack_finished_single = time + 1.25;
41                         
42                         monster_melee(self.enemy, autocvar_g_monster_bruiser_melee_damage, 0.3, DEATH_MONSTER_BRUISER, FALSE);
43                         
44                         return TRUE;
45                 }
46                 case MONSTER_ATTACK_RANGED:
47                 {
48                         // no ranged attacks for bruiser
49                         return FALSE;
50                 }
51         }
52         
53         return FALSE;
54 }
55
56 void spawnfunc_monster_bruiser()
57 {
58         if not(autocvar_g_monster_bruiser) { remove(self); return; }
59         
60         self.classname = "monster_bruiser";
61         
62         self.monster_spawnfunc = spawnfunc_monster_bruiser;
63         
64         if(Monster_CheckAppearFlags(self))
65                 return;
66         
67         if not(monster_initialize(MON_BRUISER, FALSE)) { remove(self); return; }
68 }
69
70 float m_bruiser(float req)
71 {
72         switch(req)
73         {
74                 case MR_THINK:
75                 {
76                         monster_move(autocvar_g_monster_bruiser_speed_run, autocvar_g_monster_bruiser_speed_walk, 50, bruiser_anim_run, bruiser_anim_walk, bruiser_anim_stand);
77                         return TRUE;
78                 }
79                 case MR_DEATH:
80                 {
81                         monsters_setframe((random() > 0.5) ? bruiser_anim_death1 : bruiser_anim_death2);
82                         return TRUE;
83                 }
84                 case MR_SETUP:
85                 {
86                         if not(self.health) self.health = autocvar_g_monster_bruiser_health;
87                                 
88                         self.monster_attackfunc = bruiser_attack;
89                         monsters_setframe(bruiser_anim_stand);
90                         
91                         return TRUE;
92                 }
93                 case MR_INIT:
94                 {
95                         // nothing
96                         return TRUE;
97                 }
98         }
99         
100         return TRUE;
101 }
102
103 #endif // SVQC
104 #ifdef CSQC
105 float m_bruiser(float req)
106 {
107         switch(req)
108         {
109                 case MR_DEATH:
110                 {
111                         // nothing
112                         return TRUE;
113                 }
114                 case MR_INIT:
115                 {
116                         precache_model ("models/monsters/knight.mdl");
117                         return TRUE;
118                 }
119         }
120         
121         return TRUE;
122 }
123
124 #endif // CSQC
125 #endif // REGISTER_MONSTER