X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Ffireball.qc;h=3ee23e8f5f7a66f16682c004056b88e3a03635f3;hb=c0da80fe6125a43ee99a90808ac6f9d0ddcf88c8;hp=4dc3bf86753d95cf1478269677eb14acdad44c08;hpb=77d6a05629e33da863fccb3cdd03b3c63af890dd;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/fireball.qc b/qcsrc/common/weapons/weapon/fireball.qc index 4dc3bf867..3ee23e8f5 100644 --- a/qcsrc/common/weapons/weapon/fireball.qc +++ b/qcsrc/common/weapons/weapon/fireball.qc @@ -62,8 +62,8 @@ REGISTER_WEAPON(FIREBALL, fireball, NEW(Fireball)); #ifdef SVQC spawnfunc(weapon_fireball) { weapon_defaultspawnfunc(this, WEP_FIREBALL); } -void W_Fireball_Explode() -{SELFPARAM(); +void W_Fireball_Explode(entity this) +{ entity e; float dist; float points; @@ -112,14 +112,19 @@ void W_Fireball_Explode() remove(self); } -void W_Fireball_TouchExplode() +void W_Fireball_Explode_use(entity this, entity actor, entity trigger) { - PROJECTILE_TOUCH; - W_Fireball_Explode(); + WITHSELF(this, W_Fireball_Explode(this)); } -void W_Fireball_LaserPlay(float dt, float dist, float damage, float edgedamage, float burntime) -{SELFPARAM(); +void W_Fireball_TouchExplode(entity this) +{ + PROJECTILE_TOUCH(this); + W_Fireball_Explode(this); +} + +void W_Fireball_LaserPlay(entity this, float dt, float dist, float damage, float edgedamage, float burntime) +{ entity e; float d; vector p; @@ -152,17 +157,17 @@ void W_Fireball_LaserPlay(float dt, float dist, float damage, float edgedamage, } } -void W_Fireball_Think() -{SELFPARAM(); +void W_Fireball_Think(entity this) +{ if(time > self.pushltime) { self.cnt = 1; self.projectiledeathtype |= HITTYPE_SPLASH; - W_Fireball_Explode(); + W_Fireball_Explode(this); return; } - W_Fireball_LaserPlay(0.1, WEP_CVAR_PRI(fireball, laserradius), WEP_CVAR_PRI(fireball, laserdamage), WEP_CVAR_PRI(fireball, laseredgedamage), WEP_CVAR_PRI(fireball, laserburntime)); + W_Fireball_LaserPlay(self, 0.1, WEP_CVAR_PRI(fireball, laserradius), WEP_CVAR_PRI(fireball, laserdamage), WEP_CVAR_PRI(fireball, laseredgedamage), WEP_CVAR_PRI(fireball, laserburntime)); self.nextthink = time + 0.1; } @@ -179,12 +184,12 @@ void W_Fireball_Damage(entity this, entity inflictor, entity attacker, float dam if(this.health <= 0) { this.cnt = 1; - WITH(entity, self, this, W_PrepareExplosionByDamage(attacker, W_Fireball_Explode)); + W_PrepareExplosionByDamage(this, attacker, W_Fireball_Explode); } } -void W_Fireball_Attack1() -{SELFPARAM(); +void W_Fireball_Attack1(entity actor) +{entity this = actor; entity proj; W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 2, SND_FIREBALL_FIRE2, CH_WEAPON_A, WEP_CVAR_PRI(fireball, damage) + WEP_CVAR_PRI(fireball, bfgdamage)); @@ -196,8 +201,8 @@ void W_Fireball_Attack1() proj.bot_dodge = true; proj.bot_dodgerating = WEP_CVAR_PRI(fireball, damage); proj.pushltime = time + WEP_CVAR_PRI(fireball, lifetime); - proj.use = W_Fireball_Explode; - proj.think = W_Fireball_Think; + proj.use = W_Fireball_Explode_use; + setthink(proj, W_Fireball_Think); proj.nextthink = time; proj.health = WEP_CVAR_PRI(fireball, health); proj.team = self.team; @@ -211,7 +216,7 @@ void W_Fireball_Attack1() proj.movetype = MOVETYPE_FLY; W_SetupProjVelocity_PRI(proj, fireball); proj.angles = vectoangles(proj.velocity); - proj.touch = W_Fireball_TouchExplode; + settouch(proj, W_Fireball_TouchExplode); setsize(proj, '-16 -16 -16', '16 16 16'); proj.flags = FL_PROJECTILE; proj.missile_flags = MIF_SPLASH | MIF_PROXY; @@ -221,46 +226,46 @@ void W_Fireball_Attack1() MUTATOR_CALLHOOK(EditProjectile, self, proj); } -void W_Fireball_AttackEffect(float i, vector f_diff) -{SELFPARAM(); - W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 0, SND_Null, 0, 0); +void W_Fireball_AttackEffect(entity actor, float i, vector f_diff) +{ + W_SetupShot_ProjectileSize(actor, '-16 -16 -16', '16 16 16', false, 0, SND_Null, 0, 0); w_shotorg += f_diff.x * v_up + f_diff.y * v_right; Send_Effect(EFFECT_FIREBALL_PRE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); } void W_Fireball_Attack1_Frame4(Weapon thiswep, entity actor, .entity weaponentity, int fire) { - W_Fireball_Attack1(); + W_Fireball_Attack1(actor); weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), w_ready); } void W_Fireball_Attack1_Frame3(Weapon thiswep, entity actor, .entity weaponentity, int fire) { - W_Fireball_AttackEffect(0, '+1.25 +3.75 0'); + W_Fireball_AttackEffect(actor, 0, '+1.25 +3.75 0'); weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame4); } void W_Fireball_Attack1_Frame2(Weapon thiswep, entity actor, .entity weaponentity, int fire) { - W_Fireball_AttackEffect(0, '-1.25 +3.75 0'); + W_Fireball_AttackEffect(actor, 0, '-1.25 +3.75 0'); weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame3); } void W_Fireball_Attack1_Frame1(Weapon thiswep, entity actor, .entity weaponentity, int fire) { - W_Fireball_AttackEffect(1, '+1.25 -3.75 0'); + W_Fireball_AttackEffect(actor, 1, '+1.25 -3.75 0'); weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame2); } void W_Fireball_Attack1_Frame0(Weapon thiswep, entity actor, .entity weaponentity, int fire) -{SELFPARAM(); - W_Fireball_AttackEffect(0, '-1.25 -3.75 0'); - sound(self, CH_WEAPON_SINGLE, SND_FIREBALL_PREFIRE2, VOL_BASE, ATTEN_NORM); +{ + W_Fireball_AttackEffect(actor, 0, '-1.25 -3.75 0'); + sound(actor, CH_WEAPON_SINGLE, SND_FIREBALL_PREFIRE2, VOL_BASE, ATTEN_NORM); weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame1); } -void W_Fireball_Firemine_Think() -{SELFPARAM(); +void W_Fireball_Firemine_Think(entity this) +{ if(time > self.pushltime) { remove(self); @@ -280,14 +285,14 @@ void W_Fireball_Firemine_Think() self.cnt = 0; } - W_Fireball_LaserPlay(0.1, WEP_CVAR_SEC(fireball, laserradius), WEP_CVAR_SEC(fireball, laserdamage), WEP_CVAR_SEC(fireball, laseredgedamage), WEP_CVAR_SEC(fireball, laserburntime)); + W_Fireball_LaserPlay(self, 0.1, WEP_CVAR_SEC(fireball, laserradius), WEP_CVAR_SEC(fireball, laserdamage), WEP_CVAR_SEC(fireball, laseredgedamage), WEP_CVAR_SEC(fireball, laserburntime)); self.nextthink = time + 0.1; } -void W_Fireball_Firemine_Touch() -{SELFPARAM(); - PROJECTILE_TOUCH; +void W_Fireball_Firemine_Touch(entity this) +{ + PROJECTILE_TOUCH(this); if(other.takedamage == DAMAGE_AIM) if(Fire_AddDamage(other, self.realowner, WEP_CVAR_SEC(fireball, damage), WEP_CVAR_SEC(fireball, damagetime), self.projectiledeathtype) >= 0) { @@ -297,8 +302,8 @@ void W_Fireball_Firemine_Touch() self.projectiledeathtype |= HITTYPE_BOUNCE; } -void W_Fireball_Attack2() -{SELFPARAM(); +void W_Fireball_Attack2(entity actor) +{entity this = actor; entity proj; vector f_diff; float c; @@ -332,11 +337,11 @@ void W_Fireball_Attack2() proj.bot_dodgerating = WEP_CVAR_SEC(fireball, damage); proj.movetype = MOVETYPE_BOUNCE; proj.projectiledeathtype = WEP_FIREBALL.m_id | HITTYPE_SECONDARY; - proj.touch = W_Fireball_Firemine_Touch; + settouch(proj, W_Fireball_Firemine_Touch); PROJECTILE_MAKETRIGGER(proj); setsize(proj, '-4 -4 -4', '4 4 4'); setorigin(proj, w_shotorg); - proj.think = W_Fireball_Firemine_Think; + setthink(proj, W_Fireball_Firemine_Think); proj.nextthink = time; proj.damageforcescale = WEP_CVAR_SEC(fireball, damageforcescale); proj.pushltime = time + WEP_CVAR_SEC(fireball, lifetime); @@ -351,9 +356,9 @@ void W_Fireball_Attack2() MUTATOR_CALLHOOK(EditProjectile, self, proj); } -METHOD(Fireball, wr_aim, void(entity thiswep)) +METHOD(Fireball, wr_aim, void(entity thiswep, entity actor)) { - SELFPARAM(); + entity this = actor; PHYS_INPUT_BUTTON_ATCK(self) = false; PHYS_INPUT_BUTTON_ATCK2(self) = false; if(self.bot_primary_fireballmooth == 0) @@ -388,27 +393,27 @@ METHOD(Fireball, wr_think, void(entity thiswep, entity actor, .entity weaponenti { if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(fireball, refire))) { - W_Fireball_Attack2(); + W_Fireball_Attack2(actor); weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(fireball, animtime), w_ready); } } } -METHOD(Fireball, wr_setup, void(entity thiswep)) +METHOD(Fireball, wr_setup, void(entity thiswep, entity actor)) { - SELFPARAM(); + entity this = actor; self.ammo_field = ammo_none; } -METHOD(Fireball, wr_checkammo1, bool(entity thiswep)) +METHOD(Fireball, wr_checkammo1, bool(entity thiswep, entity actor)) { return true; // infinite ammo } -METHOD(Fireball, wr_checkammo2, bool(entity thiswep)) +METHOD(Fireball, wr_checkammo2, bool(entity thiswep, entity actor)) { return true; // fireball has infinite ammo } -METHOD(Fireball, wr_resetplayer, void(entity thiswep)) +METHOD(Fireball, wr_resetplayer, void(entity thiswep, entity actor)) { - SELFPARAM(); + entity this = actor; self.fireball_primarytime = time; } METHOD(Fireball, wr_suicidemessage, Notification(entity thiswep)) @@ -429,9 +434,9 @@ METHOD(Fireball, wr_killmessage, Notification(entity thiswep)) #endif #ifdef CSQC -METHOD(Fireball, wr_impacteffect, void(entity thiswep)) +METHOD(Fireball, wr_impacteffect, void(entity thiswep, entity actor)) { - SELFPARAM(); + entity this = actor; vector org2; if(w_deathtype & HITTYPE_SECONDARY) {