From 8ffdf1aa81d2c14e4a22f16b5af2838f5996bea6 Mon Sep 17 00:00:00 2001 From: 1080pCat <96908085+1080pCat@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:19:32 +1000 Subject: [PATCH] Curtains fixes and tweaks and refactors (#28594) * Update curtains.dm * Update curtains.dm * extra shit * more\ --------- Co-authored-by: warriorstar-orion --- code/game/objects/structures/curtains.dm | 165 +++++++++++------------ icons/obj/curtain.dmi | Bin 928 -> 942 bytes 2 files changed, 77 insertions(+), 88 deletions(-) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 72c459881aa..5d060289b60 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -4,59 +4,42 @@ /obj/structure/curtain icon = 'icons/obj/curtain.dmi' name = "curtain" - icon_state = "closed" + icon_state = "curtain_rod" face_while_pulling = FALSE layer = SHOWER_CLOSED_LAYER opacity = TRUE density = FALSE - var/image/overlay = null new_attack_chain = TRUE - var/assembled = FALSE + var/assembled = TRUE var/overlay_color = "#ffffff" var/overlay_alpha = 255 - -/obj/structure/curtain/Initialize(mapload) +/obj/structure/curtain/Initialize(mapload, assembled_ = TRUE) . = ..() - if(opacity) - icon_state = "closed" - overlay = image("closed_overlay") - overlay.color = overlay_color - overlay.alpha = overlay_alpha - add_overlay(overlay) - layer = SHOWER_CLOSED_LAYER - else - icon_state = "open" - overlay = image("open_overlay") - overlay.color = overlay_color - overlay.alpha = overlay_alpha - add_overlay(overlay) - layer = SHOWER_OPEN_LAYER + assembled = assembled_ + update_appearance() /obj/structure/curtain/open - icon_state = "open" - layer = SHOWER_OPEN_LAYER opacity = FALSE /obj/item/mounted/curtain/curtain_fixture icon_state = "handheld" icon = 'icons/obj/curtain.dmi' - name = "\improper curtain rod assembly" - new_attack_chain = TRUE + name = "curtain rod assembly" /obj/item/mounted/curtain/curtain_fixture/interact_with_atom(atom/target, mob/living/user, list/modifiers) . = ..() - if(!istype(target ,/obj/structure/window) && !istype(target, /turf/simulated/wall/)) + if(!istype(target, /obj/structure/window) && !istype(target, /turf/simulated/wall)) return var/on_wall = get_turf(target) to_chat(user, "You begin attaching [src] to [on_wall].") playsound(get_turf(src), 'sound/machines/click.ogg', 75, TRUE) if(!do_after(user, 3 SECONDS, target = on_wall)) return - var/obj/structure/curtain/assembly/new_curtain = new /obj/structure/curtain/assembly(on_wall) - new_curtain.fingerprints = src.fingerprints - new_curtain.fingerprintshidden = src.fingerprintshidden - new_curtain.fingerprintslast = src.fingerprintslast + var/obj/structure/curtain/curtain = new(on_wall, FALSE) + curtain.fingerprints = src.fingerprints + curtain.fingerprintshidden = src.fingerprintshidden + curtain.fingerprintslast = src.fingerprintslast user.visible_message("[user] attaches the [src] to [on_wall].", \ "You attach the [src] to [on_wall].") @@ -68,63 +51,66 @@ playsound(get_turf(src), 'sound/machines/click.ogg', 75, TRUE) if(!do_after(user, 3 SECONDS, target = get_turf(user))) return - var/obj/structure/curtain/assembly/new_curtain = new /obj/structure/curtain/assembly(get_turf(user)) - new_curtain.fingerprints = src.fingerprints - new_curtain.fingerprintshidden = src.fingerprintshidden - new_curtain.fingerprintslast = src.fingerprintslast + var/obj/structure/curtain/curtain = new(get_turf(user), FALSE) + curtain.fingerprints = src.fingerprints + curtain.fingerprintshidden = src.fingerprintshidden + curtain.fingerprintslast = src.fingerprintslast user.visible_message("[user] attaches the [src] to the ceiling.", \ "You attach the [src] to the ceiling.") qdel(src) - - -/obj/structure/curtain/assembly - icon_state = "assembly0" - name = "Curtain Rod" - opacity = FALSE - density = FALSE - desc = "A curtain assembly! It needs a material." - -/obj/structure/curtain/assembly/examine(mob/user) +/obj/structure/curtain/examine(mob/user) . = ..() - . += "Alt-Click to take it down." -/obj/structure/curtain/assembly/AltClick(mob/user) + if(!assembled) + . += "Alt-Click to take it down." + +/obj/structure/curtain/AltClick(mob/user) + if(assembled) + return + if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) to_chat(user, "You can't do that right now!") return if(!Adjacent(user)) return - // TODO: turn back into assembly item - new /obj/item/mounted/curtain/curtain_fixture(get_turf(user)) - playsound(loc, 'sound/effects/salute.ogg' , 75, TRUE) + var/obj/item/mounted/curtain/curtain_fixture/fixture = new /obj/item/mounted/curtain/curtain_fixture(get_turf(user)) + user.put_in_hands(fixture) + playsound(loc, 'sound/effects/salute.ogg', 75, TRUE) qdel(src) -/obj/structure/curtain/assembly/item_interaction(mob/living/user, obj/item/used, list/modifiers) - if(istype(used, /obj/item/stack/sheet/cloth)) // Are we putting the cloth onto the assembly on the wall? +/obj/structure/curtain/item_interaction(mob/living/user, obj/item/used, list/modifiers) + if(assembled && istype(used, /obj/item/toy/crayon)) + color = tgui_input_color(user,"Please choose a color.", "Curtain Color") + return ITEM_INTERACT_COMPLETE + + if(!assembled && istype(used, /obj/item/stack/sheet/cloth)) // Are we putting the cloth onto the assembly on the wall? var/obj/item/stack/sheet/cloth/cloth_used = used if(!cloth_used.use(2)) to_chat(user, " You need two sheets of cloth to hang the curtains.") return ITEM_INTERACT_COMPLETE - var/obj/structure/curtain/new_curtain = new /obj/structure/curtain/(loc, 1) - new_curtain.assembled = TRUE + assembled = TRUE + update_appearance() playsound(loc, used.drop_sound, 75, TRUE) // Play a generic cloth sound. - qdel(src) return ITEM_INTERACT_COMPLETE /obj/structure/curtain/attack_hand(mob/user) - playsound(get_turf(loc), "rustle", 15, TRUE, -5) - update_icon(UPDATE_OVERLAYS) - ..() + . = ..() + toggle_curtain() + /obj/structure/curtain/attack_robot(mob/living/user) . = ..() - playsound(get_turf(loc), "rustle", 15, TRUE, -5) - update_icon(UPDATE_OVERLAYS) - ..() + if(Adjacent(user)) + toggle_curtain() +/obj/structure/curtain/proc/toggle_curtain() + if(assembled) + playsound(get_turf(loc), "rustle", 15, TRUE, -5) + set_opacity(!opacity) + update_appearance() /obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -136,50 +122,58 @@ if(BURN) playsound(loc, 'sound/items/welder.ogg', 80, TRUE) +/obj/structure/curtain/update_name(updates) + . = ..() + name = assembled ? "curtain" : "curtain rod" + +/obj/structure/curtain/update_desc() + . = ..() + if(assembled) + desc = "A curtain." + else + desc = "A curtain assembly! It still lacks drapes however, some cloth would serve as some nicely." + /obj/structure/curtain/update_overlays() . = ..() - set_opacity(!opacity) - cut_overlays() + if(!assembled) + opacity = FALSE + return + if(opacity) - icon_state = "closed" - overlay = image("closed_overlay") + var/image/overlay = image("closed_overlay") overlay.color = overlay_color overlay.alpha = overlay_alpha - add_overlay(overlay) + . += overlay layer = SHOWER_CLOSED_LAYER else - icon_state = "open" - overlay = image("open_overlay") + var/image/overlay = image("open_overlay") overlay.color = overlay_color overlay.alpha = overlay_alpha - add_overlay(overlay) + . += overlay layer = SHOWER_OPEN_LAYER -/obj/structure/curtain/item_interaction(mob/living/user, obj/item/used, list/modifiers) - if(istype(used, /obj/item/toy/crayon)) - color = tgui_input_color(user,"Please choose a color.", "Curtain Color") - return ITEM_INTERACT_COMPLETE - /obj/structure/curtain/screwdriver_act(mob/user, obj/item/I) . = TRUE + if(!assembled) + to_chat(user, "You should probably add some drapes to [src] before anchoring it in place...") + return if(!I.tool_start_check(src, user, 0)) return if(anchored) - user.visible_message("[user] unscrews [src] from the floor.", "You start to unscrew [src] from the floor...", "You hear rustling noises.") - if(I.use_tool(src, user, 50, volume = I.tool_volume) && anchored) + user.visible_message("[user] unscrews [src] from the floor.", "You start to unscrew [src] from the floor...", "You hear rustling noises.") + if(I.use_tool(src, user, 5 SECONDS, volume = I.tool_volume) && anchored) anchored = FALSE to_chat(user, "You unscrew [src] from the floor.") else - user.visible_message("[user] screws [src] to the floor.", "You start to screw [src] to the floor...", "You hear rustling noises.") - if(I.use_tool(src, user, 50, volume = I.tool_volume) && !anchored) + user.visible_message("[user] screws [src] to the floor.", "You start to screw [src] to the floor...", "You hear rustling noises.") + if(I.use_tool(src, user, 5 SECONDS, volume = I.tool_volume) && !anchored) anchored = TRUE to_chat(user, "You screw [src] to the floor.") - - /obj/structure/curtain/wirecutter_act(mob/user, obj/item/I) if(anchored) - return + to_chat(user, "You will need to undo the screws anchoring [src] before removing the drapes.") + return TRUE . = TRUE if(!I.tool_start_check(src, user, 0)) return @@ -187,21 +181,16 @@ WIRECUTTER_ATTEMPT_DISMANTLE_MESSAGE if(I.use_tool(src,user, 5 SECONDS, volume = I.tool_volume)) WIRECUTTER_DISMANTLE_SUCCESS_MESSAGE - var/obj/structure/curtain/assembly/new_assembly = new /obj/structure/curtain/assembly(loc, 1) - new_assembly.assembled = TRUE + assembled = FALSE + update_appearance() new /obj/item/stack/sheet/cloth(loc, 2) - qdel(src) return return - WIRECUTTER_ATTEMPT_DISMANTLE_MESSAGE - if(I.use_tool(src, user, 5 SECONDS, volume = I.tool_volume)) - WIRECUTTER_DISMANTLE_SUCCESS_MESSAGE - deconstruct() - /obj/structure/curtain/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/cloth(loc, 2) - new /obj/item/stack/rods(loc, 1) + if(assembled) + new /obj/item/stack/sheet/cloth(loc, 2) + new /obj/item/stack/rods(loc, 2) qdel(src) /obj/structure/curtain/black diff --git a/icons/obj/curtain.dmi b/icons/obj/curtain.dmi index 882b5aa7e436b9bc266a334a0edb28a0a2b2ab33..c35cc6c788b2e3f4b0694bacbd9b642bdae916f6 100644 GIT binary patch delta 920 zcmZ3$zK(r@O8u;=kcbkO)Z*l#%z~24{5%GRiaEUjr@5F61+2^WCEeKDt-q&oVr&Zk zJN+pa`?g)kT^cO<|K6(bh4&^+V3{OV{%_0fAF;>&z$hl*=#gO&QMAKmqprkx*3zMQYmIuT?r?XUb>J1%M2 z(@g$f?^QevFy4Nn|L*f?;@?6;7i69j;9_84I`8S?7*a9k?VP=NB8DQZeQ76rI)nfh-u5$RNt5~x4#(4NtLN2AZ?n#GN{{_~+V z`_gjW|A;$p`|ZYK$=uBm^*U;%#`DiF{CB(A{P^9!TVIwQ?9Y!^FSAo$mwS>s;s05U zb4-~_9apa|uWrq=Q+M8W@!!Ndj^+!>qKc&rcKn>v^26!3KCe5&jBnS!*Xb90w&eWS z`YnFew|mW*`Kbmbn$I6SKk(|=)9&RLLOH4=Z>{k+w-RJ*{BmG>dvz%Hg+wkUNKBuv^Hmp_D_b%_42H|tGVbC|x};fJf9F@;&i6A8NthL17Jl&Nk9UaG z(!S{Xy5D7kB@Ue34I_<7Z)^Uox{1xxrc=!$D(WOa9kGq@}+{$28XxnYft zw|~QgV}J9ROmBGG=8CUfY3sOsL8|ncNFEbM{-k}yNp;SPLw_s~oM60RmaEf(B*`da zSa^y=wh7t0x-qbRS)8T4h~?I_gBO(_m~kxjY{^nf^mVM?{*i0KCeex9YY$2>hbk{f zd2n=k+x1C~w=bS%Q(Ic6``bUut>N#<6A`wTe_XimnfKn?7n7!N^ekI&d&SS)Qsxe7 z^FVdQ&MBb@0E6nPcmMzZ delta 906 zcmV;519kka2cQR#B!8QFR9JLGWpiV4X>fFDZ*Bkpcmaiwy$-@K420+SDWY~q#^TeZE?syGuXl_S(Y-6T2AnNgp;1sIRk`irMc# z5xN)U*&Knh$yj9d@R8A0psY(=23t_iWJX-{ip4hu5i-m;-hchnh$NX{3B7!GiFb?T zEpH}q?;KNtYuyd)zpEerKv@TwN`?sl00O{CL_t(|+U=anN*qBHhO4(BySzXM#3X1S zGSNjgd4Vi)fsjQ&1Q%WqH-ZZ8-FO8>SKgLB#kg^y4hkyXKzspr;wnbr`KoJXx{D5~)v5w=1i$|L4?lcrZ)`X}JyB*oOL%Om6J_o{7@wR9 z+uGhWHeOs@DYKp>JT}#dGWQPw(gH9A2~R-~AS|Gxy)%6O@p0qj*@-giS;AveohWnv zPtE|MnR6f?5qt#Z-T%mNU!Vkeat7pyZ3O1s|Kie|tbYLf5t9W1AOHeNp9Bbi0003H z03ZMY00ck)fB*;p5C8!H0w4fD00aOCfB*mi5C9+m0ssWGngFB#0w4fD00aOCfB;Z( z0pSC|198hq+VJ)~j_Wne@kGV+O2F>^QP}*2TW zm3nz+yMLx$QeK)~R-IklDrtKv6S{7L_W4qIn_E`z&yJOBOp!!vld_@jeu9L-+x37F7E_HCBe227Z9h74+6~Cg%IE( zu7D^R;sT_f7c?<3_Uv5mN^FuZVJQKw*y4{Y`~CBW^5s_$1e8%g5vCvrfPm%+kbY*| z>c(cd1t?+S{1fIM8UhL?z||fCRJ=