3 #define EV_NO_ARGS(i, o)
7 #define MUTATOR_TYPES(_, x) \
16 // TODO: migrate to arrays some day when no other globals are used
17 #define M_ARGV(x, type) MUTATOR_ARGV_##x##_##type
18 #define MUTATOR_NEWGLOBAL(x, type) type MUTATOR_ARGV_##x##_##type;
20 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 0)
21 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 1)
22 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 2)
23 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 3)
24 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 4)
25 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 5)
26 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 6)
27 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 7)
28 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 8)
29 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 9)
30 MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 10)
33 #undef MUTATOR_NEWGLOBAL
37 /** appends ":mutatorname" to argument for logging */
38 #define EV_BuildMutatorsString(i, o) \
39 /** mutator string */ i(string, MUTATOR_ARGV_0_string) \
40 /**/ o(string, MUTATOR_ARGV_0_string) \
42 MUTATOR_HOOKABLE(BuildMutatorsString, EV_BuildMutatorsString);
44 /** appends ", Mutator name" to ret_string for display */
45 #define EV_BuildMutatorsPrettyString(i, o) \
46 /** mutator string */ i(string, MUTATOR_ARGV_0_string) \
47 /**/ o(string, MUTATOR_ARGV_0_string) \
49 MUTATOR_HOOKABLE(BuildMutatorsPrettyString, EV_BuildMutatorsPrettyString);
51 /** appends mutator string for displaying extra gameplay tips */
52 #define EV_BuildGameplayTipsString(i, o) \
53 /** tips string */ i(string, MUTATOR_ARGV_0_string) \
54 /**/ o(string, MUTATOR_ARGV_0_string) \
56 MUTATOR_HOOKABLE(BuildGameplayTipsString, EV_BuildGameplayTipsString);
58 #define EV_IsFlying(i, o) \
59 /**/ i(entity, MUTATOR_ARGV_0_entity) \
61 MUTATOR_HOOKABLE(IsFlying, EV_IsFlying);
63 #define EV_WP_Format(i, o) \
64 /**/ i(entity, MUTATOR_ARGV_0_entity) \
65 /**/ i(string, MUTATOR_ARGV_1_string) \
66 /**/ o(vector, MUTATOR_ARGV_2_vector) \
67 /**/ o(string, MUTATOR_ARGV_3_string) \
68 /**/ o(string, MUTATOR_ARGV_4_string) \
70 MUTATOR_HOOKABLE(WP_Format, EV_WP_Format);
73 * called before any player physics, may adjust variables for movement,
74 * is run AFTER bot code and idle checking on the server
76 #define EV_PlayerPhysics(i, o) \
77 /** player */ i(entity, MUTATOR_ARGV_0_entity) \
78 /** ticrate*/ i(float, MUTATOR_ARGV_1_float) \
80 MUTATOR_HOOKABLE(PlayerPhysics, EV_PlayerPhysics);
82 /** called when a player presses the jump key */
83 #define EV_PlayerJump(i, o) \
84 /** player */ i(entity, MUTATOR_ARGV_0_entity) \
85 /** jump height */ i(float, MUTATOR_ARGV_1_float) \
86 /**/ o(float, MUTATOR_ARGV_1_float) \
87 /** multijump */ i(bool, MUTATOR_ARGV_2_bool) \
88 /**/ o(bool, MUTATOR_ARGV_2_bool) \
90 MUTATOR_HOOKABLE(PlayerJump, EV_PlayerJump);
92 /** called during player physics, allows adjusting the movement type used */
93 #define EV_PM_Physics(i, o) \
94 /** player */ i(entity, MUTATOR_ARGV_0_entity) \
95 /** maxspeed_mod */ i(float, MUTATOR_ARGV_1_float) \
96 /** tick rate */ i(float, MUTATOR_ARGV_2_float) \
98 MUTATOR_HOOKABLE(PM_Physics, EV_PM_Physics);
100 /** called when a weapon sound is about to be played, allows custom paths etc. */
101 #define EV_WeaponSound(i, o) \
102 /** sound */ i(string, MUTATOR_ARGV_0_string) \
103 /** output */ i(string, MUTATOR_ARGV_1_string) \
104 /**/ o(string, MUTATOR_ARGV_1_string) \
106 MUTATOR_HOOKABLE(WeaponSound, EV_WeaponSound);
108 /** called when a weapon model is about to be set, allows custom paths etc. */
109 #define EV_WeaponModel(i, o) \
110 /** model */ i(string, MUTATOR_ARGV_0_string) \
111 /** output */ i(string, MUTATOR_ARGV_1_string) \
112 /**/ o(string, MUTATOR_ARGV_1_string) \
114 MUTATOR_HOOKABLE(WeaponModel, EV_WeaponModel);
116 /** decides whether a player can crouch or not */
117 #define EV_PlayerCanCrouch(i, o) \
118 /** player */ i(entity, MUTATOR_ARGV_0_entity) \
119 /** do_crouch */ i(bool, MUTATOR_ARGV_1_bool) \
120 /**/ o(bool, MUTATOR_ARGV_1_bool) \
122 MUTATOR_HOOKABLE(PlayerCanCrouch, EV_PlayerCanCrouch);