]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/mutators/mutator/mutator_random_gravity.qc
1b17c9f69a753decbd7b351e68d02275c36474fb
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator / mutator_random_gravity.qc
1 #ifdef IMPLEMENTATION
2 // Random Gravity
3 //
4 // Mutator by Mario
5 // Inspired by Player 2
6
7 REGISTER_MUTATOR(random_gravity, cvar("g_random_gravity"))
8 {
9         MUTATOR_ONADD
10         {
11                 cvar_settemp("sv_gravity", cvar_string("sv_gravity")); // settemp current gravity so it's restored on match end
12         }
13
14         return false;
15 }
16
17 float gravity_delay;
18
19 MUTATOR_HOOKFUNCTION(random_gravity, SV_StartFrame)
20 {
21         if(gameover || !cvar("g_random_gravity")) return false;
22         if(time < gravity_delay) return false;
23         if(time < game_starttime) return false;
24         if(round_handler_IsActive() && !round_handler_IsRoundStarted()) return false;
25
26     if(random() >= autocvar_g_random_gravity_negative_chance)
27         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() - random() * -autocvar_g_random_gravity_negative, autocvar_g_random_gravity_max)));
28     else
29         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() * autocvar_g_random_gravity_positive, autocvar_g_random_gravity_max)));
30
31         gravity_delay = time + autocvar_g_random_gravity_delay;
32
33         LOG_TRACE("Gravity is now: ", ftos(autocvar_sv_gravity), "\n");
34
35         return false;
36 }
37
38 MUTATOR_HOOKFUNCTION(random_gravity, BuildMutatorsString)
39 {
40         ret_string = strcat(ret_string, ":RandomGravity");
41         return 0;
42 }
43
44 MUTATOR_HOOKFUNCTION(random_gravity, BuildMutatorsPrettyString)
45 {
46         ret_string = strcat(ret_string, ", Random gravity");
47         return 0;
48 }
49 #endif