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