]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add a basic trick to make monsters walk around eachother
authorMario <mario.mario@y7mail.com>
Sat, 20 Apr 2013 15:41:53 +0000 (01:41 +1000)
committerMario <mario.mario@y7mail.com>
Sat, 20 Apr 2013 15:41:53 +0000 (01:41 +1000)
qcsrc/server/mutators/gamemode_towerdefense.qc

index a5f42d79e04b9409b1c3e1d62ee7153f8de30d3d..3e7223e30cd16dbdd5df544c91be4ee1a47660f8 100644 (file)
@@ -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;
 }