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