diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 9559552a71b..e1c50a0a989 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -167,6 +167,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/grenade/iedcasing/spawned = 1,
/obj/item/melee/baton/cattleprod = 1,
/obj/item/throwing_star = 1,
+ /obj/item/pen/fountain = 1,
) = 8,
list(//equipment
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index 2b65ca08cd4..8694b50bbc7 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -50,6 +50,7 @@
desc = "A large piece of space-resistant printed paper."
icon = 'icons/obj/contraband.dmi'
anchored = TRUE
+ buildable_sign = FALSE //Cannot be unwrenched from a wall.
var/ruined = FALSE
var/random_basetype
var/never_random = FALSE // used for the 'random' subclasses.
diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm
index 627a41349eb..83522a54eb5 100644
--- a/code/game/objects/structures/artstuff.dm
+++ b/code/game/objects/structures/artstuff.dm
@@ -223,7 +223,7 @@
name = "painting frame"
desc = "The perfect showcase for your favorite deathtrap memories."
icon = 'icons/obj/decals.dmi'
- custom_materials = null
+ custom_materials = list(/datum/material/wood = 2000)
flags_1 = 0
icon_state = "frame-empty"
result_path = /obj/structure/sign/painting
@@ -233,6 +233,7 @@
desc = "Art or \"Art\"? You decide."
icon = 'icons/obj/decals.dmi'
icon_state = "frame-empty"
+ custom_materials = list(/datum/material/wood = 2000)
buildable_sign = FALSE
var/obj/item/canvas/C
var/persistence_id
diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm
index a2da8f6d07e..ef1c186372d 100644
--- a/code/game/objects/structures/plaques/_plaques.dm
+++ b/code/game/objects/structures/plaques/_plaques.dm
@@ -17,6 +17,9 @@
/obj/item/plaque //The item version of the above.
icon = 'icons/obj/decals.dmi'
icon_state = "blankplaque"
+ item_state = "blankplaque"
+ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items_righthand.dmi'
name = "blank plaque"
desc = "A blank plaque, use a fancy pen to engrave it. It can be placed on a wall."
w_class = WEIGHT_CLASS_NORMAL
@@ -49,6 +52,7 @@
unwrenched_plaque.name = name //Copy over the plaque structure variables to the plaque item we're creating when we unwrench it.
unwrenched_plaque.desc = desc
unwrenched_plaque.engraved = engraved
+ unwrenched_plaque.icon_state = icon_state
unwrenched_plaque.obj_integrity = obj_integrity
unwrenched_plaque.setDir(dir)
qdel(src) //The plaque structure on the wall goes poof and only the plaque item from unwrenching remains.
@@ -178,6 +182,7 @@
placed_plaque.name = name
placed_plaque.desc = desc
placed_plaque.engraved = engraved
+ placed_plaque.icon_state = icon_state
placed_plaque.obj_integrity = obj_integrity
placed_plaque.setDir(dir)
qdel(src)
diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm
index 1ac3ec7546d..7a7c7baf1e8 100644
--- a/code/game/objects/structures/plaques/static_plaques.dm
+++ b/code/game/objects/structures/plaques/static_plaques.dm
@@ -19,7 +19,7 @@
/obj/structure/plaque/static_plaque/golden/captain
name = "The Most Robust Captain Award for Robustness"
-//These are plaques that aren't made of metal, so we'll just consider them signs. Those are made of plastic, not gold.
+//These are plaques that aren't made of metal, so we'll just consider them signs. Those are made of plastic (default) or wood, not gold.
//See: code>game>objects>structures>signs>_signs.dm
/obj/structure/sign/plaques/kiddie
@@ -47,3 +47,4 @@
name = "\improper Mr. Deempisi portrait"
desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"
icon_state = "monkey_painting"
+ custom_materials = list(/datum/material/wood = 2000) //The same as /obj/structure/sign/picture_frame
diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm
index 5b9b29bafb5..2836dbcf50d 100644
--- a/code/game/objects/structures/signs/_signs.dm
+++ b/code/game/objects/structures/signs/_signs.dm
@@ -1,8 +1,5 @@
/obj/structure/sign
icon = 'icons/obj/decals.dmi'
- icon_state = "backing"
- name = "sign backing"
- desc = "A plastic sign backing, use a pen to change the decal. It can be detached from the wall with a wrench."
anchored = TRUE
opacity = 0
density = FALSE
@@ -16,21 +13,31 @@
resistance_flags = FLAMMABLE
///This determines if you can select this sign type when using a pen on a sign backing. False by default, set to true per sign type to override.
var/is_editable = FALSE
- ///sign_change_name is used to make nice looking, alphebetized and categorized names when you use a pen on a sign backing.
- var/sign_change_name = "Sign - Blank" //If this is ever seen in game, something went wrong.
+ ///sign_change_name is used to make nice looking, alphebetized and categorized names when you use a pen on any sign item or structure which is_editable.
+ var/sign_change_name
+
+/obj/structure/sign/blank //This subtype is necessary for now because some other things (posters, picture frames, paintings) inheret from the parent type.
+ icon_state = "backing"
+ name = "sign backing"
+ desc = "A plastic sign backing, use a pen to change the decal. It can be detached from the wall with a wrench."
+ is_editable = TRUE
+ sign_change_name = "Blank Sign"
/obj/item/sign
name = "sign backing"
desc = "A plastic sign backing, use a pen to change the decal. It can be placed on a wall."
icon = 'icons/obj/decals.dmi'
icon_state = "backing"
+ item_state = "backing"
+ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items_righthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/plastic = 2000)
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
resistance_flags = FLAMMABLE
max_integrity = 100
///The type of sign structure that will be created when placed on a turf, the default looks just like a sign backing item.
- var/sign_path = /obj/structure/sign
+ var/sign_path = /obj/structure/sign/blank
///This determines if you can select this sign type when using a pen on a sign backing. False by default, set to true per sign type to override.
var/is_editable = TRUE
@@ -61,6 +68,8 @@
/obj/structure/sign/wrench_act(mob/living/user, obj/item/wrench/I)
. = ..()
+ if(!buildable_sign)
+ return TRUE
user.visible_message("[user] starts removing [src]...", \
"You start unfastening [src].")
I.play_tool_sound(src)
@@ -70,11 +79,13 @@
user.visible_message("[user] unfastens [src].", \
"You unfasten [src].")
var/obj/item/sign/unwrenched_sign = new (get_turf(user))
- if(type != /obj/structure/sign) //If it's still just a basic sign backing, we can (and should) skip some of the below variable transfers.
+ if(type != /obj/structure/sign/blank) //If it's still just a basic sign backing, we can (and should) skip some of the below variable transfers.
unwrenched_sign.name = name //Copy over the sign structure variables to the sign item we're creating when we unwrench a sign.
unwrenched_sign.desc = "[desc] It can be placed on a wall."
unwrenched_sign.icon_state = icon_state
unwrenched_sign.sign_path = type
+ unwrenched_sign.custom_materials = custom_materials //This is here so picture frames and wooden things don't get messed up.
+ unwrenched_sign.is_editable = is_editable
unwrenched_sign.obj_integrity = obj_integrity //Transfer how damaged it is.
unwrenched_sign.setDir(dir)
qdel(src) //The sign structure on the wall goes poof and only the sign item from unwrenching remains.
@@ -165,7 +176,10 @@
return
var/obj/structure/sign/sign_type = GLOB.editable_sign_types[choice]
name = initial(sign_type.name)
- desc = "[initial(sign_type.desc)] It can be placed on a wall."
+ if(sign_type != /obj/structure/sign/blank)
+ desc = "[initial(sign_type.desc)] It can be placed on a wall."
+ else
+ desc = initial(desc) //If you're changing it to a blank sign, just use obj/item/sign's description.
icon_state = initial(sign_type.icon_state)
sign_path = sign_type
user.visible_message("You finish changing the sign.")
@@ -207,3 +221,4 @@
name = "\improper Nanotrasen logo sign"
desc = "The Nanotrasen corporate logo."
icon_state = "nanotrasen_sign1"
+ buildable_sign = FALSE
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 9a0bab6a2ea..963feeec94f 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -284,6 +284,7 @@
desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "ntpod"
+ buildable_sign = FALSE
/obj/structure/sign/mining/survival
name = "shelter sign"
diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm
index edbdbcd9c89..f9fadc6f7e4 100644
--- a/code/modules/photography/photos/frame.dm
+++ b/code/modules/photography/photos/frame.dm
@@ -4,7 +4,7 @@
name = "picture frame"
desc = "The perfect showcase for your favorite deathtrap memories."
icon = 'icons/obj/decals.dmi'
- custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 0.5)
+ custom_materials = list(/datum/material/wood = 2000)
flags_1 = 0
icon_state = "frame-empty"
result_path = /obj/structure/sign/picture_frame
@@ -64,6 +64,7 @@
desc = "Every time you look it makes you laugh."
icon = 'icons/obj/decals.dmi'
icon_state = "frame-empty"
+ custom_materials = list(/datum/material/wood = 2000)
var/obj/item/photo/framed
var/persistence_id
var/can_decon = TRUE
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index b35d6cc5c0d..ef6c49dca30 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index b53905cb2d4..f7f1c515152 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ