From 4cd7b99e4300a569fb7322a01ea6b3941723c692 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Sun, 5 Aug 2018 12:40:43 -0300 Subject: [PATCH] Board games update: chess edition (#5013) -updates the board to be a little better, porting bay updates to it -adds chess pieces as well, ported from bay too -you can now drag the board to yourself to hold it, instead of having to drag it everywhere if you want to move it -added chess and checkers kits to the loadout --- .../loadout/loadout_general.dm | 8 + code/modules/games/boardgame.dm | 201 ++++++++++++++---- html/changelogs/alberyk-agameofchess.yml | 6 + icons/obj/pieces.dmi | Bin 498 -> 1082 bytes 4 files changed, 177 insertions(+), 38 deletions(-) create mode 100644 html/changelogs/alberyk-agameofchess.yml diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index 5e72918aac6..bd1b6044a1e 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -110,3 +110,11 @@ /datum/gear/towel/New() ..() gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/checkers + display_name = "checkers game kit" + path = /obj/item/weapon/storage/box/checkers_kit + +/datum/gear/chess + display_name = "chess game kit" + path = /obj/item/weapon/storage/box/chess_kit \ No newline at end of file diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm index 3f1c7e1a4f5..60078262ebd 100644 --- a/code/modules/games/boardgame.dm +++ b/code/modules/games/boardgame.dm @@ -1,6 +1,6 @@ /obj/item/weapon/board name = "board" - desc = "A standard 12' checkerboard. Well used." + desc = "A standard 16\" checkerboard. Well used." icon = 'icons/obj/pieces.dmi' icon_state = "board" @@ -9,12 +9,11 @@ var/board = list() var/selected = -1 -/obj/item/weapon/board/New() - ..() - var i - for(i = 0; i < 12; i++) - new /obj/item/weapon/checker(src.loc) - new /obj/item/weapon/checker/red(src.loc) +/obj/item/weapon/board/MouseDrop(mob/user as mob) + if((user == usr && (!use_check(user))) && (user.contents.Find(src) || in_range(src, user))) + if(ishuman(usr)) + forceMove(get_turf(usr)) + usr.put_in_hands(src) /obj/item/weapon/board/examine(mob/user, var/distance = -1) if(in_range(user,src)) @@ -24,6 +23,8 @@ ..() /obj/item/weapon/board/attack_hand(mob/living/carbon/human/M as mob) + if(!isturf(loc)) //so if you want to play the game, you need to put it down somewhere + ..() if(M.machine == src) ..() else @@ -73,39 +74,39 @@ obj/item/weapon/board/attackby(obj/item/I as obj, mob/user as mob) user.unset_machine() return - var/dat = "" - dat += "" - var i, stagger; + var/list/dat = list({" +
+ "}) + var i, stagger stagger = 0 //so we can have the checkerboard effect - for(i=0; i<64; i++) + for(i=0, i<64, i++) if(i%8 == 0) dat += "" stagger = !stagger - dat += "
" + dat += "= 0 && !isobserver(user)) dat += "
Remove Selected Piece" - user << browse(dat,"window=boardgame;size=500x500") + user << browse(jointext(dat, null),"window=boardgame;size=430x500") // 50px * 8 squares + 30 margin onclose(usr, "boardgame") /obj/item/weapon/board/Topic(href, href_list) @@ -121,19 +122,19 @@ obj/item/weapon/board/attackby(obj/item/I as obj, mob/user as mob) if(selected >= 0) //check to see if clicked on tile is currently selected one if(text2num(s) == selected) - selected = 0 //deselect it - return + selected = -1 //deselect it + else - if(I) //cant put items on other items. - return + if(I) //cant put items on other items. + return - //put item in new spot. - I = board["[selected]"] - board["[selected]"] = null - board -= "[selected]" - board -= null - board["[s]"] = I - selected = -1 + //put item in new spot. + I = board["[selected]"] + board["[selected]"] = null + board -= "[selected]" + board -= null + board["[s]"] = I + selected = -1 else if(I) selected = text2num(s) @@ -147,6 +148,8 @@ obj/item/weapon/board/attackby(obj/item/I as obj, mob/user as mob) addPiece(O,H,text2num(s)) if(href_list["remove"]) var/obj/item/I = board["[selected]"] + if(!I) + return board["[selected]"] = null board -= "[selected]" board -= null @@ -166,13 +169,135 @@ obj/item/weapon/board/attackby(obj/item/I as obj, mob/user as mob) board_icons -= null src.updateDialog() -/obj/item/weapon/checker/ - name = "black checker" +//checkes +/obj/item/weapon/checker + name = "checker" desc = "It is plastic and shiny." icon = 'icons/obj/pieces.dmi' icon_state = "checker_black" w_class = 1 + var/piece_color ="black" + +/obj/item/weapon/checker/Initialize() + . = ..() + icon_state = "[name]_[piece_color]" + name = "[piece_color] [name]" /obj/item/weapon/checker/red - name = "red checker" - icon_state = "checker_red" + piece_color ="red" + +/obj/item/weapon/storage/box/checkers + name = "checkers box" + desc = "This box holds a nifty portion of checkers." + icon_state = "checkers" + max_storage_space = 24 + w_class = 1 + can_hold = list(/obj/item/weapon/checker) + +/obj/item/weapon/storage/box/checkers/fill() + for(var/i = 0; i < 12; i++) + new /obj/item/weapon/checker(src) + new /obj/item/weapon/checker/red(src) + +//chess + +//Chess + +/obj/item/weapon/checker/pawn + name = "pawn" + +/obj/item/weapon/checker/pawn/red + piece_color ="red" + +/obj/item/weapon/checker/knight + name = "knight" + +/obj/item/weapon/checker/knight/red + piece_color ="red" + +/obj/item/weapon/checker/bishop + name = "bishop" + +/obj/item/weapon/checker/bishop/red + piece_color ="red" + +/obj/item/weapon/checker/rook + name = "rook" + +/obj/item/weapon/checker/rook/red + piece_color ="red" + +/obj/item/weapon/checker/queen + name = "queen" + +/obj/item/weapon/checker/queen/red + piece_color ="red" + +/obj/item/weapon/checker/king + name = "king" + +/obj/item/weapon/checker/king/red + piece_color ="red" + +/obj/item/weapon/storage/box/chess + name = "black chess box" + desc = "This box holds all the pieces needed for the black side of the chess board." + icon_state = "chess_b" + max_storage_space = 24 + w_class = 2 + can_hold = list(/obj/item/weapon/checker) + +/obj/item/weapon/storage/box/chess/fill() + for(var/i = 0; i < 8; i++) + new /obj/item/weapon/checker/pawn(src) + new /obj/item/weapon/checker/knight (src) + new /obj/item/weapon/checker/knight (src) + new /obj/item/weapon/checker/bishop (src) + new /obj/item/weapon/checker/bishop (src) + new /obj/item/weapon/checker/rook (src) + new /obj/item/weapon/checker/rook (src) + new /obj/item/weapon/checker/queen (src) + new /obj/item/weapon/checker/king (src) + +/obj/item/weapon/storage/box/chess/red + name = "red chess box" + desc = "This box holds all the pieces needed for the red side of the chess board." + icon_state = "chess_r" + +/obj/item/weapon/storage/box/chess/red/fill() + for(var/i = 0; i < 8; i++) + new /obj/item/weapon/checker/pawn/red(src) + new /obj/item/weapon/checker/knight/red (src) + new /obj/item/weapon/checker/knight/red (src) + new /obj/item/weapon/checker/bishop/red (src) + new /obj/item/weapon/checker/bishop/red (src) + new /obj/item/weapon/checker/rook/red (src) + new /obj/item/weapon/checker/rook/red (src) + new /obj/item/weapon/checker/queen/red (src) + new /obj/item/weapon/checker/king/red (src) + +//game kits +/obj/item/weapon/storage/box/checkers_kit + name = "checkers game kit" + desc = "This box holds all the parts needed for a game of checkers." + icon_state = "largebox" + max_storage_space = 8 + can_hold = list(/obj/item/weapon/board, + /obj/item/weapon/storage/box/checkers) + +/obj/item/weapon/storage/box/checkers_kit/fill() + new /obj/item/weapon/board (src) + new /obj/item/weapon/storage/box/checkers (src) + +/obj/item/weapon/storage/box/chess_kit + name = "chess game kit" + desc = "This box holds all the parts needed for a game of chess." + icon_state = "largebox" + max_storage_space = 8 + can_hold = list(/obj/item/weapon/board, + /obj/item/weapon/storage/box/chess) + +/obj/item/weapon/storage/box/chess_kit/fill() + new /obj/item/weapon/board (src) + new /obj/item/weapon/storage/box/chess (src) + new /obj/item/weapon/storage/box/chess/red (src) diff --git a/html/changelogs/alberyk-agameofchess.yml b/html/changelogs/alberyk-agameofchess.yml new file mode 100644 index 00000000000..57ed8134b97 --- /dev/null +++ b/html/changelogs/alberyk-agameofchess.yml @@ -0,0 +1,6 @@ +author: Alberyk + +delete-after: True + +changes: + - rscadd: "Added checkers and chess game kits to the custom loadout." diff --git a/icons/obj/pieces.dmi b/icons/obj/pieces.dmi index de3a197b8ca2949ea5430a27c4959491ab151532..7b55092d2b01d9e5857a538b61507ba81cc7e27d 100644 GIT binary patch literal 1082 zcmV-A1jYM_P)C0000mP)t-sz`($D zb#(v$0F4+JGcz-68X6=H4j>>PLKYTg%>N}NHuDe=&=(h$9UZ{Hz>+8>v}}E;00001 zbW%=J06^y0W&i*HyLwbubVOxyV{&P5bZKvH004NLjncgi!XOX_@EM+hw7cbk%A*k3K_M9ou zqYAn4K?aCr(JSZ;;H`Ve-V~e-8ht$9adt;JL9Tx^!mw&PCvjcPadTU-wcTuoijw5Vj!iOL!i(U0R`p&NLS|ZDKriL2bQ94tF*Eo7}?C9BUC@Y z0008FCK?^^29mz_uHYc)uj|t802;8) z2Uu4!FfD7qv^0kR1;8K3g&+oCJ&+5*?RLL^f3g~Jf+Ytr06xAEo?HlG0M;0S@LWUS zUgX1*)8S5mjq88H!-!um|*E;C>~tOhLUx34kF z+p{KQ4ahbbGJp#rxQW~OX8`zZ&h+n6p33p6H2`$;62;$Z)_|jdLCA{@NcpN=_y-K2 zUB>)@khjP{*F;p4iUu1%{kxbyGhyLMB#P$pDWg(A@y!)c`Ue+=P(F z$FOfA8f^ge_u;0Y@ugHE!WI$Z>*66DN)Okqs>pn8|GXRbeJm;N{VRr+tzdti! z;i#kWSReNH`+mOAFuu+K7h@@3Z=oBnP$+Wv2bEYlPZJ_}l>h($07*qoM6N<$g53%6 At^fc4 literal 498 zcmV>PLKYUlz`$nA|0N|hj=kLd00001bW%=J06^y0W&i*H zetJ|`bVOxyV{&P5bZKvH004NLQ&wnH! zk5vQd;JZ_J3Z)jJOMb~yBDihBSqqysq5MV=ql$Q3@$M&W2%83dO$YO)fn3uD2J;OYuA13$_*hOldMsuuwWnt%%Lem_iGQQMKR?s_(9P?cK{)ma*B?$$ oeS$IwLUl-kFo%w