+REGISTER_MINIGAME(pp, "Push-Pull");
+
const int PP_TURN_PLACE = 0x0100; // player has to place a piece on the board
const int PP_TURN_WIN = 0x0200; // player has won
const int PP_TURN_DRAW = 0x0400; // players have equal scores
const int PP_BLOCKED_TEAM = 5; // there won't ever be a 5th team, so we can abuse this
+const int PP_LET_CNT = 7;
+const int PP_NUM_CNT = 7;
+
+const int PP_TILE_SIZE = 7;
+
.int pp_team1_score;
.int pp_team2_score;
return 0;
int number = minigame_tile_number(tile);
int letter = minigame_tile_letter(tile);
- return 0 <= number && number < 7 && 0 <= letter && letter < 7;
+ return 0 <= number && number < PP_NUM_CNT && 0 <= letter && letter < PP_LET_CNT;
}
// Checks if the given piece completes a row
if(!pp_valid_tile(minigame_tile_buildname(letter+1,number-1)) || pp_find_piece(piece.owner,minigame_tile_buildname(letter+1,number-1)).team == 5)
if(!pp_valid_tile(minigame_tile_buildname(letter-1,number+1)) || pp_find_piece(piece.owner,minigame_tile_buildname(letter-1,number+1)).team == 5)
return true;
-
+
return false;
}
void pp_setup_pieces(entity minigame)
{
int i, t; // letter, number
- for(i = 0; i < 7; ++i)
- for(t = 0; t < 7; ++t)
+ for(i = 0; i < PP_LET_CNT; ++i)
+ for(t = 0; t < PP_NUM_CNT; ++t)
{
bool t2_true = ((i == 0 || i == 6) && t > 0 && t < 6);
bool t1_true = (i > 0 && i < 6 && (t == 0 || t == 6));
{
switch(argv(0))
{
- case "move":
- pp_move(minigame, ...(0,entity), ...(1,int) == 2 ? argv(1) : string_null );
+ case "move":
+ pp_move(minigame, ...(0,entity), ...(1,int) == 2 ? argv(1) : string_null );
return true;
case "next":
pp_next_match(minigame,...(0,entity));
return false;
}
}
-
+
return false;
}
minigame_hud_fitsqare(pos, mySize);
pp_boardpos = pos;
pp_boardsize = mySize;
-
+
minigame_hud_simpleboard(pos,mySize,minigame_texture("pp/board"));
- vector tile_size = minigame_hud_denormalize_size('1 1 0'/7,pos,mySize);
+ vector tile_size = minigame_hud_denormalize_size('1 1 0'/PP_TILE_SIZE,pos,mySize);
vector tile_pos;
active_minigame.pp_curr_piece = world;
{
if ( e.classname == "minigame_board_piece" )
{
- tile_pos = minigame_tile_pos(e.netname,7,7);
+ tile_pos = minigame_tile_pos(e.netname,PP_LET_CNT,PP_NUM_CNT);
tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize);
vector tile_color = '1 1 1';
case 2: tile_color = '0.3 0.3 1'; break;
// 3, 4 coming later?
}
-
+
string tile_name = strcat("pp/piece",ftos(e.team));
if(e.team == 5) { tile_name = "pp/piece_taken"; }
tile_name = "pp/piece_current";
// draw the splat too
- minigame_drawpic_centered( tile_pos,
+ minigame_drawpic_centered( tile_pos,
minigame_texture("pp/piece_taken"),
tile_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
}
- minigame_drawpic_centered( tile_pos,
+ minigame_drawpic_centered( tile_pos,
minigame_texture(tile_name),
tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
}
if ( (active_minigame.minigame_flags & PP_TURN_TEAM) == minigame_self.team )
if ( pp_valid_move(active_minigame, pp_curr_pos) )
{
- tile_pos = minigame_tile_pos(pp_curr_pos,7,7);
+ tile_pos = minigame_tile_pos(pp_curr_pos,PP_LET_CNT,PP_NUM_CNT);
tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize);
- minigame_drawpic_centered( tile_pos,
+ minigame_drawpic_centered( tile_pos,
minigame_texture("pp/piece_current"),
tile_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
}
else if(pp_valid_tile(pp_curr_pos))
{
- tile_pos = minigame_tile_pos(pp_curr_pos,7,7);
+ tile_pos = minigame_tile_pos(pp_curr_pos,PP_LET_CNT,PP_NUM_CNT);
tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize);
- minigame_drawpic_centered( tile_pos,
+ minigame_drawpic_centered( tile_pos,
minigame_texture("pp/piece_selected"),
tile_size, '1 1 1', panel_fg_alpha / 2, DRAWFLAG_NORMAL );
}
vector winfs = hud_fontsize*2;
string playername = "";
FOREACH_MINIGAME_ENTITY(e)
- if ( e.classname == "minigame_player" &&
+ if ( e.classname == "minigame_player" &&
e.team == (active_minigame.minigame_flags & PP_TURN_TEAM) )
playername = GetPlayerName(e.minigame_playerslot-1);
-
+
vector win_pos = pos+eY*(mySize_y-winfs_y)/2;
vector win_sz;
win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
- sprintf("%s^7 won the game!",playername),
+ sprintf("%s^7 won the game!",playername),
winfs, 0, DRAWFLAG_NORMAL, 0.5);
-
+
drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE);
-
+
minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
- sprintf("%s^7 won the game!",playername),
+ sprintf("%s^7 won the game!",playername),
winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
}
}
vector ts;
ts = minigame_drawstring_wrapped(mySize_x,pos,active_minigame.descriptor.message,
hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5);
-
+
pos_y += ts_y;
mySize_y -= ts_y;
-
+
vector player_fontsize = hud_fontsize * 1.75;
ts_y = ( mySize_y - 2*player_fontsize_y ) / 2;
ts_x = mySize_x;
minigame_drawcolorcodedstring_trunc(mySize_x,mypos,
GetPlayerName(e.minigame_playerslot-1),
player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
-
+
mypos_y += player_fontsize_y;
- drawpic( mypos,
+ drawpic( mypos,
minigame_texture(strcat("pp/piece",ftos(e.team))),
tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
-
+
mypos_x += tile_size_x;
int myscore = 0;
if(e.team == 1) { myscore = active_minigame.pp_team1_score; }
if(e.team == 2) { myscore = active_minigame.pp_team2_score; }
-
+
drawstring(mypos,ftos(myscore),tile_size,
'0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL);
}
{
if ( turnflags & PP_TURN_DRAW )
return _("Draw");
-
+
if ( turnflags & PP_TURN_WIN )
{
if ( (turnflags&PP_TURN_TEAM) != minigame_self.team )
return _("You lost the game!\nSelect \"^1Next Match^7\" on the menu for a rematch!");
return _("You win!\nSelect \"^1Next Match^7\" on the menu to start a new match!");
}
-
+
if ( turnflags & PP_TURN_NEXT )
{
if ( (turnflags&PP_TURN_TEAM) != minigame_self.team )
return _("Select \"^1Next Match^7\" on the menu to start a new match!");
return _("Wait for your opponent to confirm the rematch");
}
-
+
if ( (turnflags & PP_TURN_TEAM) != minigame_self.team )
return _("Wait for your opponent to make their move");
-
+
if ( turnflags & PP_TURN_PLACE )
return _("Click on the game board to place your piece");
-
+
return "";
}
if ( ! pp_curr_pos )
pp_set_curr_pos("a3");
else
- pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,1,0,7,7));
+ pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,1,0,PP_LET_CNT,PP_NUM_CNT));
return true;
case K_LEFTARROW:
case K_KP_LEFTARROW:
if ( ! pp_curr_pos )
pp_set_curr_pos("c3");
else
- pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,-1,0,7,7));
+ pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,-1,0,PP_LET_CNT,PP_NUM_CNT));
return true;
case K_UPARROW:
case K_KP_UPARROW:
if ( ! pp_curr_pos )
pp_set_curr_pos("a1");
else
- pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,0,1,7,7));
+ pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,0,1,PP_LET_CNT,PP_NUM_CNT));
return true;
case K_DOWNARROW:
case K_KP_DOWNARROW:
if ( ! pp_curr_pos )
pp_set_curr_pos("a3");
else
- pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,0,-1,7,7));
+ pp_set_curr_pos(minigame_relative_tile(pp_curr_pos,0,-1,PP_LET_CNT,PP_NUM_CNT));
return true;
case K_ENTER:
case K_KP_ENTER:
{
vector mouse_pos = minigame_hud_normalize(mousepos,pp_boardpos,pp_boardsize);
if ( minigame.minigame_flags == (PP_TURN_PLACE|minigame_self.team) )
- pp_set_curr_pos(minigame_tile_name(mouse_pos,7,7));
+ pp_set_curr_pos(minigame_tile_name(mouse_pos,PP_LET_CNT,PP_NUM_CNT));
if ( ! pp_valid_tile(pp_curr_pos) )
pp_set_curr_pos("");
return false;
}
-#endif
\ No newline at end of file
+#endif