-REGISTER_MINIGAME(nmm, "Nine Men's Morris");
+#include "nmm.qh"
+
+#ifdef CSQC
+#include <client/miscfunctions.qh>
+#endif
+
+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
// Remove tiles of a NMM minigame
void nmm_kill_tiles(entity minig)
{
- entity e = world;
+ entity e = NULL;
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);
- remove(e);
+ strfree(e.netname);
+ strfree(e.nmm_tile_hmill);
+ strfree(e.nmm_tile_vmill);
+ delete(e);
}
}
// Find a tile by its id
entity nmm_find_tile(entity minig, string id)
{
- entity e = world;
+ entity e = NULL;
while ( ( e = findentity(e,owner,minig) ) )
if ( e.classname == "minigame_nmm_tile" && e.netname == id )
return e;
- return world;
+ return NULL;
}
// Check whether two tiles are adjacent
// Returns 1 if there is at least 1 free adjacent tile
bool nmm_tile_canmove(entity tile)
{
- entity e = world;
+ entity e = NULL;
while ( ( e = findentity(e,owner,tile.owner) ) )
if ( e.classname == "minigame_nmm_tile" && !e.nmm_tile_piece
&& nmm_tile_adjacent(e,tile) )
if ( e.classname == "minigame_board_piece" &&
(e.minigame_flags & pieceflags) && e.team == teamn )
return e;
- return world;
+ return NULL;
}
// Count NMM pieces matching flags and team number
int nmm_count_pieces(entity minigame, int teamn, int pieceflags)
{
int n = 0;
- entity e = world;
+ entity e = NULL;
while (( e = nmm_find_piece(e,minigame, teamn, pieceflags) ))
n++;
return n;
{
entity e = ...(0,entity);
int argc = ...(1,int);
- entity tile = world;
- entity piece = world;
+ entity tile = NULL;
+ entity piece = NULL;
bool move_ok = false;
if ( e && argc >= 2 && argv(0) == "move" &&
}
else if ( minigame.minigame_flags & NMM_TURN_PLACE )
{
- piece = nmm_find_piece(world,minigame,e.team,NMM_PIECE_HOME);
+ piece = nmm_find_piece(NULL,minigame,e.team,NMM_PIECE_HOME);
if ( !tile.nmm_tile_piece && piece )
{
tile.nmm_tile_piece = piece;
entity tile2 = nmm_find_tile(minigame,argv(2));
if ( tile2 && nmm_tile_adjacent(tile,tile2) && !tile2.nmm_tile_piece )
{
- tile.nmm_tile_piece = world;
+ tile.nmm_tile_piece = NULL;
tile2.nmm_tile_piece = piece;
piece.origin = tile2.origin;
piece.SendFlags |= MINIG_SF_UPDATE;
entity tile2 = nmm_find_tile(minigame,argv(2));
if ( tile2 && !tile2.nmm_tile_piece )
{
- tile.nmm_tile_piece = world;
+ tile.nmm_tile_piece = NULL;
tile2.nmm_tile_piece = piece;
piece.origin = tile2.origin;
piece.SendFlags |= MINIG_SF_UPDATE;
piece = tile.nmm_tile_piece;
if ( piece && piece.nmm_tile_piece.team != e.team )
{
- tile.nmm_tile_piece = world;
+ tile.nmm_tile_piece = NULL;
piece.minigame_flags = NMM_PIECE_DEAD;
piece.SendFlags |= MINIG_SF_UPDATE;
move_ok = true;
{
minigame.minigame_flags = NMM_TURN_TAKE|e.team;
int takemill = NMM_TURN_TAKEANY;
- entity f = world;
+ entity f = NULL;
while ( ( f = findentity(f,owner,minigame) ) )
if ( f.classname == "minigame_nmm_tile" && f.nmm_tile_piece &&
f.nmm_tile_piece.team == nextteam && !nmm_in_mill(f) )
}
else
{
- if ( nmm_find_piece(world,minigame,nextteam,NMM_PIECE_HOME) )
+ if ( nmm_find_piece(NULL,minigame,nextteam,NMM_PIECE_HOME) )
minigame.minigame_flags = NMM_TURN_PLACE|nextteam;
else if ( npieces == 3 )
minigame.minigame_flags = NMM_TURN_FLY|nextteam;
else
{
minigame.minigame_flags = NMM_TURN_WIN|e.team;
- entity f = world;
+ entity f = NULL;
while ( ( f = findentity(f,owner,minigame) ) )
if ( f.classname == "minigame_nmm_tile" && f.nmm_tile_piece &&
f.nmm_tile_piece.team == nextteam && nmm_tile_canmove(f) )
minigame.SendFlags |= MINIG_SF_UPDATE;
}
else
- LOG_TRACE("Invalid move: ",...(2,string),"\n");
+ LOG_TRACE("Invalid move: ", ...(2, string));
return 1;
}
}
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);
}
}
// Required function, draw the game status panel
void nmm_hud_status(vector pos, vector mySize)
{
- HUD_Panel_DrawBg(1);
+ HUD_Panel_DrawBg();
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;
float piece_space = piece_sz_x + ( ts_x - 7 * piece_sz_x ) / 6;
vector mypos;
float piece_light = 1;
- entity e = world;
+ entity e = NULL;
mypos = pos;
if ( (active_minigame.minigame_flags&NMM_TURN_TEAM) == 2 )
if ( minigame.minigame_flags & (NMM_TURN_PLACE|NMM_TURN_TAKE) )
{
minigame_cmd("move ",nmm_currtile.netname);
- nmm_fromtile = world;
+ nmm_fromtile = NULL;
}
else if ( (minigame.minigame_flags & (NMM_TURN_MOVE|NMM_TURN_FLY)) )
{
if ( nmm_fromtile == nmm_currtile )
{
- nmm_fromtile = world;
+ nmm_fromtile = NULL;
}
else if ( nmm_currtile.nmm_tile_piece && nmm_currtile.nmm_tile_piece.team == minigame_self.team )
{
else if ( nmm_fromtile )
{
minigame_cmd("move ",nmm_fromtile.netname," ",nmm_currtile.netname);
- nmm_fromtile = world;
+ nmm_fromtile = NULL;
}
}
}
else
- nmm_fromtile = world;
+ nmm_fromtile = NULL;
}
string nmm_turn_to_string(int turnflags)
{
if ( event == "activate" )
{
- nmm_fromtile = world;
+ 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 = world;
+ 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
{
string tileid = nmm_currtile.netname;
- nmm_currtile = world;
+ nmm_currtile = NULL;
while ( !nmm_currtile )
{
tileid = minigame_relative_tile(tileid,1,0,7,7);
else
{
string tileid = nmm_currtile.netname;
- nmm_currtile = world;
+ nmm_currtile = NULL;
while ( !nmm_currtile )
{
tileid = minigame_relative_tile(tileid,-1,0,7,7);
else
{
string tileid = nmm_currtile.netname;
- nmm_currtile = world;
+ nmm_currtile = NULL;
while ( !nmm_currtile )
{
tileid = minigame_relative_tile(tileid,0,1,7,7);
else
{
string tileid = nmm_currtile.netname;
- nmm_currtile = world;
+ nmm_currtile = NULL;
while ( !nmm_currtile )
{
tileid = minigame_relative_tile(tileid,0,-1,7,7);
}
else if ( event == "mouse_moved" )
{
- nmm_currtile = world;
+ nmm_currtile = NULL;
vector tile_pos;
vector tile_size = minigame_hud_denormalize_size('1 1 0'/7,nmm_boardpos,nmm_boardsize);
entity e;
if ( e.classname == "minigame_nmm_tile" )
{
if ( e.nmm_tile_piece == sent )
- e.nmm_tile_piece = world;
+ e.nmm_tile_piece = NULL;
if ( e.netname == tileid )
e.nmm_tile_piece = sent;
}
}
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();
}