]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/mutators/mutator_random_gravity.qc
Merge branch 'Mario/melee_mutator' into Mario/mutators
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator_random_gravity.qc
1 float gravity_delay;
2 float old_gravity;
3 MUTATOR_HOOKFUNCTION(gravity_StartFrame)
4 {
5         if(gameover || !cvar("g_random_gravity"))
6         {
7                 if(autocvar_sv_gravity != old_gravity)
8                 {
9                         cvar_set("sv_gravity", ftos(old_gravity));
10                         old_gravity = autocvar_sv_gravity; // update now so it can be changed during match end
11                 }
12                 
13                 return FALSE;
14         }
15                 
16         if(time < gravity_delay) return FALSE;
17         if(time < game_starttime) return FALSE;
18         if(round_handler_IsActive() && !round_handler_IsRoundStarted()) return FALSE;
19         
20     if(random() >= autocvar_g_random_gravity_negative_chance) 
21         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() - random() * -autocvar_g_random_gravity_negative, autocvar_g_random_gravity_max)));
22     else
23         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() * autocvar_g_random_gravity_positive, autocvar_g_random_gravity_max)));
24         
25         gravity_delay = time + autocvar_g_random_gravity_delay;
26         
27         dprint("Gravity is now: ", ftos(autocvar_sv_gravity), "\n");
28         
29         return FALSE;
30 }
31
32 MUTATOR_HOOKFUNCTION(gravity_BuildMutatorsString)
33 {
34         ret_string = strcat(ret_string, ":RandomGravity");
35         return 0;
36 }
37
38 MUTATOR_HOOKFUNCTION(gravity_BuildMutatorsPrettyString)
39 {
40         ret_string = strcat(ret_string, ", Random gravity");
41         return 0;
42 }
43
44 MUTATOR_DEFINITION(mutator_random_gravity)
45 {
46         MUTATOR_HOOK(SV_StartFrame, gravity_StartFrame, CBC_ORDER_ANY);
47         MUTATOR_HOOK(BuildMutatorsString, gravity_BuildMutatorsString, CBC_ORDER_ANY);
48         MUTATOR_HOOK(BuildMutatorsPrettyString, gravity_BuildMutatorsPrettyString, CBC_ORDER_ANY);
49         
50         MUTATOR_ONADD
51         {
52                 old_gravity = autocvar_sv_gravity;
53         }
54         
55         MUTATOR_ONREMOVE
56         {
57                 cvar_set("sv_gravity", ftos(old_gravity));
58         }
59
60         return FALSE;
61 }