}
FOREACH(Nades, true, {
- for (int j = 0; j < 2; j++)
+ for (int j = 0; j < 2; ++j)
{
if (it.m_projectile[j] == proj)
{
return EFFECT_Null;
}
+
#endif
-REGISTER_NET_TEMP(TE_CSQC_DARKBLINKING);
#ifdef CSQC
#include <client/draw.qh>
#include <client/hud/hud.qh>
-float dark_appeartime;
-float dark_fadetime;
-bool darkblink;
+bool darkness_fadealpha;
void HUD_DarkBlinking()
{
vector bottomright = vec2(vid_conwidth, vid_conheight);
- drawfill('0 0 0', bottomright, NADE_TYPE_DARKNESS.m_color, 0.986, DRAWFLAG_NORMAL);
+ drawfill('0 0 0', bottomright, NADE_TYPE_DARKNESS.m_color, darkness_fadealpha, DRAWFLAG_NORMAL);
}
REGISTER_MUTATOR(cl_nades, true);
{
if (STAT(NADE_DARKNESS_TIME) > time)
{
- M_ARGV(0, vector) = NADE_TYPE_DARKNESS.m_color;
+ if (!darkness_fadealpha)
+ sound(csqcplayer, CH_PAIN, SND_BLIND, VOL_BASE, ATTEN_NORM);
+ darkness_fadealpha = min(0.986, darkness_fadealpha + frametime * 7);
+ }
+ else if (darkness_fadealpha > 0)
+ darkness_fadealpha = max(0, darkness_fadealpha - frametime * 7);
+
+ if (darkness_fadealpha > 0)
+ {
HUD_DarkBlinking();
+ M_ARGV(1, float) = 0; // alpha_multipl 0, don't draw normal overlay
return true;
}
return false;
}
-NET_HANDLE(TE_CSQC_DARKBLINKING, bool isNew)
-{
- return = true;
-
- if(darkblink) return;
-
- localcmd("play2 sound/misc/blind\n");
- darkblink = true;
- dark_appeartime = time;
- dark_fadetime = STAT(NADE_DARKNESS_TIME);
-}
-
MUTATOR_HOOKFUNCTION(cl_nades, Ent_Projectile)
{
entity proj = M_ARGV(0, entity);
}
MUTATOR_HOOKFUNCTION(cl_nades, EditProjectile)
{
+ if (!mut_is_active(MUT_NADES)) return;
+
entity proj = M_ARGV(0, entity);
if (proj.cnt == PROJECTILE_NAPALM_FOUNTAIN)
entity nade_type = Nade_FromProjectile(proj.cnt);
if (nade_type == NADE_TYPE_Null) return;
+
if(STAT(NADES_SMALL))
{
proj.mins = '-8 -8 -8';
void nade_burn_spawn(entity _nade)
{
- CSQCProjectile(_nade, true, REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, _nade)).m_projectile[true], true);
+ CSQCProjectile(_nade, true, REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, _nade)).m_projectile[1], true);
}
void nade_spawn(entity _nade)
_nade.effects |= EF_LOWPRECISION;
- CSQCProjectile(_nade, true, REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, _nade)).m_projectile[false], true);
+ CSQCProjectile(_nade, true, REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, _nade)).m_projectile[0], true);
}
void normal_nade_boom(entity this)
void nade_napalm_boom(entity this)
{
- for (int c = 0; c < autocvar_g_nades_napalm_ball_count; c++)
+ for (int c = 0; c < autocvar_g_nades_napalm_ball_count; ++c)
nade_napalm_ball(this);
entity fountain = new(nade_napalm_fountain);
orb.colormod = '0.66 0.33 0';
}
-void DarkBlinking(entity e)
-{
- if(e == NULL) return;
-
- int accepted = VerifyClientEntity(e, true, false);
-
- if(accepted > 0)
- {
- msg_entity = e;
- WriteHeader(MSG_ONE, TE_CSQC_DARKBLINKING);
- }
-}
-
void nade_darkness_think(entity this)
{
if(round_handler_IsActive())
case 1: if(it == this.realowner) continue; // don't affect the player who threw the nade
}
STAT(NADE_DARKNESS_TIME, it) = time + 0.1;
- DarkBlinking(it);
});
}
if(!this.traileffectnum)
{
entity nade = REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, this));
- this.traileffectnum = _particleeffectnum(Nade_TrailEffect(nade.m_projectile[false], this.team).eent_eff_name);
+ this.traileffectnum = _particleeffectnum(Nade_TrailEffect(nade.m_projectile[0], this.team).eent_eff_name);
}
this.alpha = 1;
}
{
entity n = new(nade), fn = new(fake_nade);
- STAT(NADE_BONUS_TYPE, n) = max(1, ntype);
n.pokenade_type = pntype;
- if(REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, n)) == NADE_TYPE_Null)
- STAT(NADE_BONUS_TYPE, n) = NADE_TYPE_NORMAL.m_id;
+ Nade def = REGISTRY_GET(Nades, max(1, ntype));
+ if(def == NADE_TYPE_Null)
+ def = NADE_TYPE_NORMAL;
+
+ STAT(NADE_BONUS_TYPE, n) = def.m_id;
.entity weaponentity = weaponentities[0]; // TODO: unhardcode
//setattachment(n, player, "bip01 l hand");
n.exteriormodeltoclient = player;
setcefc(n, nade_customize);
- n.traileffectnum = _particleeffectnum(Nade_TrailEffect(REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, n)).m_projectile[false], player.team).eent_eff_name);
- n.colormod = REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, n)).m_color;
+ n.traileffectnum = _particleeffectnum(Nade_TrailEffect(def.m_projectile[0], player.team).eent_eff_name);
+ n.colormod = def.m_color;
n.realowner = nowner;
n.colormap = player.colormap;
n.glowmod = player.glowmod;
n.projectiledeathtype = DEATH_NADE.m_id;
n.weaponentity_fld = weaponentity;
n.nade_lifetime = ntime;
- n.alpha = REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, n)).m_alpha;
+ n.alpha = def.m_alpha;
setmodel(fn, MDL_NADE_VIEW);
//setattachment(fn, player.(weaponentity), "");
fn.viewmodelforclient = player;
fn.realowner = fn.owner = player;
- fn.colormod = REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, n)).m_color;
+ fn.colormod = def.m_color;
fn.colormap = player.colormap;
fn.glowmod = player.glowmod;
setthink(fn, SUB_Remove);
fn.nextthink = n.wait;
fn.weaponentity_fld = weaponentity;
- fn.alpha = REGISTRY_GET(Nades, STAT(NADE_BONUS_TYPE, n)).m_alpha;
+ fn.alpha = def.m_alpha;
player.nade = n;
player.fake_nade = fn;
{
entity player = M_ARGV(0, entity);
- player.nade_refire = (autocvar_g_nades_onspawn)
- ? time + autocvar_g_nades_nade_refire
- : time + autocvar_g_spawnshieldtime;
+ if (StatusEffects_active(STATUSEFFECT_SpawnShield, player))
+ player.nade_refire = StatusEffects_gettime(STATUSEFFECT_SpawnShield, player);
+ else
+ player.nade_refire = time;
+
+ if (!autocvar_g_nades_onspawn)
+ player.nade_refire += autocvar_g_nades_nade_refire;
if(autocvar_g_nades_bonus_client_select)
STAT(NADE_BONUS_TYPE, player) = CS_CVAR(player).cvar_cl_nade_type;