float autocvar_sv_minigames_pong_ai_thinkspeed;
float autocvar_sv_minigames_pong_ai_tolerance;
-void pong_ball_think();
+void pong_ball_think(entity this);
// Throws a ball in a random direction and sets the think function
void pong_ball_throw(entity ball)
while ( fabs(sin(angle)) < 0.17 || fabs(cos(angle)) < 0.17 );
ball.velocity_x = cos(angle)*autocvar_sv_minigames_pong_ball_speed;
ball.velocity_y = sin(angle)*autocvar_sv_minigames_pong_ball_speed;
- ball.think = pong_ball_think;
+ setthink(ball, pong_ball_think);
ball.nextthink = time;
ball.team = 0;
ball.SendFlags |= MINIG_SF_UPDATE|PONG_SF_BALLTEAM;
}
// Think equivalent of pong_ball_throw, used to delay throws
-void pong_ball_throwthink()
-{SELFPARAM();
- pong_ball_throw(self);
+void pong_ball_throwthink(entity this)
+{
+ pong_ball_throw(this);
}
// Moves ball to the center and stops its motion
{
ball.velocity = '0 0 0';
ball.origin = '0.5 0.5 0';
- ball.think = SUB_NullThink;
+ setthink(ball, SUB_NullThink);
ball.team = 0;
ball.SendFlags |= MINIG_SF_UPDATE|PONG_SF_BALLTEAM;
- ball.think = pong_ball_throwthink;
+ setthink(ball, pong_ball_throwthink);
ball.nextthink = time + autocvar_sv_minigames_pong_ball_wait;
}
}
// Moves the ball around
-void pong_ball_think()
-{SELFPARAM();
+void pong_ball_think(entity this)
+{
float think_speed = autocvar_sys_ticrate;
- self.nextthink = time + think_speed;
+ this.nextthink = time + think_speed;
- self.origin_x += self.velocity_x * think_speed;
- self.origin_y += self.velocity_y * think_speed;
- self.SendFlags |= MINIG_SF_UPDATE;
+ this.origin_x += this.velocity_x * think_speed;
+ this.origin_y += this.velocity_y * think_speed;
+ this.SendFlags |= MINIG_SF_UPDATE;
int i;
for ( i = 1; i <= PONG_MAX_PLAYERS; i++ )
- if ( pong_paddle_hit(self, i) )
+ if ( pong_paddle_hit(this, i) )
{
- pong_paddle_bounce(self,i);
- self.team = i;
- self.SendFlags |= PONG_SF_BALLTEAM;
+ pong_paddle_bounce(this,i);
+ this.team = i;
+ this.SendFlags |= PONG_SF_BALLTEAM;
return;
}
- if ( self.origin_y <= self.pong_length )
+ if ( this.origin_y <= this.pong_length )
{
- if ( !pong_goal(self,3) )
+ if ( !pong_goal(this,3) )
{
- self.origin_y = self.pong_length;
- self.velocity_y *= -1;
+ this.origin_y = this.pong_length;
+ this.velocity_y *= -1;
}
}
- else if ( self.origin_y >= 1-self.pong_length )
+ else if ( this.origin_y >= 1-this.pong_length )
{
- if ( !pong_goal(self,4) )
+ if ( !pong_goal(this,4) )
{
- self.origin_y = 1-self.pong_length;
- self.velocity_y *= -1;
+ this.origin_y = 1-this.pong_length;
+ this.velocity_y *= -1;
}
}
- if ( self.origin_x <= self.pong_length )
+ if ( this.origin_x <= this.pong_length )
{
- if ( !pong_goal(self,2) )
+ if ( !pong_goal(this,2) )
{
- self.origin_x = self.pong_length;
- self.velocity_x *= -1;
+ this.origin_x = this.pong_length;
+ this.velocity_x *= -1;
}
}
- else if ( self.origin_x >= 1-self.pong_length )
+ else if ( this.origin_x >= 1-this.pong_length )
{
- if ( !pong_goal(self,1) )
+ if ( !pong_goal(this,1) )
{
- self.origin_x = 1-self.pong_length;
- self.velocity_x *= -1;
+ this.origin_x = 1-this.pong_length;
+ this.velocity_x *= -1;
}
}
}
// AI action
-void pong_ai_think()
-{SELFPARAM();
+void pong_ai_think(entity this)
+{
float think_speed = autocvar_sv_minigames_pong_ai_thinkspeed;
- self.nextthink = time + think_speed;
+ this.nextthink = time + think_speed;
float distance;
float next_distance;
float min_distance = 1;
entity ball = world;
entity mayball = world;
- while ( ( mayball = findentity(mayball,owner,self.owner) ) )
+ while ( ( mayball = findentity(mayball,owner,this.owner) ) )
if ( mayball.classname == "pong_ball" )
{
- distance = vlen(mayball.origin-self.pong_ai_paddle.origin);
- next_distance = vlen(mayball.origin+mayball.velocity-self.pong_ai_paddle.origin);
+ distance = vlen(mayball.origin-this.pong_ai_paddle.origin);
+ next_distance = vlen(mayball.origin+mayball.velocity-this.pong_ai_paddle.origin);
if ( distance < min_distance && ( distance < 0.5 || next_distance < distance ) )
{
min_distance = distance;
}
float target = 0.5;
- float self_pos;
+ float my_pos;
- if ( self.team <= 2 )
+ if ( this.team <= 2 )
{
if ( ball )
target = ball.origin_y + ball.velocity_y*think_speed;
- self_pos = self.pong_ai_paddle.origin_y;
+ my_pos = this.pong_ai_paddle.origin_y;
}
else
{
if ( ball )
target = ball.origin_x + ball.velocity_x*think_speed;
- self_pos = self.pong_ai_paddle.origin_x;
+ my_pos = this.pong_ai_paddle.origin_x;
}
- distance = self.pong_length/2 * autocvar_sv_minigames_pong_ai_tolerance
+ distance = this.pong_length/2 * autocvar_sv_minigames_pong_ai_tolerance
+ autocvar_sv_minigames_pong_paddle_speed * think_speed;
- if (target < self_pos - distance)
- self.pong_keys = PONG_KEY_DECREASE;
- else if (target > self_pos + distance)
- self.pong_keys = PONG_KEY_INCREASE;
+ if (target < my_pos - distance)
+ this.pong_keys = PONG_KEY_DECREASE;
+ else if (target > my_pos + distance)
+ this.pong_keys = PONG_KEY_INCREASE;
else
- self.pong_keys = 0;
+ this.pong_keys = 0;
}
entity pong_ai_spawn(entity paddle)
entity ai = msle_spawn(paddle.owner,"pong_ai");
ai.minigame_players = ai;
ai.team = paddle.team;
- ai.think = pong_ai_think;
+ setthink(ai, pong_ai_think);
ai.nextthink = time;
ai.pong_ai_paddle = paddle;
}
// Moves the paddle
-void pong_paddle_think()
-{SELFPARAM();
+void pong_paddle_think(entity this)
+{
float think_speed = autocvar_sys_ticrate;
- self.nextthink = time + think_speed;
+ this.nextthink = time + think_speed;
- if ( self.realowner.minigame_players.pong_keys == PONG_KEY_INCREASE ||
- self.realowner.minigame_players.pong_keys == PONG_KEY_DECREASE )
+ if ( this.realowner.minigame_players.pong_keys == PONG_KEY_INCREASE ||
+ this.realowner.minigame_players.pong_keys == PONG_KEY_DECREASE )
{
float movement = autocvar_sv_minigames_pong_paddle_speed * think_speed;
- float halflen = self.pong_length/2;
+ float halflen = this.pong_length/2;
- if ( self.realowner.minigame_players.pong_keys == PONG_KEY_DECREASE )
+ if ( this.realowner.minigame_players.pong_keys == PONG_KEY_DECREASE )
movement *= -1;
- if ( self.team > 2 )
- self.origin_x = bound(halflen, self.origin_x+movement, 1-halflen);
+ if ( this.team > 2 )
+ this.origin_x = bound(halflen, this.origin_x+movement, 1-halflen);
else
- self.origin_y = bound(halflen, self.origin_y+movement, 1-halflen);
+ this.origin_y = bound(halflen, this.origin_y+movement, 1-halflen);
- self.SendFlags |= MINIG_SF_UPDATE;
+ this.SendFlags |= MINIG_SF_UPDATE;
}
}
entity paddle = msle_spawn(minigame,"pong_paddle");
paddle.pong_length = autocvar_sv_minigames_pong_paddle_size;
paddle.origin = pong_team_to_paddlepos(pl_team);
- paddle.think = pong_paddle_think;
+ setthink(paddle, pong_paddle_think);
paddle.nextthink = time;
paddle.team = pl_team;
paddle.mins = pong_team_to_box_halfsize(pl_team,-paddle.pong_length,-1/16);