From 102174a40a398c87e67fcbad74e278ef04271b83 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 7 Jun 2014 22:55:09 +0930 Subject: [PATCH 1/3] Added playing cards. --- code/modules/games/cards.dm | 221 ++++++++++++++++++++++++++++++++++++ icons/obj/playing_cards.dmi | Bin 0 -> 561 bytes 2 files changed, 221 insertions(+) create mode 100644 code/modules/games/cards.dm create mode 100644 icons/obj/playing_cards.dmi diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm new file mode 100644 index 0000000000..4b352a4a1a --- /dev/null +++ b/code/modules/games/cards.dm @@ -0,0 +1,221 @@ +/datum/playingcard + var/name = "playing card" + var/card_icon = "card_back" + +/obj/item/weapon/deck + name = "deck of cards" + desc = "A simple deck of playing cards." + icon = 'icons/obj/playing_cards.dmi' + icon_state = "deck" + w_class = 2 + + var/list/cards = list() + +/obj/item/weapon/deck/New() + ..() + + var/datum/playingcard/P + for(var/suit in list("spades","clubs","diamonds","hearts")) + + var/colour + if(suit == "spades" || suit == "clubs") + colour = "black_" + else + colour = "red_" + + for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten")) + P = new() + P.name = "[number] of [suit]" + P.card_icon = "[colour]num" + cards += P + + for(var/number in list("jack","queen","king")) + P = new() + P.name = "[number] of [suit]" + P.card_icon = "[colour]col" + cards += P + + + for(var/i = 0,i<2,i++) + P = new() + P.name = "joker" + P.card_icon = "joker" + cards += P + +/obj/item/weapon/deck/attackby(obj/O as obj, mob/user as mob) + if(istype(O,/obj/item/weapon/hand)) + var/obj/item/weapon/hand/H = O + for(var/datum/playingcard/P in H.cards) + cards += P + del(O) + user << "You place your cards on top of the deck." + return + ..() + +/obj/item/weapon/deck/verb/draw_card() + + set category = "Object" + set name = "Draw" + set desc = "Draw a card from a deck." + + if(usr.stat || !Adjacent(usr)) return + + if(!istype(usr,/mob/living/carbon)) + return + + var/mob/living/carbon/user = usr + + if(!cards.len) + usr << "There are no cards in the deck." + return + + var/obj/item/weapon/hand/H + if(user.l_hand && istype(user.l_hand,/obj/item/weapon/hand)) + H = user.l_hand + else if(user.r_hand && istype(user.r_hand,/obj/item/weapon/hand)) + H = user.r_hand + else + H = new(get_turf(src)) + user.put_in_hands(H) + + if(!H || !user) return + + var/datum/playingcard/P = cards[1] + H.cards += P + cards -= P + H.update_icon() + user.visible_message("\The [user] draws a card.") + user << "It's the [P]." + +/obj/item/weapon/deck/verb/deal_card() + + set category = "Object" + set name = "Deal" + set desc = "Deal a card from a deck." + + if(usr.stat || !Adjacent(usr)) return + + if(!cards.len) + usr << "There are no cards in the deck." + return + + var/list/players = list() + for(var/mob/living/player in orange(3)) + if(!player.stat) + players += player + players -= usr + + var/mob/living/M = input("Who do you wish to deal a card?") as null|anything in players + if(!usr || !src || !M) return + + var/obj/item/weapon/hand/H = new(get_turf(src)) + + H.cards += cards[1] + cards -= cards[1] + H.concealed = 1 + H.update_icon() + usr.visible_message("\The [usr] deals a card to \the [M].") + H.throw_at(get_step(M,M.dir),10,1) + +/obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) + if(istype(O,/obj/item/weapon/hand)) + var/obj/item/weapon/hand/H = O + for(var/datum/playingcard/P in H.cards) + cards += P + del(O) + user.put_in_hands(src) + update_icon() + return + ..() + +/obj/item/weapon/deck/attack_self(var/mob/user as mob) + + var/list/newcards = list() + while(cards.len) + var/datum/playingcard/P = pick(cards) + newcards += P + cards -= P + cards = newcards + user.visible_message("\The [user] shuffles [src].") + +/obj/item/weapon/hand + name = "hand of cards" + desc = "Some playing cards." + icon = 'icons/obj/playing_cards.dmi' + icon_state = "empty" + w_class = 1 + + var/concealed = 0 + var/list/cards = list() + +/obj/item/weapon/hand/verb/discard() + + set category = "Object" + set name = "Discard" + set desc = "Place a card from your hand in front of you." + + var/list/to_discard = list() + for(var/datum/playingcard/P in cards) + to_discard[P.name] = P + var/discarding = input("Which card do you wish to put down?") as null|anything in to_discard + + if(!discarding || !to_discard[discarding] || !usr || !src) return + + var/datum/playingcard/card = to_discard[discarding] + del(to_discard) + + var/obj/item/weapon/hand/H = new(src.loc) + H.cards += card + cards -= card + H.concealed = 0 + H.update_icon() + usr.visible_message("\The [usr] plays \the [discarding].") + H.loc = get_step(usr,usr.dir) + + if(!cards.len) + del(src) + +/obj/item/weapon/hand/attack_self(var/mob/user as mob) + concealed = !concealed + update_icon() + user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.") + +/obj/item/weapon/hand/examine() + ..() + if((!concealed || src.loc == usr) && cards.len) + usr << "It contains: " + for(var/datum/playingcard/P in cards) + usr << "The [P.name]." + +/obj/item/weapon/hand/update_icon() + + if(!cards.len) + del(src) + return + else if(cards.len > 1) + name = "hand of cards" + desc = "Some playing cards." + else + name = "a playing card" + desc = "A playing card." + + overlays.Cut() + + + if(cards.len == 1) + var/datum/playingcard/P = cards[1] + var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + I.pixel_x += (-5+rand(10)) + I.pixel_y += (-5+rand(10)) + overlays += I + return + + var/origin = -12 + var/offset = Floor(32/cards.len) + + var/i = 0 + for(var/datum/playingcard/P in cards) + var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + I.pixel_x = origin+(offset*i) + overlays += I + i++ \ No newline at end of file diff --git a/icons/obj/playing_cards.dmi b/icons/obj/playing_cards.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ab07fb0fce567d62b82e1eb9b186c414265a27e7 GIT binary patch literal 561 zcmV-10?z%3P)Mv0w4aufb!hJH?m}i!&v& zs2IpKL_t(&f$f*e4ul{KMaRlRKu7ui zpPjOprMDB2Oib?C-r5rclJa^HLde6Iq%mF2za^&?GB@P(YjNHOcb;oSROGZm=0yR5 zkW%tkkaGcobzRmC2z&}qVDwkPvMnnVsA8lbB!>i6|L#4ISW2J3`G8JQJEIdi1HJb^ za?WT0-AvXsB!mz`2>FfPxyO7T$XnUL Date: Sat, 7 Jun 2014 23:03:31 +0930 Subject: [PATCH 2/3] DME for previous commit. --- baystation12.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/baystation12.dme b/baystation12.dme index 31e245b184..780aa2869b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -841,6 +841,7 @@ #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm" #include "code\modules\food\recipes_microwave.dm" +#include "code\modules\games\cards.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" From bfae4e97f79922acc8b28a81888f1c89bb9694c5 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 8 Jun 2014 02:25:58 +0930 Subject: [PATCH 3/3] Added decks to map, tried to make their deck sprite prettier. --- icons/obj/playing_cards.dmi | Bin 561 -> 611 bytes maps/tgstation2.dmm | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/icons/obj/playing_cards.dmi b/icons/obj/playing_cards.dmi index ab07fb0fce567d62b82e1eb9b186c414265a27e7..47b5b3e745ad0c9f3c572e97fb7fc53888af19dd 100644 GIT binary patch delta 407 zcmV;I0cifQ1mgsdBveaKOjJd{z`$HwTsk^BrlzKrmX=IROvc8>Mn*NfM$_qwSOT= zL_t(&f$f*uu7e;DMN37gP!Z~d|NqktZPK@yNs8w5BzwJX-7A15!{q`10KbU2vQcL% z-Pif6z8?n1h4xml?8|oaK8$?+uD?%_GuYcq2!fDO@_hcTpJFtO!R9>Yham7N2!c<& z;g(?Y{Ft*SAO)LWU3}HwC+-wfL4Qc2AaI?FuGSB|VG0`0fDESA_iTYC7<~}GBG*av zNBjqd+Z+G@004lWqIK?3=OP=4MVQ=bzJ8z612kK1QUT?=l$TP3ycUF1M1hi*wFr4F z@QOgm%dQDVMWE!`3KrU9sbJS~Is;L#$q(4IEkFN1000000Qe`IKG$gXgE#{OH2Del zgChi+I9nbdSk4xlyn;m;zncZh{h%4l_W*!D;t33;5}y1$FcSa(002ovPDHLkV1kr= By2k(j delta 357 zcmV-r0h<2f1hE8=Btkh*OjJd{z`&-ark0kLSWrEKVb&+?8n_k$AO#0ZBwbRA_APhyv%0oa$ z`Tw7tvY4f}6Ol|z?%Cej69kg-dJ#g%!q~_0fKd1)(r@J3Q%D5SHZF^D-@_=q#z`R1XlmOg7R7`$XkPuDij!b zjTPjrfj0z3UW+AghQP?J73}(tQG;UTx(85j-~x$#`S^Q42qA