{
// count amount of alive players in each team
FOR_EACH_PLAYER(self) {
- if (self.team == NUM_TEAM_1 && self.freezetag_frozen == 0 && self.health >= 1)
+ if (self.team == NUM_TEAM_1 && self.frozen != 1 && self.health >= 1)
{
redalive += 1;
totalalive += 1;
}
- else if (self.team == NUM_TEAM_2 && self.freezetag_frozen == 0 && self.health >= 1)
+ else if (self.team == NUM_TEAM_2 && self.frozen != 1 && self.health >= 1)
{
bluealive += 1;
totalalive += 1;
}
- else if (self.team == NUM_TEAM_3 && self.freezetag_frozen == 0 && self.health >= 1)
+ else if (self.team == NUM_TEAM_3 && self.frozen != 1 && self.health >= 1)
{
yellowalive += 1;
totalalive += 1;
}
- else if (self.team == NUM_TEAM_4 && self.freezetag_frozen == 0 && self.health >= 1)
+ else if (self.team == NUM_TEAM_4 && self.frozen != 1 && self.health >= 1)
{
pinkalive += 1;
totalalive += 1;
{
if ((head != self) && (head.team == self.team))
{
- if (head.freezetag_frozen)
+ if (head.frozen == 1)
{
distance = vlen(head.origin - org);
if (distance > sradius)
unfrozen = 0;
FOR_EACH_PLAYER(head)
{
- if ((head.team == self.team) && (!head.freezetag_frozen))
+ if ((head.team == self.team) && (head.frozen != 1))
unfrozen++;
}
// If only one left on team or if role has timed out then start trying to free players.
- if (((unfrozen == 0) && (!self.freezetag_frozen)) || (time > self.havocbot_role_timeout))
+ if (((unfrozen == 0) && (self.frozen != 1)) || (time > self.havocbot_role_timeout))
{
dprint("changing role to freeing\n");
self.havocbot_role = havocbot_role_ft_freeing;
return FALSE;
}
- if(g_freezetag)
- if(e.freezetag_frozen)
- return FALSE;
+ if(e.frozen)
+ return FALSE;
// If neither player has ball then don't attack unless the ball is on the
// ground.
activator = world;
self = oldself;
- Unfreeze(self, frozen, revive_progress);
+ Unfreeze(self, revive_progress);
spawn_spot = spot;
MUTATOR_CALLHOOK(PlayerSpawn);
{
// do nothing
}
- else if(self.freezetag_frozen)
+ else if(self.frozen == 1)
{
// do nothing
}
self.health = max(1, self.revive_progress * autocvar_g_balance_health_start);
if(self.revive_progress >= 1)
- Unfreeze(self, frozen, revive_progress);
+ Unfreeze(self, revive_progress);
}
MUTATOR_CALLHOOK(PlayerPreThink);
do_crouch = 1;
if(self.vehicle)
do_crouch = 0;
- if(self.freezetag_frozen || self.frozen)
+ if(self.frozen)
do_crouch = 0;
if(self.weapon == WEP_SHOTGUN && self.weaponentity.wframe == WFRAME_FIRE2 && time < self.weapon_nextthink)
do_crouch = 0;
*/
void PlayerJump (void)
{
- if(self.freezetag_frozen || self.frozen)
+ if(self.frozen)
return; // no jumping in freezetag when frozen
float mjumpheight;
PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0, 0);
}
}
- else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!autocvar_g_jetpack_fuel || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO) && !self.freezetag_frozen && !self.frozen)
+ else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!autocvar_g_jetpack_fuel || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO) && !self.frozen)
{
//makevectors(self.v_angle_y * '0 1 0');
makevectors(self.v_angle);
else
deadbits = ANIMSTATE_DEAD2;
float animbits = deadbits;
- if(self.freezetag_frozen || self.frozen)
+ if(self.frozen)
animbits |= ANIMSTATE_FROZEN;
if(self.crouch)
animbits |= ANIMSTATE_DUCK;
if(((arena_roundbased || g_ca || g_freezetag) && time < warmup) || ((time < game_starttime) && !autocvar_sv_ready_restart_after_countdown))
return;
- if(self.freezetag_frozen == 1 || self.frozen == 1)
+ if(self.frozen)
return;
if (!self.weaponentity || self.health < 1)
.float player_blocked;
-.float freezetag_frozen;
.float freezetag_revive_progress;
.float frozen; // for freeze attacks
self.nextthink = time;
}
-void Freeze (entity targ, float freeze_time, .float frozen_flag, .float revive_flag)
+void Freeze (entity targ, float freeze_time, float frozen_type, .float revive_flag)
{
float monster = (targ.flags & FL_MONSTER);
float player = (targ.flags & FL_CLIENT);
if(!player && !monster) // only specified entities can be freezed
return;
- if(targ.frozen_flag)
+ if(targ.frozen)
return;
- targ.frozen_flag = 1;
+ targ.frozen = frozen_type;
targ.revive_flag = 0;
targ.health = 1;
targ.revive_speed = freeze_time;
RemoveGrapplingHook(targ);
}
-void Unfreeze (entity targ, .float frozen_flag, .float revive_flag)
+void Unfreeze (entity targ, .float revive_flag)
{
- targ.frozen_flag = 0;
+ targ.frozen = 0;
targ.revive_flag = 0;
targ.health = ((targ.classname == STR_PLAYER) ? autocvar_g_balance_health_start : targ.max_health);
e.fire_endtime = 0;
// ice stops fire
- if(e.freezetag_frozen || e.frozen)
+ if(e.frozen)
e.fire_endtime = 0;
t = min(frametime, e.fire_endtime - time);
if((arena_roundbased && time < warmup) || (time < game_starttime))
return;
- if(self.freezetag_frozen || self.frozen)
+ if(self.frozen)
return;
if(self.vehicle)
addstat(STAT_PINKALIVE, AS_INT, pinkalive_stat);
}
if(g_freezetag)
- {
- addstat(STAT_FROZEN, AS_INT, freezetag_frozen);
addstat(STAT_REVIVE_PROGRESS, AS_FLOAT, freezetag_revive_progress);
- }
if(g_td)
{
self.nextthink = time + 0.1;
if(self.revive_progress >= 1)
- Unfreeze(self, frozen, revive_progress); // wait for next think before attacking
+ Unfreeze(self, revive_progress); // wait for next think before attacking
self.SendFlags |= MSF_MOVE;
for(head = world; (head = findfloat(head, monster_attack, TRUE)); )
{
if(head.health > 0)
- if not(head.frozen || head.freezetag_frozen)
+ if not(head.frozen)
if(vlen(head.origin - self.origin) < autocvar_g_monster_shalrath_heal_range * self.scale)
if not(IsDifferentTeam(head, self))
{
switch(self.realowner.spider_type)
{
case SPIDER_TYPE_ICE:
- Freeze(other, 0.3, frozen, revive_progress);
+ Freeze(other, 0.3, 2, revive_progress);
break;
case SPIDER_TYPE_FIRE:
Fire_AddDamage(other, self.realowner, 5 * monster_skill, autocvar_g_monster_spider_attack_fire_time, DEATH_MONSTER_SPIDER_FIRE);
float spider_attack_ranged()
{
- if(self.enemy.frozen || self.enemy.freezetag_frozen)
+ if(self.enemy.frozen)
return FALSE;
spider_attack_leap();
FOR_EACH_PLAYER(e)
{
- if(e.freezetag_frozen == 0 && e.health >= 1) // here's one player from the winning team... good
+ if(e.frozen != 1 && e.health >= 1) // here's one player from the winning team... good
{
winner = e;
break; // break, we found the winner
void freezetag_Freeze(entity attacker)
{
- if(self.freezetag_frozen)
+ if(self.frozen)
return;
self.health = 1;
- Freeze(self, 0, freezetag_frozen, freezetag_revive_progress);
+ Freeze(self, 0, 1, freezetag_revive_progress);
+
+ // add waypoint
+ WaypointSprite_Spawn("freezetag_frozen", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attached, TRUE, RADARICON_WAYPOINT, '0.25 0.90 1');
if(attacker == self)
{
void freezetag_Unfreeze(entity attacker)
{
- Unfreeze(self, freezetag_frozen, freezetag_revive_progress);
+ Unfreeze(self, freezetag_revive_progress);
// remove waypoint
if(self.waypointsprite_attached)
{
if ((head != self) && (head.team == self.team))
{
- if (head.freezetag_frozen)
+ if (head.frozen == 1)
{
distance = vlen(head.origin - org);
if (distance > sradius)
unfrozen = 0;
FOR_EACH_PLAYER(head)
{
- if ((head.team == self.team) && (!head.freezetag_frozen))
+ if ((head.team == self.team) && (head.frozen != 1))
unfrozen++;
}
// If only one left on team or if role has timed out then start trying to free players.
- if (((unfrozen == 0) && (!self.freezetag_frozen)) || (time > self.havocbot_role_timeout))
+ if (((unfrozen == 0) && (self.frozen != 1)) || (time > self.havocbot_role_timeout))
{
dprint("changing role to freeing\n");
self.havocbot_role = havocbot_role_ft_freeing;
MUTATOR_HOOKFUNCTION(freezetag_RemovePlayer)
{
- if(self.freezetag_frozen == 0 && self.health >= 1)
+ if(self.frozen != 1 && self.health >= 1)
{
if(self.team == NUM_TEAM_1)
--redalive;
MUTATOR_HOOKFUNCTION(freezetag_PlayerDies)
{
- if(self.freezetag_frozen == 0)
+ if(self.frozen != 1)
{
if(self.team == NUM_TEAM_1)
--redalive;
float n;
vector revive_extra_size;
- revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
-
- // add waypoint
- if(self.freezetag_frozen && self.waypointsprite_attached == world)
- WaypointSprite_Spawn("freezetag_frozen", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attached, TRUE, RADARICON_WAYPOINT, '0.25 0.90 1');
+ revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
entity o;
o = world;
n = 0;
FOR_EACH_PLAYER(other) if(self != other)
{
- if(other.freezetag_frozen == 0)
+ if(other.frozen != 1)
{
if(other.team == self.team)
{
}
}
- if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us
+ if(n && self.frozen == 1) // OK, there is at least one teammate reviving us
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * autocvar_g_freezetag_revive_speed, 1);
self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
// EVERY team mate nearby gets a point (even if multiple!)
FOR_EACH_PLAYER(other) if(self != other)
{
- if(other.freezetag_frozen == 0)
+ if(other.frozen != 1)
{
if(other.team == self.team)
{
// now find EVERY teammate within reviving radius, set their revive_progress values correct
FOR_EACH_PLAYER(other) if(self != other)
{
- if(other.freezetag_frozen == 0)
+ if(other.frozen != 1)
{
if(other.team == self.team)
{
}
}
}
- else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset
+ else if(!n && self.frozen == 1) // only if no teammate is nearby will we reset
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1);
self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
return 1;
}
-MUTATOR_HOOKFUNCTION(freezetag_PlayerPhysics)
-{
- if(self.freezetag_frozen)
- {
- self.movement = '0 0 0';
- self.disableclientprediction = 1;
- }
- return 1;
-}
-
MUTATOR_HOOKFUNCTION(freezetag_PlayerDamage_Calculate)
{
if(g_freezetag)
{
- if(frag_target.freezetag_frozen == 1 && frag_deathtype != DEATH_HURTTRIGGER)
+ if(frag_target.frozen == 1 && frag_deathtype != DEATH_HURTTRIGGER)
{
frag_damage = 0;
frag_force = frag_force * autocvar_g_freezetag_frozen_force;
return 1;
}
-MUTATOR_HOOKFUNCTION(freezetag_ForbidThrowCurrentWeapon)
-{
- if (self.freezetag_frozen)
- return 1;
- return 0;
-}
-
MUTATOR_HOOKFUNCTION(freezetag_BotRoles)
{
if not(self.deadflag)
MUTATOR_HOOK(PlayerSpawn, freezetag_PlayerSpawn, CBC_ORDER_ANY);
MUTATOR_HOOK(GiveFragsForKill, freezetag_GiveFragsForKill, CBC_ORDER_FIRST);
MUTATOR_HOOK(PlayerPreThink, freezetag_PlayerPreThink, CBC_ORDER_FIRST);
- MUTATOR_HOOK(PlayerPhysics, freezetag_PlayerPhysics, CBC_ORDER_FIRST);
MUTATOR_HOOK(PlayerDamage_Calculate, freezetag_PlayerDamage_Calculate, CBC_ORDER_ANY);
- MUTATOR_HOOK(ForbidThrowCurrentWeapon, freezetag_ForbidThrowCurrentWeapon, CBC_ORDER_FIRST); //first, last or any? dunno.
MUTATOR_HOOK(HavocBot_ChooseRule, freezetag_BotRoles, CBC_ORDER_ANY);
MUTATOR_ONADD
return;
}
- if (owner_player.weaponentity.state != WS_INUSE || !lgbeam_checkammo() || owner_player.deadflag != DEAD_NO || !owner_player.BUTTON_ATCK || owner_player.freezetag_frozen || owner_player.frozen)
+ if (owner_player.weaponentity.state != WS_INUSE || !lgbeam_checkammo() || owner_player.deadflag != DEAD_NO || !owner_player.BUTTON_ATCK || owner_player.frozen)
{
if(self == owner_player.lgbeam)
owner_player.lgbeam = world;