+#include "nmm.qh"
REGISTER_MINIGAME(nmm, "Nine Men's Morris");
const int NMM_TURN_PLACE = 0x0100; // player has to place a piece on the board
// 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);
+ 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;
}
}
// Required function, draw the game status panel
void nmm_hud_status(vector pos, vector mySize)
{
- HUD_Scale_Disable();
- 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)
// Required function, handle client events
int nmm_client_event(entity minigame, string event, ...)
-{SELFPARAM();
+{
if ( event == "activate" )
{
- nmm_fromtile = world;
+ nmm_fromtile = NULL;
nmm_init_tiles(minigame);
minigame.message = nmm_turn_to_string(minigame.minigame_flags);
}
else if ( event == "deactivate" )
{
- nmm_fromtile = world;
+ nmm_fromtile = NULL;
nmm_kill_tiles(minigame);
}
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;
}
else if ( event == "network_receive" )
{
- if ( self.classname == "minigame_board_piece" && ( ...(1,int) & MINIG_SF_UPDATE ) )
+ entity sent = ...(0,entity);
+
+ if ( sent.classname == "minigame_board_piece" && ( ...(1,int) & MINIG_SF_UPDATE ) )
{
entity e;
string tileid = "";
- if ( self.minigame_flags & NMM_PIECE_BOARD )
- tileid = minigame_tile_name(self.origin,7,7);
+ if ( sent.minigame_flags & NMM_PIECE_BOARD )
+ tileid = minigame_tile_name(sent.origin,7,7);
FOREACH_MINIGAME_ENTITY(e)
{
if ( e.classname == "minigame_nmm_tile" )
{
- if ( e.nmm_tile_piece == self )
- e.nmm_tile_piece = world;
+ if ( e.nmm_tile_piece == sent )
+ e.nmm_tile_piece = NULL;
if ( e.netname == tileid )
- e.nmm_tile_piece = self;
+ e.nmm_tile_piece = sent;
}
}
}
- else if ( self.classname == "minigame" && ( ...(1,int) & MINIG_SF_UPDATE ) )
+ else if ( sent.classname == "minigame" && ( ...(1,int) & MINIG_SF_UPDATE ) )
{
- self.message = nmm_turn_to_string(self.minigame_flags);
- if ( self.minigame_flags & minigame_self.team )
+ sent.message = nmm_turn_to_string(sent.minigame_flags);
+ if ( sent.minigame_flags & minigame_self.team )
minigame_prompt();
}
}