From: terencehill Date: Sun, 17 Feb 2019 18:22:22 +0000 (+0100) Subject: Merge branch 'master' into terencehill/ft_autorevive_progress X-Git-Tag: xonotic-v0.8.5~688^2~18 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=1236b060b5cde5ec310492417f2f4a03c367a423;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into terencehill/ft_autorevive_progress # Conflicts: # qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc --- 1236b060b5cde5ec310492417f2f4a03c367a423 diff --cc qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc index aa2cbbf80,c42c7443b..5c73912aa --- a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc +++ b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc @@@ -487,34 -486,31 +486,38 @@@ MUTATOR_HOOKFUNCTION(ft, PlayerPreThink n = 0; vector revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size; FOREACH_CLIENT(IS_PLAYER(it) && IS_REVIVING(player, it, revive_extra_size), { - if (!reviving_players) - reviving_players = IL_NEW(); - IL_PUSH(reviving_players, it); + if (reviving_players_last) + reviving_players_last.chain = it; + reviving_players_last = it; + if (!reviving_players_first) + reviving_players_first = it; ++n; }); + if (reviving_players_last) + reviving_players_last.chain = NULL; } + float base_progress = 0; + if (STAT(FROZEN, player) == FROZEN_NORMAL && autocvar_g_freezetag_revive_auto + && autocvar_g_freezetag_frozen_maxtime > 0 && autocvar_g_freezetag_revive_auto_progress) + { + base_progress = bound(0, (1 - (player.freezetag_frozen_timeout - time) / autocvar_g_freezetag_frozen_maxtime), 1); + } + if (!n) // no teammate nearby { if (STAT(FROZEN, player) == FROZEN_NORMAL) { - STAT(REVIVE_PROGRESS, player) = bound(0, STAT(REVIVE_PROGRESS, player) - frametime * autocvar_g_freezetag_revive_clearspeed, 1); + STAT(REVIVE_PROGRESS, player) = bound(base_progress, STAT(REVIVE_PROGRESS, player) - frametime * autocvar_g_freezetag_revive_clearspeed, 1); - SetResourceAmountExplicit(player, RESOURCE_HEALTH, max(1, STAT(REVIVE_PROGRESS, player) * ((warmup_stage) ? warmup_start_health : start_health))); + SetResourceExplicit(player, RES_HEALTH, max(1, STAT(REVIVE_PROGRESS, player) * ((warmup_stage) ? warmup_start_health : start_health))); } else if (!STAT(FROZEN, player)) - STAT(REVIVE_PROGRESS, player) = 0; // thawing nobody + STAT(REVIVE_PROGRESS, player) = base_progress; // thawing nobody } else if (STAT(FROZEN, player) == FROZEN_NORMAL) // OK, there is at least one teammate reviving us { - STAT(REVIVE_PROGRESS, player) = bound(0, STAT(REVIVE_PROGRESS, player) + frametime * max(1/60, autocvar_g_freezetag_revive_speed), 1); + STAT(REVIVE_PROGRESS, player) = bound(base_progress, STAT(REVIVE_PROGRESS, player) + frametime * max(1/60, autocvar_g_freezetag_revive_speed), 1); - SetResourceAmountExplicit(player, RESOURCE_HEALTH, max(1, STAT(REVIVE_PROGRESS, player) * ((warmup_stage) ? warmup_start_health : start_health))); + SetResourceExplicit(player, RES_HEALTH, max(1, STAT(REVIVE_PROGRESS, player) * ((warmup_stage) ? warmup_start_health : start_health))); if(STAT(REVIVE_PROGRESS, player) >= 1) {