}
-void nade_boom() // TODO: DamageInfo
+void nade_boom()
{
string expef;
default: expef = "nade_explode"; break;
}
- sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM);
- sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
pointparticles(particleeffectnum(expef), self.origin + '0 0 1', '0 0 0', 1);
Damage_DamageInfo(self.origin, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage, autocvar_g_nades_nade_radius, '1 1 1' * autocvar_g_nades_nade_force, self.projectiledeathtype, 0, self);
PROJECTILE_TOUCH;
//setsize(self, '-2 -2 -2', '2 2 2');
//UpdateCSQCProjectile(self);
- if(self.health == autocvar_g_nades_nade_health)
+ if(self.health == self.max_health)
{
- spamsound(self, CH_SHOTS, strcat("weapons/grenade_bounce", ftos(1 + rint(random() * 5)), ".wav"), VOL_BASE, ATTN_NORM);
+ spamsound(self, CH_SHOTS, strcat("weapons/grenade_bounce", ftos(1 + rint(random() * 5)), ".wav"), VOL_BASE, ATTEN_NORM);
return;
}
void nade_beep()
{
- sound(self, CH_SHOTS_SINGLE, "overkill/grenadebip.ogg", VOL_BASE, 0.5 *(ATTN_LARGE + ATTN_MAX));
+ sound(self, CH_SHOTS_SINGLE, "overkill/grenadebip.ogg", VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX));
self.think = nade_boom;
self.nextthink = max(self.wait, time);
}
if(DEATH_ISWEAPON(deathtype, WEP_NEX) || DEATH_ISWEAPON(deathtype, WEP_MINSTANEX))
{
force *= 6;
- damage = autocvar_g_nades_nade_health * 0.55;
+ damage = self.max_health * 0.55;
}
if(DEATH_ISWEAPON(deathtype, WEP_UZI))
- damage = autocvar_g_nades_nade_health * 0.1;
+ damage = self.max_health * 0.1;
if(DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) && !(deathtype & HITTYPE_SECONDARY))
- damage = autocvar_g_nades_nade_health * 1.1;
+ damage = self.max_health * 1.1;
if(DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) && (deathtype & HITTYPE_SECONDARY))
{
- damage = autocvar_g_nades_nade_health * 0.1;
+ damage = self.max_health * 0.1;
force *= 15;
}
self.velocity += force;
- if(!damage)
+ if(!damage || (self.flags & FL_ONGROUND && IS_PLAYER(attacker)))
return;
- if(self.health == autocvar_g_nades_nade_health)
+ if(self.health == self.max_health)
{
- sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, 0.5 *(ATTN_LARGE + ATTN_MAX));
+ sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX));
self.nextthink = max(time + autocvar_g_nades_nade_lifetime, time);
self.think = nade_beep;
}
Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_NADES);
//setorigin(_nade, CENTER_OR_VIEWOFS(e) + (v_right * 10) * -1);
- setorigin(_nade, w_shotorg + (v_right * 10) * -1);
+ setorigin(_nade, w_shotorg + (v_right * 25) * -1);
setmodel(_nade, "models/weapons/v_ok_grenade.md3");
setattachment(_nade, world, "");
PROJECTILE_MAKETRIGGER(_nade);
if (trace_startsolid)
setorigin(_nade, e.origin);
- if(e.crouch)
- _nade.velocity = '0 0 -10';
+ if(self.v_angle_x >= 70)
+ _nade.velocity = '0 0 100';
else if(autocvar_g_nades_nade_newton_style == 1)
_nade.velocity = e.velocity + _velocity;
else if(autocvar_g_nades_nade_newton_style == 2)
//_nade.solid = SOLID_BBOX; // TODO: remember why this was needed
_nade.touch = nade_touch;
_nade.health = autocvar_g_nades_nade_health;
+ _nade.max_health = _nade.health;
_nade.takedamage = DAMAGE_AIM;
_nade.event_damage = nade_damage;
_nade.teleportable = TRUE;
MUTATOR_HOOKFUNCTION(nades_PlayerPreThink)
{
- float key_pressed = ((g_grappling_hook || client_hasweapon(self, WEP_HOOK, FALSE, FALSE) || WEPSET_CONTAINS_AW(weaponsInMap, WEP_HOOK)) ? self.button16 : self.BUTTON_HOOK);
+ float key_pressed = ((g_grappling_hook || client_hasweapon(self, WEP_HOOK, FALSE, FALSE) || (weaponsInMap & WEPSET_HOOK)) ? self.button16 : self.BUTTON_HOOK);
if(self.nade)
if(self.nade.wait - 0.1 <= time)