X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fminigame%2Fpong.qc;h=b6c0988c7d5682c9871dc60dd25c47ead69fd9e6;hb=HEAD;hp=3cfee03b5f5cce0536759e307f80c2b8425d2a40;hpb=67410278136b3bf6c5437027ab2f39d0da49753c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/minigame/pong.qc b/qcsrc/common/minigames/minigame/pong.qc index 3cfee03b5..af655c2c2 100644 --- a/qcsrc/common/minigames/minigame/pong.qc +++ b/qcsrc/common/minigames/minigame/pong.qc @@ -1,5 +1,5 @@ #include "pong.qh" -REGISTER_MINIGAME(pong, "Pong"); +REGISTER_MINIGAME(pong, _("Pong")); // minigame flags const int PONG_STATUS_WAIT = 0x0010; // waiting for players to join @@ -18,6 +18,7 @@ const int PONG_KEY_BOTH = 0x03; // Player jamming keys at ramdom // fields const int PONG_MAX_PLAYERS = 4; +const int PONG_SPECTATOR_TEAM = 255; // must be above max teams and equal to or below 255 .int pong_score; // (minigame_player) number of goals .int pong_keys; // (client) pressed keys .entity pong_paddles[PONG_MAX_PLAYERS];// (minigame) paddles @@ -44,7 +45,7 @@ void pong_ball_throw(entity ball) { float angle; do - angle = random()*M_PI*2; + angle = random() * (2 * M_PI); 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; @@ -161,7 +162,7 @@ void pong_ball_think(entity this) this.SendFlags |= MINIG_SF_UPDATE; int i; - for ( i = 1; i <= PONG_MAX_PLAYERS; i++ ) + for ( i = 1; i <= PONG_MAX_PLAYERS; ++i ) if ( pong_paddle_hit(this, i) ) { pong_paddle_bounce(this,i); @@ -259,7 +260,7 @@ void pong_ai_think(entity this) entity pong_ai_spawn(entity paddle) { - entity ai = msle_spawn(paddle.owner,"pong_ai"); + entity ai = msle_spawn(paddle.owner,new(pong_ai)); ai.minigame_players = ai; ai.team = paddle.team; setthink(ai, pong_ai_think); @@ -318,7 +319,7 @@ vector pong_team_to_paddlepos(int nteam) // if real_player is NULL, the paddle is controlled by AI entity pong_paddle_spawn(entity minigame, int pl_team, entity real_player) { - entity paddle = msle_spawn(minigame,"pong_paddle"); + entity paddle = msle_spawn(minigame,new(pong_paddle)); paddle.pong_length = autocvar_sv_minigames_pong_paddle_size; paddle.origin = pong_team_to_paddlepos(pl_team); setthink(paddle, pong_paddle_think); @@ -352,11 +353,11 @@ int pong_server_event(entity minigame, string event, ...) { // Don't allow joining a match that is already running if ( minigame.minigame_flags & PONG_STATUS_PLAY ) - return false; + return PONG_SPECTATOR_TEAM; entity player = ...(0,entity); int i; - for ( i = 0; i < PONG_MAX_PLAYERS; i++ ) + for ( i = 0; i < PONG_MAX_PLAYERS; ++i ) { if ( minigame.pong_paddles[i] == NULL ) { @@ -365,7 +366,7 @@ int pong_server_event(entity minigame, string event, ...) } } - return false; + return PONG_SPECTATOR_TEAM; } case "part": { @@ -373,7 +374,7 @@ int pong_server_event(entity minigame, string event, ...) entity paddle; entity ai; int i; - for ( i = 0; i < PONG_MAX_PLAYERS; i++ ) + for ( i = 0; i < PONG_MAX_PLAYERS; ++i ) { paddle = minigame.pong_paddles[i]; if ( paddle != NULL && paddle.realowner == player ) @@ -389,9 +390,12 @@ int pong_server_event(entity minigame, string event, ...) case "cmd": { entity player = ...(0,entity); + bool event_blocked = (player.team == PONG_SPECTATOR_TEAM); switch(argv(0)) { case "throw": + if(event_blocked) + return true; if ( minigame.minigame_flags & PONG_STATUS_WAIT ) { minigame.minigame_flags = PONG_STATUS_PLAY | @@ -399,9 +403,9 @@ int pong_server_event(entity minigame, string event, ...) minigame.SendFlags |= MINIG_SF_UPDATE; entity ball; - for ( int j = 0; j < autocvar_sv_minigames_pong_ball_number; j++ ) + for ( int j = 0; j < autocvar_sv_minigames_pong_ball_number; ++j ) { - ball = msle_spawn(minigame,"pong_ball"); + ball = msle_spawn(minigame,new(pong_ball)); ball.pong_length = autocvar_sv_minigames_pong_ball_radius; ball.m_mins = vec2(-ball.pong_length, -ball.pong_length); ball.m_maxs = vec2(ball.pong_length, ball.pong_length); @@ -410,29 +414,41 @@ int pong_server_event(entity minigame, string event, ...) } return true; case "+movei": + if(event_blocked) + return true; player.pong_keys |= PONG_KEY_INCREASE; return true; case "+moved": + if(event_blocked) + return true; player.pong_keys |= PONG_KEY_DECREASE; return true; case "-movei": + if(event_blocked) + return true; player.pong_keys &= ~PONG_KEY_INCREASE; return true; case "-moved": + if(event_blocked) + return true; player.pong_keys &= ~PONG_KEY_DECREASE; return true; case "move": + if(event_blocked) + return true; if(argv(1)) player.pong_keys = stoi(argv(1)); return true; case "pong_aimore": { + if(event_blocked) + return true; // keep declaration here, moving it into for() reverses weapon order // potentially compiler bug int j; if ( minigame.minigame_flags & PONG_STATUS_WAIT ) - for ( j = 0; j < PONG_MAX_PLAYERS; j++ ) - //for ( int j = 0; j < PONG_MAX_PLAYERS; j++ ) + for ( j = 0; j < PONG_MAX_PLAYERS; ++j ) + //for ( int j = 0; j < PONG_MAX_PLAYERS; ++j ) { if ( minigame.pong_paddles[j] == NULL ) { @@ -445,10 +461,12 @@ int pong_server_event(entity minigame, string event, ...) } case "pong_ailess": { + if(event_blocked) + return true; if ( minigame.minigame_flags & PONG_STATUS_WAIT ) { entity paddle; - for ( int j = PONG_MAX_PLAYERS-1; j >= 0; j-- ) + for ( int j = PONG_MAX_PLAYERS-1; j >= 0; --j ) { paddle = minigame.pong_paddles[j]; if ( paddle != NULL && @@ -557,6 +575,8 @@ void pong_hud_board(vector pos, vector mySize) } } + + minigame_show_allspecs(pos, mySize); } // Required function, draw the game status panel @@ -578,12 +598,12 @@ void pong_hud_status(vector pos, vector mySize) entity e; FOREACH_MINIGAME_ENTITY(e) { - if ( e.classname == "minigame_player" || e.classname == "pong_ai" ) + if ( (e.classname == "minigame_player" || e.classname == "pong_ai") && e.team != PONG_SPECTATOR_TEAM ) { mypos = pos; mypos_y += (e.team-1) * (player_fontsize_y + ts_y); - drawfill(mypos, ts, pong_team_to_color(e.team), 0.25, DRAWFLAG_ADDITIVE); + drawfill(mypos, ts, pong_team_to_color(e.team), 0.25 * panel_fg_alpha, DRAWFLAG_ADDITIVE); minigame_drawcolorcodedstring_trunc(mySize_x,mypos, (e.minigame_playerslot ? entcs_GetName(e.minigame_playerslot-1) : _("AI")), @@ -602,7 +622,9 @@ void pong_hud_status(vector pos, vector mySize) string pong_message(int mgflags) { string rmessage = ""; - if (mgflags & PONG_STATUS_WAIT) + if(minigame_self.team == PONG_SPECTATOR_TEAM) + rmessage = _("You are spectating"); + else if (mgflags & PONG_STATUS_WAIT) rmessage = _("Press ^1Start Match^7 to start the match with the current players"); return rmessage; } @@ -614,43 +636,47 @@ int pong_client_event(entity minigame, string event, ...) { case "activate": return false; - case "key_pressed": - switch ( ...(0,int) ) - { - case K_UPARROW: - case K_KP_UPARROW: - case K_LEFTARROW: - case K_KP_LEFTARROW: - //minigame_cmd("+moved"); - pong_keys_pressed |= PONG_KEY_DECREASE; - return true; - case K_DOWNARROW: - case K_KP_DOWNARROW: - case K_RIGHTARROW: - case K_KP_RIGHTARROW: - //minigame_cmd("+movei"); - pong_keys_pressed |= PONG_KEY_INCREASE; - return true; - } + case "deactivate": + { + strfree(minigame.message); return false; + } + case "key_pressed": case "key_released": - switch ( ...(0,int) ) - { - case K_UPARROW: - case K_KP_UPARROW: - case K_LEFTARROW: - case K_KP_LEFTARROW: - //minigame_cmd("-moved"); - pong_keys_pressed &= ~PONG_KEY_DECREASE; - return true; - case K_DOWNARROW: - case K_KP_DOWNARROW: - case K_RIGHTARROW: - case K_KP_RIGHTARROW: - //minigame_cmd("-movei"); - pong_keys_pressed &= ~PONG_KEY_INCREASE; - return true; - } + if ((minigame.minigame_flags & PONG_STATUS_PLAY) && minigame_self.team != PONG_SPECTATOR_TEAM) + switch ( ...(0,int) ) + { + case K_UPARROW: + case K_KP_UPARROW: + case K_LEFTARROW: + case K_KP_LEFTARROW: + if (event == "key_pressed") + { + //minigame_cmd("+moved"); + pong_keys_pressed |= PONG_KEY_DECREASE; + } + else + { + //minigame_cmd("-moved"); + pong_keys_pressed &= ~PONG_KEY_DECREASE; + } + return true; + case K_DOWNARROW: + case K_KP_DOWNARROW: + case K_RIGHTARROW: + case K_KP_RIGHTARROW: + if (event == "key_pressed") + { + //minigame_cmd("+movei"); + pong_keys_pressed |= PONG_KEY_INCREASE; + } + else + { + //minigame_cmd("-movei"); + pong_keys_pressed &= ~PONG_KEY_INCREASE; + } + return true; + } return false; case "network_receive": { @@ -664,7 +690,7 @@ int pong_client_event(entity minigame, string event, ...) { if ( sf & MINIG_SF_UPDATE ) { - sent.message = pong_message(sent.minigame_flags); + strcpy(sent.message, pong_message(sent.minigame_flags)); } } return false; @@ -679,7 +705,7 @@ int pong_client_event(entity minigame, string event, ...) case "menu_click": { string cmd = ...(0,string); - if( cmd == "pong_throw" && minigame.minigame_flags & PONG_STATUS_WAIT ) + if( cmd == "pong_throw" && ( minigame.minigame_flags & PONG_STATUS_WAIT ) ) { minigame_cmd("throw"); }