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 4abba7a431..a007dd4545 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -142,7 +142,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 220a267fe7..0000000000
Binary files a/icons/obj/apc_repair.dmi and /dev/null differ
diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi
index 46d2ba0d1a..d86d2e5e40 100644
Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ
diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi
new file mode 100644
index 0000000000..48eff704b6
Binary files /dev/null and b/icons/obj/wallframe.dmi differ