#include "bd.qh"
-REGISTER_MINIGAME(bd, "Bulldozer");
+REGISTER_MINIGAME(bd, _("Bulldozer"));
REGISTER_NET_LINKED(ENT_CLIENT_BD_CONTROLLER)
case BD_TILE_BRICK1: return false;
}
- if(hit.netname) { strunzone(hit.netname); }
- hit.netname = strzone(testpos);
+ strcpy(hit.netname, testpos);
minigame_server_sendflags(hit,MINIG_SF_UPDATE);
break;
}
case BD_TILE_BRICK1: return false;
}
- if(dozer.netname) { strunzone(dozer.netname); }
- dozer.netname = strzone(newpos);
+ strcpy(dozer.netname, newpos);
return true;
}
entity dozer = bd_find_dozer(minigame);
if(!dozer)
{
- LOG_INFO("Dozer wasn't found!\n");
+ LOG_INFO("Dozer wasn't found!");
return; // should not happen... TODO: end match?
}
if(!piece)
return; // how?!
- if(piece.netname) { strunzone(piece.netname); }
+ strfree(piece.netname);
delete(piece);
minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
return;
}
else
{
- entity piece = msle_spawn(minigame,"minigame_board_piece");
+ entity piece = msle_spawn(minigame,new(minigame_board_piece));
piece.team = 1;
piece.netname = strzone(pos);
piece.bd_tiletype = thetile;
if(targ && thetype == targ.bd_tiletype)
{
- if(targ.netname) { strunzone(targ.netname); }
+ strfree(targ.netname);
delete(targ);
}
else if(piece && thetype == piece.bd_tiletype)
{
- if(piece.netname) { strunzone(piece.netname); }
+ strfree(piece.netname);
delete(piece);
}
else return;
while( (e = findentity(e, owner, minigame)) )
if(e.classname == "minigame_board_piece")
{
- if(e.netname) { strunzone(e.netname); }
+ strfree(e.netname);
delete(e);
}
e = NULL;
if(minigame.bd_nextlevel && minigame.bd_nextlevel != "")
{
- if(minigame.bd_levelname) { strunzone(minigame.bd_levelname); }
- minigame.bd_levelname = strzone(minigame.bd_nextlevel);
+ strcpy(minigame.bd_levelname, minigame.bd_nextlevel);
}
bd_setup_pieces(minigame);
void bd_set_next_match(entity minigame, string next)
{
- if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); }
- minigame.bd_nextlevel = strzone(next);
+ strcpy(minigame.bd_nextlevel, next);
}
void bd_next_match(entity minigame, entity player, string next)
{
tokenize_console(s);
- if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); }
- minigame.bd_nextlevel = strzone(argv(2));
+ strcpy(minigame.bd_nextlevel, argv(2));
}
int bd_fix_dir(vector dir)
}
else
{
- entity e = msle_spawn(minigame,"minigame_board_piece");
+ entity e = msle_spawn(minigame,new(minigame_board_piece));
e.netname = tilename;
e.team = 1;
e.bd_dir = dir;
int target_count = 0, boulder_count = 0;
entity piece = NULL;
while((piece = findentity(piece,owner,minigame)))
- if(piece.classname == "minigame_board_piece")
- if(piece.bd_tiletype == BD_TILE_BOULDER)
- ++boulder_count;
- else if(piece.bd_tiletype == BD_TILE_TARGET)
- ++target_count;
+ if(piece.classname == "minigame_board_piece")
+ {
+ if(piece.bd_tiletype == BD_TILE_BOULDER)
+ ++boulder_count;
+ else if(piece.bd_tiletype == BD_TILE_TARGET)
+ ++target_count;
+ }
if(boulder_count != target_count)
{
- LOG_INFO("Not enough targets or boulders, fix your level!\n");
+ LOG_INFO("Not enough targets or boulders, fix your level!");
return false;
}
file_get = fopen(file_name, FILE_READ);
if(file_get < 0)
{
- LOG_INFO("^3BULLDOZER: ^7could not find storage file ^3", file_name, "^7, no items were loaded\n");
+ LOG_INFO("^3BULLDOZER: ^7could not find storage file ^3", file_name, "^7, no items were loaded");
}
else
{
entity dozer = bd_find_dozer(minigame);
if(!dozer)
{
- LOG_INFO("You need to place a bulldozer on the level to save it!\n");
+ LOG_INFO("You need to place a bulldozer on the level to save it!");
return;
}
}
else
{
- LOG_INFO("You need to set the level name!\n");
+ LOG_INFO("You need to set the level name!");
return;
}
}
{
case "start":
{
- if(minigame.bd_levelname) { strunzone(minigame.bd_levelname); }
- minigame.bd_levelname = strzone(autocvar_sv_minigames_bulldozer_startlevel);
+ strcpy(minigame.bd_levelname, autocvar_sv_minigames_bulldozer_startlevel);
bd_setup_pieces(minigame);
minigame.minigame_flags = BD_TURN_MOVE;
while( (e = findentity(e, owner, minigame)) )
if(e.classname == "minigame_board_piece")
{
- if(e.netname) { strunzone(e.netname); }
+ strfree(e.netname);
delete(e);
}
e = NULL;
delete(e);
}
- if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); }
- if(minigame.bd_levelname) { strunzone(minigame.bd_levelname); }
+ strfree(minigame.bd_nextlevel);
+ strfree(minigame.bd_levelname);
return false;
}
case "join":
if ( (active_minigame.minigame_flags & BD_TURN_LOSS) || (active_minigame.minigame_flags & BD_TURN_WIN) )
{
vector winfs = hud_fontsize*2;
- string victory_text = "Game over!";
+ string victory_text = _("Game over!");
if(active_minigame.minigame_flags & BD_TURN_WIN)
- victory_text = "Well done! Click 'Next Level' to continue";
+ victory_text = _("Well done! Click 'Next Level' to continue");
vector win_pos = pos+eY*(mySize_y-winfs_y)/2;
vector win_sz;
win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
- sprintf("%s", victory_text),
- winfs, 0, DRAWFLAG_NORMAL, 0.5);
+ victory_text, winfs, 0, DRAWFLAG_NORMAL, 0.5);
drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'0.3 0.3 1',0.8,DRAWFLAG_ADDITIVE);
minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
- sprintf("%s", victory_text),
- winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
+ victory_text, winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
}
}
string thepiece = "bd/dozer";
if(active_minigame.minigame_flags & BD_TURN_EDIT)
thepiece = bd_get_tile_pic(bd_curr_tile);
- drawpic( mypos,
+ const float tile_scale = 0.7;
+ drawpic( mypos + tile_size * 0.5 * (1 - tile_scale),
minigame_texture(thepiece),
- tile_size * 0.7, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
+ tile_size * tile_scale, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
mypos_x += tile_size_x;
return _("Better luck next time!");
if ( turnflags & BD_TURN_WIN )
+ {
if(random() > 0.5)
return _("Tubular! Press \"Next Level\" to continue!");
else
return _("Wicked! Press \"Next Level\" to continue!");
+ }
if( turnflags & BD_TURN_EDIT )
return _("Press the space bar to change your currently selected tile");
void bd_set_curr_pos(string s)
{
- if ( bd_curr_pos )
- strunzone(bd_curr_pos);
+ strfree(bd_curr_pos);
if ( s )
s = strzone(s);
bd_curr_pos = s;
}
-bool bd_normal_move(entity minigame, int themove)
-{
- switch ( themove )
- {
- case K_RIGHTARROW:
- case K_KP_RIGHTARROW:
- bd_make_move(minigame, "r");
- return true;
- case K_LEFTARROW:
- case K_KP_LEFTARROW:
- bd_make_move(minigame, "l");
- return true;
- case K_UPARROW:
- case K_KP_UPARROW:
- bd_make_move(minigame, "u");
- return true;
- case K_DOWNARROW:
- case K_KP_DOWNARROW:
- bd_make_move(minigame, "d");
- return true;
- }
-
- return false;
-}
-
bool bd_change_dozer_angle(entity minigame)
{
entity dozer = bd_find_piece(minigame, bd_curr_pos, false);
return true;
}
-bool bd_editor_move(entity minigame, int themove)
-{
- switch ( themove )
- {
- case K_RIGHTARROW:
- case K_KP_RIGHTARROW:
- if ( ! bd_curr_pos )
- bd_set_curr_pos("a3");
- else
- bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,1,0,BD_NUM_CNT,BD_LET_CNT));
- return true;
- case K_LEFTARROW:
- case K_KP_LEFTARROW:
- if ( ! bd_curr_pos )
- bd_set_curr_pos("c3");
- else
- bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,-1,0,BD_NUM_CNT,BD_LET_CNT));
- return true;
- case K_UPARROW:
- case K_KP_UPARROW:
- if ( ! bd_curr_pos )
- bd_set_curr_pos("a1");
- else
- bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,1,BD_NUM_CNT,BD_LET_CNT));
- return true;
- case K_DOWNARROW:
- case K_KP_DOWNARROW:
- if ( ! bd_curr_pos )
- bd_set_curr_pos("a3");
- else
- bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,-1,BD_NUM_CNT,BD_LET_CNT));
- return true;
- case K_ENTER:
- case K_KP_ENTER:
- bd_editor_make_move(minigame, "");
- return true;
- case K_SPACE:
- if(bd_change_dozer_angle(minigame))
- return true;
- bd_curr_tile += 1;
- if(bd_curr_tile > BD_TILE_LAST)
- bd_curr_tile = 1;
- return true;
- }
-
- return false;
-}
-
// Required function, handle client events
int bd_client_event(entity minigame, string event, ...)
{
{
case "activate":
{
- minigame.message = bd_turn_to_string(minigame.minigame_flags);
+ strcpy(minigame.message, bd_turn_to_string(minigame.minigame_flags));
bd_set_curr_pos("");
bd_curr_tile = BD_TILE_BRICK1;
return false;
}
+ case "deactivate":
+ {
+ strfree(minigame.message);
+ return false;
+ }
case "key_pressed":
+ case "key_released":
{
- if(minigame.minigame_flags & BD_TURN_MOVE)
+ bool event_blocked = ((event == "key_released")
+ || !(minigame.minigame_flags & BD_TURN_MOVE));
+ if (!(minigame.minigame_flags & BD_TURN_WIN) && !(minigame.minigame_flags & BD_TURN_LOSS))
{
- if(bd_normal_move(minigame, ...(0,int)))
- return true;
+ switch ( ...(0,int) )
+ {
+ case K_RIGHTARROW:
+ case K_KP_RIGHTARROW:
+ if (event_blocked)
+ return true;
+ bd_make_move(minigame, "r");
+ return true;
+ case K_LEFTARROW:
+ case K_KP_LEFTARROW:
+ if (event_blocked)
+ return true;
+ bd_make_move(minigame, "l");
+ return true;
+ case K_UPARROW:
+ case K_KP_UPARROW:
+ if (event_blocked)
+ return true;
+ bd_make_move(minigame, "u");
+ return true;
+ case K_DOWNARROW:
+ case K_KP_DOWNARROW:
+ if (event_blocked)
+ return true;
+ bd_make_move(minigame, "d");
+ return true;
+ }
}
if(minigame.minigame_flags & BD_TURN_EDIT)
{
- if(bd_editor_move(minigame, ...(0,int)))
- return true;
+ switch ( ...(0,int) )
+ {
+ case K_RIGHTARROW:
+ case K_KP_RIGHTARROW:
+ if (event_blocked)
+ return true;
+ if ( ! bd_curr_pos )
+ bd_set_curr_pos("a3");
+ else
+ bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,1,0,BD_NUM_CNT,BD_LET_CNT));
+ return true;
+ case K_LEFTARROW:
+ case K_KP_LEFTARROW:
+ if (event_blocked)
+ return true;
+ if ( ! bd_curr_pos )
+ bd_set_curr_pos("c3");
+ else
+ bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,-1,0,BD_NUM_CNT,BD_LET_CNT));
+ return true;
+ case K_UPARROW:
+ case K_KP_UPARROW:
+ if (event_blocked)
+ return true;
+ if ( ! bd_curr_pos )
+ bd_set_curr_pos("a1");
+ else
+ bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,1,BD_NUM_CNT,BD_LET_CNT));
+ return true;
+ case K_DOWNARROW:
+ case K_KP_DOWNARROW:
+ if (event_blocked)
+ return true;
+ if ( ! bd_curr_pos )
+ bd_set_curr_pos("a3");
+ else
+ bd_set_curr_pos(minigame_relative_tile(bd_curr_pos,0,-1,BD_NUM_CNT,BD_LET_CNT));
+ return true;
+ case K_ENTER:
+ case K_KP_ENTER:
+ if (event_blocked)
+ return true;
+ bd_editor_make_move(minigame, "");
+ return true;
+ case K_SPACE:
+ if (event_blocked)
+ return true;
+ if(bd_change_dozer_angle(minigame))
+ return true;
+ bd_curr_tile += 1;
+ if(bd_curr_tile > BD_TILE_LAST)
+ bd_curr_tile = 1;
+ return true;
+ }
}
return false;
{
if(...(0,int) == K_MOUSE1)
{
+ bd_client_event(minigame, "mouse_moved");
bd_editor_make_move(minigame, "");
return true;
}
if(...(0,int) == K_MOUSE2)
{
+ bd_client_event(minigame, "mouse_moved");
bd_editor_fill(minigame);
return true;
}
{
if ( sf & MINIG_SF_UPDATE )
{
- sent.message = bd_turn_to_string(sent.minigame_flags);
+ strcpy(sent.message, bd_turn_to_string(sent.minigame_flags));
//if ( sent.minigame_flags & minigame_self.team )
- minigame_prompt();
+ //minigame_prompt();
}
}
else if(sent.classname == "minigame_board_piece")
{
int letter = ReadByte();
int number = ReadByte();
- if(sent.netname) { strunzone(sent.netname); }
- sent.netname = strzone(minigame_tile_buildname(letter, number));
+ strcpy(sent.netname, minigame_tile_buildname(letter, number));
sent.bd_tiletype = ReadByte();