From 2c3d6587ed9e340158a7b3f8281b792ffd26928e Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 30 Aug 2013 19:38:09 +1000 Subject: [PATCH] Add a cvar to control monster attack range --- monsters.cfg | 1 + qcsrc/common/monsters/monster/animus.qc | 2 +- qcsrc/common/monsters/monster/bruiser.qc | 2 +- qcsrc/common/monsters/monster/brute.qc | 2 +- qcsrc/common/monsters/monster/cerberus.qc | 2 +- qcsrc/common/monsters/monster/knight.qc | 2 +- qcsrc/common/monsters/monster/mage.qc | 2 +- qcsrc/common/monsters/monster/shambler.qc | 5 +++-- qcsrc/common/monsters/monster/spider.qc | 2 +- qcsrc/common/monsters/monster/stingray.qc | 2 +- qcsrc/common/monsters/monster/zombie.qc | 2 +- qcsrc/common/monsters/sv_monsters.qc | 16 +++++++++------- qcsrc/server/autocvars.qh | 1 + 13 files changed, 23 insertions(+), 18 deletions(-) diff --git a/monsters.cfg b/monsters.cfg index 5d75fdcf7..f44f71a8d 100644 --- a/monsters.cfg +++ b/monsters.cfg @@ -173,6 +173,7 @@ set g_monsters_typefrag 1 set g_monsters_healthbars 1 set g_monsters_target_range 2000 set g_monsters_target_infront 0 +set g_monsters_attack_range 120 set g_monsters_respawn 1 set g_monsters_respawn_delay 20 set g_monsters_score_kill 1 diff --git a/qcsrc/common/monsters/monster/animus.qc b/qcsrc/common/monsters/monster/animus.qc index 40cf61265..8c5d074a5 100644 --- a/qcsrc/common/monsters/monster/animus.qc +++ b/qcsrc/common/monsters/monster/animus.qc @@ -56,7 +56,7 @@ float animus_attack(float attack_type) { monsters_setframe(animus_anim_attack); self.attack_finished_single = time + 1; - monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), 0.3, DEATH_MONSTER_ANIMUS, TRUE); + monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), self.attack_range, DEATH_MONSTER_ANIMUS, TRUE); return TRUE; } diff --git a/qcsrc/common/monsters/monster/bruiser.qc b/qcsrc/common/monsters/monster/bruiser.qc index d0872f7c6..f6b8146d6 100644 --- a/qcsrc/common/monsters/monster/bruiser.qc +++ b/qcsrc/common/monsters/monster/bruiser.qc @@ -43,7 +43,7 @@ float bruiser_attack(float attack_type) monsters_setframe((len < 50) ? bruiser_anim_attack : bruiser_anim_runattack); self.attack_finished_single = time + 1.25; - monster_melee(self.enemy, MON_CVAR(bruiser, attack_melee_damage), 0.3, DEATH_MONSTER_BRUISER, FALSE); + monster_melee(self.enemy, MON_CVAR(bruiser, attack_melee_damage), self.attack_range, DEATH_MONSTER_BRUISER, FALSE); return TRUE; } diff --git a/qcsrc/common/monsters/monster/brute.qc b/qcsrc/common/monsters/monster/brute.qc index 1d5f6d518..2f1d912c1 100644 --- a/qcsrc/common/monsters/monster/brute.qc +++ b/qcsrc/common/monsters/monster/brute.qc @@ -45,7 +45,7 @@ void brute_blade() self.brute_cycles += 1; self.angles_y = self.angles_y + random()* 25; - monster_melee(self.enemy, MON_CVAR(brute, attack_chainsaw_damage), 0.3, DEATH_MONSTER_BRUTE_BLADE, TRUE); + monster_melee(self.enemy, MON_CVAR(brute, attack_chainsaw_damage), self.attack_range, DEATH_MONSTER_BRUTE_BLADE, TRUE); if(self.brute_cycles <= 4) defer(0.2, brute_blade); diff --git a/qcsrc/common/monsters/monster/cerberus.qc b/qcsrc/common/monsters/monster/cerberus.qc index 689f04254..0f3163fad 100644 --- a/qcsrc/common/monsters/monster/cerberus.qc +++ b/qcsrc/common/monsters/monster/cerberus.qc @@ -91,7 +91,7 @@ float cerberus_attack(float attack_type) { monsters_setframe(cerberus_anim_attack); self.attack_finished_single = time + 0.7; - monster_melee(self.enemy, MON_CVAR(cerberus, attack_bite_damage), 0.2, DEATH_MONSTER_CERBERUS_BITE, TRUE); + monster_melee(self.enemy, MON_CVAR(cerberus, attack_bite_damage), self.attack_range, DEATH_MONSTER_CERBERUS_BITE, TRUE); return TRUE; } diff --git a/qcsrc/common/monsters/monster/knight.qc b/qcsrc/common/monsters/monster/knight.qc index c41c18b9d..433a9d3ee 100644 --- a/qcsrc/common/monsters/monster/knight.qc +++ b/qcsrc/common/monsters/monster/knight.qc @@ -243,7 +243,7 @@ float knight_attack(float attack_type) monsters_setframe(anim); self.attack_finished_single = time + 0.7; - monster_melee(self.enemy, MON_CVAR(knight, attack_melee_damage), 0.3, DEATH_MONSTER_KNIGHT_MELEE, TRUE); + monster_melee(self.enemy, MON_CVAR(knight, attack_melee_damage), self.attack_range, DEATH_MONSTER_KNIGHT_MELEE, TRUE); return TRUE; } diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index e36cbf9bf..b729b381a 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -90,7 +90,7 @@ float friend_needshelp(entity e) void mageattack_melee() { - monster_melee(self.enemy, MON_CVAR(mage, attack_melee_damage), 0.3, DEATH_MONSTER_MAGE, TRUE); + monster_melee(self.enemy, MON_CVAR(mage, attack_melee_damage), self.attack_range, DEATH_MONSTER_MAGE, TRUE); } void mage_grenade_explode() diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index ceddda3a7..729d72843 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -35,7 +35,7 @@ const float shambler_anim_death = 8; void shambler_smash() { - monster_melee(self.enemy, MON_CVAR(shambler, attack_smash_damage), 0.3, DEATH_MONSTER_SHAMBLER_SMASH, TRUE); + monster_melee(self.enemy, MON_CVAR(shambler, attack_smash_damage), self.attack_range, DEATH_MONSTER_SHAMBLER_SMASH, TRUE); } void shambler_delayedsmash() @@ -49,7 +49,7 @@ void shambler_swing() { float r = (random() < 0.5); monsters_setframe((r) ? shambler_anim_swingr : shambler_anim_swingl); - monster_melee(self.enemy, MON_CVAR(shambler, attack_claw_damage), 0.3, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); + monster_melee(self.enemy, MON_CVAR(shambler, attack_claw_damage), self.attack_range, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); self.attack_finished_single = time + 0.8; if(r) defer(0.5, shambler_swing); @@ -135,6 +135,7 @@ float m_shambler(float req) case MR_SETUP: { if not(self.health) self.health = MON_CVAR(shambler, health); + if not(self.attack_range) self.attack_range = 150; self.monster_loot = spawnfunc_item_health_mega; self.monster_attackfunc = shambler_attack; diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index c88ca98a1..7e901af5a 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -142,7 +142,7 @@ float spider_attack(float attack_type) { case MONSTER_ATTACK_MELEE: { - monster_melee(self.enemy, MON_CVAR(spider, attack_bite_damage), 0.3, DEATH_MONSTER_SPIDER, TRUE); + monster_melee(self.enemy, MON_CVAR(spider, attack_bite_damage), self.attack_range, DEATH_MONSTER_SPIDER, TRUE); monsters_setframe((random() > 0.5) ? spider_anim_attack : spider_anim_attack2); self.attack_finished_single = time + MON_CVAR(spider, attack_bite_delay); diff --git a/qcsrc/common/monsters/monster/stingray.qc b/qcsrc/common/monsters/monster/stingray.qc index dc11f8467..41e866ca5 100644 --- a/qcsrc/common/monsters/monster/stingray.qc +++ b/qcsrc/common/monsters/monster/stingray.qc @@ -35,7 +35,7 @@ float stingray_attack(float attack_type) { monsters_setframe(stingray_anim_attack); self.attack_finished_single = time + MON_CVAR(stingray, attack_bite_delay); - monster_melee(self.enemy, MON_CVAR(stingray, attack_bite_damage), 0.1, DEATH_MONSTER_STINGRAY, FALSE); + monster_melee(self.enemy, MON_CVAR(stingray, attack_bite_damage), self.attack_range, DEATH_MONSTER_STINGRAY, FALSE); return TRUE; } diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index c3afdea88..880f7c08f 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -96,7 +96,7 @@ float zombie_attack(float attack_type) self.attack_finished_single = time + MON_CVAR(zombie, attack_melee_delay); - monster_melee(self.enemy, MON_CVAR(zombie, attack_melee_damage), 0.3, DEATH_MONSTER_ZOMBIE_MELEE, TRUE); + monster_melee(self.enemy, MON_CVAR(zombie, attack_melee_damage), self.attack_range, DEATH_MONSTER_ZOMBIE_MELEE, TRUE); return TRUE; } diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index ab715efd5..17abfd46b 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -176,9 +176,9 @@ void monster_setupsounds(string mon) if(self.msound_sight == "") self.msound_sight = strzone(strcat("monsters/", mon, "_sight.wav")); } -float monster_melee (entity targ, float damg, float er, float deathtype, float dostop) +float monster_melee(entity targ, float damg, float er, float deathtype, float dostop) { - float dot, rdmg = damg * random(); + float rdmg = damg * random(); if (self.health <= 0) return FALSE; @@ -194,9 +194,10 @@ float monster_melee (entity targ, float damg, float er, float deathtype, float d } makevectors (self.angles); - dot = normalize (targ.origin - self.origin) * v_forward; - if(dot > er) + traceline(self.origin + self.view_ofs, self.origin + v_forward * er, 0, self); + + if(trace_ent.takedamage) Damage(targ, self, self, rdmg * monster_skill, deathtype, targ.origin, normalize(targ.origin - self.origin)); return TRUE; @@ -319,6 +320,7 @@ void monster_checkattack(entity e, entity targ) return; } + if(vlen(targ.origin - e.origin) > e.attack_range) if(e.monster_attackfunc(MONSTER_ATTACK_RANGED)) { monster_sound(e.msound_attack_ranged, 0, FALSE); @@ -927,6 +929,9 @@ void monster_spawn() if not(self.monster_respawned) if not(self.skin) self.skin = rint(random() * 4); + + if not(self.attack_range) + self.attack_range = autocvar_g_monsters_attack_range; self.pos1 = self.origin; @@ -1030,9 +1035,6 @@ float monster_initialize(float mon_id, float nodrop) if(mon.spawnflags & MONSTER_SIZE_BROKEN) self.scale = 1.3; - if not(self.attack_range) - self.attack_range = 120; - if not(self.ticrate) self.ticrate = autocvar_g_monsters_think_delay; diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 622ab1af5..5875547af 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -1235,6 +1235,7 @@ float autocvar_g_monsters_max; float autocvar_g_monsters_max_perplayer; float autocvar_g_monsters_target_range; float autocvar_g_monsters_target_infront; +float autocvar_g_monsters_attack_range; float autocvar_g_monsters_typefrag; float autocvar_g_monsters_owners; float autocvar_g_monsters_miniboss_chance; -- 2.39.2