-#ifndef COMMON_MUTATORS_EVENTS_H
-#define COMMON_MUTATORS_EVENTS_H
+#pragma once
#define EV_NO_ARGS(i, o)
#pragma noref 1
-string ret_string;
#define MUTATOR_TYPES(_, x) \
_(x, bool) \
_(x, string) \
/**/
-#define MUTATOR_ARGV(x, type) MUTATOR_ARGV_##x##_##type
-#define MUTATOR_NEWGLOBAL(x, type) type MUTATOR_ARGV(x, type);
+// TODO: migrate to arrays some day when no other globals are used
+#define M_ARGV(x, type) MUTATOR_ARGV_##x##_##type
+#define MUTATOR_NEWGLOBAL(x, type) type MUTATOR_ARGV_##x##_##type;
MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 0)
MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 1)
MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 2)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 3)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 4)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 5)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 6)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 7)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 8)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 9)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 10)
#undef MUTATOR_TYPES
#undef MUTATOR_NEWGLOBAL
#pragma noref 0
-/** appends ":mutatorname" to ret_string for logging */
+/** appends ":mutatorname" to argument for logging */
#define EV_BuildMutatorsString(i, o) \
- /**/ i(string, ret_string) \
- /**/ o(string, ret_string) \
+ /** mutator string */ i(string, MUTATOR_ARGV_0_string) \
+ /**/ o(string, MUTATOR_ARGV_0_string) \
/**/
MUTATOR_HOOKABLE(BuildMutatorsString, EV_BuildMutatorsString);
/** appends ", Mutator name" to ret_string for display */
#define EV_BuildMutatorsPrettyString(i, o) \
- /**/ i(string, ret_string) \
- /**/ o(string, ret_string) \
+ /** mutator string */ i(string, MUTATOR_ARGV_0_string) \
+ /**/ o(string, MUTATOR_ARGV_0_string) \
/**/
MUTATOR_HOOKABLE(BuildMutatorsPrettyString, EV_BuildMutatorsPrettyString);
/** appends mutator string for displaying extra gameplay tips */
#define EV_BuildGameplayTipsString(i, o) \
- /**/ i(string, ret_string) \
- /**/ o(string, ret_string) \
+ /** tips string */ i(string, MUTATOR_ARGV_0_string) \
+ /**/ o(string, MUTATOR_ARGV_0_string) \
/**/
MUTATOR_HOOKABLE(BuildGameplayTipsString, EV_BuildGameplayTipsString);
#define EV_WP_Format(i, o) \
/**/ i(entity, MUTATOR_ARGV_0_entity) \
- /**/ i(string, MUTATOR_ARGV_0_string) \
- /**/ o(vector, MUTATOR_ARGV_0_vector) \
- /**/ o(string, MUTATOR_ARGV_0_string) \
+ /**/ i(string, MUTATOR_ARGV_1_string) \
+ /**/ o(vector, MUTATOR_ARGV_2_vector) \
+ /**/ o(string, MUTATOR_ARGV_3_string) \
/**/
MUTATOR_HOOKABLE(WP_Format, EV_WP_Format);
* called before any player physics, may adjust variables for movement,
* is run AFTER bot code and idle checking on the server
*/
-MUTATOR_HOOKABLE(PlayerPhysics, EV_NO_ARGS);
+#define EV_PlayerPhysics(i, o) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** ticrate*/ i(float, MUTATOR_ARGV_1_float) \
+ /**/
+MUTATOR_HOOKABLE(PlayerPhysics, EV_PlayerPhysics);
/** called when a player presses the jump key */
#define EV_PlayerJump(i, o) \
- /**/ i(float, player_multijump) \
- /**/ i(float, player_jumpheight) \
- /**/ o(float, player_multijump) \
- /**/ o(float, player_jumpheight) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** jump height */ i(float, MUTATOR_ARGV_1_float) \
+ /**/ o(float, MUTATOR_ARGV_1_float) \
+ /** multijump */ i(bool, MUTATOR_ARGV_2_bool) \
+ /**/ o(bool, MUTATOR_ARGV_2_bool) \
/**/
-float player_multijump;
-float player_jumpheight;
MUTATOR_HOOKABLE(PlayerJump, EV_PlayerJump);
/** called during player physics, allows adjusting the movement type used */
#define EV_PM_Physics(i, o) \
- /**/ i(float, pm_maxspeed_mod) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** maxspeed_mod */ i(float, MUTATOR_ARGV_1_float) \
+ /** tick rate */ i(float, MUTATOR_ARGV_2_float) \
/**/
-float pm_maxspeed_mod;
MUTATOR_HOOKABLE(PM_Physics, EV_PM_Physics);
-#endif
+/** called when a weapon model is about to be set, allows custom paths etc. */
+#define EV_WeaponModel(i, o) \
+ /** model */ i(string, MUTATOR_ARGV_0_string) \
+ /** output */ i(string, MUTATOR_ARGV_1_string) \
+ /**/ o(string, MUTATOR_ARGV_1_string) \
+ /**/
+MUTATOR_HOOKABLE(WeaponModel, EV_WeaponModel);