X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fmortar.qc;h=5fa2447a784a7d0304ad5b567f87d92fe6467670;hb=cf1edea8694548556934b5b05f526bc192f576cb;hp=639de3f4c8f83df67db12e593bbc4db40b8d2e5f;hpb=9f70bdba9a6fb2c06324be13504341da967f7028;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/mortar.qc b/qcsrc/common/weapons/weapon/mortar.qc index 639de3f4c..5fa2447a7 100644 --- a/qcsrc/common/weapons/weapon/mortar.qc +++ b/qcsrc/common/weapons/weapon/mortar.qc @@ -84,6 +84,11 @@ void W_Mortar_Grenade_Explode() remove(self); } +void W_Mortar_Grenade_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Mortar_Grenade_Explode()); +} + void W_Mortar_Grenade_Explode2() {SELFPARAM(); if(other.takedamage == DAMAGE_AIM) @@ -104,6 +109,10 @@ void W_Mortar_Grenade_Explode2() remove(self); } +void W_Mortar_Grenade_Explode2_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Mortar_Grenade_Explode2()); +} void W_Mortar_Grenade_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { @@ -116,11 +125,11 @@ void W_Mortar_Grenade_Damage(entity this, entity inflictor, entity attacker, flo this.health = this.health - damage; if(this.health <= 0) - WITH(entity, self, this, W_PrepareExplosionByDamage(attacker, this.use)); + W_PrepareExplosionByDamage(this, attacker, adaptor_think2use); } -void W_Mortar_Grenade_Think1() -{SELFPARAM(); +void W_Mortar_Grenade_Think1(entity this) +{ self.nextthink = time; if(time > self.cnt) { @@ -133,12 +142,12 @@ void W_Mortar_Grenade_Think1() W_Mortar_Grenade_Explode(); } -void W_Mortar_Grenade_Touch1() -{SELFPARAM(); +void W_Mortar_Grenade_Touch1(entity this) +{ PROJECTILE_TOUCH; if(other.takedamage == DAMAGE_AIM || WEP_CVAR_PRI(mortar, type) == 0) // always explode when hitting a player, or if normal mortar projectile { - self.use(); + this.use(this, NULL, NULL); } else if(WEP_CVAR_PRI(mortar, type) == 1) // bounce { @@ -165,12 +174,12 @@ void W_Mortar_Grenade_Touch1() } } -void W_Mortar_Grenade_Touch2() -{SELFPARAM(); +void W_Mortar_Grenade_Touch2(entity this) +{ PROJECTILE_TOUCH; if(other.takedamage == DAMAGE_AIM || WEP_CVAR_SEC(mortar, type) == 0) // always explode when hitting a player, or if normal mortar projectile { - self.use(); + this.use(this, NULL, NULL); } else if(WEP_CVAR_SEC(mortar, type) == 1) // bounce { @@ -207,7 +216,7 @@ void W_Mortar_Attack(Weapon thiswep) W_DecreaseAmmo(thiswep, self, WEP_CVAR_PRI(mortar, ammo)); - W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND(GRENADE_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage)); + W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND_GRENADE_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage)); w_shotdir = v_forward; // no TrueAim for grenades please Send_Effect(EFFECT_GRENADE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -226,9 +235,9 @@ void W_Mortar_Attack(Weapon thiswep) gren.cnt = time + WEP_CVAR_PRI(mortar, lifetime); gren.nextthink = time; - gren.think = W_Mortar_Grenade_Think1; - gren.use = W_Mortar_Grenade_Explode; - gren.touch = W_Mortar_Grenade_Touch1; + setthink(gren, W_Mortar_Grenade_Think1); + gren.use = W_Mortar_Grenade_Explode_use; + settouch(gren, W_Mortar_Grenade_Touch1); gren.takedamage = DAMAGE_YES; gren.health = WEP_CVAR_PRI(mortar, health); @@ -255,7 +264,7 @@ void W_Mortar_Attack2(Weapon thiswep) W_DecreaseAmmo(thiswep, self, WEP_CVAR_SEC(mortar, ammo)); - W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND(GRENADE_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage)); + W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND_GRENADE_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage)); w_shotdir = v_forward; // no TrueAim for grenades please Send_Effect(EFFECT_GRENADE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -273,9 +282,9 @@ void W_Mortar_Attack2(Weapon thiswep) setsize(gren, '-3 -3 -3', '3 3 3'); gren.nextthink = time + WEP_CVAR_SEC(mortar, lifetime); - gren.think = adaptor_think2use_hittype_splash; - gren.use = W_Mortar_Grenade_Explode2; - gren.touch = W_Mortar_Grenade_Touch2; + setthink(gren, adaptor_think2use_hittype_splash); + gren.use = W_Mortar_Grenade_Explode2_use; + settouch(gren, W_Mortar_Grenade_Touch2); gren.takedamage = DAMAGE_YES; gren.health = WEP_CVAR_SEC(mortar, health); @@ -300,11 +309,12 @@ void W_Mortar_Attack2(Weapon thiswep) METHOD(Mortar, wr_aim, void(entity thiswep)) { + SELFPARAM(); PHYS_INPUT_BUTTON_ATCK(self) = false; PHYS_INPUT_BUTTON_ATCK2(self) = false; if(self.bot_secondary_grenademooth == 0) // WEAPONTODO: merge this into using WEP_CVAR_BOTH { - if(bot_aim(WEP_CVAR_PRI(mortar, speed), WEP_CVAR_PRI(mortar, speed_up), WEP_CVAR_PRI(mortar, lifetime), true)) + if(bot_aim(self, WEP_CVAR_PRI(mortar, speed), WEP_CVAR_PRI(mortar, speed_up), WEP_CVAR_PRI(mortar, lifetime), true)) { PHYS_INPUT_BUTTON_ATCK(self) = true; if(random() < 0.01) self.bot_secondary_grenademooth = 1; @@ -312,7 +322,7 @@ METHOD(Mortar, wr_aim, void(entity thiswep)) } else { - if(bot_aim(WEP_CVAR_SEC(mortar, speed), WEP_CVAR_SEC(mortar, speed_up), WEP_CVAR_SEC(mortar, lifetime), true)) + if(bot_aim(self, WEP_CVAR_SEC(mortar, speed), WEP_CVAR_SEC(mortar, speed_up), WEP_CVAR_SEC(mortar, lifetime), true)) { PHYS_INPUT_BUTTON_ATCK2(self) = true; if(random() < 0.02) self.bot_secondary_grenademooth = 0; @@ -371,21 +381,22 @@ METHOD(Mortar, wr_think, void(entity thiswep, entity actor, .entity weaponentity } } } -METHOD(Mortar, wr_checkammo1, bool(entity thiswep)) +METHOD(Mortar, wr_checkammo1, bool(entity thiswep, entity actor)) { - float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_PRI(mortar, ammo); - ammo_amount += self.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_PRI(mortar, ammo); + float ammo_amount = actor.(thiswep.ammo_field) >= WEP_CVAR_PRI(mortar, ammo); + ammo_amount += actor.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_PRI(mortar, ammo); return ammo_amount; } -METHOD(Mortar, wr_checkammo2, bool(entity thiswep)) +METHOD(Mortar, wr_checkammo2, bool(entity thiswep, entity actor)) { - float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_SEC(mortar, ammo); - ammo_amount += self.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_SEC(mortar, ammo); + float ammo_amount = actor.(thiswep.ammo_field) >= WEP_CVAR_SEC(mortar, ammo); + ammo_amount += actor.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_SEC(mortar, ammo); return ammo_amount; } METHOD(Mortar, wr_reload, void(entity thiswep, entity actor, .entity weaponentity)) { - W_Reload(self, min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), SND(RELOAD)); // WEAPONTODO + SELFPARAM(); + W_Reload(self, min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), SND_RELOAD); // WEAPONTODO } METHOD(Mortar, wr_suicidemessage, Notification(entity thiswep)) { @@ -407,6 +418,7 @@ METHOD(Mortar, wr_killmessage, Notification(entity thiswep)) METHOD(Mortar, wr_impacteffect, void(entity thiswep)) { + SELFPARAM(); vector org2; org2 = w_org + w_backoff * 12; pointparticles(EFFECT_GRENADE_EXPLODE, org2, '0 0 0', 1);