Files
Aurora.3/code/game/objects/structures/coatrack.dm

139 lines
5.4 KiB
Plaintext

/obj/structure/coatrack
name = "coat rack"
desc = "Rack that holds coats, or hats, if you're so inclined."
icon = 'icons/obj/coatrack.dmi'
icon_state = "coatrack"
layer = ABOVE_MOB_LAYER //Hide behind coat racks. Because funny.
var/obj/item/clothing/coat
var/obj/item/clothing/head/hat
var/list/custom_sprites = list(/obj/item/clothing/head/beret/security, /obj/item/clothing/accessory/poncho/tajarancloak) // Custom manual sprite override.
/obj/structure/coatrack/attack_hand(mob/user as mob)
if(use_check_and_message(user))
return
if(coat && hat)
var/response = ""
response = alert(user, "Do you remove the coat, or the hat?", "Coat Rack Selection", "Coat", "Hat", "Cancel")
if(response == "Coat")
remove_coat(user)
if(response == "Hat")
remove_hat(user)
if(coat)
remove_coat(user)
if(hat)
remove_hat(user)
add_fingerprint(user)
return
/obj/structure/coatrack/proc/remove_coat(mob/user as mob)
user.visible_message("[user] takes [coat] off \the [src].", SPAN_NOTICE("You take [coat] off the \the [src]."))
user.put_in_hands(coat)
coat = null
update_icon()
/obj/structure/coatrack/proc/remove_hat(mob/user as mob)
user.visible_message("[user] takes [hat] off \the [src].", SPAN_NOTICE("You take [hat] off the \the [src]."))
user.put_in_hands(hat)
hat = null
update_icon()
/obj/structure/coatrack/attackby(obj/item/W as obj, mob/user as mob)
if(use_check_and_message(user))
return
if(!coat && (istype(W, /obj/item/clothing/suit/storage/toggle) || istype(W, /obj/item/clothing/accessory/poncho)))
user.visible_message("[user] hangs [W] on \the [src].", SPAN_NOTICE("You hang [W] on the \the [src]."))
coat = W
user.drop_from_inventory(coat, src)
playsound(src, W.drop_sound, DROP_SOUND_VOLUME)
update_icon()
else if(!hat && istype(W, /obj/item/clothing/head) && !istype(W, /obj/item/clothing/head/helmet))
user.visible_message("[user] hangs [W] on \the [src].", SPAN_NOTICE("You hang [W] on the \the [src]."))
hat = W
user.drop_from_inventory(hat, src)
playsound(src, W.drop_sound, DROP_SOUND_VOLUME)
update_icon()
else if(istype(W, /obj/item/clothing))
to_chat(user, SPAN_WARNING("You can't hang that up."))
else
return ..()
/obj/structure/coatrack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!coat && (istype(mover, /obj/item/clothing/suit/storage/toggle) || istype(mover, /obj/item/clothing/accessory/poncho)))
src.visible_message("[mover] lands on \the [src].")
coat = mover
coat.forceMove(src)
update_icon()
return 0
else if(!hat && istype(mover, /obj/item/clothing/head))
src.visible_message("[mover] lands on \the [src].")
hat = mover
hat.forceMove(src)
update_icon()
return 0
else
return 1
/obj/structure/coatrack/update_icon()
cut_overlays()
if(coat)
if(is_type_in_list(coat, custom_sprites))
add_overlay(coat.icon_state)
else if(istype(coat, /obj/item/clothing/suit/storage/toggle)) // Using onmob sprites, because they're more consistent than object sprites.
var/obj/item/clothing/suit/storage/toggle/T = coat
if(!T.opened)
T.opened = TRUE // Makes coats open when hung up. Cause you know, you can't really hang up a closed coat. Well you can, but...code reasons.
T.icon_state = "[T.icon_state]_open"
handle_coat_image(T)
else if(istype(coat, /obj/item/clothing/accessory/poncho)) // Pain.
var/obj/item/clothing/accessory/poncho/T = coat
handle_coat_image(T)
if(hat)
if(is_type_in_list(hat, custom_sprites))
add_overlay(hat.icon_state)
else if(istype(hat, /obj/item/clothing/head))
var/obj/item/clothing/head/H = hat
var/matrix/M = matrix()
var/image/hat_image
if(H.contained_sprite)
var/hat_icon_state = "[H.icon_state][WORN_HEAD]" // Needed to bypass contained sprite phoney baloney.
hat_image = image(H.icon, hat_icon_state, src.layer, EAST)
if(H.build_from_parts)
hat_image.add_overlay(overlay_image(H.icon, "[H.icon_state]_[H.worn_overlay]", flags=RESET_COLOR))
else
hat_image = image(INV_HEAD_DEF_ICON, H.icon_state, src.layer, EAST)
if(H.build_from_parts)
hat_image.add_overlay(overlay_image(icon, "[INV_HEAD_DEF_ICON]_[H.worn_overlay]", flags=RESET_COLOR))
M.Turn(90) // Flip the hat over and stick it on the coatrack.
M.Translate(-6, 6)
hat_image.transform = M
add_overlay(hat_image)
/obj/structure/coatrack/proc/handle_coat_image(var/obj/item/clothing/T)
var/icon/coat_outline = icon('icons/obj/coatrack.dmi', "outline")
var/matrix/M = matrix()
var/coat_icon_state = T.icon_state
var/coat_icon_file = INV_SUIT_DEF_ICON
if(T.contained_sprite)
coat_icon_state = "[T.icon_state][WORN_SUIT]" // Needed to bypass contained sprite phoney baloney.
coat_icon_file = T.icon
var/icon/coat_icon = new(coat_icon_file, coat_icon_state)
coat_icon.Blend(coat_outline, ICON_OVERLAY)
coat_icon.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) //Slice the coat in half.
var/image/coat_image = image(coat_icon)
if(T.color)
coat_image.color = T.color
if(T.build_from_parts)
var/icon/overlay_icon = new(coat_icon_file, "[coat_icon_state]_[T.worn_overlay]")
overlay_icon.Blend(coat_outline, ICON_OVERLAY)
overlay_icon.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) // Slice the overlay in half and slap it on the coat.
var/image/overlay_image = image(overlay_icon)
overlay_image.appearance_flags = RESET_COLOR
coat_image.add_overlay(overlay_image)
M.Translate(-1, 5) // Stick it on the coat rack.
coat_image.transform = M
add_overlay(coat_image)