2 const vector OGRE_MIN = '-32 -32 -24';
3 const vector OGRE_MAX = '32 32 32';
6 float autocvar_g_monster_ogre;
7 float autocvar_g_monster_ogre_health;
8 float autocvar_g_monster_ogre_chainsaw_damage;
9 float autocvar_g_monster_ogre_speed_walk;
10 float autocvar_g_monster_ogre_speed_run;
11 float autocvar_g_monster_ogre_attack_uzi_bullets;
14 #define ogre_anim_stand 0
15 #define ogre_anim_walk 1
16 #define ogre_anim_run 2
17 #define ogre_anim_swing 3
18 #define ogre_anim_smash 4
19 #define ogre_anim_shoot 5
20 #define ogre_anim_pain1 6
21 #define ogre_anim_pain2 7
22 #define ogre_anim_pain3 8
23 #define ogre_anim_pain4 9
24 #define ogre_anim_pain5 10
25 #define ogre_anim_death1 11
26 #define ogre_anim_death2 12
27 #define ogre_anim_pull 13
29 void chainsaw (float side)
34 if (enemy_range() > 100 * self.scale)
37 Damage(self.enemy, self, self, autocvar_g_monster_ogre_chainsaw_damage * monster_skill, DEATH_MONSTER_OGRE_CHAINSAW, self.enemy.origin, normalize(self.enemy.origin - self.origin));
42 self.think = ogre_think;
43 self.nextthink = time + 0.1;
46 self.nextthink = self.delay;
48 monster_move(autocvar_g_monster_ogre_speed_run, autocvar_g_monster_ogre_speed_walk, 300, ogre_anim_run, ogre_anim_walk, ogre_anim_stand);
54 self.ogre_cycles += 1;
55 self.frame = ogre_anim_swing;
56 if(self.ogre_cycles == 1)
57 self.attack_finished_single = time + 1.3;
58 self.angles_y = self.angles_y + random()* 25;
59 self.nextthink = time + 0.2;
60 self.think = ogre_swing;
62 if(self.ogre_cycles <= 3)
64 else if(self.ogre_cycles <= 8)
69 if(self.ogre_cycles >= 10)
70 self.think = ogre_think;
80 self.frame = ogre_anim_smash;
81 self.attack_finished_single = time + 0.5;
83 self.monster_delayedattack = ogre_smash_2;
84 self.delay = time + 0.1;
89 self.ogre_cycles += 1;
91 if(self.ogre_cycles > autocvar_g_monster_ogre_attack_uzi_bullets)
93 self.monster_delayedattack = func_null;
97 W_UZI_Attack(DEATH_MONSTER_OGRE_NAIL);
98 self.delay = time + 0.1;
99 self.monster_delayedattack = ogre_uzi_fire;
104 self.frame = ogre_anim_shoot;
105 self.attack_finished_single = time + 0.8;
106 self.delay = time + 0.1;
107 self.monster_delayedattack = ogre_uzi_fire;
113 self.frame = ogre_anim_shoot;
114 self.attack_finished_single = time + 0.8;
117 float ogre_missile ()
119 self.ogre_cycles = 0;
134 self.ogre_cycles = 0;
143 Monster_CheckDropCvars ("ogre");
145 self.solid = SOLID_NOT;
146 self.takedamage = DAMAGE_NO;
147 self.event_damage = func_null;
149 self.nextthink = time + 2.1;
150 self.pain_finished = self.nextthink;
151 self.movetype = MOVETYPE_TOSS;
152 self.think = Monster_Fade;
154 W_ThrowNewWeapon(self, WEP_GRENADE_LAUNCHER, 0, self.origin, self.velocity);
156 self.frame = ogre_anim_death1;
158 self.frame = ogre_anim_death2;
160 monster_hook_death(); // for post-death mods
166 self.health = autocvar_g_monster_ogre_health * self.scale;
168 self.damageforcescale = 0.003;
169 self.classname = "monster_ogre";
170 self.checkattack = GenericCheckAttack;
171 self.attack_melee = ogre_melee;
172 self.frame = ogre_anim_pull;
173 self.attack_ranged = ogre_missile;
174 self.nextthink = time + 1;
175 self.think = ogre_think;
176 self.sprite_height = 40 * self.scale;
178 monster_hook_spawn(); // for post-spawn mods
181 void spawnfunc_monster_ogre ()
183 if not(autocvar_g_monster_ogre)
189 self.monster_spawnfunc = spawnfunc_monster_ogre;
191 if(self.spawnflags & MONSTERFLAG_APPEAR)
193 self.think = func_null;
195 self.use = Monster_Appear;
201 if not (monster_initialize(
203 "models/monsters/ogre.mdl",
206 ogre_die, ogre_spawn))
212 weapon_action(WEP_GRENADE_LAUNCHER, WR_PRECACHE);