X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fmortar.qc;h=5fa2447a784a7d0304ad5b567f87d92fe6467670;hb=cf1edea8694548556934b5b05f526bc192f576cb;hp=61ca5132625bbd3f6685f413a7e1d3ed39f4e3fc;hpb=109c5785a22fb4336ac5e91d5f1fa91678582164;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/mortar.qc b/qcsrc/common/weapons/weapon/mortar.qc index 61ca51326..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 { @@ -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); @@ -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); @@ -372,18 +381,16 @@ 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)) { - SELFPARAM(); - 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)) { - SELFPARAM(); - 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))