if(next_round || (time > warmup - autocvar_g_freezetag_warmup && time < warmup))
return; // already waiting for next round to start
- if((redalive >= 1 && bluealive >= 1) // counted in arena.qc
+ if((redalive >= 1 && bluealive >= 1)
|| (redalive >= 1 && yellowalive >= 1)
|| (redalive >= 1 && pinkalive >= 1)
|| (bluealive >= 1 && yellowalive >= 1)
FOR_EACH_PLAYER(e)
{
- if(e.freezetag_frozen == 0 && e.classname == "player" && e.health >= 1) // here's one player from the winning team... good
+ if(e.freezetag_frozen == 0 && e.health >= 1) // here's one player from the winning team... good
{
winner = e;
break; // break, we found the winner
return;
self.freezetag_frozen = 1;
self.freezetag_revive_progress = 0;
+ self.health = 1;
entity ice;
ice = spawn();
freezetag_Ice_Think();
self = oldself;
+ RemoveGrapplingHook(self);
+
// add waypoint
- WaypointSprite_Spawn("freezetag_frozen", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attached, TRUE);
- if(self.waypointsprite_attached)
- {
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_WAYPOINT, '0.25 0.90 1');
- }
+ 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)
{
{
self.freezetag_frozen = 0;
self.freezetag_revive_progress = 0;
+ self.health = autocvar_g_balance_health_start;
// remove the ice block
entity ice;
MUTATOR_HOOKFUNCTION(freezetag_RemovePlayer)
{
- if(self.freezetag_frozen == 0)
+ if(self.freezetag_frozen == 0 && self.health >= 1)
{
if(self.team == COLOR_TEAM1)
--redalive;
--totalalive;
}
- if(totalspawned > 2) // only check for winners if we had more than two players (one of them left, don't let the other player win just because of that)
+ if(total_players > 2) // only check for winners if we had more than two players (one of them left, don't let the other player win just because of that)
freezetag_CheckWinner();
freezetag_Unfreeze(world);
--pinkalive;
--totalalive;
- freezetag_Freeze(frag_attacker);
+ freezetag_Freeze(frag_attacker);
}
- if(frag_attacker.classname == STR_PLAYER)
- centerprint(frag_attacker, strcat("^2You froze ^7", frag_target.netname, ".\n"));
-
if(frag_attacker == frag_target || frag_attacker == world)
{
- if(frag_target.classname == STR_PLAYER)
- centerprint(frag_target, "^1You froze yourself.\n");
+ if(frag_target.classname == STR_PLAYER)
+ centerprint(frag_target, "^1You froze yourself.\n");
bprint("^7", frag_target.netname, "^1 froze himself.\n");
}
else
{
- if(frag_target.classname == STR_PLAYER)
- centerprint(frag_target, strcat("^1You were frozen by ^7", frag_attacker.netname, ".\n"));
+ if(frag_target.classname == STR_PLAYER)
+ centerprint(frag_target, strcat("^1You were frozen by ^7", frag_attacker.netname, ".\n"));
+ if(frag_attacker.classname == STR_PLAYER)
+ centerprint(frag_attacker, strcat("^2You froze ^7", frag_target.netname, ".\n"));
bprint("^7", frag_target.netname, "^1 was frozen by ^7", frag_attacker.netname, ".\n");
}
- frag_target.health = autocvar_g_balance_health_start; // "respawn" the player :P
+ frag_target.health = 1; // "respawn" the player :P
freezetag_CheckWinner();
MUTATOR_HOOKFUNCTION(freezetag_PlayerSpawn)
{
- freezetag_Unfreeze(world); // start by making sure that all ice blocks are removed
+ freezetag_Unfreeze(world); // start by making sure that all ice blocks are removed
- if(totalspawned == 1 && time > game_starttime) // only one player active on server, start a new match immediately
+ if(total_players == 1 && time > game_starttime) // only one player active on server, start a new match immediately
if(!next_round && warmup && (time < warmup - autocvar_g_freezetag_warmup || time > warmup)) // not awaiting next round
{
next_round = time;
if(n && self.freezetag_frozen) // 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);
if(self.freezetag_revive_progress >= 1)
{
else if(!n && self.freezetag_frozen) // 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);
}
else if(!n)
{
{
if(time > 1) // game loads at time 1
error("This is a game type and it cannot be added at runtime.");
- g_freezetag = 1;
freezetag_Initialize();
}
MUTATOR_ONREMOVE
{
- g_freezetag = 0;
error("This is a game type and it cannot be removed at runtime.");
}