diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index bcbcbac0d8a..43088af133f 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -58,20 +58,23 @@
/obj/item/deck/proc/build_deck()
return
-/obj/item/deck/attackby(obj/O as obj, mob/user as mob)
- if(istype(O,/obj/item/cardhand))
+/obj/item/deck/attackby(obj/O, mob/user)
+ if(istype(O, /obj/item/cardhand))
var/obj/item/cardhand/H = O
- 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 [src].")
- update_icon(UPDATE_ICON_STATE)
- return
- else
+ if(H.parentdeck != src)
to_chat(user,"You can't mix cards from different decks!")
return
+ if(length(H.cards) > 1)
+ var/confirm = alert("Are you sure you want to put your [length(H.cards)] cards back into the deck?", "Return Hand", "Yes", "No")
+ if(confirm == "No" || !Adjacent(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
+ return
+ for(var/datum/playingcard/P in H.cards)
+ cards += P
+ qdel(H)
+ to_chat(user, "You place your cards on the bottom of [src].")
+ update_icon(UPDATE_ICON_STATE)
+ return
..()
/obj/item/deck/examine(mob/user)
@@ -148,9 +151,6 @@
if(H && (H.parentdeck != src))
to_chat(user,"You can't mix cards from different decks!")
return
- if(H && length(H.cards) >= H.maxcardlen)
- to_chat(user,"You can't hold that many cards in one hand!")
- return
if(!H)
H = new(get_turf(src))
@@ -311,7 +311,6 @@
icon = 'icons/obj/playing_cards.dmi'
icon_state = "empty"
w_class = WEIGHT_CLASS_TINY
- var/maxcardlen = 20
actions_types = list(/datum/action/item_action/remove_card, /datum/action/item_action/discard)
var/concealed = FALSE
@@ -348,18 +347,14 @@
update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
else if(istype(O,/obj/item/cardhand))
var/obj/item/cardhand/H = O
- if((length(H.cards) + length(cards)) > maxcardlen)
- to_chat(user,"You can't hold that many cards in one hand!")
- return
if(H.parentdeck == parentdeck)
- for(var/datum/playingcard/P in cards)
- H.cards += P
H.concealed = concealed
- qdel(src)
- H.update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
+ cards.Add(H.cards)
+ qdel(H)
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
return
else
- to_chat(user,"You cannot mix cards from other deck!")
+ to_chat(user, "You cannot mix cards from other decks!")
return
..()
@@ -543,16 +538,20 @@
/obj/item/cardhand/update_name()
. = ..()
if(length(cards) > 1)
- name = "hand of cards"
+ name = "hand of [length(cards)] cards"
else
- name = "a playing card"
+ name = "playing card"
/obj/item/cardhand/update_desc()
. = ..()
if(length(cards) > 1)
desc = "Some playing cards."
else
- desc = "A playing card."
+ if(concealed)
+ desc = "A playing card. You can only see the back."
+ else
+ var/datum/playingcard/card = cards[1]
+ desc = "\A [card.name]."
/obj/item/cardhand/update_icon_state()
return
@@ -583,23 +582,30 @@
return
var/offset = FLOOR(20/length(cards) + 1, 1)
- var/i = 0
- for(var/datum/playingcard/P in cards)
- var/image/I = new(icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") )
- //I.pixel_x = origin+(offset*i)
- switch(direction)
- if(SOUTH)
- I.pixel_x = 8-(offset*i)
- if(WEST)
- I.pixel_y = -6+(offset*i)
- if(EAST)
- I.pixel_y = 8-(offset*i)
- else
- I.pixel_x = -7+(offset*i)
- I.transform = M
- . += I
+ // var/i = 0
+ for(var/i in 1 to length(cards))
+ var/datum/playingcard/P = cards[i]
+ if(i >= 20)
+ // skip the rest and just draw the last one on top
+ . += render_card(cards[length(cards)], M, i, offset)
+ break
+ . += render_card(P, M, i, offset)
i++
+/obj/item/cardhand/proc/render_card(datum/playingcard/card, matrix/mat, index, offset)
+ var/image/I = new(icon, (concealed ? "[card.back_icon]" : "[card.card_icon]") )
+ switch(direction)
+ if(SOUTH)
+ I.pixel_x = 8 - (offset * index)
+ if(WEST)
+ I.pixel_y = -6 + (offset * index)
+ if(EAST)
+ I.pixel_y = 8 - (offset * index)
+ else
+ I.pixel_x = -7 + (offset * index)
+ I.transform = mat
+ return I
+
/obj/item/cardhand/dropped(mob/user)
..()
if(user)