void nade_burn_spawn(entity _nade)
{
- CSQCProjectile(_nade, TRUE, Nade_ProjectileFromID(_nade.nade_type, TRUE), TRUE);
+ CSQCProjectile(_nade, true, Nade_ProjectileFromID(_nade.nade_type, true), true);
}
void nade_spawn(entity _nade)
_nade.effects |= EF_LOWPRECISION;
- CSQCProjectile(_nade, TRUE, Nade_ProjectileFromID(_nade.nade_type, FALSE), TRUE);
+ CSQCProjectile(_nade, true, Nade_ProjectileFromID(_nade.nade_type, false), true);
}
void napalm_damage(float dist, float damage, float edgedamage, float burntime)
return;
RandomSelection_Init();
- for(e = WarpZone_FindRadius(self.origin, dist, TRUE); e; e = e.chain)
+ for(e = WarpZone_FindRadius(self.origin, dist, true); e; e = e.chain)
if(e.takedamage == DAMAGE_AIM)
if(self.realowner != e || autocvar_g_nades_napalm_selfdamage)
if(!IS_PLAYER(e) || !self.realowner || DIFF_TEAM(e, self))
if(!e.frozen)
{
p = e.origin;
- p_x += e.mins_x + random() * (e.maxs_x - e.mins_x);
- p_y += e.mins_y + random() * (e.maxs_y - e.mins_y);
- p_z += e.mins_z + random() * (e.maxs_z - e.mins_z);
+ p.x += e.mins.x + random() * (e.maxs.x - e.mins.x);
+ p.y += e.mins.y + random() * (e.maxs.y - e.mins.y);
+ p.z += e.mins.z + random() * (e.maxs.z - e.mins.z);
d = vlen(WarpZone_UnTransformOrigin(e, self.origin) - p);
if(d < dist)
{
proj.realowner = self.realowner;
proj.team = self.owner.team;
proj.classname = "grenade";
- proj.bot_dodge = TRUE;
+ proj.bot_dodge = true;
proj.bot_dodgerating = autocvar_g_nades_napalm_ball_damage;
proj.movetype = MOVETYPE_BOUNCE;
proj.projectiledeathtype = DEATH_NADE_NAPALM;
proj.flags = FL_PROJECTILE;
proj.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_ARC;
- //CSQCProjectile(proj, TRUE, PROJECTILE_NAPALM_FIRE, TRUE);
+ //CSQCProjectile(proj, true, PROJECTILE_NAPALM_FIRE, true);
}
void nade_napalm_boom()
{
entity fountain;
- local float c;
- for (c = 0; c < autocvar_g_nades_napalm_ball_count; c ++)
+ int c;
+ for (c = 0; c < autocvar_g_nades_napalm_ball_count; c++)
nade_napalm_ball();
fountain.team = self.team;
fountain.movetype = MOVETYPE_TOSS;
fountain.projectiledeathtype = DEATH_NADE_NAPALM;
- fountain.bot_dodge = TRUE;
+ fountain.bot_dodge = true;
fountain.bot_dodgerating = autocvar_g_nades_napalm_fountain_damage;
fountain.nade_special_time = time;
setsize(fountain, '-16 -16 -16', '16 16 16');
- CSQCProjectile(fountain, TRUE, PROJECTILE_NAPALM_FOUNTAIN, TRUE);
+ CSQCProjectile(fountain, true, PROJECTILE_NAPALM_FOUNTAIN, true);
}
void nade_ice_freeze(entity freezefield, entity frost_target, float freeze_time)
{
frost_target.frozen_by = freezefield.realowner;
pointparticles(particleeffectnum("electro_impact"), frost_target.origin, '0 0 0', 1);
- Freeze(frost_target, 1/freeze_time, 3, FALSE);
+ Freeze(frost_target, 1/freeze_time, 3, false);
if(frost_target.ballcarried)
if(g_keepaway) { ka_DropEvent(frost_target); }
else { DropBall(frost_target.ballcarried, frost_target.origin, frost_target.velocity);}
if(frost_target.flagcarried) { ctf_Handle_Throw(frost_target, world, DROP_THROW); }
if(frost_target.nade) { toss_nade(frost_target, '0 0 0', time + 0.05); }
- kh_Key_DropAll(frost_target, FALSE);
+ kh_Key_DropAll(frost_target, false);
}
void nade_ice_think()
sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
RadiusDamage(self, self.realowner, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage,
- autocvar_g_nades_nade_radius, self, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy);
+ autocvar_g_nades_nade_radius, self, world, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy);
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);
}
fountain.team = self.team;
fountain.movetype = MOVETYPE_TOSS;
fountain.projectiledeathtype = DEATH_NADE_ICE;
- fountain.bot_dodge = FALSE;
+ fountain.bot_dodge = false;
setsize(fountain, '-16 -16 -16', '16 16 16');
fountain.nade_special_time = time+0.3;
fountain.angles = self.angles;
if(self.realowner.vehicle)
return;
- vector locout = self.origin + '0 0 1' * (1 - self.realowner.mins_z - 24);
+ vector locout = self.origin + '0 0 1' * (1 - self.realowner.mins.z - 24);
tracebox(locout, self.realowner.mins, self.realowner.maxs, locout, MOVE_NOMONSTERS, self.realowner);
locout = trace_endpos;
healer.healer_lifetime = autocvar_g_nades_heal_time; // save the cvar
healer.ltime = time + healer.healer_lifetime;
healer.team = self.realowner.team;
- healer.bot_dodge = FALSE;
+ healer.bot_dodge = false;
healer.solid = SOLID_TRIGGER;
healer.touch = nade_heal_touch;
vector size = '1 1 1' * healer.healer_radius / 2;
setsize(healer,-size,size);
- Net_LinkEntity(healer, TRUE, 0, healer_send);
+ Net_LinkEntity(healer, true, 0, healer_send);
healer.think = nade_heal_think;
healer.nextthink = time;
void nade_monster_boom()
{
- entity e = spawnmonster(self.pokenade_type, 0, self.realowner, self.realowner, self.origin, FALSE, FALSE, 1);
+ entity e = spawnmonster(self.pokenade_type, 0, self.realowner, self.realowner, self.origin, false, false, 1);
if(autocvar_g_nades_pokenade_monster_lifetime > 0)
e.monster_lifetime = time + autocvar_g_nades_pokenade_monster_lifetime;
}
}
- pointparticles(particleeffectnum(expef), self.origin + '0 0 1', '0 0 0', 1);
+ if(expef != "")
+ pointparticles(particleeffectnum(expef), findbetterlocation(self.origin, 8), '0 0 0', 1);
sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- self.takedamage = DAMAGE_NO;
+ self.event_damage = func_null; // prevent somehow calling damage in the next call
if(nade_blast)
{
RadiusDamage(self, self.realowner, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage,
- autocvar_g_nades_nade_radius, self, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy);
+ autocvar_g_nades_nade_radius, self, world, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy);
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);
}
+ if(self.takedamage)
switch ( self.nade_type )
{
case NADE_TYPE_NAPALM: nade_napalm_boom(); break;
void nade_touch()
{
- if(trace_dphitcontents & (DPCONTENTS_PLAYERCLIP | DPCONTENTS_MONSTERCLIP)) { return; }
+ float is_weapclip = 0;
+ if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW)
+ if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID))
+ if (!(trace_dphitcontents & DPCONTENTS_OPAQUE))
+ is_weapclip = 1;
+ if(ITEM_TOUCH_NEEDKILL() || is_weapclip)
+ {
+ remove(self);
+ return;
+ }
+
PROJECTILE_TOUCH;
+
//setsize(self, '-2 -2 -2', '2 2 2');
//UpdateCSQCProjectile(self);
if(self.health == self.max_health)
void nade_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
- if(self.nade_type == NADE_TYPE_TRANSLOCATE || self.nade_type == NADE_TYPE_SPAWN)
+ if(ITEM_DAMAGE_NEEDKILL(deathtype))
+ {
+ self.takedamage = DAMAGE_NO;
+ nade_boom();
return;
+ }
- if(DEATH_ISWEAPON(deathtype, WEP_LASER))
+ if(self.nade_type == NADE_TYPE_TRANSLOCATE || self.nade_type == NADE_TYPE_SPAWN)
return;
- if(DEATH_ISWEAPON(deathtype, WEP_NEX) || DEATH_ISWEAPON(deathtype, WEP_MINSTANEX))
+ if(DEATH_ISWEAPON(deathtype, WEP_BLASTER))
+ {
+ force *= 1.5;
+ damage = 0;
+ }
+
+ if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER) && (deathtype & HITTYPE_SECONDARY))
+ {
+ force *= 0.5; // too much
+ frag_damage = 0;
+ }
+
+ if(DEATH_ISWEAPON(deathtype, WEP_VORTEX) || DEATH_ISWEAPON(deathtype, WEP_VAPORIZER))
{
force *= 6;
damage = self.max_health * 0.55;
}
- if(DEATH_ISWEAPON(deathtype, WEP_UZI))
+ if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN) || DEATH_ISWEAPON(deathtype, WEP_HMG))
damage = self.max_health * 0.1;
- if(DEATH_ISWEAPON(deathtype, WEP_SHOTGUN))
+ if(DEATH_ISWEAPON(deathtype, WEP_SHOCKWAVE) || DEATH_ISWEAPON(deathtype, WEP_SHOTGUN)) // WEAPONTODO
if(deathtype & HITTYPE_SECONDARY)
{
damage = self.max_health * 0.1;
force *= 10;
}
else
- damage = self.max_health * 1.1;
+ damage = self.max_health * 1.15;
self.velocity += force;
+ UpdateCSQCProjectile(self);
- if(!damage || (self.flags & FL_ONGROUND && IS_PLAYER(attacker)))
+ if(damage <= 0 || ((self.flags & FL_ONGROUND) && IS_PLAYER(attacker)))
return;
if(self.health == self.max_health)
self.think = nade_beep;
}
- self.health -= damage;
+ self.health -= damage;
if ( self.nade_type != NADE_TYPE_HEAL || IS_PLAYER(attacker) )
self.realowner = attacker;
makevectors(e.v_angle);
- W_SetupShot(e, FALSE, FALSE, "", CH_WEAPON_A, 0);
+ W_SetupShot(e, false, false, "", CH_WEAPON_A, 0);
Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_NADES);
setsize(_nade, '-16 -16 -16', '16 16 16');
_nade.movetype = MOVETYPE_BOUNCE;
- tracebox(_nade.origin, _nade.mins, _nade.maxs, _nade.origin, FALSE, _nade);
+ tracebox(_nade.origin, _nade.mins, _nade.maxs, _nade.origin, false, _nade);
if (trace_startsolid)
setorigin(_nade, e.origin);
- if(self.v_angle_x >= 70 && self.v_angle_x <= 110)
+ if(self.v_angle.x >= 70 && self.v_angle.x <= 110)
_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.velocity = _velocity;
else
- _nade.velocity = W_CalculateProjectileVelocity(e.velocity, _velocity, TRUE);
+ _nade.velocity = W_CalculateProjectileVelocity(e.velocity, _velocity, true);
_nade.touch = nade_touch;
_nade.health = autocvar_g_nades_nade_health;
_nade.event_damage = nade_damage;
_nade.customizeentityforclient = func_null;
_nade.exteriormodeltoclient = world;
- _nade.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
_nade.traileffectnum = 0;
- _nade.teleportable = TRUE;
- _nade.pushable = TRUE;
+ _nade.teleportable = true;
+ _nade.pushable = true;
_nade.gravity = 1;
_nade.missile_flags = MIF_SPLASH | MIF_ARC;
- _nade.damagedbycontents = TRUE;
+ _nade.damagedbycontents = true;
_nade.angles = vectoangles(_nade.velocity);
_nade.flags = FL_PROJECTILE;
_nade.projectiledeathtype = DEATH_NADE;
_nade.toss_time = time;
_nade.solid = SOLID_CORPSE; //((_nade.nade_type == NADE_TYPE_TRANSLOCATE) ? SOLID_CORPSE : SOLID_BBOX);
+ if(_nade.nade_type == NADE_TYPE_TRANSLOCATE || _nade.nade_type == NADE_TYPE_SPAWN)
+ _nade.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
+ else
+ _nade.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY;
+
nade_spawn(_nade);
if(_time)
float nade_customize()
{
- //if(IS_SPEC(other)) { return FALSE; }
+ //if(IS_SPEC(other)) { return false; }
if(other == self.realowner || (IS_SPEC(other) && other.enemy == self.realowner))
{
// somewhat hide the model, but keep the glow
{
//self.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
if(!self.traileffectnum)
- self.traileffectnum = particleeffectnum(Nade_TrailEffect(Nade_ProjectileFromID(self.nade_type, FALSE), self.team));
+ self.traileffectnum = particleeffectnum(Nade_TrailEffect(Nade_ProjectileFromID(self.nade_type, false), self.team));
self.alpha = 1;
}
- return TRUE;
+ return true;
}
void nade_prime()
//setattachment(n, self, "bip01 l hand");
n.exteriormodeltoclient = self;
n.customizeentityforclient = nade_customize;
- n.traileffectnum = particleeffectnum(Nade_TrailEffect(Nade_ProjectileFromID(n.nade_type, FALSE), self.team));
+ n.traileffectnum = particleeffectnum(Nade_TrailEffect(Nade_ProjectileFromID(n.nade_type, false), self.team));
n.colormod = Nade_Color(n.nade_type);
n.realowner = self;
n.colormap = self.colormap;
float CanThrowNade()
{
if(self.vehicle)
- return FALSE;
+ return false;
if(gameover)
- return FALSE;
+ return false;
if(self.deadflag != DEAD_NO)
- return FALSE;
+ return false;
if (!autocvar_g_nades)
- return FALSE; // allow turning them off mid match
+ return false; // allow turning them off mid match
if(forbidWeaponUse())
- return FALSE;
+ return false;
if (!IS_PLAYER(self))
- return FALSE;
+ return false;
- return TRUE;
+ return true;
}
void nades_CheckThrow()
MUTATOR_HOOKFUNCTION(nades_CheckThrow)
{
if(MUTATOR_RETURNVALUE) { nades_CheckThrow(); }
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_VehicleEnter)
if(vh_player.nade)
toss_nade(vh_player, '0 0 100', max(vh_player.nade.wait, time + 0.05));
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_PlayerPreThink)
{
- if(!IS_PLAYER(self)) { return FALSE; }
+ if(!IS_PLAYER(self)) { return false; }
float key_pressed = self.BUTTON_HOOK;
float time_score;
- if(g_grappling_hook || client_hasweapon(self, WEP_HOOK, FALSE, FALSE) || (weaponsInMap & WEPSET_HOOK) || g_jetpack || self.items & IT_JETPACK)
- key_pressed = self.button16; // if hook/jetpack is enabled, use an alternate key
+ if(g_grappling_hook || client_hasweapon(self, WEP_HOOK, false, false) || (weaponsInMap & WEPSET_HOOK))
+ key_pressed = self.button16; // if hook is enabled, use an alternate key
if(self.nade)
{
self.nade.velocity = self.velocity;
setorigin(self.nade, self.origin + self.view_ofs + v_forward * 8 + v_right * -8 + v_up * 0);
- self.nade.angles_y = self.angles_y;
+ self.nade.angles_y = self.angles.y;
}
if(self.nade)
if(!o)
o = other;
if(self.frozen == 1)
- other.reviving = TRUE;
+ other.reviving = true;
++n;
}
}
FOR_EACH_PLAYER(other) if(other.reviving)
{
other.revive_progress = self.revive_progress;
- other.reviving = FALSE;
+ other.reviving = false;
}
}
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_PlayerSpawn)
}
}
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_PlayerDies)
nades_RemoveBonus(frag_target);
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_PlayerDamage)
Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_FREEZETAG_REVIVE_SELF);
}
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_MonsterDies)
if(!(self.spawnflags & MONSTERFLAG_SPAWNED))
nades_GiveBonus(frag_attacker, autocvar_g_nades_bonus_score_minor);
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_RemovePlayer)
{
nades_Clear(self);
nades_RemoveBonus(self);
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_SpectateCopy)
self.bonus_nade_score = other.bonus_nade_score;
self.stat_healing_orb = other.stat_healing_orb;
self.stat_healing_orb_alpha = other.stat_healing_orb_alpha;
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_GetCvars)
GetCvars_handleFloat(get_cvars_s, get_cvars_f, cvar_cl_nade_type, "cl_nade_type");
GetCvars_handleString(get_cvars_s, get_cvars_f, cvar_cl_pokenade_type, "cl_pokenade_type");
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_BuildMutatorsString)
{
ret_string = strcat(ret_string, ":Nades");
- return FALSE;
+ return false;
}
MUTATOR_HOOKFUNCTION(nades_BuildMutatorsPrettyString)
{
ret_string = strcat(ret_string, ", Nades");
- return FALSE;
+ return false;
}
void nades_Initialize()
nades_Initialize();
}
- return FALSE;
+ return false;
}