+#define EV_AddPlayerScore(i, o) \
+ /** score field */ i(PlayerScoreField, MUTATOR_ARGV_0_entity) \
+ /** score */ i(float, MUTATOR_ARGV_1_float) \
+ /**/ o(float, MUTATOR_ARGV_1_float) \
+ /** player */ i(entity, MUTATOR_ARGV_2_entity) \
+ /**/
+MUTATOR_HOOKABLE(AddPlayerScore, EV_AddPlayerScore);
+
+#define EV_GetPlayerStatus(i, o) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /**/
+MUTATOR_HOOKABLE(GetPlayerStatus, EV_GetPlayerStatus);
+
+#define EV_SetWeaponArena(i, o) \
+ /** arena */ i(string, MUTATOR_ARGV_0_string) \
+ /**/ o(string, MUTATOR_ARGV_0_string) \
+ /**/
+MUTATOR_HOOKABLE(SetWeaponArena, EV_SetWeaponArena);
+
+#define EV_DropSpecialItems(i, o) \
+ /** target */ i(entity, MUTATOR_ARGV_0_entity) \
+ /**/
+MUTATOR_HOOKABLE(DropSpecialItems, EV_DropSpecialItems);
+
+/**
+ * called when an admin tries to kill all monsters
+ * return 1 to prevent spawning
+ */
+#define EV_AllowMobButcher(i, o) \
+ /** reason */ o(string, MUTATOR_ARGV_0_string) \
+ /**/
+MUTATOR_HOOKABLE(AllowMobButcher, EV_AllowMobButcher);
+
+MUTATOR_HOOKABLE(ReadLevelCvars, EV_NO_ARGS);
+
+#define EV_SendWaypoint(i, o) \
+ /** waypoint */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** to */ i(entity, MUTATOR_ARGV_1_entity) \
+ /** send flags */ i(int, MUTATOR_ARGV_2_int) \
+ /**/ o(int, MUTATOR_ARGV_2_int) \
+ /** wp flag */ i(int, MUTATOR_ARGV_3_int) \
+ /**/ o(int, MUTATOR_ARGV_3_int) \
+ /**/
+MUTATOR_HOOKABLE(SendWaypoint, EV_SendWaypoint);
+
+#define EV_TurretValidateTarget(i, o) \
+ /** turret */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** target */ i(entity, MUTATOR_ARGV_1_entity) \
+ /** validate flags */ i(int, MUTATOR_ARGV_2_int) \
+ /** target score */ o(float, MUTATOR_ARGV_3_float) \
+ /**/
+MUTATOR_HOOKABLE(TurretValidateTarget, EV_TurretValidateTarget);
+
+#define EV_TurretThink(i, o) \
+ /** turret */ i(entity, MUTATOR_ARGV_0_entity) \
+ /**/
+MUTATOR_HOOKABLE(TurretThink, EV_TurretThink);
+
+MUTATOR_HOOKABLE(Ent_Init, EV_NO_ARGS);
+
+/** */
+#define EV_PrepareExplosionByDamage(i, o) \
+ /** projectile */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** attacker */ i(entity, MUTATOR_ARGV_1_entity) \
+ /**/
+MUTATOR_HOOKABLE(PrepareExplosionByDamage, EV_PrepareExplosionByDamage);
+
+/** called when a monster model is about to be set, allows custom paths etc. */
+#define EV_MonsterModel(i, o) \
+ /** model */ i(string, MUTATOR_ARGV_0_string) \
+ /** output */ i(string, MUTATOR_ARGV_1_string) \
+ /**/ o(string, MUTATOR_ARGV_1_string) \
+ /**/
+MUTATOR_HOOKABLE(MonsterModel, EV_MonsterModel);
+
+/**/
+#define EV_Player_ChangeTeam(i, o) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** current team */ i(float, MUTATOR_ARGV_1_float) \
+ /** new team */ i(float, MUTATOR_ARGV_2_float) \
+ /**/
+MUTATOR_HOOKABLE(Player_ChangeTeam, EV_Player_ChangeTeam);
+
+/**/
+#define EV_URI_GetCallback(i, o) \
+ /** id */ i(float, MUTATOR_ARGV_0_float) \
+ /** status */ i(float, MUTATOR_ARGV_1_float) \
+ /** data */ i(string, MUTATOR_ARGV_2_string) \
+ /**/
+MUTATOR_HOOKABLE(URI_GetCallback, EV_URI_GetCallback);
+
+/**
+ * return true to prevent weapon use for a player
+ */
+ #define EV_ForbidWeaponUse(i, o) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \