From: terencehill Date: Sat, 6 Oct 2018 18:30:39 +0000 (+0200) Subject: FreezeTag: start the automatic reviving progress as soon as the player gets frozen... X-Git-Tag: xonotic-v0.8.5~688^2~21 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=19d3032d23f2b7c588d0faeedac6781727d450f7;p=xonotic%2Fxonotic-data.pk3dir.git FreezeTag: start the automatic reviving progress as soon as the player gets frozen; this way teammates can estimate time left until autoreviving by looking at the health bar and of course time needed to revive them gets shorter --- diff --git a/gamemodes-server.cfg b/gamemodes-server.cfg index 530e88818..f590c5949 100644 --- a/gamemodes-server.cfg +++ b/gamemodes-server.cfg @@ -365,6 +365,7 @@ set g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a set g_freezetag_revive_nade 1 "Enable reviving from own nade explosion" set g_freezetag_revive_nade_health 40 "Amount of health player has if they revived from their own nade explosion" set g_freezetag_round_timelimit 180 "round time limit in seconds" +set g_freezetag_revive_auto_progress 1 "start the automatic reviving progress as soon as the player gets frozen" set g_freezetag_frozen_maxtime 60 "frozen players will be automatically unfrozen after this time in seconds" seta g_freezetag_teams_override 0 set g_freezetag_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any" diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc index 0b87c03bd..69d4367b4 100644 --- a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc +++ b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc @@ -494,19 +494,28 @@ MUTATOR_HOOKFUNCTION(ft, PlayerPreThink, CBC_ORDER_FIRST) }); } + // TODO patch nade code + // TODO add autocvar_g_freezetag_revive_auto + float base_progress = 0; + if (STAT(FROZEN, player) == FROZEN_NORMAL + && 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))); } 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))); if(STAT(REVIVE_PROGRESS, player) >= 1) diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qh b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qh index d637ae46f..29d30d508 100644 --- a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qh +++ b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qh @@ -27,6 +27,7 @@ const float ICE_MAX_ALPHA = 1; const float ICE_MIN_ALPHA = 0.1; float freezetag_teams; +int autocvar_g_freezetag_revive_auto_progress; float autocvar_g_freezetag_revive_extra_size; float autocvar_g_freezetag_revive_speed; bool autocvar_g_freezetag_revive_nade;