X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fseeker.qc;h=34b6e895f3af59977f130f90b9cd8ec3f83fcc90;hb=3cfb64730d883ae9ccf0315f365da19345270890;hp=c777562e4d99808e01a93923ba19d515469e4138;hpb=0dbdb22db2053df47bd9c2d871540a0e42ea0521;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/seeker.qc b/qcsrc/common/weapons/weapon/seeker.qc index c777562e4..34b6e895f 100644 --- a/qcsrc/common/weapons/weapon/seeker.qc +++ b/qcsrc/common/weapons/weapon/seeker.qc @@ -147,7 +147,7 @@ void W_Seeker_Missile_Think() if(WEP_CVAR(seeker, missile_smart) && (dist > WEP_CVAR(seeker, missile_smart_mindist))) { // Is it a better idea (shorter distance) to trace to the target itself? - if( vlen(self.origin + olddir * self.wait) < dist) + if( vdist(self.origin + olddir * self.wait, <, dist)) traceline(self.origin, self.origin + olddir * self.wait, false, self); else traceline(self.origin, eorg, false, self); @@ -206,21 +206,21 @@ void W_Seeker_Missile_Think() -void W_Seeker_Missile_Damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) -{SELFPARAM(); - if(self.health <= 0) +void W_Seeker_Missile_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) +{ + if(this.health <= 0) return; - if(!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions + if(!W_CheckProjectileDamage(inflictor.realowner, this.realowner, deathtype, -1)) // no exceptions return; // g_projectiles_damage says to halt - if(self.realowner == attacker) - self.health = self.health - (damage * 0.25); + if(this.realowner == attacker) + this.health = this.health - (damage * 0.25); else - self.health = self.health - damage; + this.health = this.health - damage; - if(self.health <= 0) - W_PrepareExplosionByDamage(attacker, W_Seeker_Missile_Explode); + if(this.health <= 0) + WITHSELF(this, W_PrepareExplosionByDamage(attacker, W_Seeker_Missile_Explode)); } /* @@ -255,7 +255,7 @@ void W_Seeker_Fire_Missile(Weapon thiswep, vector f_diff, entity m_target) W_DecreaseAmmo(thiswep, self, WEP_CVAR(seeker, missile_ammo)); makevectors(self.v_angle); - W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(SEEKER_FIRE), CH_WEAPON_A, 0); + W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND_SEEKER_FIRE, CH_WEAPON_A, 0); w_shotorg += f_diff; Send_Effect(EFFECT_SEEKER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -345,7 +345,7 @@ void W_Seeker_Fire_Flac(Weapon thiswep) f_diff = '+1.25 +3.75 0'; break; } - W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(FLAC_FIRE), CH_WEAPON_A, WEP_CVAR(seeker, flac_damage)); + W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND_FLAC_FIRE, CH_WEAPON_A, WEP_CVAR(seeker, flac_damage)); w_shotorg += f_diff; Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -400,7 +400,7 @@ void W_Seeker_Attack() { if(closest_target) { - if(vlen(self.origin - tracker.tag_target.origin) < vlen(self.origin - closest_target.origin)) + if(vlen2(self.origin - tracker.tag_target.origin) < vlen2(self.origin - closest_target.origin)) closest_target = tracker.tag_target; } else @@ -477,22 +477,22 @@ void W_Seeker_Tracker_Think() // ============================ // Begin: Tag projectile // ============================ -void W_Seeker_Tag_Explode() -{SELFPARAM(); - //if(other==self.realowner) +void W_Seeker_Tag_Explode(entity this) +{ + //if(other==this.realowner) // return; - Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER.m_id | HITTYPE_BOUNCE, other.species, self); + Damage_DamageInfo(this.origin, 0, 0, 0, this.velocity, WEP_SEEKER.m_id | HITTYPE_BOUNCE, other.species, this); - remove(self); + remove(this); } -void W_Seeker_Tag_Damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) -{SELFPARAM(); - if(self.health <= 0) +void W_Seeker_Tag_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) +{ + if(this.health <= 0) return; - self.health = self.health - damage; - if(self.health <= 0) - W_Seeker_Tag_Explode(); + this.health = this.health - damage; + if(this.health <= 0) + W_Seeker_Tag_Explode(this); } void W_Seeker_Tag_Touch() @@ -562,7 +562,7 @@ void W_Seeker_Fire_Tag(Weapon thiswep) entity missile; W_DecreaseAmmo(thiswep, self, WEP_CVAR(seeker, tag_ammo)); - W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(TAG_FIRE), CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count)); + W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND_TAG_FIRE, CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count)); missile = new(seeker_tag); missile.owner = missile.realowner = self; @@ -598,148 +598,153 @@ void W_Seeker_Fire_Tag(Weapon thiswep) // Begin: Genereal weapon functions // ============================ - METHOD(Seeker, wr_aim, void(entity thiswep)) - { - if(WEP_CVAR(seeker, type) == 1) - if(W_Seeker_Tagged_Info(self, self.enemy) != world) - self.BUTTON_ATCK = bot_aim(WEP_CVAR(seeker, missile_speed_max), 0, WEP_CVAR(seeker, missile_lifetime), false); - else - self.BUTTON_ATCK2 = bot_aim(WEP_CVAR(seeker, tag_speed), 0, WEP_CVAR(seeker, tag_lifetime), false); - else - self.BUTTON_ATCK = bot_aim(WEP_CVAR(seeker, tag_speed), 0, WEP_CVAR(seeker, tag_lifetime), false); - } - METHOD(Seeker, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire)) - { - if(autocvar_g_balance_seeker_reload_ammo && actor.clip_load < min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo))) { // forced reload - thiswep.wr_reload(thiswep, actor, weaponentity); - } else if(fire & 1) - { - if(WEP_CVAR(seeker, type) == 1) - { - if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, missile_refire))) - { - W_Seeker_Attack(); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, missile_animtime), w_ready); - } - } - else - { - if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, tag_refire))) - { - W_Seeker_Fire_Tag(thiswep); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, tag_animtime), w_ready); - } - } - } - - else if(fire & 2) - { - if(WEP_CVAR(seeker, type) == 1) - { - if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, tag_refire))) - { - W_Seeker_Fire_Tag(thiswep); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, tag_animtime), w_ready); - } - } - else - { - if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, flac_refire))) - { - W_Seeker_Fire_Flac(thiswep); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, flac_animtime), w_ready); - } - } - } - } - METHOD(Seeker, wr_checkammo1, bool(entity thiswep)) - { - float ammo_amount; - if(WEP_CVAR(seeker, type) == 1) - { - ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, missile_ammo); - ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, missile_ammo); - } - else - { - ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, tag_ammo); - ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, tag_ammo); - } - return ammo_amount; - } - METHOD(Seeker, wr_checkammo2, bool(entity thiswep)) - { - float ammo_amount; - if(WEP_CVAR(seeker, type) == 1) - { - ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, tag_ammo); - ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, tag_ammo); - } - else - { - ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, flac_ammo); - ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, flac_ammo); - } - return ammo_amount; - } - METHOD(Seeker, wr_reload, void(entity thiswep, entity actor, .entity weaponentity)) - { - W_Reload(self, min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), SND(RELOAD)); - } - METHOD(Seeker, wr_suicidemessage, int(entity thiswep)) - { - return WEAPON_SEEKER_SUICIDE; - } - METHOD(Seeker, wr_killmessage, int(entity thiswep)) - { - if(w_deathtype & HITTYPE_SECONDARY) - return WEAPON_SEEKER_MURDER_TAG; - else - return WEAPON_SEEKER_MURDER_SPRAY; - } +METHOD(Seeker, wr_aim, void(entity thiswep)) +{ + SELFPARAM(); + if(WEP_CVAR(seeker, type) == 1) + if(W_Seeker_Tagged_Info(self, self.enemy) != world) + PHYS_INPUT_BUTTON_ATCK(self) = bot_aim(self, WEP_CVAR(seeker, missile_speed_max), 0, WEP_CVAR(seeker, missile_lifetime), false); + else + PHYS_INPUT_BUTTON_ATCK2(self) = bot_aim(self, WEP_CVAR(seeker, tag_speed), 0, WEP_CVAR(seeker, tag_lifetime), false); + else + PHYS_INPUT_BUTTON_ATCK(self) = bot_aim(self, WEP_CVAR(seeker, tag_speed), 0, WEP_CVAR(seeker, tag_lifetime), false); +} +METHOD(Seeker, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire)) +{ + if(autocvar_g_balance_seeker_reload_ammo && actor.clip_load < min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo))) { // forced reload + thiswep.wr_reload(thiswep, actor, weaponentity); + } else if(fire & 1) + { + if(WEP_CVAR(seeker, type) == 1) + { + if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, missile_refire))) + { + W_Seeker_Attack(); + weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, missile_animtime), w_ready); + } + } + else + { + if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, tag_refire))) + { + W_Seeker_Fire_Tag(thiswep); + weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, tag_animtime), w_ready); + } + } + } + + else if(fire & 2) + { + if(WEP_CVAR(seeker, type) == 1) + { + if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, tag_refire))) + { + W_Seeker_Fire_Tag(thiswep); + weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, tag_animtime), w_ready); + } + } + else + { + if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(seeker, flac_refire))) + { + W_Seeker_Fire_Flac(thiswep); + weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(seeker, flac_animtime), w_ready); + } + } + } +} +METHOD(Seeker, wr_checkammo1, bool(entity thiswep)) +{ + SELFPARAM(); + float ammo_amount; + if(WEP_CVAR(seeker, type) == 1) + { + ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, missile_ammo); + ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, missile_ammo); + } + else + { + ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, tag_ammo); + ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, tag_ammo); + } + return ammo_amount; +} +METHOD(Seeker, wr_checkammo2, bool(entity thiswep)) +{ + SELFPARAM(); + float ammo_amount; + if(WEP_CVAR(seeker, type) == 1) + { + ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, tag_ammo); + ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, tag_ammo); + } + else + { + ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR(seeker, flac_ammo); + ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, flac_ammo); + } + return ammo_amount; +} +METHOD(Seeker, wr_reload, void(entity thiswep, entity actor, .entity weaponentity)) +{ + SELFPARAM(); + W_Reload(self, min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), SND_RELOAD); +} +METHOD(Seeker, wr_suicidemessage, Notification(entity thiswep)) +{ + return WEAPON_SEEKER_SUICIDE; +} +METHOD(Seeker, wr_killmessage, Notification(entity thiswep)) +{ + if(w_deathtype & HITTYPE_SECONDARY) + return WEAPON_SEEKER_MURDER_TAG; + else + return WEAPON_SEEKER_MURDER_SPRAY; +} #endif #ifdef CSQC - METHOD(Seeker, wr_impacteffect, void(entity thiswep)) - { - vector org2; - org2 = w_org + w_backoff * 6; - if(w_deathtype & HITTYPE_BOUNCE) - { - if(w_deathtype & HITTYPE_SECONDARY) - { - if(!w_issilent) - sound(self, CH_SHOTS, SND_TAG_IMPACT, 1, ATTEN_NORM); - } - else - { - pointparticles(EFFECT_HAGAR_EXPLODE, org2, '0 0 0', 1); - if(!w_issilent) - { - if(w_random<0.15) - sound(self, CH_SHOTS, SND_TAGEXP1, 1, ATTEN_NORM); - else if(w_random<0.7) - sound(self, CH_SHOTS, SND_TAGEXP2, 1, ATTEN_NORM); - else - sound(self, CH_SHOTS, SND_TAGEXP3, 1, ATTEN_NORM); - } - } - } - else - { - pointparticles(EFFECT_HAGAR_EXPLODE, org2, '0 0 0', 1); - if(!w_issilent) - { - if(w_random<0.15) - sound(self, CH_SHOTS, SND_SEEKEREXP1, 1, ATTEN_NORM); - else if(w_random<0.7) - sound(self, CH_SHOTS, SND_SEEKEREXP2, 1, ATTEN_NORM); - else - sound(self, CH_SHOTS, SND_SEEKEREXP3, 1, ATTEN_NORM); - } - } - } +METHOD(Seeker, wr_impacteffect, void(entity thiswep)) +{ + SELFPARAM(); + vector org2; + org2 = w_org + w_backoff * 6; + if(w_deathtype & HITTYPE_BOUNCE) + { + if(w_deathtype & HITTYPE_SECONDARY) + { + if(!w_issilent) + sound(self, CH_SHOTS, SND_TAG_IMPACT, 1, ATTEN_NORM); + } + else + { + pointparticles(EFFECT_HAGAR_EXPLODE, org2, '0 0 0', 1); + if(!w_issilent) + { + if(w_random<0.15) + sound(self, CH_SHOTS, SND_TAGEXP1, 1, ATTEN_NORM); + else if(w_random<0.7) + sound(self, CH_SHOTS, SND_TAGEXP2, 1, ATTEN_NORM); + else + sound(self, CH_SHOTS, SND_TAGEXP3, 1, ATTEN_NORM); + } + } + } + else + { + pointparticles(EFFECT_HAGAR_EXPLODE, org2, '0 0 0', 1); + if(!w_issilent) + { + if(w_random<0.15) + sound(self, CH_SHOTS, SND_SEEKEREXP1, 1, ATTEN_NORM); + else if(w_random<0.7) + sound(self, CH_SHOTS, SND_SEEKEREXP2, 1, ATTEN_NORM); + else + sound(self, CH_SHOTS, SND_SEEKEREXP3, 1, ATTEN_NORM); + } + } +} #endif #endif