5 // Inspired by Player 2
7 float autocvar_g_random_gravity_negative_chance;
8 float autocvar_g_random_gravity_min;
9 float autocvar_g_random_gravity_max;
10 float autocvar_g_random_gravity_positive;
11 float autocvar_g_random_gravity_negative;
12 float autocvar_g_random_gravity_delay;
14 REGISTER_MUTATOR(random_gravity, cvar("g_random_gravity"))
18 cvar_settemp("sv_gravity", cvar_string("sv_gravity")); // settemp current gravity so it's restored on match end
26 MUTATOR_HOOKFUNCTION(random_gravity, SV_StartFrame)
28 if(gameover || !cvar("g_random_gravity")) return false;
29 if(time < gravity_delay) return false;
30 if(time < game_starttime) return false;
31 if(round_handler_IsActive() && !round_handler_IsRoundStarted()) return false;
33 if(random() >= autocvar_g_random_gravity_negative_chance)
34 cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() - random() * -autocvar_g_random_gravity_negative, autocvar_g_random_gravity_max)));
36 cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() * autocvar_g_random_gravity_positive, autocvar_g_random_gravity_max)));
38 gravity_delay = time + autocvar_g_random_gravity_delay;
40 LOG_TRACE("Gravity is now: ", ftos(autocvar_sv_gravity), "\n");
45 MUTATOR_HOOKFUNCTION(random_gravity, BuildMutatorsString)
47 ret_string = strcat(ret_string, ":RandomGravity");
51 MUTATOR_HOOKFUNCTION(random_gravity, BuildMutatorsPrettyString)
53 ret_string = strcat(ret_string, ", Random gravity");