]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/mutator/gamemode_keepaway.qc
Merge branch 'terencehill/v_deathtilt_fix' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator / gamemode_keepaway.qc
index a3960066c16c228dd1a30f9904a3a230cc0fee8c..22ae10f7c46810c17120a9ef73ba3b72ea61ca8e 100644 (file)
@@ -64,10 +64,10 @@ int autocvar_g_keepawayball_effects;
 float autocvar_g_keepawayball_respawntime;
 int autocvar_g_keepawayball_trail_color;
 
-float ka_ballcarrier_waypointsprite_visible_for_player(entity e) // runs on waypoints which are attached to ballcarriers, updates once per frame
+bool ka_ballcarrier_waypointsprite_visible_for_player(entity this, entity player, entity view) // runs on waypoints which are attached to ballcarriers, updates once per frame
 {
-       if(e.ballcarried)
-               if(IS_SPEC(other))
+       if(view.ballcarried)
+               if(IS_SPEC(player))
                        return false; // we don't want spectators of the ballcarrier to see the attached waypoint on the top of their screen
 
        // TODO: Make the ballcarrier lack a waypointsprite whenever they have the invisibility powerup
@@ -81,7 +81,8 @@ void ka_EventLog(string mode, entity actor) // use an alias for easy changing an
                GameLogEcho(strcat(":ka:", mode, ((actor != world) ? (strcat(":", ftos(actor.playerid))) : "")));
 }
 
-void ka_TouchEvent();
+void ka_TouchEvent(entity this);
+void ka_RespawnBall(entity this);
 void ka_RespawnBall(entity this) // runs whenever the ball needs to be relocated
 {
        if(gameover) { return; }
@@ -89,7 +90,7 @@ void ka_RespawnBall(entity this) // runs whenever the ball needs to be relocated
 
        if(!MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256))
        {
-               entity spot = SelectSpawnPoint(true);
+               entity spot = SelectSpawnPoint(this, true);
                setorigin(self, spot.origin);
                self.angles = spot.angles;
        }
@@ -99,7 +100,7 @@ void ka_RespawnBall(entity this) // runs whenever the ball needs to be relocated
        self.velocity = '0 0 200';
        self.angles = '0 0 0';
        self.effects = autocvar_g_keepawayball_effects;
-       self.touch = ka_TouchEvent;
+       settouch(self, ka_TouchEvent);
        setthink(self, ka_RespawnBall);
        self.nextthink = time + autocvar_g_keepawayball_respawntime;
 
@@ -112,8 +113,8 @@ void ka_RespawnBall(entity this) // runs whenever the ball needs to be relocated
        sound(self, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
 }
 
-void ka_TimeScoring()
-{SELFPARAM();
+void ka_TimeScoring(entity this)
+{
        if(self.owner.ballcarried)
        { // add points for holding the ball after a certain amount of time
                if(autocvar_g_keepaway_score_timepoints)
@@ -124,8 +125,8 @@ void ka_TimeScoring()
        }
 }
 
-void ka_TouchEvent() // runs any time that the ball comes in contact with something
-{SELFPARAM();
+void ka_TouchEvent(entity this) // runs any time that the ball comes in contact with something
+{
        if(gameover) { return; }
        if(!self) { return; }
        if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
@@ -153,8 +154,8 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
        self.velocity = '0 0 0';
        self.movetype = MOVETYPE_NONE;
        self.effects |= EF_NODRAW;
-       self.touch = func_null;
-       self.think = ka_TimeScoring;
+       settouch(self, func_null);
+       setthink(self, ka_TimeScoring);
        self.nextthink = time + autocvar_g_keepaway_score_timeinterval;
        self.takedamage = DAMAGE_NO;
 
@@ -192,7 +193,7 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los
        setattachment(ball, world, "");
        ball.movetype = MOVETYPE_BOUNCE;
        ball.wait = time + 1;
-       ball.touch = ka_TouchEvent;
+       settouch(ball, ka_TouchEvent);
        setthink(ball, ka_RespawnBall);
        ball.nextthink = time + autocvar_g_keepawayball_respawntime;
        ball.takedamage = DAMAGE_YES;
@@ -231,7 +232,7 @@ void ka_Reset(entity this)
        if(time < game_starttime)
        {
                setthink(this, ka_RespawnBall);
-               this.touch = func_null;
+               settouch(this, func_null);
                this.nextthink = game_starttime;
        }
        else
@@ -478,7 +479,7 @@ void ka_SpawnBall() // loads various values for the ball, runs only once at star
        e.flags = FL_ITEM;
        e.pushable = true;
        e.reset = ka_Reset;
-       e.touch = ka_TouchEvent;
+       settouch(e, ka_TouchEvent);
        e.owner = world;
        ka_ball = e;