From 05d8550771ce7aa4aa580a0a89a891fef84d0f08 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 21 Apr 2017 17:54:34 -0500 Subject: [PATCH] Refactors picture frames to use wall frames system --- code/__HELPERS/unsorted.dm | 3 +- code/game/machinery/buttons.dm | 3 +- code/game/machinery/firealarm.dm | 4 +- .../machinery/porta_turret/portable_turret.dm | 3 +- code/game/objects/items/apc_frame.dm | 6 +- .../items/stacks/sheets/sheet_types.dm | 2 +- code/game/objects/structures/extinguisher.dm | 3 +- .../living/carbon/human/human_defense.dm.rej | 14 +++ code/modules/paperwork/photography.dm | 96 +++++++++--------- icons/obj/apc_repair.dmi | Bin 761 -> 0 bytes icons/obj/decals.dmi | Bin 22307 -> 22324 bytes icons/obj/wallframe.dmi | Bin 0 -> 761 bytes 12 files changed, 75 insertions(+), 59 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/human_defense.dm.rej delete mode 100644 icons/obj/apc_repair.dmi create mode 100644 icons/obj/wallframe.dmi diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index d51e52b99d..35e66d5f4b 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -787,7 +787,8 @@ GLOBAL_LIST_INIT(WALLITEMS, typecacheof(list( /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/button, /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/simple_vent_controller, /obj/item/weapon/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, - /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment + /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment, + /obj/structure/sign/picture_frame ))) GLOBAL_LIST_INIT(WALLITEMS_EXTERNAL, typecacheof(list( diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 6fa2aeffc5..48203bf630 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -215,7 +215,6 @@ /obj/item/wallframe/button name = "button frame" desc = "Used for building buttons." - icon = 'icons/obj/apc_repair.dmi' - icon_state = "button_frame" + icon_state = "button" result_path = /obj/machinery/button materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 97f09820d1..447ff5f9bc 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -1,10 +1,10 @@ /obj/item/weapon/electronics/firealarm name = "fire alarm electronics" - desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" + desc = "A fire alarm circuit. Can handle heat levels up to 40 degrees celsius." /obj/item/wallframe/firealarm name = "fire alarm frame" - desc = "Used for building Fire Alarms" + desc = "Used for building fire alarms" icon = 'icons/obj/monitors.dmi' icon_state = "fire_bitem" result_path = /obj/machinery/firealarm diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index a2aea05389..b8ba21fd35 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -784,8 +784,7 @@ /obj/item/wallframe/turret_control name = "turret control frame" desc = "Used for building turret control panels" - icon = 'icons/obj/apc_repair.dmi' - icon_state = "apc_frame" + icon_state = "apc" result_path = /obj/machinery/turretid materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index edc7d0f3fe..b98e3c6e69 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -1,4 +1,5 @@ /obj/item/wallframe + icon = 'icons/obj/wallframe.dmi' materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT*2) flags = CONDUCT origin_tech = "materials=1;engineering=1" @@ -38,7 +39,7 @@ if(inverse) ndir = turn(ndir, 180) - var/obj/O = new result_path(get_turf(user), ndir, 1) + var/obj/O = new result_path(get_turf(user), ndir, TRUE) after_attach(O) qdel(src) @@ -71,8 +72,7 @@ /obj/item/wallframe/apc name = "\improper APC frame" desc = "Used for repairing or building APCs" - icon = 'icons/obj/apc_repair.dmi' - icon_state = "apc_frame" + icon_state = "apc" result_path = /obj/machinery/power/apc inverse = 1 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index dbd2de2e75..6ab9493f4f 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -139,7 +139,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("picture frame", /obj/item/weapon/picture_frame, 1, time = 10),\ + new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("wooden buckler", /obj/item/weapon/shield/riot/buckler, 20, time = 40), \ new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\ diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index bedd583a27..ad8d700fe5 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -144,6 +144,5 @@ /obj/item/wallframe/extinguisher_cabinet name = "extinguisher cabinet frame" desc = "Used for building wall-mounted extinguisher cabinets." - icon = 'icons/obj/apc_repair.dmi' - icon_state = "extinguisher_frame" + icon_state = "extinguisher" result_path = /obj/structure/extinguisher_cabinet diff --git a/code/modules/mob/living/carbon/human/human_defense.dm.rej b/code/modules/mob/living/carbon/human/human_defense.dm.rej new file mode 100644 index 0000000000..b62723dbc7 --- /dev/null +++ b/code/modules/mob/living/carbon/human/human_defense.dm.rej @@ -0,0 +1,14 @@ +diff a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm (rejected hunks) +@@ -682,10 +682,10 @@ + status += "numb" + if(status == "") + status = "OK" +- to_chat(src, " [status == "OK" ? "\blue" : "\red"] Your [LB.name] is [status].") ++ to_chat(src, "\t [status == "OK" ? "\blue" : "\red"] Your [LB.name] is [status].") + + for(var/obj/item/I in LB.embedded_objects) +- to_chat(src, " There is \a [I] embedded in your [LB.name]!") ++ to_chat(src, "\t There is \a [I] embedded in your [LB.name]!") + + for(var/t in missing) + to_chat(src, "Your [parse_zone(t)] is missing!") diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 2e92a318c7..e2447d6e4a 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -309,7 +309,7 @@ var/icon/small_img = icon(temp) var/icon/ic = icon('icons/obj/items.dmi',"photo") small_img.Scale(8, 8) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) + ic.Blend(small_img,ICON_OVERLAY, 13, 13) P.icon = ic P.img = temp P.desc = mobs @@ -326,7 +326,7 @@ var/icon/small_img = icon(temp) var/icon/ic = icon('icons/obj/items.dmi',"photo") small_img.Scale(8, 8) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) + ic.Blend(small_img,ICON_OVERLAY, 13, 13) var/icon = ic var/img = temp var/desc = mobs @@ -488,27 +488,28 @@ // Picture frames -/obj/item/weapon/picture_frame +/obj/item/wallframe/picture name = "picture frame" desc = "The perfect showcase for your favorite deathtrap memories." icon = 'icons/obj/decals.dmi' + materials = list() + flags = 0 icon_state = "frame-empty" + result_path = /obj/structure/sign/picture_frame var/obj/item/weapon/photo/displayed -/obj/item/weapon/picture_frame/attackby(obj/item/I, mob/user) +/obj/item/wallframe/picture/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/photo)) if(!displayed) - var/obj/item/weapon/photo/P = I - if(!user.transferItemToLoc(P, src)) + if(!user.transferItemToLoc(I, src)) return - displayed = P + displayed = I update_icon() else to_chat(user, "\The [src] already contains a photo.") - ..() -/obj/item/weapon/picture_frame/attack_hand(mob/user) +/obj/item/wallframe/picture/attack_hand(mob/user) if(user.get_inactive_held_item() != src) ..() return @@ -519,37 +520,31 @@ displayed = null update_icon() -/obj/item/weapon/picture_frame/attack_self(mob/user) +/obj/item/wallframe/picture/attack_self(mob/user) user.examinate(src) -/obj/item/weapon/picture_frame/examine(mob/user) +/obj/item/wallframe/picture/examine(mob/user) if(user.is_holding(src) && displayed) displayed.show(user) else ..() -/obj/item/weapon/picture_frame/update_icon() +/obj/item/wallframe/picture/update_icon() cut_overlays() if(displayed) add_overlay(getFlatIcon(displayed)) - else - icon_state = initial(icon_state) + add_overlay("frame-overlay") -/obj/item/weapon/picture_frame/afterattack(atom/target, mob/user, proximity) - var/turf/T = target - if(!iswallturf(T)) - return - user.visible_message("[user] fastens [src] to [T].", \ - "You attach the sign to [T].") - playsound(T, 'sound/items/Deconstruct.ogg', 50, 1) - var/obj/structure/sign/picture_frame/PF = new /obj/structure/sign/picture_frame(T) +/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) - qdel(src) + /obj/structure/sign/picture_frame name = "picture frame" @@ -558,35 +553,33 @@ icon_state = "frame-empty" var/obj/item/weapon/photo/framed +/obj/structure/sign/picture_frame/New(loc, dir, building) + ..() + 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/examine(mob/user) if(in_range(src, user) && framed) framed.show(user) else ..() -/obj/structure/sign/picture_frame/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/weapon/screwdriver)) - user.visible_message("[user] starts removing [src]...", \ - "You start unfastening [src].") - playsound(src, O.usesound, 50, 1) - if(!do_after(user, 30*O.toolspeed, target = src)) - return - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] unfastens [src].", \ - "You unfasten [src].") - var/obj/item/weapon/picture_frame/F = new /obj/item/weapon/picture_frame(get_turf(user)) - if(framed) - F.displayed = framed - framed = null - if(contents.len) - var/obj/item/I = pick(contents) - I.forceMove(F) - F.update_icon() - qdel(src) +/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver) || istype(I, /obj/item/weapon/wrench)) + to_chat(user, "You start unsecuring [name]...") + playsound(loc, I.usesound, 50, 1) + if(do_after(user, 30*I.toolspeed, target = src)) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + to_chat(user, "You unsecure [name].") + deconstruct() + return - else if(istype(O, /obj/item/weapon/photo)) + else if(istype(I, /obj/item/weapon/photo)) if(!framed) - var/obj/item/weapon/photo/P = O + var/obj/item/weapon/photo/P = I if(!user.transferItemToLoc(P, src)) return framed = P @@ -604,5 +597,16 @@ cut_overlays() if(framed) add_overlay(getFlatIcon(framed)) - else - icon_state = initial(icon_state) \ No newline at end of file + add_overlay("frame-overlay") + +/obj/structure/sign/picture_frame/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + 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) diff --git a/icons/obj/apc_repair.dmi b/icons/obj/apc_repair.dmi deleted file mode 100644 index 220a267fe7acb926bbc3eb7ff115eb33e771ef21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 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 delta 3110 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 AEdT%j diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi new file mode 100644 index 0000000000000000000000000000000000000000..48eff704b64efea025bc741f4d9c1c5cc68dfb86 GIT binary patch literal 761 zcmVtBR6jpI92^_~7#K!IMt**NTU%TIW;0@9Vk09X7Z(?JczE30 z+_bc`9v&Y5`RerL(mFaiCnqe*xuxRJy#M;}`RLYfj-voG0BVVzYJ`?#evngBQ(pPcJ5rtpET30d!JMQvg8b*k%9#0GfJKSad{Xb7OL8 zaCB*JZU6vyoKseCa&`CgQ*iP14YmwttiRNOE1kV&PXjHs5mdRyf`_rxCFOSWd&D17qB-0FvLU)mG3r_0004i zNklI= zzv8rFT<<=`L5B6Xm8CI2i02VfUWqwC8-aoT?HLBt+I$~w?is)U;EUzSk2O&KI02|0 zvS$mdRJ1^An!3QtItT)?0Rd0MX^fJCQ48?g)%vv<5)hE%a5cTz|6BH^S zO+FX|Pc2C literal 0 HcmV?d00001