mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 01:49:19 +00:00
164 lines
4.5 KiB
Plaintext
164 lines
4.5 KiB
Plaintext
// Picture frames
|
|
|
|
/obj/item/wallframe/picture
|
|
name = "picture frame"
|
|
desc = "The perfect showcase for your favorite deathtrap memories."
|
|
icon = 'icons/obj/decals.dmi'
|
|
materials = list()
|
|
flags_1 = 0
|
|
icon_state = "frame-empty"
|
|
result_path = /obj/structure/sign/picture_frame
|
|
var/obj/item/photo/displayed
|
|
|
|
/obj/item/wallframe/picture/attackby(obj/item/I, mob/user)
|
|
if(istype(I, /obj/item/photo))
|
|
if(!displayed)
|
|
if(!user.transferItemToLoc(I, src))
|
|
return
|
|
displayed = I
|
|
update_icon()
|
|
else
|
|
to_chat(user, "<span class=notice>\The [src] already contains a photo.</span>")
|
|
..()
|
|
|
|
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
|
/obj/item/wallframe/picture/attack_hand(mob/user)
|
|
if(user.get_inactive_held_item() != src)
|
|
..()
|
|
return
|
|
if(contents.len)
|
|
var/obj/item/I = pick(contents)
|
|
user.put_in_hands(I)
|
|
to_chat(user, "<span class='notice'>You carefully remove the photo from \the [src].</span>")
|
|
displayed = null
|
|
update_icon()
|
|
return ..()
|
|
|
|
/obj/item/wallframe/picture/attack_self(mob/user)
|
|
user.examinate(src)
|
|
|
|
/obj/item/wallframe/picture/examine(mob/user)
|
|
if(user.is_holding(src) && displayed)
|
|
displayed.show(user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/wallframe/picture/update_icon()
|
|
cut_overlays()
|
|
if(displayed)
|
|
add_overlay(image(displayed))
|
|
|
|
/obj/item/wallframe/picture/after_attach(obj/O)
|
|
..()
|
|
var/obj/structure/sign/picture_frame/PF = O
|
|
PF.copy_overlays(src)
|
|
if(displayed)
|
|
PF.framed = displayed
|
|
if(contents.len)
|
|
var/obj/item/I = pick(contents)
|
|
I.forceMove(PF)
|
|
|
|
/obj/structure/sign/picture_frame
|
|
name = "picture frame"
|
|
desc = "Every time you look it makes you laugh."
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "frame-empty"
|
|
var/obj/item/photo/framed
|
|
var/persistence_id
|
|
var/can_decon = TRUE
|
|
|
|
#define FRAME_DEFINE(id) /obj/structure/sign/picture_frame/##id/persistence_id = #id
|
|
|
|
//Put default persistent frame defines here!
|
|
|
|
#undef FRAME_DEFINE
|
|
|
|
/obj/structure/sign/picture_frame/Initialize(mapload, dir, building)
|
|
. = ..()
|
|
LAZYADD(SSpersistence.photo_frames, src)
|
|
if(dir)
|
|
setDir(dir)
|
|
if(building)
|
|
pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30)
|
|
pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0
|
|
|
|
/obj/structure/sign/picture_frame/Destroy()
|
|
LAZYREMOVE(SSpersistence.photo_frames, src)
|
|
return ..()
|
|
|
|
/obj/structure/sign/picture_frame/proc/get_photo_id()
|
|
if(istype(framed) && istype(framed.picture))
|
|
return framed.picture.id
|
|
|
|
//Manual loading, DO NOT USE FOR HARDCODED/MAPPED IN ALBUMS. This is for if an album needs to be loaded mid-round from an ID.
|
|
/obj/structure/sign/picture_frame/proc/persistence_load()
|
|
var/list/data = SSpersistence.GetPhotoFrames()
|
|
if(data[persistence_id])
|
|
load_from_id(data[persistence_id])
|
|
|
|
/obj/structure/sign/picture_frame/proc/load_from_id(id)
|
|
var/obj/item/photo/P = load_photo_from_disk(id)
|
|
if(istype(P))
|
|
if(istype(framed))
|
|
framed.forceMove(drop_location())
|
|
else
|
|
qdel(framed)
|
|
framed = P
|
|
update_icon()
|
|
|
|
/obj/structure/sign/picture_frame/examine(mob/user)
|
|
if(in_range(src, user) && framed)
|
|
framed.show(user)
|
|
else
|
|
..()
|
|
|
|
/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params)
|
|
if(can_decon && (istype(I, /obj/item/screwdriver) || istype(I, /obj/item/wrench)))
|
|
to_chat(user, "<span class='notice'>You start unsecuring [name]...</span>")
|
|
if(I.use_tool(src, user, 30, volume=50))
|
|
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
|
|
to_chat(user, "<span class='notice'>You unsecure [name].</span>")
|
|
deconstruct()
|
|
|
|
else if(istype(I, /obj/item/wirecutters) && framed)
|
|
framed.forceMove(drop_location())
|
|
framed = null
|
|
user.visible_message("<span class='warning'>[user] cuts away [framed] from [src]!</span>")
|
|
return
|
|
|
|
else if(istype(I, /obj/item/photo))
|
|
if(!framed)
|
|
var/obj/item/photo/P = I
|
|
if(!user.transferItemToLoc(P, src))
|
|
return
|
|
framed = P
|
|
update_icon()
|
|
else
|
|
to_chat(user, "<span class=notice>\The [src] already contains a photo.</span>")
|
|
|
|
..()
|
|
|
|
/obj/structure/sign/picture_frame/attack_hand(mob/user)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(framed)
|
|
framed.show(user)
|
|
|
|
/obj/structure/sign/picture_frame/update_icon()
|
|
cut_overlays()
|
|
if(framed)
|
|
add_overlay(image(framed))
|
|
|
|
/obj/structure/sign/picture_frame/deconstruct(disassembled = TRUE)
|
|
if(!(flags_1 & NODECONSTRUCT_1))
|
|
var/obj/item/wallframe/picture/F = new /obj/item/wallframe/picture(loc)
|
|
if(framed)
|
|
F.displayed = framed
|
|
framed = null
|
|
if(contents.len)
|
|
var/obj/item/I = pick(contents)
|
|
I.forceMove(F)
|
|
F.update_icon()
|
|
qdel(src)
|