From: terencehill Date: Fri, 12 Jun 2020 20:12:04 +0000 (+0200) Subject: Merge branch 'master' into terencehill/ft_autorevive_progress X-Git-Tag: xonotic-v0.8.5~688^2~9 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=24151b08c3de08e46dace760129f0526a455be4b;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into terencehill/ft_autorevive_progress --- 24151b08c3de08e46dace760129f0526a455be4b diff --cc qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc index 8e9f06a09,360dc7a4e..2a931fa97 --- a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc +++ b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc @@@ -506,32 -486,24 +511,32 @@@ MUTATOR_HOOKFUNCTION(ft, PlayerPreThink entity reviving_players_last = NULL; entity reviving_players_first = NULL; - if(player.freezetag_frozen_timeout > 0 && time >= player.freezetag_frozen_timeout) - n = -1; - else - { - 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_last) - reviving_players_last.chain = it; - reviving_players_last = it; - if (!reviving_players_first) - reviving_players_first = it; - ++n; - }); + int 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_last) - reviving_players_last.chain = NULL; - } + 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; + + // allow normal revival during automatic revival + // (not allowing it IS_REVIVING should check freezetag_frozen_timeout too) + if (!n && player.freezetag_frozen_timeout > 0 && time >= player.freezetag_frozen_timeout) + n = -1; + 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) + { + // NOTE if auto-revival is in progress, manual revive speed is reduced so that it always takes the same amount of time + 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)