]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc
LMS: jitter waypoint repeat time to make it less predictable
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / gamemodes / gamemode / lms / sv_lms.qc
index e3a41c9f8526cb759c6962522ba1b667efb2248e..aa8cdc5381f364a0d61b7939686005f8416604eb 100644 (file)
@@ -10,23 +10,26 @@ int autocvar_g_lms_extra_lives;
 bool autocvar_g_lms_join_anytime;
 int autocvar_g_lms_last_join;
 bool autocvar_g_lms_regenerate;
-int autocvar_g_lms_leader_wp_lives;
-float autocvar_g_lms_leader_wp_max_relative;
-float autocvar_g_lms_leader_wp_time;
-float autocvar_g_lms_leader_wp_time_repeat;
-float autocvar_g_lms_dynamic_respawn_delay;
-float autocvar_g_lms_dynamic_respawn_delay_base;
-float autocvar_g_lms_dynamic_respawn_delay_increase;
-bool autocvar_g_lms_dynamic_vampire;
-float autocvar_g_lms_dynamic_vampire_factor_base;
-float autocvar_g_lms_dynamic_vampire_factor_increase;
-float autocvar_g_lms_dynamic_vampire_factor_max;
-int autocvar_g_lms_dynamic_vampire_min_lives_diff;
+int autocvar_g_lms_leader_wp_lives = 2;
+float autocvar_g_lms_leader_wp_max_relative = 0.5;
+float autocvar_g_lms_leader_wp_time = 5;
+float autocvar_g_lms_leader_wp_time_jitter = 10;
+float autocvar_g_lms_leader_wp_time_repeat = 25;
+float autocvar_g_lms_dynamic_respawn_delay = 1;
+float autocvar_g_lms_dynamic_respawn_delay_base = 2;
+float autocvar_g_lms_dynamic_respawn_delay_increase = 3;
+float autocvar_g_lms_dynamic_respawn_delay_max = 20;
+bool autocvar_g_lms_dynamic_vampire = 1;
+float autocvar_g_lms_dynamic_vampire_factor_base = 0.1;
+float autocvar_g_lms_dynamic_vampire_factor_increase = 0.1;
+float autocvar_g_lms_dynamic_vampire_factor_max = 0.5;
+int autocvar_g_lms_dynamic_vampire_min_lives_diff = 2;
 
 .float lms_leader;
 int lms_leaders;
 bool lms_visible_leaders;
 bool lms_visible_leaders_prev;
+float lms_leader_time_jitter;
 
 // main functions
 int LMS_NewPlayerLives()
@@ -425,6 +428,9 @@ MUTATOR_HOOKFUNCTION(lms, SV_StartFrame)
        float leader_repeat_time = leader_time + autocvar_g_lms_leader_wp_time_repeat;
        lms_visible_leaders_prev = lms_visible_leaders;
        lms_visible_leaders = (time % leader_repeat_time < leader_time);
+       if (lms_visible_leaders_prev && !lms_visible_leaders)
+               lms_leader_time_jitter = random() * autocvar_g_lms_leader_wp_time_jitter;
+       leader_repeat_time += lms_leader_time_jitter;
 
        lms_leaders = 0;
        FOREACH_CLIENT(true, {
@@ -547,8 +553,9 @@ MUTATOR_HOOKFUNCTION(lms, CalculateRespawnTime)
        if (pl_cnt == 1) // player wasn't counted
                max_lives = 0;
 
-       player.respawn_time = time + autocvar_g_lms_dynamic_respawn_delay_base +
+       float dlay = autocvar_g_lms_dynamic_respawn_delay_base +
                autocvar_g_lms_dynamic_respawn_delay_increase * max(0, max_lives - pl_lives);
+       player.respawn_time = time + min(autocvar_g_lms_dynamic_respawn_delay_max, dlay);
        return true;
 }