From: Mario Date: Sat, 27 Apr 2013 17:35:06 +0000 (+1000) Subject: Fix monsters firing projectiles only infront of themselves, and not above X-Git-Tag: xonotic-v0.8.0~241^2^2~278 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d5d9477297fd7fe969a50bc384dc7545731f941b;p=xonotic%2Fxonotic-data.pk3dir.git Fix monsters firing projectiles only infront of themselves, and not above --- diff --git a/qcsrc/server/accuracy.qc b/qcsrc/server/accuracy.qc index c5f3bc740..fd62ac7ad 100644 --- a/qcsrc/server/accuracy.qc +++ b/qcsrc/server/accuracy.qc @@ -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; diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index af9b38fd0..181aa8d8d 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -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)) { diff --git a/qcsrc/server/monsters/monster/ogre.qc b/qcsrc/server/monsters/monster/ogre.qc index e8cd8906d..0a0adda6b 100644 --- a/qcsrc/server/monsters/monster/ogre.qc +++ b/qcsrc/server/monsters/monster/ogre.qc @@ -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 diff --git a/qcsrc/server/monsters/monster/shalrath.qc b/qcsrc/server/monsters/monster/shalrath.qc index 3c57e0f0a..992a757f0 100644 --- a/qcsrc/server/monsters/monster/shalrath.qc +++ b/qcsrc/server/monsters/monster/shalrath.qc @@ -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); diff --git a/qcsrc/server/monsters/monster/soldier.qc b/qcsrc/server/monsters/monster/soldier.qc index 06a8ccb6e..41c563ba5 100644 --- a/qcsrc/server/monsters/monster/soldier.qc +++ b/qcsrc/server/monsters/monster/soldier.qc @@ -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) { diff --git a/qcsrc/server/monsters/monster/spider.qc b/qcsrc/server/monsters/monster/spider.qc index 56ffdab96..cd7c5da4f 100644 --- a/qcsrc/server/monsters/monster/spider.qc +++ b/qcsrc/server/monsters/monster/spider.qc @@ -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); } diff --git a/qcsrc/server/monsters/monster/wizard.qc b/qcsrc/server/monsters/monster/wizard.qc index 99fde15e5..0ec259070 100644 --- a/qcsrc/server/monsters/monster/wizard.qc +++ b/qcsrc/server/monsters/monster/wizard.qc @@ -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;