X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fhagar.qc;h=9a178c03bbc0a47dd6fd8af8bdeb8be1ebdd96f4;hb=268f9c69576b6bb929f66d19f0d077d19ba47edd;hp=78fc6603e0ed3ec852133635b25557077bdcfbc7;hpb=678388b78fdaad89fc8218dadf7007432b4153c3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon/hagar.qc b/qcsrc/common/weapons/weapon/hagar.qc index 78fc6603e..9a178c03b 100644 --- a/qcsrc/common/weapons/weapon/hagar.qc +++ b/qcsrc/common/weapons/weapon/hagar.qc @@ -1,12 +1,13 @@ +#include "hagar.qh" #ifndef IMPLEMENTATION CLASS(Hagar, Weapon) -/* ammotype */ ATTRIB(Hagar, ammo_field, .int, ammo_rockets) -/* impulse */ ATTRIB(Hagar, impulse, int, 8) +/* ammotype */ ATTRIB(Hagar, ammo_field, .int, ammo_rockets); +/* impulse */ ATTRIB(Hagar, impulse, int, 8); /* flags */ ATTRIB(Hagar, spawnflags, int, WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH); /* rating */ ATTRIB(Hagar, bot_pickupbasevalue, float, BOT_PICKUP_RATING_MID); /* color */ ATTRIB(Hagar, wpcolor, vector, '1 1 0.5'); /* modelname */ ATTRIB(Hagar, mdl, string, "hagar"); -#ifndef MENUQC +#ifdef GAMEQC /* model */ ATTRIB(Hagar, m_model, Model, MDL_HAGAR_ITEM); #endif /* crosshair */ ATTRIB(Hagar, w_crosshair, string, "gfx/crosshairhagar"); @@ -63,30 +64,30 @@ spawnfunc(weapon_hagar) { weapon_defaultspawnfunc(this, WEP_HAGAR); } // NO bounce protection, as bounces are limited! -void W_Hagar_Explode(entity this) +void W_Hagar_Explode(entity this, entity directhitentity) { this.event_damage = func_null; - RadiusDamage(this, this.realowner, WEP_CVAR_PRI(hagar, damage), WEP_CVAR_PRI(hagar, edgedamage), WEP_CVAR_PRI(hagar, radius), NULL, NULL, WEP_CVAR_PRI(hagar, force), this.projectiledeathtype, other); + RadiusDamage(this, this.realowner, WEP_CVAR_PRI(hagar, damage), WEP_CVAR_PRI(hagar, edgedamage), WEP_CVAR_PRI(hagar, radius), NULL, NULL, WEP_CVAR_PRI(hagar, force), this.projectiledeathtype, directhitentity); - remove(this); + delete(this); } void W_Hagar_Explode_use(entity this, entity actor, entity trigger) { - W_Hagar_Explode(this); + W_Hagar_Explode(this, trigger); } -void W_Hagar_Explode2(entity this) +void W_Hagar_Explode2(entity this, entity directhitentity) { this.event_damage = func_null; - RadiusDamage(this, this.realowner, WEP_CVAR_SEC(hagar, damage), WEP_CVAR_SEC(hagar, edgedamage), WEP_CVAR_SEC(hagar, radius), NULL, NULL, WEP_CVAR_SEC(hagar, force), this.projectiledeathtype, other); + RadiusDamage(this, this.realowner, WEP_CVAR_SEC(hagar, damage), WEP_CVAR_SEC(hagar, edgedamage), WEP_CVAR_SEC(hagar, radius), NULL, NULL, WEP_CVAR_SEC(hagar, force), this.projectiledeathtype, directhitentity); - remove(this); + delete(this); } void W_Hagar_Explode2_use(entity this, entity actor, entity trigger) { - W_Hagar_Explode2(this); + W_Hagar_Explode2(this, trigger); } void W_Hagar_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) @@ -116,7 +117,7 @@ void W_Hagar_Damage(entity this, entity inflictor, entity attacker, float damage void W_Hagar_Touch(entity this, entity toucher) { PROJECTILE_TOUCH(this, toucher); - WITH(entity, other, toucher, this.use(this, NULL, NULL)); + this.use(this, NULL, toucher); } void W_Hagar_Touch2(entity this, entity toucher) @@ -124,7 +125,7 @@ void W_Hagar_Touch2(entity this, entity toucher) PROJECTILE_TOUCH(this, toucher); if(this.cnt > 0 || toucher.takedamage == DAMAGE_AIM) { - WITH(entity, other, toucher, this.use(this, NULL, NULL)); + this.use(this, NULL, toucher); } else { this.cnt++; Send_Effect(EFFECT_HAGAR_BOUNCE, this.origin, this.velocity, 1); @@ -134,13 +135,13 @@ void W_Hagar_Touch2(entity this, entity toucher) } } -void W_Hagar_Attack(Weapon thiswep, entity actor) +void W_Hagar_Attack(Weapon thiswep, entity actor, .entity weaponentity) { entity missile; W_DecreaseAmmo(thiswep, actor, WEP_CVAR_PRI(hagar, ammo)); - W_SetupShot(actor, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage)); + W_SetupShot(actor, weaponentity, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage)); Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -164,11 +165,13 @@ void W_Hagar_Attack(Weapon thiswep, entity actor) setorigin(missile, w_shotorg); setsize(missile, '0 0 0', '0 0 0'); - missile.movetype = MOVETYPE_FLY; + set_movetype(missile, MOVETYPE_FLY); W_SetupProjVelocity_PRI(missile, hagar); missile.angles = vectoangles(missile.velocity); missile.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, missile); + IL_PUSH(g_bot_dodge, missile); missile.missile_flags = MIF_SPLASH; CSQCProjectile(missile, true, PROJECTILE_HAGAR, true); @@ -176,13 +179,13 @@ void W_Hagar_Attack(Weapon thiswep, entity actor) MUTATOR_CALLHOOK(EditProjectile, actor, missile); } -void W_Hagar_Attack2(Weapon thiswep, entity actor) +void W_Hagar_Attack2(Weapon thiswep, entity actor, .entity weaponentity) { entity missile; W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(hagar, ammo)); - W_SetupShot(actor, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); + W_SetupShot(actor, weaponentity, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -207,11 +210,13 @@ void W_Hagar_Attack2(Weapon thiswep, entity actor) setorigin(missile, w_shotorg); setsize(missile, '0 0 0', '0 0 0'); - missile.movetype = MOVETYPE_BOUNCEMISSILE; + set_movetype(missile, MOVETYPE_BOUNCEMISSILE); W_SetupProjVelocity_SEC(missile, hagar); missile.angles = vectoangles(missile.velocity); missile.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, missile); + IL_PUSH(g_bot_dodge, missile); missile.missile_flags = MIF_SPLASH; CSQCProjectile(missile, true, PROJECTILE_HAGAR_BOUNCING, true); @@ -234,7 +239,7 @@ void W_Hagar_Attack2_Load_Release(entity actor, .entity weaponentity) weapon_prepareattack_do(actor, weaponentity, true, WEP_CVAR_SEC(hagar, refire)); - W_SetupShot(actor, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); + W_SetupShot(actor, weaponentity, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); forward = v_forward; @@ -264,7 +269,7 @@ void W_Hagar_Attack2_Load_Release(entity actor, .entity weaponentity) missile.projectiledeathtype = WEP_HAGAR.m_id | HITTYPE_SECONDARY; setorigin(missile, w_shotorg); setsize(missile, '0 0 0', '0 0 0'); - missile.movetype = MOVETYPE_FLY; + set_movetype(missile, MOVETYPE_FLY); missile.missile_flags = MIF_SPLASH; // per-shot spread calculation: the more shots there are, the less spread is applied (based on the bias cvar) @@ -288,6 +293,8 @@ void W_Hagar_Attack2_Load_Release(entity actor, .entity weaponentity) missile.angles = vectoangles(missile.velocity); missile.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, missile); + IL_PUSH(g_bot_dodge, missile); CSQCProjectile(missile, true, PROJECTILE_HAGAR, true); @@ -423,7 +430,7 @@ void W_Hagar_Attack_Auto(Weapon thiswep, entity actor, .entity weaponentity, int return; } - W_Hagar_Attack(thiswep, actor); + W_Hagar_Attack(thiswep, actor, weaponentity); int slot = weaponslot(weaponentity); ATTACK_FINISHED(actor, slot) = time + WEP_CVAR_PRI(hagar, refire) * W_WeaponRateFactor(actor); @@ -463,19 +470,18 @@ METHOD(Hagar, wr_think, void(entity thiswep, entity actor, .entity weaponentity, { if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(hagar, refire))) { - W_Hagar_Attack2(thiswep, actor); + W_Hagar_Attack2(thiswep, actor, weaponentity); weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(hagar, refire), w_ready); } } } -METHOD(Hagar, wr_gonethink, void(entity thiswep, entity actor)) +METHOD(Hagar, wr_gonethink, void(entity thiswep, entity actor, .entity weaponentity)) { // we lost the weapon and want to prepare switching away if(actor.hagar_load) { - .entity weaponentity = weaponentities[0]; // TODO: unhardcode - actor.(weaponentity).state = WS_READY; - W_Hagar_Attack2_Load_Release(actor, weaponentity); + actor.(weaponentity).state = WS_READY; + W_Hagar_Attack2_Load_Release(actor, weaponentity); } } METHOD(Hagar, wr_setup, void(entity thiswep, entity actor)) @@ -504,17 +510,16 @@ METHOD(Hagar, wr_resetplayer, void(entity thiswep, entity actor)) { actor.hagar_load = 0; } -METHOD(Hagar, wr_playerdeath, void(entity thiswep, entity actor)) +METHOD(Hagar, wr_playerdeath, void(entity thiswep, entity actor, .entity weaponentity)) { - .entity weaponentity = weaponentities[0]; // TODO: unhardcode // if we have any rockets loaded when we die, release them if(actor.hagar_load && WEP_CVAR_SEC(hagar, load_releasedeath)) - W_Hagar_Attack2_Load_Release(actor, weaponentity); + W_Hagar_Attack2_Load_Release(actor, weaponentity); } METHOD(Hagar, wr_reload, void(entity thiswep, entity actor, .entity weaponentity)) { if(!actor.hagar_load) // require releasing loaded rockets first - W_Reload(actor, min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), SND_RELOAD); + W_Reload(actor, weaponentity, min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), SND_RELOAD); } METHOD(Hagar, wr_suicidemessage, Notification(entity thiswep)) {