From 952d4871d2924746db5d4b2a753d953ec063819d Mon Sep 17 00:00:00 2001 From: Ansari Date: Thu, 26 Oct 2017 01:20:20 +0800 Subject: [PATCH] Playing card improvement - Take two (#4140) * Card rework. For some reason won't run. * Local man miss quotation mark. More at 12. * Fix .dme. --- code/modules/games/cardemon.dm | 3 +- code/modules/games/cards.dm | 273 +++++++++++++++++++------- code/modules/games/spaceball_cards.dm | 1 + code/modules/games/tarot.dm | 28 +-- sound/items/cardshuffle.ogg | Bin 0 -> 22053 bytes 5 files changed, 226 insertions(+), 79 deletions(-) create mode 100644 sound/items/cardshuffle.ogg diff --git a/code/modules/games/cardemon.dm b/code/modules/games/cardemon.dm index 23e8d6e251..a99e656add 100644 --- a/code/modules/games/cardemon.dm +++ b/code/modules/games/cardemon.dm @@ -2,6 +2,7 @@ name = "cardemon booster pack" desc = "Finally! A children's card game in space!" icon_state = "card_pack_cardemon" + parentdeck = "cardemon" /obj/item/weapon/pack/cardemon/New() ..() @@ -28,4 +29,4 @@ P.name = "[rarity] [P.name]" P.card_icon += "_[rarity]" P.back_icon = "card_back_cardemon" - cards += P \ No newline at end of file + cards += P diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 0eba340761..68aef108ec 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -7,6 +7,7 @@ w_class = ITEMSIZE_SMALL icon = 'icons/obj/playing_cards.dmi' var/list/cards = list() + var/cooldown = 0 // to prevent spam shuffle /obj/item/weapon/deck/holder name = "card box" @@ -43,7 +44,7 @@ P.back_icon = "card_back" cards += P - for(var/i = 0,i<2,i++) + for(var/i = 0, i<2, i++) P = new() P.name = "joker" P.card_icon = "joker" @@ -52,13 +53,20 @@ /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 - qdel(O) - user << "You place your cards on the bottom of \the [src]." - return + if(H.parentdeck == src) + for(var/datum/playingcard/P in H.cards) + cards += P + qdel(H) + to_chat(user,"You place your cards on the bottom of \the [src].") + return + else + to_chat(user,"You can't mix cards from other decks!") + return ..() +/obj/item/weapon/deck/attack_hand(mob/user as mob) + draw_card() + /obj/item/weapon/deck/verb/draw_card() set category = "Object" @@ -66,18 +74,26 @@ set desc = "Draw a card from a deck." set src in view(1) + var/mob/living/carbon/user = usr + if(usr.stat || !Adjacent(usr)) return + if(user.hands_are_full()) // Safety check lest the card disappear into oblivion + to_chat(user,"Your hands are full!") + 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." + to_chat(user,"There are no cards in the deck.") return var/obj/item/weapon/hand/H = user.get_type_in_hands(/obj/item/weapon/hand) + if(H && !(H.parentdeck == src)) + to_chat(user,"You can't mix cards from different decks!") + return + if(!H) H = new(get_turf(src)) user.put_in_hands(H) @@ -87,9 +103,10 @@ var/datum/playingcard/P = cards[1] H.cards += P cards -= P + H.parentdeck = src H.update_icon() - user.visible_message("\The [user] draws a card.") - user << "It's the [P]." + user.visible_message("\The [user] draws a card.") + to_chat(user,"It's the [P].") /obj/item/weapon/deck/verb/deal_card() @@ -101,7 +118,7 @@ if(usr.stat || !Adjacent(usr)) return if(!cards.len) - usr << "There are no cards in the deck." + to_chat(usr,"There are no cards in the deck.") return var/list/players = list() @@ -113,26 +130,56 @@ var/mob/living/M = input("Who do you wish to deal a card?") as null|anything in players if(!usr || !src || !M) return - deal_at(usr, M) + deal_at(usr, M, 1) -/obj/item/weapon/deck/proc/deal_at(mob/user, mob/target) +/obj/item/weapon/deck/verb/deal_card_multi() + + set category = "Object" + set name = "Deal Multiple Cards" + set desc = "Deal multiple cards from a deck." + set src in view(1) + + if(usr.stat || !Adjacent(usr)) return + + if(!cards.len) + to_chat(usr,"There are no cards in the deck.") + return + + var/list/players = list() + for(var/mob/living/player in viewers(3)) + if(!player.stat) + players += player + //players -= usr + var/maxcards = max(min(cards.len,10),1) + var/dcard = input("How many card(s) do you wish to deal? You may deal up to [maxcards] cards.") as num + if(dcard > maxcards) + return + var/mob/living/M = input("Who do you wish to deal [dcard] card(s)?") as null|anything in players + if(!usr || !src || !M) return + + deal_at(usr, M, dcard) + +/obj/item/weapon/deck/proc/deal_at(mob/user, mob/target, dcard) // Take in the no. of card to be dealt var/obj/item/weapon/hand/H = new(get_step(user, user.dir)) - - H.cards += cards[1] - cards -= cards[1] - H.concealed = 1 - H.update_icon() + var/i + for(i = 0, i < dcard, i++) + H.cards += cards[1] + cards -= cards[1] + H.parentdeck = src + H.concealed = 1 + H.update_icon() if(user==target) - user.visible_message("\The [user] deals a card to \himself.") + user.visible_message("\The [user] deals [dcard] card(s) to \himself.") else - user.visible_message("\The [user] deals a card to \the [target].") + user.visible_message("\The [user] deals [dcard] card(s) to \the [target].") H.throw_at(get_step(target,target.dir),10,1,H) + /obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) if(cards.len == 1 && istype(O, /obj/item/weapon/pen)) var/datum/playingcard/P = cards[1] if(P.name != "Blank Card") - user << "You cannot write on that card." + to_chat(user,"You cannot write on that card.") return var/cardtext = sanitize(input(user, "What do you wish to write on the card?", "Card Editing") as text|null, MAX_PAPER_MESSAGE_LEN) if(!cardtext) @@ -143,36 +190,81 @@ update_icon() else if(istype(O,/obj/item/weapon/hand)) var/obj/item/weapon/hand/H = O - for(var/datum/playingcard/P in cards) - H.cards += P - H.concealed = src.concealed - user.drop_from_inventory(src) - qdel(src) - H.update_icon() - return + if(H.parentdeck == src.parentdeck) // Prevent cardmixing + for(var/datum/playingcard/P in cards) + H.cards += P + H.concealed = src.concealed + user.drop_from_inventory(src) + qdel(src) + H.update_icon() + return + else + to_chat(user,"You cannot mix cards from other decks!") + return + ..() -/obj/item/weapon/deck/attack_self(var/mob/user as mob) +/obj/item/weapon/deck/attack_self() + shuffle() - 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/deck/MouseDrop(atom/over) - if(!usr || !over) return - if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows +/obj/item/weapon/deck/verb/verb_shuffle() + set category = "Object" + set name = "Shuffle" + set desc = "Shuffle the cards in the deck." + set src in view(1) + shuffle() - if(!ishuman(over) || !(over in viewers(3))) return - - if(!cards.len) - usr << "There are no cards in the deck." +/obj/item/weapon/deck/proc/shuffle() + var/mob/living/user = usr + if (cooldown < world.time - 10) // 15 ticks cooldown + 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].") + playsound(user, 'sound/items/cardshuffle.ogg', 50, 1) + cooldown = world.time + else return - deal_at(usr, over) + +/obj/item/weapon/deck/MouseDrop(mob/user as mob) // Code from Paper bin, so you can still pick up the deck + if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) + if(!istype(usr, /mob/living/simple_animal)) + if( !usr.get_active_hand() ) //if active hand is empty + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] + + if (H.hand) + temp = H.organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + to_chat(user,"You try to move your [temp.name], but cannot!") + return + + to_chat(user,"You pick up [src].") + user.put_in_hands(src) + + return + +/obj/item/weapon/deck/verb_pickup(mob/user as mob) // Snowflaked so pick up verb work as intended + if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) + if(!istype(usr, /mob/living/simple_animal)) + if( !usr.get_active_hand() ) //if active hand is empty + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] + + if (H.hand) + temp = H.organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + to_chat(user,"You try to move your [temp.name], but cannot!") + return + + to_chat(user,"You pick up [src].") + user.put_in_hands(src) + return /obj/item/weapon/pack/ name = "Card Pack" @@ -182,13 +274,15 @@ icon = 'icons/obj/playing_cards.dmi' w_class = ITEMSIZE_TINY var/list/cards = list() + var/parentdeck = null // This variable is added here so that card pack dependent card can be mixed together by defining a "parentdeck" for them /obj/item/weapon/pack/attack_self(var/mob/user as mob) - user.visible_message("[user] rips open \the [src]!") + user.visible_message("[user] rips open \the [src]!") var/obj/item/weapon/hand/H = new() H.cards += cards + H.parentdeck = src.parentdeck cards.Cut(); user.drop_item() qdel(src) @@ -205,31 +299,39 @@ var/concealed = 0 var/list/cards = list() + var/parentdeck = null /obj/item/weapon/hand/verb/discard() set category = "Object" set name = "Discard" - set desc = "Place a card from your hand in front of you." + set desc = "Place (a) card(s) 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 + var/i + var/maxcards = min(cards.len,5) // Maximum of 5 cards at once + var/discards = input("How many cards do you want to discard? You may discard up to [maxcards] card(s)") as num + if(discards > maxcards) + return + for (i = 0;i < discards;i++) + 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 + if(!discarding || !to_discard[discarding] || !usr || !src) return - var/datum/playingcard/card = to_discard[discarding] - to_discard.Cut() + var/datum/playingcard/card = to_discard[discarding] + to_discard.Cut() - var/obj/item/weapon/hand/H = new(src.loc) - H.cards += card - cards -= card - H.concealed = 0 - H.update_icon() - src.update_icon() - usr.visible_message("\The [usr] plays \the [discarding].") - H.loc = get_step(usr,usr.dir) + var/obj/item/weapon/hand/H = new(src.loc) + H.cards += card + cards -= card + H.concealed = 0 + H.parentdeck = src.parentdeck + H.update_icon() + src.update_icon() + usr.visible_message("\The [usr] plays \the [discarding].") + H.loc = get_step(usr,usr.dir) if(!cards.len) qdel(src) @@ -237,14 +339,51 @@ /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.") + user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.") /obj/item/weapon/hand/examine(mob/user) ..(user) - if((!concealed || src.loc == user) && cards.len) - user << "It contains: " + if((!concealed) && cards.len) + to_chat(user,"It contains: ") for(var/datum/playingcard/P in cards) - user << "\The [P.name]." + to_chat(user,"\The [P.name].") + +/obj/item/weapon/hand/verb/Removecard() + + set category = "Object" + set name = "Remove card" + set desc = "Remove a card from the hand." + set src in view(1) + + var/mob/living/carbon/user = usr + + if(user.stat || !Adjacent(user)) return + + if(user.hands_are_full()) // Safety check lest the card disappear into oblivion + to_chat(usr,"Your hands are full!") + return + + var/pickablecards = list() + for(var/datum/playingcard/P in cards) + pickablecards[P.name] += P + var/pickedcard = input("Which card do you want to remove from the hand?") as null|anything in pickablecards + + if(!pickedcard || !pickablecards[pickedcard] || !usr || !src) return + + var/datum/playingcard/card = pickablecards[pickedcard] + + var/obj/item/weapon/hand/H = new(get_turf(src)) + user.put_in_hands(H) + H.cards += card + cards -= card + H.parentdeck = src.parentdeck + H.concealed = src.concealed + H.update_icon() + src.update_icon() + + if(!cards.len) + qdel(src) + return /obj/item/weapon/hand/update_icon(var/direction = 0) @@ -308,4 +447,4 @@ update_icon() /obj/item/weapon/hand/pickup(mob/user as mob) - src.update_icon() \ No newline at end of file + src.update_icon() diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm index 57a28fa1a2..146317a720 100644 --- a/code/modules/games/spaceball_cards.dm +++ b/code/modules/games/spaceball_cards.dm @@ -2,6 +2,7 @@ name = "spaceball booster pack" desc = "Officially licensed to take your money." icon_state = "card_pack_spaceball" + parentdeck = "spaceball" /obj/item/weapon/pack/spaceball/New() ..() diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm index f5727a0c43..cae71540cb 100644 --- a/code/modules/games/tarot.dm +++ b/code/modules/games/tarot.dm @@ -24,14 +24,20 @@ P.back_icon = "card_back_tarot" cards += P -/obj/item/weapon/deck/tarot/attack_self(var/mob/user as mob) - var/list/newcards = list() - while(cards.len) - var/datum/playingcard/P = pick(cards) - P.name = replacetext(P.name," reversed","") - if(prob(50)) - P.name += " reversed" - newcards += P - cards -= P - cards = newcards - user.visible_message("\The [user] shuffles [src].") \ No newline at end of file +/obj/item/weapon/deck/tarot/shuffle() + var/mob/living/user = usr + if (cooldown < world.time - 10) + var/list/newcards = list() + while(cards.len) + var/datum/playingcard/P = pick(cards) + P.name = replacetext(P.name," reversed","") + if(prob(50)) + P.name += " reversed" + newcards += P + cards -= P + cards = newcards + playsound(user, 'sound/items/cardshuffle.ogg', 50, 1) + user.visible_message("\The [user] shuffles [src].") + cooldown = world.time + else + return diff --git a/sound/items/cardshuffle.ogg b/sound/items/cardshuffle.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1fe763af5bc4d60a2da3a89ce96150b4ced9d281 GIT binary patch literal 22053 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 literal 0 HcmV?d00001