#include <common/mutators/base.qh>
-// globals
-
-string cmd_name;
-int cmd_argc;
-string cmd_string;
-
/**
* Called when a client command is parsed
* NOTE: hooks MUST start with if (MUTATOR_RETURNVALUE) return false;
* // example:
* MUTATOR_HOOKFUNCTION(foo, CSQC_ConsoleCommand) {
* if (MUTATOR_RETURNVALUE) return false; // command was already handled
+ * string cmd_name = M_ARGV(0, string);
+ * int cmd_argc = M_ARGV(1, int);
* if (cmd_name == "echocvar" && cmd_argc >= 2) {
* print(cvar_string(argv(1)), "\n");
* return true;
* }
*/
#define EV_CSQC_ConsoleCommand(i, o) \
- /** command name */ i(string, cmd_name) \
- /** also, argv() can be used */ i(int, cmd_argc) \
- /** whole command, use only if you really have to */ i(string, cmd_string) \
+ /** command name */ i(string, MUTATOR_ARGV_0_string) \
+ /** argc (also, argv() can be used) */ i(int, MUTATOR_ARGV_1_int) \
+ /** whole command, use only if you really have to */ i(string, MUTATOR_ARGV_2_string) \
/**/
MUTATOR_HOOKABLE(CSQC_ConsoleCommand, EV_CSQC_ConsoleCommand);
/** Called when a projectile is linked with CSQC */
#define EV_Ent_Projectile(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(Ent_Projectile, EV_Ent_Projectile);
/** Called when a projectile's properties are being modified */
#define EV_EditProjectile(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(EditProjectile, EV_EditProjectile);
/** Called when updating the attached tags index */
#define EV_TagIndex_Update(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(TagIndex_Update, EV_TagIndex_Update);
/** Called when setting the attached tags */
#define EV_TagIndex_Apply(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(TagIndex_Apply, EV_TagIndex_Apply);
/** Called when setting up skeleton bones */
#define EV_Skeleton_CheckBones(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(Skeleton_CheckBones, EV_Skeleton_CheckBones);
/** Called when setting up bones from the loaded model */
#define EV_Skeleton_CheckModel(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(Skeleton_CheckModel, EV_Skeleton_CheckModel);
/** Called when getting the global parameters for a model */
#define EV_GetModelParams(i, o) \
- /** entity id */ i(string, checkmodel_input) \
- /** entity id */ i(string, checkmodel_command) \
+ /** input */ i(string, MUTATOR_ARGV_0_string) \
+ /** command */ i(string, MUTATOR_ARGV_1_string) \
/**/
-string checkmodel_input, checkmodel_command;
MUTATOR_HOOKABLE(GetModelParams, EV_GetModelParams);
/** Called checking if 3rd person mode should be forced on */
#define EV_WantEventchase(i, o) \
- /** entity id */ i(entity, __self) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(WantEventchase, EV_WantEventchase);
#define EV_AnnouncerOption(i, o) \
- /**/ i(string, ret_string) \
- /**/ o(string, ret_string) \
+ /** announcer string */ i(string, MUTATOR_ARGV_0_string) \
+ /** announcer string */ o(string, MUTATOR_ARGV_0_string) \
/**/
MUTATOR_HOOKABLE(AnnouncerOption, EV_AnnouncerOption);
/** Return true to not draw any vortex beam */
#define EV_Particles_VortexBeam(i, o) \
- /**/ i(vector, vbeam_shotorg) \
- /**/ i(vector, vbeam_endpos) \
+ /** beam shot origin */ i(vector, MUTATOR_ARGV_0_vector) \
+ /** beam end position */ i(vector, MUTATOR_ARGV_1_vector) \
/**/
-vector vbeam_shotorg;
-vector vbeam_endpos;
MUTATOR_HOOKABLE(Particles_VortexBeam, EV_Particles_VortexBeam);
/** Return true to not draw any impact effect */
#define EV_Weapon_ImpactEffect(i, o) \
- /**/ i(entity, w_hitwep) \
+ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
-entity w_hitwep;
MUTATOR_HOOKABLE(Weapon_ImpactEffect, EV_Weapon_ImpactEffect);
/* NOTE: hooks MUST start with if (MUTATOR_RETURNVALUE) return false;
*/
#define EV_HUD_Command(i, o) \
- /** also, argv() can be used */ i(int, cmd_argc) \
+ /** argc (also, argv() can be used) */ i(int, MUTATOR_ARGV_0_int) \
/**/
MUTATOR_HOOKABLE(HUD_Command, EV_HUD_Command);
}
MUTATOR_HOOKFUNCTION(cl_nades, Ent_Projectile)
{
- SELFPARAM();
- if (self.cnt == PROJECTILE_NAPALM_FOUNTAIN)
+ entity proj = M_ARGV(0, entity);
+
+ if (proj.cnt == PROJECTILE_NAPALM_FOUNTAIN)
{
- self.modelindex = 0;
- self.traileffect = EFFECT_FIREBALL.m_id;
+ proj.modelindex = 0;
+ proj.traileffect = EFFECT_FIREBALL.m_id;
return true;
}
- if (Nade_FromProjectile(self.cnt) != NADE_TYPE_Null)
+ if (Nade_FromProjectile(proj.cnt) != NADE_TYPE_Null)
{
- setmodel(self, MDL_PROJECTILE_NADE);
- entity trail = Nade_TrailEffect(self.cnt, self.team);
- if (trail.eent_eff_name) self.traileffect = trail.m_id;
+ setmodel(proj, MDL_PROJECTILE_NADE);
+ entity trail = Nade_TrailEffect(proj.cnt, proj.team);
+ if (trail.eent_eff_name) proj.traileffect = trail.m_id;
return true;
}
}
MUTATOR_HOOKFUNCTION(cl_nades, EditProjectile)
{
- SELFPARAM();
- if (self.cnt == PROJECTILE_NAPALM_FOUNTAIN)
+ entity proj = M_ARGV(0, entity);
+
+ if (proj.cnt == PROJECTILE_NAPALM_FOUNTAIN)
{
- loopsound(self, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM);
- self.mins = '-16 -16 -16';
- self.maxs = '16 16 16';
+ loopsound(proj, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM);
+ proj.mins = '-16 -16 -16';
+ proj.maxs = '16 16 16';
}
- entity nade_type = Nade_FromProjectile(self.cnt);
+ entity nade_type = Nade_FromProjectile(proj.cnt);
if (nade_type == NADE_TYPE_Null) return;
if(STAT(NADES_SMALL, NULL))
{
- self.mins = '-8 -8 -8';
- self.maxs = '8 8 8';
+ proj.mins = '-8 -8 -8';
+ proj.maxs = '8 8 8';
}
else
{
- self.mins = '-16 -16 -16';
- self.maxs = '16 16 16';
+ proj.mins = '-16 -16 -16';
+ proj.maxs = '16 16 16';
}
- self.colormod = nade_type.m_color;
- self.move_movetype = MOVETYPE_BOUNCE;
- settouch(self, func_null);
- self.scale = 1.5;
- self.avelocity = randomvec() * 720;
+ proj.colormod = nade_type.m_color;
+ proj.move_movetype = MOVETYPE_BOUNCE;
+ settouch(proj, func_null);
+ proj.scale = 1.5;
+ proj.avelocity = randomvec() * 720;
if (nade_type == NADE_TYPE_TRANSLOCATE || nade_type == NADE_TYPE_SPAWN)
- self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
+ proj.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
else
- self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY;
+ proj.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY;
}
bool Projectile_isnade(int p)
{