]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix monsters firing projectiles only infront of themselves, and not above
authorMario <mario.mario@y7mail.com>
Sat, 27 Apr 2013 17:35:06 +0000 (03:35 +1000)
committerMario <mario.mario@y7mail.com>
Sat, 27 Apr 2013 17:35:06 +0000 (03:35 +1000)
qcsrc/server/accuracy.qc
qcsrc/server/monsters/lib/monsters.qc
qcsrc/server/monsters/monster/ogre.qc
qcsrc/server/monsters/monster/shalrath.qc
qcsrc/server/monsters/monster/soldier.qc
qcsrc/server/monsters/monster/spider.qc
qcsrc/server/monsters/monster/wizard.qc

index c5f3bc740f0123f4bb68986182c86b41cd02a269..fd62ac7adcc03e569c77fd0636a6fd779fd72f76 100644 (file)
@@ -109,9 +109,11 @@ void accuracy_add(entity e, float w, float fired, float hit)
 
 float accuracy_isgooddamage(entity attacker, entity targ)
 {
+       float targ_isvalid = ((g_td) ? targ.flags & FL_MONSTER : targ.flags & FL_CLIENT);
+       
        if(!inWarmupStage)
-       if((g_td && targ.flags & FL_MONSTER) || (!g_td && targ.flags & FL_CLIENT))
-       if(!(attacker.flags & FL_MONSTER)) // no accuracy for monsters
+       if(targ_isvalid)
+       if not(attacker.flags & FL_MONSTER) // no accuracy for monsters
        if(targ.deadflag == DEAD_NO)
        if(IsDifferentTeam(attacker, targ))
                return TRUE;
index af9b38fd0941d933d02db8cd4e618f33b801998f..181aa8d8da433d16ea7c7b6d671c911ef2508544 100644 (file)
@@ -397,6 +397,17 @@ float GenericCheckAttack ()
        return FALSE;
 }
 
+void monster_makevectors(entity e)
+{
+       vector v;
+               
+       v = e.origin + (e.mins + e.maxs) * 0.5;
+       self.v_angle = vectoangles(v - (self.origin + self.view_ofs));
+       self.v_angle_x = -self.v_angle_x;
+       
+       makevectors(self.v_angle);
+}
+
 void monster_use ()
 {
        if (self.enemy)
@@ -602,10 +613,7 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_
                self.moveto_z = self.origin_z;
        
        if(self.state != MONSTER_STATE_ATTACK_LEAP)
-       {
                self.angles_y = angles_face_y;
-               self.v_angle = self.angles;
-       }
        
        if(self.state == MONSTER_STATE_ATTACK_LEAP && (self.flags & FL_ONGROUND))
        {
index e8cd8906dabfdf21c176fbae018981e2c9599a13..0a0adda6bbf56abeed012a3f697414d85ea5081f 100644 (file)
@@ -68,6 +68,8 @@ void ogre_uzi_fire()
                return;
        }
        
+       monster_makevectors(self.enemy);
+       
        W_SetupShot (self, autocvar_g_antilag_bullets && 18000 >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_monster_ogre_attack_uzi_damage);
        fireBallisticBullet(w_shotorg, w_shotdir, 0.02, 18000, 5, autocvar_g_monster_ogre_attack_uzi_damage, autocvar_g_monster_ogre_attack_uzi_force, DEATH_MONSTER_OGRE_UZI, 0, 1, 115);
        endFireBallisticBullet();
@@ -135,6 +137,8 @@ void ogre_grenade_think()
 void ogre_gl()
 {
        entity gren;
+       
+       monster_makevectors(self.enemy);
 
        W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 4, "weapons/grenade_fire.wav", CH_WEAPON_A, autocvar_g_monster_ogre_attack_grenade_damage);
        w_shotdir = v_forward; // no TrueAim for grenades please
index 3c57e0f0a9dfedfa276cb534b0c4a037e6946eba..992a757f0dd269378d592fcd06a2ba32a81f9126 100644 (file)
@@ -229,8 +229,7 @@ void ShalMissile()
        missile = spawn ();
        missile.owner = missile.realowner = self;
        
-       self.v_angle = self.angles;
-       makevectors (self.angles);
+       monster_makevectors(self.enemy);
        
        dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
        dist = vlen (self.enemy.origin - self.origin);
index 06a8ccb6e349aec10ee9ca693992977ee76cfea9..41c563ba5fdc4d8c67bd0e213c24390724133ea0 100644 (file)
@@ -240,7 +240,8 @@ void soldier_laser_fire()
 float soldier_attack()
 {
        monsters_setframe(soldier_anim_shoot);
-       makevectors(self.angles);
+       
+       monster_makevectors(self.enemy);
        
        if(self.currentammo <= 0)
        {
index 56ffdab9621768aa70e9853031b7f1bc207985e0..cd7c5da4f17d4b2d82179620c1b1f4666438ff6c 100644 (file)
@@ -140,7 +140,7 @@ void spider_attack_leap()
        self.angles_y = angles_face_y ;
        self.attack_finished_single = time + autocvar_g_monster_spider_attack_leap_delay;
        
-       makevectors(self.angles);
+       monster_makevectors(self.enemy);
        
        spider_shootweb(self.spider_type);
 }
index 99fde15e5e76c2026ecd02989ea64d4a892e6766..0ec25907036d354b4dbb8a7f49f973cc01ce830e 100644 (file)
@@ -51,8 +51,13 @@ void Wiz_StartFast ()
        
        self.attack_finished_single = time + 0.2;
        
-       self.v_angle = self.angles;
-       makevectors (self.angles);
+       vector v;
+               
+       v = self.enemy.origin + (self.enemy.mins + self.enemy.maxs) * 0.5;
+       self.v_angle = vectoangles(v - (self.origin + self.view_ofs));
+       self.v_angle_x = -self.v_angle_x;
+       
+       makevectors (self.v_angle);
 
        missile = spawn ();
        missile.owner = missile.realowner = self;