#include "nmm.qh"
-REGISTER_MINIGAME(nmm, "Nine Men's Morris");
+
+REGISTER_MINIGAME(nmm, _("Nine Men's Morris"));
const int NMM_TURN_PLACE = 0x0100; // player has to place a piece on the board
const int NMM_TURN_MOVE = 0x0200; // player has to move a piece by one tile
while ( ( e = findentity(e,owner,minig) ) )
if ( e.classname == "minigame_nmm_tile" )
{
- strunzone(e.netname);
- strunzone(e.nmm_tile_hmill);
- strunzone(e.nmm_tile_vmill);
+ strfree(e.netname);
+ strfree(e.nmm_tile_hmill);
+ strfree(e.nmm_tile_vmill);
delete(e);
}
}
entity e;
for ( int i = 0; i < 7; i++ )
{
- e = msle_spawn(minigame,"minigame_board_piece");
+ e = msle_spawn(minigame,new(minigame_board_piece));
e.team = 1;
e.minigame_flags = NMM_PIECE_HOME;
- e = msle_spawn(minigame,"minigame_board_piece");
+ e = msle_spawn(minigame,new(minigame_board_piece));
e.team = 2;
e.minigame_flags = NMM_PIECE_HOME;
}
if ( active_minigame.minigame_flags & NMM_TURN_WIN )
{
vector winfs = hud_fontsize*2;
- string playername = "";
+ string pname = "";
FOREACH_MINIGAME_ENTITY(e)
if ( e.classname == "minigame_player" &&
e.team == (active_minigame.minigame_flags & NMM_TURN_TEAM) )
- playername = entcs_GetName(e.minigame_playerslot-1);
+ pname = entcs_GetName(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!"), pname),
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!"), pname),
winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
}
}
{
nmm_fromtile = NULL;
nmm_init_tiles(minigame);
- minigame.message = nmm_turn_to_string(minigame.minigame_flags);
+ strcpy(minigame.message, nmm_turn_to_string(minigame.minigame_flags));
}
else if ( event == "deactivate" )
{
nmm_fromtile = NULL;
nmm_kill_tiles(minigame);
+ strfree(minigame.message);
}
- else if ( event == "key_pressed" && (minigame.minigame_flags&NMM_TURN_TEAM) == minigame_self.team )
+ else if ( (event == "key_pressed" || event == "key_released") )
{
- switch ( ...(0,int) )
+ bool event_blocked = ((event == "key_released")
+ || ((minigame.minigame_flags & NMM_TURN_TEAM) != minigame_self.team));
+ if (!(minigame.minigame_flags & NMM_TURN_WIN))
{
- case K_RIGHTARROW:
- case K_KP_RIGHTARROW:
- if ( ! nmm_currtile )
- nmm_currtile = nmm_find_tile(active_minigame,"a7");
- else
- {
- string tileid = nmm_currtile.netname;
- nmm_currtile = NULL;
- while ( !nmm_currtile )
+ switch ( ...(0,int) )
+ {
+ case K_RIGHTARROW:
+ case K_KP_RIGHTARROW:
+ if (event_blocked)
+ return true;
+ if ( ! nmm_currtile )
+ nmm_currtile = nmm_find_tile(active_minigame,"a7");
+ else
{
- tileid = minigame_relative_tile(tileid,1,0,7,7);
- nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ string tileid = nmm_currtile.netname;
+ nmm_currtile = NULL;
+ while ( !nmm_currtile )
+ {
+ tileid = minigame_relative_tile(tileid,1,0,7,7);
+ nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ }
}
- }
- return 1;
- case K_LEFTARROW:
- case K_KP_LEFTARROW:
- if ( ! nmm_currtile )
- nmm_currtile = nmm_find_tile(active_minigame,"g7");
- else
- {
- string tileid = nmm_currtile.netname;
- nmm_currtile = NULL;
- while ( !nmm_currtile )
+ return 1;
+ case K_LEFTARROW:
+ case K_KP_LEFTARROW:
+ if (event_blocked)
+ return true;
+ if ( ! nmm_currtile )
+ nmm_currtile = nmm_find_tile(active_minigame,"g7");
+ else
{
- tileid = minigame_relative_tile(tileid,-1,0,7,7);
- nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ string tileid = nmm_currtile.netname;
+ nmm_currtile = NULL;
+ while ( !nmm_currtile )
+ {
+ tileid = minigame_relative_tile(tileid,-1,0,7,7);
+ nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ }
}
- }
- return 1;
- case K_UPARROW:
- case K_KP_UPARROW:
- if ( ! nmm_currtile )
- nmm_currtile = nmm_find_tile(active_minigame,"a1");
- else
- {
- string tileid = nmm_currtile.netname;
- nmm_currtile = NULL;
- while ( !nmm_currtile )
+ return 1;
+ case K_UPARROW:
+ case K_KP_UPARROW:
+ if (event_blocked)
+ return true;
+ if ( ! nmm_currtile )
+ nmm_currtile = nmm_find_tile(active_minigame,"a1");
+ else
{
- tileid = minigame_relative_tile(tileid,0,1,7,7);
- nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ string tileid = nmm_currtile.netname;
+ nmm_currtile = NULL;
+ while ( !nmm_currtile )
+ {
+ tileid = minigame_relative_tile(tileid,0,1,7,7);
+ nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ }
}
- }
- return 1;
- case K_DOWNARROW:
- case K_KP_DOWNARROW:
- if ( ! nmm_currtile )
- nmm_currtile = nmm_find_tile(active_minigame,"a7");
- else
- {
- string tileid = nmm_currtile.netname;
- nmm_currtile = NULL;
- while ( !nmm_currtile )
+ return 1;
+ case K_DOWNARROW:
+ case K_KP_DOWNARROW:
+ if (event_blocked)
+ return true;
+ if ( ! nmm_currtile )
+ nmm_currtile = nmm_find_tile(active_minigame,"a7");
+ else
{
- tileid = minigame_relative_tile(tileid,0,-1,7,7);
- nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ string tileid = nmm_currtile.netname;
+ nmm_currtile = NULL;
+ while ( !nmm_currtile )
+ {
+ tileid = minigame_relative_tile(tileid,0,-1,7,7);
+ nmm_currtile = nmm_find_tile(active_minigame,tileid);
+ }
}
- }
- return 1;
- case K_ENTER:
- case K_KP_ENTER:
- case K_SPACE:
- nmm_make_move(minigame);
- return 1;
+ return 1;
+ case K_ENTER:
+ case K_KP_ENTER:
+ case K_SPACE:
+ if (event_blocked)
+ return true;
+ nmm_make_move(minigame);
+ return 1;
+ }
}
return 0;
}
else if ( event == "mouse_pressed" && ...(0,int) == K_MOUSE1 )
{
+ nmm_client_event(minigame, "mouse_moved");
nmm_make_move(minigame);
return 1;
}
}
else if ( sent.classname == "minigame" && ( ...(1,int) & MINIG_SF_UPDATE ) )
{
- sent.message = nmm_turn_to_string(sent.minigame_flags);
+ strcpy(sent.message, nmm_turn_to_string(sent.minigame_flags));
if ( sent.minigame_flags & minigame_self.team )
minigame_prompt();
}