- STAT(REVIVE_PROGRESS, player) = bound(base_progress, STAT(REVIVE_PROGRESS, player) - frametime * clearspeed * (1 - base_progress), 1);
+ {
+ if (autocvar_g_freezetag_revive_time_to_score > 0)
+ {
+ if (STAT(REVIVE_PROGRESS, player) > base_progress)
+ {
+ // reduce auto-revival time based on manual revival progress
+ base_progress = STAT(REVIVE_PROGRESS, player);
+ player.freezetag_frozen_timeout = time + autocvar_g_freezetag_frozen_maxtime * (1 - STAT(REVIVE_PROGRESS, player));
+ }
+ // don't clear revive progress, it would allow stacking points
+ // by entering and exiting the revival zone many times
+ STAT(REVIVE_PROGRESS, player) = base_progress;
+ }
+ else
+ STAT(REVIVE_PROGRESS, player) = bound(base_progress, STAT(REVIVE_PROGRESS, player) - frametime * clearspeed * (1 - base_progress), 1);
+ }