]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/random_gravity/random_gravity.qc
80abfe343d1ad39d09d4349a6bcda19a06f25c1a
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / random_gravity / random_gravity.qc
1 #ifdef IMPLEMENTATION
2 // Random Gravity
3 //
4 // Mutator by Mario
5 // Inspired by Player 2
6
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;
13
14 REGISTER_MUTATOR(random_gravity, cvar("g_random_gravity"))
15 {
16         MUTATOR_ONADD
17         {
18                 cvar_settemp("sv_gravity", cvar_string("sv_gravity")); // settemp current gravity so it's restored on match end
19         }
20
21         return false;
22 }
23
24 float gravity_delay;
25
26 MUTATOR_HOOKFUNCTION(random_gravity, SV_StartFrame)
27 {
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;
32
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)));
35     else
36         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() * autocvar_g_random_gravity_positive, autocvar_g_random_gravity_max)));
37
38         gravity_delay = time + autocvar_g_random_gravity_delay;
39
40         LOG_TRACE("Gravity is now: ", ftos(autocvar_sv_gravity), "\n");
41
42         return false;
43 }
44
45 MUTATOR_HOOKFUNCTION(random_gravity, BuildMutatorsString)
46 {
47         ret_string = strcat(ret_string, ":RandomGravity");
48         return 0;
49 }
50
51 MUTATOR_HOOKFUNCTION(random_gravity, BuildMutatorsPrettyString)
52 {
53         ret_string = strcat(ret_string, ", Random gravity");
54         return 0;
55 }
56 #endif