}
MUTATOR_HOOKFUNCTION(rc, PlayerPhysics)
-{SELFPARAM();
- self.race_movetime_frac += PHYS_INPUT_TIMELENGTH;
- float f = floor(self.race_movetime_frac);
- self.race_movetime_frac -= f;
- self.race_movetime_count += f;
- self.race_movetime = self.race_movetime_frac + self.race_movetime_count;
+{
+ entity player = M_ARGV(0, entity);
+
+ player.race_movetime_frac += PHYS_INPUT_TIMELENGTH;
+ float f = floor(player.race_movetime_frac);
+ player.race_movetime_frac -= f;
+ player.race_movetime_count += f;
+ player.race_movetime = player.race_movetime_frac + player.race_movetime_count;
#ifdef SVQC
- if(IS_PLAYER(self))
+ if(IS_PLAYER(player))
{
- if (self.race_penalty)
- if (time > self.race_penalty)
- self.race_penalty = 0;
- if(self.race_penalty)
+ if (player.race_penalty)
+ if (time > player.race_penalty)
+ player.race_penalty = 0;
+ if(player.race_penalty)
{
- self.velocity = '0 0 0';
- self.movetype = MOVETYPE_NONE;
- self.disableclientprediction = 2;
+ player.velocity = '0 0 0';
+ player.movetype = MOVETYPE_NONE;
+ player.disableclientprediction = 2;
}
}
#endif
// ensure nothing EVIL is being done (i.e. div0_evade)
// this hinders joystick users though
// but it still gives SOME analog control
- wishvel.x = fabs(self.movement.x);
- wishvel.y = fabs(self.movement.y);
+ wishvel.x = fabs(player.movement.x);
+ wishvel.y = fabs(player.movement.y);
if(wishvel.x != 0 && wishvel.y != 0 && wishvel.x != wishvel.y)
{
wishvel.z = 0;
if(wishvel.x >= 2 * wishvel.y)
{
// pure X motion
- if(self.movement.x > 0)
- self.movement_x = wishspeed;
+ if(player.movement.x > 0)
+ player.movement_x = wishspeed;
else
- self.movement_x = -wishspeed;
- self.movement_y = 0;
+ player.movement_x = -wishspeed;
+ player.movement_y = 0;
}
else if(wishvel.y >= 2 * wishvel.x)
{
// pure Y motion
- self.movement_x = 0;
- if(self.movement.y > 0)
- self.movement_y = wishspeed;
+ player.movement_x = 0;
+ if(player.movement.y > 0)
+ player.movement_y = wishspeed;
else
- self.movement_y = -wishspeed;
+ player.movement_y = -wishspeed;
}
else
{
// diagonal
- if(self.movement.x > 0)
- self.movement_x = M_SQRT1_2 * wishspeed;
+ if(player.movement.x > 0)
+ player.movement_x = M_SQRT1_2 * wishspeed;
else
- self.movement_x = -M_SQRT1_2 * wishspeed;
- if(self.movement.y > 0)
- self.movement_y = M_SQRT1_2 * wishspeed;
+ player.movement_x = -M_SQRT1_2 * wishspeed;
+ if(player.movement.y > 0)
+ player.movement_y = M_SQRT1_2 * wishspeed;
else
- self.movement_y = -M_SQRT1_2 * wishspeed;
+ player.movement_y = -M_SQRT1_2 * wishspeed;
}
}
-
- return false;
}
MUTATOR_HOOKFUNCTION(rc, reset_map_global)
}
MUTATOR_HOOKFUNCTION(rc, ClientConnect)
-{SELFPARAM();
- race_PreparePlayer();
- self.race_checkpoint = -1;
+{
+ entity player = M_ARGV(0, entity);
+
+ race_PreparePlayer(player);
+ player.race_checkpoint = -1;
string rr = RACE_RECORD;
- if(IS_REAL_CLIENT(self))
+ if(IS_REAL_CLIENT(player))
{
- msg_entity = self;
+ msg_entity = player;
race_send_recordtime(MSG_ONE);
race_send_speedaward(MSG_ONE);
}
MUTATOR_HOOKFUNCTION(rc, MakePlayerObserver)
-{SELFPARAM();
+{
+ entity player = M_ARGV(0, entity);
+
if(g_race_qualifying)
- if(PlayerScore_Add(self, SP_RACE_FASTEST, 0))
- self.frags = FRAGS_LMS_LOSER;
+ if(PlayerScore_Add(player, SP_RACE_FASTEST, 0))
+ player.frags = FRAGS_LMS_LOSER;
else
- self.frags = FRAGS_SPECTATOR;
+ player.frags = FRAGS_SPECTATOR;
- race_PreparePlayer();
- self.race_checkpoint = -1;
-
- return false;
+ race_PreparePlayer(player);
+ player.race_checkpoint = -1;
}
MUTATOR_HOOKFUNCTION(rc, PlayerSpawn)
-{SELFPARAM();
+{
+ entity player = M_ARGV(0, entity);
+ entity spawn_spot = M_ARGV(1, entity);
+
if(spawn_spot.target == "")
// Emergency: this wasn't a real spawnpoint. Can this ever happen?
- race_PreparePlayer();
+ race_PreparePlayer(player);
// if we need to respawn, do it right
- self.race_respawn_checkpoint = self.race_checkpoint;
- self.race_respawn_spotref = spawn_spot;
+ player.race_respawn_checkpoint = player.race_checkpoint;
+ player.race_respawn_spotref = spawn_spot;
- self.race_place = 0;
+ player.race_place = 0;
return false;
}
MUTATOR_HOOKFUNCTION(rc, PutClientInServer)
-{SELFPARAM();
- if(IS_PLAYER(self))
+{
+ entity player = M_ARGV(0, entity);
+
+ if(IS_PLAYER(player))
if(!gameover)
{
- if(self.killcount == FRAGS_SPECTATOR /* initial spawn */ || g_race_qualifying) // spawn
- race_PreparePlayer();
+ if(player.killcount == FRAGS_SPECTATOR /* initial spawn */ || g_race_qualifying) // spawn
+ race_PreparePlayer(player);
else // respawn
- race_RetractPlayer();
+ race_RetractPlayer(player);
- race_AbandonRaceCheck(self);
+ race_AbandonRaceCheck(player);
}
return false;
}
MUTATOR_HOOKFUNCTION(rc, PlayerDies)
{
+ entity frag_target = M_ARGV(2, entity);
+
frag_target.respawn_flags |= RESPAWN_FORCE;
race_AbandonRaceCheck(frag_target);
return false;
}
MUTATOR_HOOKFUNCTION(rc, HavocBot_ChooseRole)
-{SELFPARAM();
- self.havocbot_role = havocbot_role_race;
+{
+ entity bot = M_ARGV(0, entity);
+
+ bot.havocbot_role = havocbot_role_race;
return true;
}
MUTATOR_HOOKFUNCTION(rc, GetTeamCount, CBC_ORDER_EXCLUSIVE)
{
- ret_float = race_teams;
- return false;
+ M_ARGV(0, float) = race_teams;
}
MUTATOR_HOOKFUNCTION(rc, Scores_CountFragsRemaining)
MUTATOR_HOOKFUNCTION(rc, GetRecords)
{
+ int record_page = M_ARGV(0, int);
+ string ret_string = M_ARGV(1, string);
+
for(int i = record_page * 200; i < MapInfo_count && i < record_page * 200 + 200; ++i)
{
if(MapInfo_Get_ByID(i))
}
}
- return false;
+ M_ARGV(1, string) = ret_string;
}
MUTATOR_HOOKFUNCTION(rc, FixClientCvars)
{
- stuffcmd(fix_client, "cl_cmd settemp cl_movecliptokeyboard 2\n");
- return false;
+ entity player = M_ARGV(0, entity);
+
+ stuffcmd(player, "cl_cmd settemp cl_movecliptokeyboard 2\n");
}
MUTATOR_HOOKFUNCTION(rc, CheckRules_World)
{
+ float checkrules_timelimit = M_ARGV(1, float);
+ float checkrules_fraglimit = M_ARGV(2, float);
+
if(checkrules_timelimit >= 0)
{
if(!g_race_qualifying)
{
- ret_float = WinningCondition_Race(checkrules_fraglimit);
+ M_ARGV(0, float) = WinningCondition_Race(checkrules_fraglimit);
return true;
}
else if(g_race_qualifying == 2)
{
- ret_float = WinningCondition_QualifyingThenRace(checkrules_fraglimit);
+ M_ARGV(0, float) = WinningCondition_QualifyingThenRace(checkrules_fraglimit);
return true;
}
}