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