From 93197a482165b9729aa842d4125eb2b3283b4b8c Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Nov 2015 02:54:23 +1000 Subject: [PATCH] Experimental editor --- gfx/hud/default/minigames/bd/delete.tga | Bin 0 -> 1048620 bytes qcsrc/common/minigames/cl_minigames.qh | 2 +- qcsrc/common/minigames/minigame/bd.qc | 267 +++++++++++++++++++++--- qcsrc/common/minigames/sv_minigames.qh | 2 +- 4 files changed, 245 insertions(+), 26 deletions(-) create mode 100644 gfx/hud/default/minigames/bd/delete.tga diff --git a/gfx/hud/default/minigames/bd/delete.tga b/gfx/hud/default/minigames/bd/delete.tga new file mode 100644 index 0000000000000000000000000000000000000000..f69334ca1b6675b1b73a8a843eaf823ba6ddda0e GIT binary patch literal 1048620 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 2 ? argv(1) : string_null)); + bd_do_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) >= 3 ? argv(2) : string_null)); return true; case "next": bd_restart_match(minigame,...(0,entity)); @@ -280,6 +351,12 @@ int bd_server_event(entity minigame, string event, ...) case "restart": bd_restart_match(minigame,...(0,entity)); return true; + case "edit": + bd_activate_editor(minigame); + return true; + case "save": + bd_close_editor(minigame); + return true; } return false; @@ -317,9 +394,27 @@ int bd_server_event(entity minigame, string event, ...) #elif defined(CSQC) +int bd_curr_tile; +string bd_curr_pos; + vector bd_boardpos; // HUD board position vector bd_boardsize;// HUD board size +string bd_get_tile_pic(int tileid) +{ + switch(tileid) + { + case BD_TILE_BOULDER: return "bd/boulder"; + case BD_TILE_BRICK1: return "bd/brick1"; + case BD_TILE_BRICK2: return "bd/brick2"; + case BD_TILE_BRICK3: return "bd/brick3"; + case BD_TILE_TARGET: return "bd/target"; + case BD_TILE_DOZER: return "bd/dozer"; + } + + return string_null; +} + // Required function, draw the game board void bd_hud_board(vector pos, vector mySize) { @@ -414,6 +509,19 @@ void bd_hud_board(vector pos, vector mySize) } } + if(active_minigame.minigame_flags & BD_TURN_EDIT) + if(bd_valid_tile(bd_curr_pos)) + { + bool exists = (bd_find_piece(active_minigame, bd_curr_pos, false) || bd_find_piece(active_minigame, bd_curr_pos, true)); + string thepiece = ((exists) ? "bd/delete" : bd_get_tile_pic(bd_curr_tile)); + + tile_pos = minigame_tile_pos(bd_curr_pos,BD_LET_CNT,BD_NUM_CNT); + tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize); + minigame_drawpic_centered( tile_pos, + minigame_texture(thepiece), + tile_size, '1 1 1', panel_fg_alpha/2, DRAWFLAG_NORMAL ); + } + if ( (active_minigame.minigame_flags & BD_TURN_LOSS) || (active_minigame.minigame_flags & BD_TURN_WIN) ) { vector winfs = hud_fontsize*2; @@ -470,8 +578,11 @@ void bd_hud_status(vector pos, vector mySize) player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); mypos_y += player_fontsize_y; + string thepiece = "bd/dozer"; + if(active_minigame.minigame_flags & BD_TURN_EDIT) + thepiece = bd_get_tile_pic(bd_curr_tile); drawpic( mypos, - minigame_texture("bd/dozer"), + minigame_texture(thepiece), tile_size * 0.7, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL ); mypos_x += tile_size_x; @@ -494,6 +605,9 @@ string bd_turn_to_string(int turnflags) else return _("Wicked!"); + if( turnflags & BD_TURN_EDIT ) + return _("Press the space bar to change your currently selected tile"); + if ( turnflags & BD_TURN_MOVE ) return _("Push the boulders onto the targets"); @@ -509,6 +623,92 @@ void bd_make_move(entity minigame, string dir) } } +void bd_editor_make_move(entity minigame) +{ + if ( minigame.minigame_flags == BD_TURN_EDIT ) + { + minigame_cmd("move ", bd_curr_pos, " ", ftos(bd_curr_tile)); + } +} + +void bd_set_curr_pos(string s) +{ + if ( bd_curr_pos ) + strunzone(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_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: + bd_curr_tile = max(1, (bd_curr_tile + 1) % BD_TILE_LAST); + return true; + } + + return false; +} + // Required function, handle client events int bd_client_event(entity minigame, string event, ...) { @@ -517,35 +717,48 @@ int bd_client_event(entity minigame, string event, ...) case "activate": { minigame.message = bd_turn_to_string(minigame.minigame_flags); + bd_set_curr_pos(""); + bd_curr_tile = BD_TILE_BRICK1; return false; } case "key_pressed": { if(minigame.minigame_flags & BD_TURN_MOVE) { - switch ( ...(0,int) ) - { - 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; - } + if(bd_normal_move(minigame, ...(0,int))) + return true; + } + + if(minigame.minigame_flags & BD_TURN_EDIT) + { + if(bd_editor_move(minigame, ...(0,int))) + return true; + } + + return false; + } + case "mouse_pressed": + { + if(minigame.minigame_flags & BD_TURN_EDIT) + if(...(0,int) == K_MOUSE1) + { + bd_editor_make_move(minigame); + return true; } return false; } + case "mouse_moved": + { + if(minigame.minigame_flags & BD_TURN_EDIT) + { + vector mouse_pos = minigame_hud_normalize(mousepos,bd_boardpos,bd_boardsize); + bd_set_curr_pos(minigame_tile_name(mouse_pos,BD_LET_CNT,BD_NUM_CNT)); + if ( ! bd_valid_tile(bd_curr_pos) ) + bd_set_curr_pos(""); + } + return true; + } case "network_receive": { entity sent = ...(0,entity); @@ -590,6 +803,8 @@ int bd_client_event(entity minigame, string event, ...) { HUD_MinigameMenu_CustomEntry(...(0,entity),_("Next Match"),"next"); HUD_MinigameMenu_CustomEntry(...(0,entity),_("Restart"),"restart"); + HUD_MinigameMenu_CustomEntry(...(0,entity),_("Editor"),"edit"); + HUD_MinigameMenu_CustomEntry(...(0,entity),_("Save"),"save"); return false; } case "menu_click": @@ -598,6 +813,10 @@ int bd_client_event(entity minigame, string event, ...) minigame_cmd("next"); if(...(0,string) == "restart") minigame_cmd("restart"); + if(...(0,string) == "edit") + minigame_cmd("edit"); + if(...(0,string) == "save") + minigame_cmd("save"); return false; } } diff --git a/qcsrc/common/minigames/sv_minigames.qh b/qcsrc/common/minigames/sv_minigames.qh index eb6825ed60..803404a5a5 100644 --- a/qcsrc/common/minigames/sv_minigames.qh +++ b/qcsrc/common/minigames/sv_minigames.qh @@ -46,7 +46,7 @@ entity minigame_sessions; bool minigame_SendEntity(entity this, entity to, int sf); -REGISTRY(Minigames, BITS(3)) +REGISTRY(Minigames, BITS(4)) #define Minigames_from(i) _Minigames_from(i, NULL) REGISTER_REGISTRY(Minigames) REGISTRY_CHECK(Minigames) -- 2.39.2