From dddbd0474976772112f78e0254afd3442d1d9cc6 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 21 Apr 2013 01:41:53 +1000 Subject: [PATCH] Add a basic trick to make monsters walk around eachother --- .../server/mutators/gamemode_towerdefense.qc | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/qcsrc/server/mutators/gamemode_towerdefense.qc b/qcsrc/server/mutators/gamemode_towerdefense.qc index a5f42d79e..3e7223e30 100644 --- a/qcsrc/server/mutators/gamemode_towerdefense.qc +++ b/qcsrc/server/mutators/gamemode_towerdefense.qc @@ -764,8 +764,11 @@ MUTATOR_HOOKFUNCTION(td_MonsterCheckBossFlag) MUTATOR_HOOKFUNCTION(td_MonsterMove) { - entity player; + entity player, monster = world; float n_players = 0; + float dot = 0, es = 10; + vector extra_size = '1 1 1' * es; + FOR_EACH_PLAYER(player) { ++n_players; } if(n_players < 1) // no players online, so do nothing @@ -775,6 +778,21 @@ MUTATOR_HOOKFUNCTION(td_MonsterMove) return FALSE; } + if not(self.enemy) + { + makevectors (self.angles); + + FOR_EACH_MONSTER(monster) if(monster != self) + { + dot = normalize (monster.origin - self.origin) * v_forward; + if(boxesoverlap(self.absmin - extra_size, self.absmax + extra_size, monster.absmin, monster.absmax) && dot > 0.3) + { + self.moveto = (v_forward * 50) + ((random() > 0.5) ? (v_right * 0.5) : ((v_right * -1) * 0.5)); + break; + } + } + } + if not(self.enemy) // don't change targets while attacking if((vlen(self.goalentity.origin - self.origin) <= 100 && self.goalentity.classname == "td_waypoint") || (vlen(self.goalentity.origin - self.origin) <= 200 && (self.flags & FL_FLY) && self.goalentity.classname == "td_waypoint")) { @@ -794,8 +812,8 @@ MUTATOR_HOOKFUNCTION(td_MonsterMove) self.goalentity = PickGenerator(); } - monster_speed_run = m_speed_run * monster_skill; - monster_speed_walk = m_speed_walk * monster_skill; + monster_speed_run = (m_speed_run + random() * 4) * monster_skill; + monster_speed_walk = (m_speed_walk + random() * 4) * monster_skill; return FALSE; } -- 2.39.2