#include "../lib/warpzone/common.qh"
#include "../lib/warpzone/server.qh"
-.int state;
-
/*============================================
Wazat's Xonotic Grappling Hook
============================================*/
-.float hook_length;
-
void RemoveGrapplingHooks(entity pl)
{
if(pl.move_movetype == MOVETYPE_FLY)
void GrapplingHook_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force)
{
- if(GetResourceAmount(this, RESOURCE_HEALTH) <= 0)
+ if(GetResource(this, RES_HEALTH) <= 0)
return;
if (!W_CheckProjectileDamage(inflictor.realowner, this.realowner, deathtype, -1)) // no exceptions
return; // g_balance_projectiledamage says to halt
- TakeResource(this, RESOURCE_HEALTH, damage);
+ TakeResource(this, RES_HEALTH, damage);
- if (GetResourceAmount(this, RESOURCE_HEALTH) <= 0)
+ if (GetResource(this, RES_HEALTH) <= 0)
{
if(attacker != this.realowner)
{
void FireGrapplingHook(entity actor, .entity weaponentity)
{
- if(forbidWeaponUse(actor)) return;
+ if(weaponLocked(actor)) return;
if(actor.vehicle) return;
- // TODO: offhand hook shoots from eye
+ int s = W_GunAlign(actor.(weaponentity), STAT(GUNALIGN, actor)) - 1;
+ vector vs = hook_shotorigin[s];
+ vector oldmovedir = actor.(weaponentity).movedir;
+ actor.(weaponentity).movedir = vs;
W_SetupShot_ProjectileSize(actor, weaponentity, '-3 -3 -3', '3 3 3', true, 0, SND_HOOK_FIRE, CH_WEAPON_B, 0, WEP_HOOK.m_id);
- Send_Effect(EFFECT_HOOK_MUZZLEFLASH, w_shotorg, '0 0 0', 1);
+ W_MuzzleFlash(WEP_HOOK, actor, weaponentity, w_shotorg, '0 0 0');
+ actor.(weaponentity).movedir = oldmovedir;
entity missile = WarpZone_RefSys_SpawnSameRefSys(actor);
missile.owner = missile.realowner = actor;
missile.effects = /*EF_FULLBRIGHT | EF_ADDITIVE |*/ EF_LOWPRECISION;
- SetResourceAmountExplicit(missile, RESOURCE_HEALTH, autocvar_g_balance_grapplehook_health);
+ SetResourceExplicit(missile, RES_HEALTH, autocvar_g_balance_grapplehook_health);
missile.event_damage = GrapplingHook_Damage;
missile.takedamage = DAMAGE_AIM;
missile.damageforcescale = 0;