]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/monsters/sv_monsters.qc
Merge branch 'master' into Mario/overkill
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / monsters / sv_monsters.qc
index c7d5190e0429a55b006ff086a47998835f28fc95..3e90b07e4716b62b0a9fd4603afe2c6890c5eca3 100644 (file)
@@ -99,9 +99,10 @@ bool Monster_ValidTarget(entity this, entity targ)
                return false;
        }
 
-       traceline(this.origin + this.view_ofs, targ.origin, MOVE_NOMONSTERS, this);
+       vector targ_origin = ((targ.absmin + targ.absmax) * 0.5);
+       traceline(this.origin + this.view_ofs, targ_origin, MOVE_NOMONSTERS, this);
 
-       if(trace_fraction < 1)
+       if(trace_fraction < 1 && trace_ent != targ)
                return false; // solid
 
        if(autocvar_g_monsters_target_infront || (this.spawnflags & MONSTERFLAG_INFRONT))
@@ -693,7 +694,8 @@ void Monster_CalculateVelocity(entity this, vector to, vector from, float turnra
 void Monster_Move(entity this, float runspeed, float walkspeed, float stpspeed)
 {
        // update goal entity if lost
-       if(this.target2 && this.goalentity.targetname != this.target2) { this.goalentity = find(NULL, targetname, this.target2); }
+       if(this.target2 && this.target2 != "" && this.goalentity.targetname != this.target2)
+               this.goalentity = find(NULL, targetname, this.target2);
 
        if(STAT(FROZEN, this) == 2)
        {
@@ -782,7 +784,7 @@ void Monster_Move(entity this, float runspeed, float walkspeed, float stpspeed)
        entity targ = this.goalentity;
 
        if (MUTATOR_CALLHOOK(MonsterMove, this, runspeed, walkspeed, targ)
-               || gameover
+               || game_stopped
                || this.draggedby != NULL
                || (round_handler_IsActive() && !round_handler_IsRoundStarted())
                || time < game_starttime
@@ -866,9 +868,9 @@ void Monster_Move(entity this, float runspeed, float walkspeed, float stpspeed)
        else
        {
                entity e = this.goalentity; //find(NULL, targetname, this.target2);
-               if(e.target2)
+               if(e.target2 && e.target2 != "")
                        this.target2 = e.target2;
-               else if(e.target) // compatibility
+               else if(e.target && e.target != "") // compatibility
                        this.target2 = e.target;
 
                movelib_brake_simple(this, stpspeed);
@@ -1073,7 +1075,7 @@ void Monster_Damage(entity this, entity inflictor, entity attacker, float damage
 
        this.dmg_time = time;
 
-       if(sound_allowed(MSG_BROADCAST, attacker) && deathtype != DEATH_DROWN.m_id)
+       if(deathtype != DEATH_DROWN.m_id && deathtype != DEATH_FIRE.m_id && sound_allowed(MSG_BROADCAST, attacker))
                spamsound (this, CH_PAIN, SND(BODYIMPACT1), VOL_BASE, ATTEN_NORM);  // FIXME: PLACEHOLDER
 
        this.velocity += force * this.damageforcescale;
@@ -1115,7 +1117,7 @@ void Monster_Damage(entity this, entity inflictor, entity attacker, float damage
 // don't check for enemies, just keep walking in a straight line
 void Monster_Move_2D(entity this, float mspeed, bool allow_jumpoff)
 {
-       if(gameover || (round_handler_IsActive() && !round_handler_IsRoundStarted()) || this.draggedby != NULL || time < game_starttime || (autocvar_g_campaign && !campaign_bots_may_start) || time < this.spawn_time)
+       if(game_stopped || (round_handler_IsActive() && !round_handler_IsRoundStarted()) || this.draggedby != NULL || time < game_starttime || (autocvar_g_campaign && !campaign_bots_may_start) || time < this.spawn_time)
        {
                mspeed = 0;
                if(time >= this.spawn_time)