]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/mutators/mutator/doublejump/doublejump.qc
Merge branch 'master' into terencehill/menu_hudskin_selector
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / doublejump / doublejump.qc
1 #ifdef IMPLEMENTATION
2 #ifdef SVQC
3         #include "../../../../server/antilag.qh"
4 #endif
5 #include "../../../physics.qh"
6
7
8 #if defined(SVQC)
9 void doublejump_AddStats();
10
11 REGISTER_MUTATOR(doublejump, true)
12 {
13         MUTATOR_ONADD
14         {
15                 doublejump_AddStats();
16         }
17         return false;
18 }
19 #elif defined(CSQC)
20 REGISTER_MUTATOR(doublejump, true);
21 #endif
22
23
24 #ifdef CSQC
25
26 #define PHYS_DOUBLEJUMP                                         getstati(STAT_DOUBLEJUMP)
27
28 #elif defined(SVQC)
29
30 bool autocvar_sv_doublejump;
31
32 #define PHYS_DOUBLEJUMP                                         autocvar_sv_doublejump
33
34 .int stat_doublejump;
35
36 void doublejump_UpdateStats(entity this)
37 {
38         this.stat_doublejump = PHYS_DOUBLEJUMP;
39 }
40
41 void doublejump_AddStats()
42 {
43         addstat(STAT_DOUBLEJUMP, AS_INT, stat_doublejump);
44 }
45
46 #endif
47
48
49 MUTATOR_HOOKFUNCTION(doublejump, PlayerJump)
50 {
51         if (PHYS_DOUBLEJUMP)
52         {
53                 tracebox(self.origin + '0 0 0.01', self.mins, self.maxs, self.origin - '0 0 0.01', MOVE_NORMAL, self);
54                 if (trace_fraction < 1 && trace_plane_normal_z > 0.7)
55                 {
56                         player_multijump = true;
57
58                         // we MUST clip velocity here!
59                         float f = self.velocity * trace_plane_normal;
60                         if (f < 0)
61                                 self.velocity -= f * trace_plane_normal;
62                 }
63         }
64         return false;
65 }
66
67 MUTATOR_HOOKFUNCTION(doublejump, PlayerPhysics)
68 {
69 #ifdef SVQC
70         doublejump_UpdateStats(self);
71 #endif
72         return false;
73 }
74
75 #ifdef SVQC
76
77 MUTATOR_HOOKFUNCTION(doublejump, BuildMutatorsString)
78 {
79         ret_string = strcat(ret_string, ":doublejump");
80         return false;
81 }
82
83 MUTATOR_HOOKFUNCTION(doublejump, BuildMutatorsPrettyString)
84 {
85         ret_string = strcat(ret_string, ", Double jump");
86         return false;
87 }
88
89 #endif
90 #endif