From d5451ae60a02ee3fe72cea28f725fa543553b7d6 Mon Sep 17 00:00:00 2001 From: uomo <51800976+uomo91@users.noreply.github.com> Date: Mon, 27 Apr 2020 23:43:44 -0500 Subject: [PATCH] Department, warning, and general sign code fix. And brand new custom plaques! (#50550) * Oh God I hope this works... * It didn't work. * Making things better. * Making things even better. * That made things worse. * Sorting works! \o/ * Tidying some thing ups. * Adding a custom plaque to the game. * Some plaque tweaks. * Makes plaques more durable than signs. * Adds the stack crafting. * Plaques take a little time to engrave, signs can't be changed instantly anymore. * Comments, and renamed the global list to avoid confusion. * Appends "sign" to every name, makes department signs not all caps, fixes some names and descriptions. * Touching up plaque customization and display, removing one last all caps. * Plaques can now be engraved in hand too. * Newline. * Update code/game/objects/structures/customplaque.dm Co-Authored-By: Rohesie * Update code/game/objects/structures/customplaque.dm Co-Authored-By: Rohesie * Mirroring some fixes from customplaque.dm * A bunch of stuff. * Unwrenched signs now lay horizontal. * A lot more stuff, turned a negative variable into a positive. * Fix chat inconsistency, remove deprecated and unused variable. * Apparently buildable_sign is used elsewhere, whoops. * Adding documentation to this, fixing a bool being 0 in another file. * Don't know why this was here, sign dir is 100% irrelevant. * Fixes some sound malarkey. * Changes delays to be readable, removes unneeded return. * Fixes these two early returns, it needed return TRUE at the end to work. * Trying to fix a revert I messed up... * Moving plaques to a directory, moving old sign plaque types into it. Map changes. * Rename since I relocated this object entirely. * Signs (and plaques) now properly place, and aren't visible through walls. * Comment to help people in the future. * Signs and plaques can be placed diagonally now. * Removes duplicated code line. * Blank signs now commonly spawn in maint, blank plaques uncommonly. * Repairing signs & plaques with a welder is now good to go. * Moves the GLOB, makes it start as an empty list. * Update code/game/objects/structures/plaques/_plaques.dm Co-Authored-By: Rohesie * Gets rid of some oldcode. * Apply suggestions from code review Co-Authored-By: tralezab <40974010+tralezab@users.noreply.github.com> * Simplifying dir switch to two if elses. * Plaques take one sheet of gold to graft instead of five. * Just making this wording in crafting a little clearer. * They can be removed with wrenches, so I don't think this is proper. * Makes variables descriptive. * More descriptive variables, a little dmdoc, move things around to be next to like things. * Remove a redundant definition. * Apply suggestions from code review Co-Authored-By: Rohesie * Fixes mapping path, rename sign_backing to just sign. Co-authored-by: Rohesie Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com> --- _maps/RandomRuins/SpaceRuins/spacehotel.dmm | 4 +- _maps/RandomZLevels/SnowCabin.dmm | 4 +- _maps/RandomZLevels/research.dmm | 2 +- _maps/map_files/BoxStation/BoxStation.dmm | 4 +- .../map_files/Deltastation/DeltaStation2.dmm | 6 +- _maps/map_files/Donutstation/Donutstation.dmm | 6 +- _maps/map_files/KiloStation/KiloStation.dmm | 8 +- _maps/map_files/MetaStation/MetaStation.dmm | 4 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 4 +- _maps/map_files/generic/CentCom.dmm | 10 +- _maps/shuttles/whiteship_kilo.dmm | 2 +- code/_globalvars/lists/maintenance_loot.dm | 4 +- code/_globalvars/lists/objects.dm | 2 + .../objects/items/stacks/sheets/mineral.dm | 1 + .../items/stacks/sheets/sheet_types.dm | 2 +- code/game/objects/structures/barsigns.dm | 2 +- .../objects/structures/plaques/_plaques.dm | 183 +++++++++++ .../static_plaques.dm} | 23 +- code/game/objects/structures/signs/_signs.dm | 293 +++++++++++------- .../structures/signs/signs_departments.dm | 227 +++++++++----- .../objects/structures/signs/signs_maps.dm | 22 +- .../objects/structures/signs/signs_warning.dm | 117 +++++-- icons/obj/decals.dmi | Bin 31534 -> 33203 bytes tgstation.dme | 3 +- 24 files changed, 652 insertions(+), 281 deletions(-) create mode 100644 code/game/objects/structures/plaques/_plaques.dm rename code/game/objects/structures/{signs/signs_plaques.dm => plaques/static_plaques.dm} (80%) diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 03b20c16953..6e9ed7b2770 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -3601,7 +3601,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/sign/plaques/atmos{ +/obj/structure/plaque/static_plaque/atmos{ pixel_y = 32 }, /turf/open/floor/plating, @@ -3626,7 +3626,7 @@ "lb" = ( /obj/structure/table, /obj/machinery/recharger, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_x = -32 }, /obj/effect/turf_decal/tile/red{ diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index b351d0db90b..fc3fc6913af 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -1830,7 +1830,7 @@ id = "TheRealSecretPlace"; name = "\improper Tear In The Fabric of Reality" }, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ desc = "Holding the record for about 500 years now."; name = "The Most Annoying Organization Ever"; pixel_y = 32 @@ -3940,7 +3940,7 @@ /turf/open/floor/wood, /area/awaymission/cabin/caves) "kn" = ( -/obj/structure/sign/basic{ +/obj/structure/sign{ pixel_x = 32 }, /turf/open/floor/plating/asteroid/snow{ diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 53efc47ff0f..92b1bfd60e5 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -2375,7 +2375,7 @@ /turf/open/floor/plasteel/white, /area/awaymission/research/interior/security) "fv" = ( -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_x = 32 }, /obj/effect/turf_decal/tile/red{ diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 8b988e00647..33a7c0a8022 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -3717,7 +3717,7 @@ /turf/open/floor/plasteel, /area/security/brig) "ajd" = ( -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_y = 32 }, /obj/effect/turf_decal/tile/red{ @@ -35049,7 +35049,7 @@ /turf/open/floor/plating, /area/engine/atmos) "bSD" = ( -/obj/structure/sign/plaques/atmos{ +/obj/structure/plaque/static_plaque/atmos{ pixel_y = -32 }, /obj/structure/table, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 274d32c0a61..ec3c357b55a 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -28561,7 +28561,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "beE" = ( -/obj/structure/sign/plaques/atmos, +/obj/structure/plaque/static_plaque/atmos, /turf/closed/wall, /area/engine/atmos) "beF" = ( @@ -38381,7 +38381,7 @@ /turf/open/floor/plasteel, /area/security/main) "bwh" = ( -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_y = -32 }, /obj/effect/turf_decal/tile/red, @@ -50796,7 +50796,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bQW" = ( -/obj/structure/sign/plaques/golden/captain{ +/obj/structure/plaque/static_plaque/golden/captain{ pixel_x = 32 }, /turf/open/floor/wood, diff --git a/_maps/map_files/Donutstation/Donutstation.dmm b/_maps/map_files/Donutstation/Donutstation.dmm index 2058585ef3d..f8a8703deb0 100644 --- a/_maps/map_files/Donutstation/Donutstation.dmm +++ b/_maps/map_files/Donutstation/Donutstation.dmm @@ -12120,7 +12120,7 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "aBK" = ( -/obj/structure/sign/plaques/atmos{ +/obj/structure/plaque/static_plaque/atmos{ pixel_y = 32 }, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -27048,7 +27048,7 @@ }, /obj/effect/turf_decal/tile/red, /obj/effect/landmark/start/security_officer, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_y = -32 }, /turf/open/floor/plasteel, @@ -50075,7 +50075,7 @@ /turf/open/space/basic, /area/space/nearstation) "rhZ" = ( -/obj/structure/sign/plaques/golden/captain{ +/obj/structure/plaque/static_plaque/golden/captain{ pixel_y = 32 }, /obj/machinery/camera{ diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 8d81ef68e8c..c097ac56ddd 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -11015,7 +11015,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/structure/sign/plaques/golden/captain{ +/obj/structure/plaque/static_plaque/golden/captain{ pixel_y = -32 }, /obj/effect/turf_decal/bot, @@ -18365,7 +18365,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ dir = 4 }, -/obj/structure/sign/plaques/atmos, +/obj/structure/plaque/static_plaque/atmos, /turf/closed/wall/rust, /area/engine/atmos) "aCV" = ( @@ -49913,7 +49913,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bxm" = ( -/obj/structure/sign/plaques/atmos, +/obj/structure/plaque/static_plaque/atmos, /turf/closed/wall/rust, /area/engine/atmos) "bxn" = ( @@ -60418,7 +60418,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_x = -32 }, /turf/open/floor/plasteel, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 823120bd1f6..42e7bdbe95d 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -34499,7 +34499,7 @@ }, /area/engine/atmos) "bAF" = ( -/obj/structure/sign/plaques/atmos{ +/obj/structure/plaque/static_plaque/atmos{ pixel_y = 32 }, /obj/item/phone{ @@ -49759,7 +49759,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "cjK" = ( -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ desc = "A golden plaque commemorating excellence in medical care. God only knows how this ended up in this medbay."; name = "The Hippocratic Award for Excellence in Medicine"; pixel_x = -32 diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 961a26631c1..27481527c0d 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -3240,7 +3240,7 @@ /area/security/main) "ajn" = ( /obj/structure/table, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_y = 32 }, /obj/machinery/light{ @@ -39463,7 +39463,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/structure/sign/plaques/atmos{ +/obj/structure/plaque/static_plaque/atmos{ pixel_y = 32 }, /obj/machinery/light{ diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 31983c3892b..98a3d01bafc 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -7248,7 +7248,7 @@ /area/centcom/ferry) "ql" = ( /obj/structure/dresser, -/obj/structure/sign/plaques/golden/captain{ +/obj/structure/plaque/static_plaque/golden/captain{ pixel_x = 32 }, /obj/effect/turf_decal/tile/neutral{ @@ -14518,7 +14518,7 @@ /area/tdome/tdomeobserve) "GL" = ( /obj/structure/table/wood, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_y = 32 }, /obj/item/clothing/accessory/lawyers_badge{ @@ -14542,7 +14542,7 @@ /area/tdome/tdomeobserve) "GO" = ( /obj/structure/table/wood, -/obj/structure/sign/plaques/golden{ +/obj/structure/plaque/static_plaque/golden{ pixel_y = 32 }, /obj/item/clothing/accessory/medal/silver{ @@ -14817,7 +14817,7 @@ /area/tdome/tdomeobserve) "Hr" = ( /obj/structure/table/wood, -/obj/structure/sign/plaques/thunderdome{ +/obj/structure/plaque/static_plaque/thunderdome{ pixel_y = -32 }, /obj/item/clothing/accessory/medal/gold{ @@ -14843,7 +14843,7 @@ /area/tdome/tdomeobserve) "Ht" = ( /obj/structure/table/wood, -/obj/structure/sign/plaques/thunderdome{ +/obj/structure/plaque/static_plaque/thunderdome{ pixel_y = -32 }, /obj/item/clothing/accessory/medal{ diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index 2b38f09db6a..e881e56aabb 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -1158,7 +1158,7 @@ /obj/machinery/status_display/evac{ pixel_y = 32 }, -/obj/structure/sign/plaques/golden/captain{ +/obj/structure/plaque/static_plaque/golden/captain{ pixel_x = 32 }, /obj/item/gun/energy/laser/retro, diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 6fba8782ca7..9559552a71b 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -106,6 +106,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items /obj/item/stack/rods/twentyfive = 1, /obj/item/stack/sheet/metal/twenty = 1, /obj/item/stack/sheet/mineral/plasma = 1, + /obj/item/sign = 1, //assemblies /obj/item/assembly/infra = 1, @@ -192,7 +193,8 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/stack/sheet/mineral/wood/fifty = 1, /obj/item/beacon = 1, /obj/item/weaponcrafting/receiver = 1, - /obj/item/paper/fluff/stations/soap =1, //recipes count as crafting. + /obj/item/paper/fluff/stations/soap = 1, //recipes count as crafting. + /obj/item/plaque = 1, ) = 8, list(//medical and chemicals diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 6dcc6225799..08cac62460e 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -32,6 +32,8 @@ GLOBAL_LIST_EMPTY(meteor_list) // List of all meteors. GLOBAL_LIST_EMPTY(active_jammers) // List of active radio jammers GLOBAL_LIST_EMPTY(ladders) GLOBAL_LIST_EMPTY(trophy_cases) +///This is a global list of all signs you can change an existing sign or new sign backing to, when using a pen on them. +GLOBAL_LIST_EMPTY(editable_sign_types) GLOBAL_LIST_EMPTY(wire_color_directory) GLOBAL_LIST_EMPTY(wire_name_directory) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 8f2a23df9e0..29c3a88f5bc 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -211,6 +211,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \ + new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1), \ new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("CE Statue", /obj/structure/statue/gold/ce, 5, one_per_turf = 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 92863243f6b..dbfb7c2f75c 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -626,7 +626,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/large/empty, 3), \ new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/food/drinks/colocup, 1), \ new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2), \ - new /datum/stack_recipe("blank sign", /obj/item/sign_backing, 1))) + new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1))) /obj/item/stack/sheet/plastic name = "plastic" diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index dd887c061ca..5275a5d2cb6 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -7,7 +7,7 @@ max_integrity = 500 integrity_failure = 0.5 armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - buildable_sign = 0 + buildable_sign = FALSE var/panel_open = FALSE var/datum/barsign/chosen_sign diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm new file mode 100644 index 00000000000..a2da8f6d07e --- /dev/null +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -0,0 +1,183 @@ +/obj/structure/plaque //This is a plaque you can craft with gold, then permanently engrave a title and description on, with a fountain pen. + icon = 'icons/obj/decals.dmi' + icon_state = "blankplaque" + name = "blank plaque" + desc = "A blank plaque, use a fancy pen to engrave it. It can be detatched from the wall with a wrench." + anchored = TRUE + opacity = FALSE + density = FALSE + layer = SIGN_LAYER + custom_materials = list(/datum/material/gold = 2000) + max_integrity = 200 //Twice as durable as regular signs. + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE + ///Custom plaque structures and items both start "unengraved", once engraved with a fountain pen their text can't be altered again. Static plaques are already engraved. + var/engraved = FALSE + +/obj/item/plaque //The item version of the above. + icon = 'icons/obj/decals.dmi' + icon_state = "blankplaque" + 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 + custom_materials = list(/datum/material/gold = 2000) + max_integrity = 200 + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + ///This points the item to make the proper structure when placed on a wall. + var/plaque_path = /obj/structure/plaque + ///Custom plaque structures and items both start "unengraved", once engraved with a fountain pen their text can't be altered again. + var/engraved = FALSE + +/obj/structure/plaque/attack_hand(mob/user) + . = ..() + if(.) + return + user.examinate(src) + +/obj/structure/plaque/wrench_act(mob/living/user, obj/item/wrench/I) + . = ..() + user.visible_message("[user] starts removing [src]...", \ + "You start unfastening [src].") + I.play_tool_sound(src) + if(!I.use_tool(src, user, 4 SECONDS)) + return TRUE + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + user.visible_message("[user] unfastens [src].", \ + "You unfasten [src].") + var/obj/item/plaque/unwrenched_plaque = new (get_turf(user)) + if(engraved) //If it's still just a basic unengraved plaque, we can (and should) skip some of the below variable transfers. + 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.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. + return TRUE + +/obj/structure/plaque/welder_act(mob/living/user, obj/item/I) + . = ..() + if(user.a_intent == INTENT_HARM) + return FALSE + if(obj_integrity == max_integrity) + to_chat(user, "This plaque is already in perfect condition.") + return TRUE + if(!I.tool_start_check(user, amount=0)) + return TRUE + user.visible_message("[user] starts repairing [src]...", \ + "You start repairing [src].") + if(!I.use_tool(src, user, 4 SECONDS, volume = 50)) + return TRUE + user.visible_message("[user] finishes repairing [src].", \ + "You finish repairing [src].") + obj_integrity = max_integrity + return TRUE + +/obj/item/plaque/welder_act(mob/living/user, obj/item/I) + . = ..() + if(user.a_intent == INTENT_HARM) + return FALSE + if(obj_integrity == max_integrity) + to_chat(user, "This plaque is already in perfect condition.") + return TRUE + if(!I.tool_start_check(user, amount=0)) + return TRUE + user.visible_message("[user] starts repairing [src]...", \ + "You start repairing [src].") + if(!I.use_tool(src, user, 4 SECONDS, volume = 50)) + return TRUE + user.visible_message("[user] finishes repairing [src].", \ + "You finish repairing [src].") + obj_integrity = max_integrity + return TRUE + +/obj/structure/plaque/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/pen/fountain)) + if(engraved) + to_chat(user, "This plaque has already been engraved.") + return + var/namechoice = input(user, "Title this plaque. (e.g. 'Best HoP Award', 'Great Ashwalker War Memorial')", "Plaque Customization") + if(!namechoice) + return + var/descriptionchoice = input(user, "Engrave this plaque's text.", "Plaque Customization") + if(!descriptionchoice) + return + if(!Adjacent(user)) //Make sure user is adjacent still + to_chat(user, "You need to stand next to the plaque to engrave it!") + return + user.visible_message("[user] begins engraving [src].", \ + "You begin engraving [src].") + if(!do_after(user, 4 SECONDS, target = src)) //This spits out a visible message that somebody is engraving a plaque, then has a delay. + return + name = "\improper [namechoice]" //We want improper here so examine doesn't get weird if somebody capitalizes the plaque title. + desc = "The plaque reads: '[descriptionchoice]'" + engraved = TRUE //The plaque now has a name, description, and can't be altered again. + user.visible_message("[user] engraves [src].", \ + "You engrave [src].") + return + if(istype(I, /obj/item/pen)) + if(engraved) + to_chat(user, "This plaque has already been engraved, and your pen isn't fancy enough to engrave it anyway! Find a fountain pen.") + return + to_chat(user, "Your pen isn't fancy enough to engrave this! Find a fountain pen.") //Go steal the Curator's. + return + return ..() + +/obj/item/plaque/attackby(obj/item/I, mob/user, params) //Same as part of the above, except for the item in hand instead of the structure. + if(istype(I, /obj/item/pen/fountain)) + if(engraved) + to_chat(user, "This plaque has already been engraved.") + return + var/namechoice = input(user, "Title this plaque. (e.g. 'Best HoP Award', 'Great Ashwalker War Memorial')", "Plaque Customization") + if(!namechoice) + return + var/descriptionchoice = input(user, "Engrave this plaque's text.", "Plaque Customization") + if(!descriptionchoice) + return + if(!Adjacent(user)) //Make sure user is adjacent still + to_chat(user, "You need to stand next to the plaque to engrave it!") + return + user.visible_message("[user] begins engraving [src].", \ + "You begin engraving [src].") + if(!do_after(user, 40, target = src)) //This spits out a visible message that somebody is engraving a plaque, then has a delay. + return + name = "\improper [namechoice]" //We want improper here so examine doesn't get weird if somebody capitalizes the plaque title. + desc = "The plaque reads: '[descriptionchoice]'" + engraved = TRUE //The plaque now has a name, description, and can't be altered again. + user.visible_message("[user] engraves [src].", \ + "You engrave [src].") + return + if(istype(I, /obj/item/pen)) + if(engraved) + to_chat(user, "This plaque has already been engraved, and your pen isn't fancy enough to engrave it anyway! Find a fountain pen.") + return + to_chat(user, "Your pen isn't fancy enough to engrave this! Find a fountain pen.") //Go steal the Curator's. + return + return ..() + +/obj/item/plaque/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!iswallturf(target) || !proximity) + return + var/turf/target_turf = target + var/turf/user_turf = get_turf(user) + var/obj/structure/plaque/placed_plaque = new plaque_path(user_turf) //We place the plaque on the turf the user is standing, and pixel shift it to the target wall, as below. + //This is to mimic how signs and other wall objects are usually placed by mappers, and so they're only visible from one side of a wall. + var/dir = get_dir(user_turf, target_turf) + if(dir & NORTH) + placed_plaque.pixel_y = 32 + else if(dir & SOUTH) + placed_plaque.pixel_y = -32 + if(dir & EAST) + placed_plaque.pixel_x = 32 + else if(dir & WEST) + placed_plaque.pixel_x = -32 + user.visible_message("[user] fastens [src] to [target_turf].", \ + "You attach [src] to [target_turf].") + playsound(target_turf, 'sound/items/deconstruct.ogg', 50, TRUE) + if(engraved) + placed_plaque.name = name + placed_plaque.desc = desc + placed_plaque.engraved = engraved + placed_plaque.obj_integrity = obj_integrity + placed_plaque.setDir(dir) + qdel(src) diff --git a/code/game/objects/structures/signs/signs_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm similarity index 80% rename from code/game/objects/structures/signs/signs_plaques.dm rename to code/game/objects/structures/plaques/static_plaques.dm index 68caf105d01..1ac3ec7546d 100644 --- a/code/game/objects/structures/signs/signs_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -1,26 +1,27 @@ -//plaques and memorials +//These are static plaques, they are made of gold and start engraved with a title and description. -/obj/structure/sign/plaques - name = "plaque" - desc = "A plaque commemorating an event." - icon_state = "atmosplaque" +/obj/structure/plaque/static_plaque + engraved = TRUE -/obj/structure/sign/plaques/atmos +/obj/structure/plaque/static_plaque/atmos name = "\improper FEA Atmospherics Division plaque" desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." -/obj/structure/sign/plaques/thunderdome +/obj/structure/plaque/static_plaque/thunderdome name = "Thunderdome Plaque" desc = "This plaque commemorates those who have fallen in glorious combat. For all the charred, dizzy, and beaten men who have died in its hands." -/obj/structure/sign/plaques/golden +/obj/structure/plaque/static_plaque/golden name = "The Most Robust Men Award for Robustness" desc = "To be Robust is not an action or a way of life, but a mental state. Only those with the force of Will strong enough to act during a crisis, saving friend from foe, are truly Robust. Stay Robust my friends." icon_state = "goldenplaque" -/obj/structure/sign/plaques/golden/captain +/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. +//See: code>game>objects>structures>signs>_signs.dm + /obj/structure/sign/plaques/kiddie name = "\improper AI developers plaque" desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be disabled. Beneath the image, someone has scratched the word \"PACKETS\"." @@ -31,7 +32,7 @@ desc = "A plaque commemorating the fallen, may they rest in peace, forever asleep amongst the stars. Someone has drawn a picture of a crying badger at the bottom." /obj/structure/sign/plaques/kiddie/library - name = "Library Rules Sign" + name = "\improper Library Rules Sign" desc = "A long list of rules to be followed when in the library, extolling the virtues of being quiet at all times and threatening those who would dare eat hot food inside." /obj/structure/sign/plaques/kiddie/perfect_man @@ -43,6 +44,6 @@ desc = "A guide to the drone shell dispenser, detailing the constructive and destructive applications of modern repair drones, as well as the development of the incorruptible cyborg servants of tomorrow, available today." /obj/structure/sign/plaques/deempisi - name = "Mr. Deempisi portrait" + 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" diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index ed3a506d5fb..5b9b29bafb5 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -1,28 +1,44 @@ /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 layer = SIGN_LAYER + custom_materials = list(/datum/material/plastic = 2000) max_integrity = 100 armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/buildable_sign = 1 //unwrenchable and modifiable + ///Determines if a sign is unwrenchable. + var/buildable_sign = TRUE rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE + 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. -/obj/structure/sign/basic - name = "blank sign" - desc = "How can signs be real if our eyes aren't real? Use a pen to change the decal." +/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" + 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 + ///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 -/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE) - if(BURN) - playsound(loc, 'sound/items/welder.ogg', 80, TRUE) +/obj/item/sign/Initialize() //Signs not attached to walls are always rotated so they look like they're laying horizontal. + . = ..() + var/matrix/M = matrix() + M.Turn(90) + transform = M /obj/structure/sign/attack_hand(mob/user) . = ..() @@ -30,125 +46,164 @@ return user.examinate(src) +/** + * This proc populates GLOBAL_LIST_EMPTY(editable_sign_types) + * + * The first time a pen is used on any sign, this populates GLOBAL_LIST_EMPTY(editable_sign_types), creating a global list of all the signs that you can set a sign backing to with a pen. + */ +/proc/populate_editable_sign_types() + for(var/s in subtypesof(/obj/structure/sign)) + var/obj/structure/sign/potential_sign = s + if(!initial(potential_sign.is_editable)) + continue + GLOB.editable_sign_types[initial(potential_sign.sign_change_name)] = potential_sign + GLOB.editable_sign_types = sortList(GLOB.editable_sign_types) //Alphabetizes the results. + +/obj/structure/sign/wrench_act(mob/living/user, obj/item/wrench/I) + . = ..() + user.visible_message("[user] starts removing [src]...", \ + "You start unfastening [src].") + I.play_tool_sound(src) + if(!I.use_tool(src, user, 4 SECONDS)) + return TRUE + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + 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. + 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.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. + return TRUE + +/obj/structure/sign/welder_act(mob/living/user, obj/item/I) + . = ..() + if(user.a_intent == INTENT_HARM) + return FALSE + if(obj_integrity == max_integrity) + to_chat(user, "This sign is already in perfect condition.") + return TRUE + if(!I.tool_start_check(user, amount=0)) + return TRUE + user.visible_message("[user] starts repairing [src]...", \ + "You start repairing [src].") + if(!I.use_tool(src, user, 4 SECONDS, volume =50 )) + return TRUE + user.visible_message("[user] finishes repairing [src].", \ + "You finish repairing [src].") + obj_integrity = max_integrity + return TRUE + +/obj/item/sign/welder_act(mob/living/user, obj/item/I) + . = ..() + if(user.a_intent == INTENT_HARM) + return FALSE + if(obj_integrity == max_integrity) + to_chat(user, "This sign is already in perfect condition.") + return TRUE + if(!I.tool_start_check(user, amount=0)) + return TRUE + user.visible_message("[user] starts repairing [src]...", \ + "You start repairing [src].") + if(!I.use_tool(src, user, 4 SECONDS, volume =50 )) + return TRUE + user.visible_message("[user] finishes repairing [src].", \ + "You finish repairing [src].") + obj_integrity = max_integrity + return TRUE + /obj/structure/sign/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH && buildable_sign) - user.visible_message("[user] starts removing [src]...", \ - "You start unfastening [src].") - I.play_tool_sound(src) - if(I.use_tool(src, user, 40)) - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - user.visible_message("[user] unfastens [src].", \ - "You unfasten [src].") - var/obj/item/sign_backing/SB = new (get_turf(user)) - SB.icon_state = icon_state - SB.sign_path = type - SB.setDir(dir) - qdel(src) - return - else if(istype(I, /obj/item/pen) && buildable_sign) - var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \ - "Hydroponics", "Xenobiology", "Test Chamber","Firing Range", "Extreme Cold", "Extreme Heat", "Gas Mask", "Nanites Lab", "Maintenance", "Reactive Chemicals") - var/obj/structure/sign/sign_type - switch(input(user, "Select a sign type.", "Sign Customization") as null|anything in sortList(sign_types)) - if("Blank") - sign_type = /obj/structure/sign/basic - if("Secure Area") - sign_type = /obj/structure/sign/warning/securearea - if("Biohazard") - sign_type = /obj/structure/sign/warning/biohazard - if("High Voltage") - sign_type = /obj/structure/sign/warning/electricshock - if("Radiation") - sign_type = /obj/structure/sign/warning/radiation - if("Hard Vacuum Ahead") - sign_type = /obj/structure/sign/warning/vacuum - if("Disposal: Leads To Space") - sign_type = /obj/structure/sign/warning/deathsposal - if("Danger: Fire") - sign_type = /obj/structure/sign/warning/fire - if("No Smoking") - sign_type = /obj/structure/sign/warning/nosmoking/circle - if("Test Chamber") - sign_type = /obj/structure/sign/warning/testchamber - if("Firing Range") - sign_type = /obj/structure/sign/warning/firingrange - if("Extreme Cold") - sign_type = /obj/structure/sign/warning/coldtemp - if("Extreme Heat") - sign_type = /obj/structure/sign/warning/hottemp - if("Gas Mask") - sign_type = /obj/structure/sign/warning/gasmask - if("Reactive Chemicals") - sign_type = /obj/structure/sign/warning/chemdiamond - if("Medbay") - sign_type = /obj/structure/sign/departments/medbay/alt - if("Science") - sign_type = /obj/structure/sign/departments/science - if("Chemistry") - sign_type = /obj/structure/sign/departments/chemistry - if("Hydroponics") - sign_type = /obj/structure/sign/departments/botany - if("Xenobiology") - sign_type = /obj/structure/sign/departments/xenobio - if("Nanites Lab") - sign_type = /obj/structure/sign/departments/nanites - if("Maintenance") - sign_type = /obj/structure/sign/departments/mait - - //Make sure user is adjacent still - if(!Adjacent(user)) + if(is_editable && istype(I, /obj/item/pen)) + if(!length(GLOB.editable_sign_types)) + populate_editable_sign_types() + if(!length(GLOB.editable_sign_types)) + CRASH("GLOB.editable_sign_types failed to populate") + var/choice = input(user, "Select a sign type.", "Sign Customization") as null|anything in GLOB.editable_sign_types + if(!choice) return - - if(!sign_type) + if(!Adjacent(user)) //Make sure user is adjacent still. + to_chat(user, "You need to stand next to the sign to change it!") return - - //It's import to clone the pixel layout information + user.visible_message("[user] begins changing [src].", \ + "You begin changing [src].") + if(!do_after(user, 4 SECONDS, target = src)) //Small delay for changing signs instead of it being instant, so somebody could be shoved or stunned to prevent them from doing so. + return + var/sign_type = GLOB.editable_sign_types[choice] + //It's import to clone the pixel layout information. //Otherwise signs revert to being on the turf and - //move jarringly - var/obj/structure/sign/newsign = new sign_type(get_turf(src)) - newsign.pixel_x = pixel_x - newsign.pixel_y = pixel_y + //move jarringly. + var/obj/structure/sign/changedsign = new sign_type(get_turf(src)) + changedsign.pixel_x = pixel_x + changedsign.pixel_y = pixel_y + changedsign.obj_integrity = obj_integrity qdel(src) - else - return ..() + user.visible_message("[user] finishes changing the sign.", \ + "You finish changing the sign.") + return + return ..() -/obj/item/sign_backing - name = "sign backing" - desc = "A sign with adhesive backing. Use a pen to change the decal once installed." - icon = 'icons/obj/decals.dmi' - icon_state = "backing" - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/plastic = 2000) - resistance_flags = FLAMMABLE - var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf +/obj/item/sign/attackby(obj/item/I, mob/user, params) + if(is_editable && istype(I, /obj/item/pen)) + if(!length(GLOB.editable_sign_types)) + populate_editable_sign_types() + if(!length(GLOB.editable_sign_types)) + CRASH("GLOB.editable_sign_types failed to populate") + var/choice = input(user, "Select a sign type.", "Sign Customization") as null|anything in GLOB.editable_sign_types + if(!choice) + return + if(!Adjacent(user)) //Make sure user is adjacent still. + to_chat(user, "You need to stand next to the sign to change it!") + return + if(!choice) + return + user.visible_message("You begin changing [src].") + if(!do_after(user, 4 SECONDS, target = src)) + 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." + icon_state = initial(sign_type.icon_state) + sign_path = sign_type + user.visible_message("You finish changing the sign.") + return + return ..() -/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity) +/obj/item/sign/afterattack(atom/target, mob/user, proximity) . = ..() - if(isturf(target) && proximity) - var/turf/T = target - user.visible_message("[user] fastens [src] to [T].", \ - "You attach the sign to [T].") - playsound(T, 'sound/items/deconstruct.ogg', 50, TRUE) - var/obj/structure/sign/S = new sign_path(T) - S.setDir(dir) - qdel(src) - -/obj/item/sign_backing/Move(atom/new_loc, direct = 0) - // pulling, throwing, or conveying a sign backing does not rotate it - var/old_dir = dir - . = ..() - setDir(old_dir) - -/obj/item/sign_backing/attack_self(mob/user) - . = ..() - setDir(turn(dir, 90)) + if(!iswallturf(target) || !proximity) + return + var/turf/target_turf = target + var/turf/user_turf = get_turf(user) + var/obj/structure/sign/placed_sign = new sign_path(user_turf) //We place the sign on the turf the user is standing, and pixel shift it to the target wall, as below. + //This is to mimic how signs and other wall objects are usually placed by mappers, and so they're only visible from one side of a wall. + var/dir = get_dir(user_turf, target_turf) + if(dir & NORTH) + placed_sign.pixel_y = 32 + else if(dir & SOUTH) + placed_sign.pixel_y = -32 + if(dir & EAST) + placed_sign.pixel_x = 32 + else if(dir & WEST) + placed_sign.pixel_x = -32 + user.visible_message("[user] fastens [src] to [target_turf].", \ + "You attach the sign to [target_turf].") + playsound(target_turf, 'sound/items/deconstruct.ogg', 50, TRUE) + placed_sign.obj_integrity = obj_integrity + placed_sign.setDir(dir) + qdel(src) /obj/structure/sign/nanotrasen - name = "\improper Nanotrasen logo" + name = "\improper Nanotrasen logo sign" + sign_change_name = "Corporate Logo - Nanotrasen" desc = "A sign with the Nanotrasen logo on it. Glory to Nanotrasen!" icon_state = "nanotrasen" + is_editable = TRUE /obj/structure/sign/logo - name = "\improper Nanotrasen logo" + name = "\improper Nanotrasen logo sign" desc = "The Nanotrasen corporate logo." icon_state = "nanotrasen_sign1" diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm index 907ad30fe3f..0de5621ae0a 100644 --- a/code/game/objects/structures/signs/signs_departments.dm +++ b/code/game/objects/structures/signs/signs_departments.dm @@ -1,96 +1,163 @@ //departmental signs -/obj/structure/sign/departments/examroom - name = "\improper EXAM ROOM" - desc = "A guidance sign which reads 'EXAM ROOM'." - icon_state = "examroom" -/obj/structure/sign/departments/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map - name = "\improper SCIENCE" - desc = "A sign labelling an area where research and science is performed." - icon_state = "science1" - -/obj/structure/sign/departments/chemistry - name = "\improper CHEMISTRY" - desc = "A sign labelling an area containing chemical equipment." - icon_state = "chemistry1" - -/obj/structure/sign/departments/chemistry/pharmacy - name = "\improper PHARMACY" - desc = "A sign labelling an area containing pharmacy equipment." - icon_state = "pharmacy" - -/obj/structure/sign/departments/botany - name = "\improper HYDROPONICS" - desc = "A sign labelling an area as a place where plants are grown." - icon_state = "hydro1" - -/obj/structure/sign/departments/xenobio - name = "\improper XENOBIOLOGY" - desc = "A sign labelling an area as a place where xenobiological entities are researched." - icon_state = "xenobio" - -/obj/structure/sign/departments/evac - name = "\improper EVACUATION" - desc = "A sign labelling an area where evacuation procedures take place." - icon_state = "evac" - -/obj/structure/sign/departments/drop - name = "\improper DROP PODS" - desc = "A sign labelling an area where drop pod loading procedures take place." - icon_state = "drop" - -/obj/structure/sign/departments/custodian - name = "\improper CUSTODIAN" - desc = "A sign labelling an area where the custodian works." - icon_state = "custodian" - -/obj/structure/sign/departments/engineering - name = "\improper ENGINEERING" - desc = "A sign labelling an area where engineers work." - icon_state = "engine" - -/obj/structure/sign/departments/cargo - name = "\improper CARGO" - desc = "A sign labelling an area where cargo ships dock." - icon_state = "cargo" - -/obj/structure/sign/departments/security - name = "\improper SECURITY" - desc = "A sign labelling an area where the law is law." - icon_state = "security" - -/obj/structure/sign/departments/holy - name = "\improper HOLY" - desc = "A sign labelling a religious area." - icon_state = "holy" - -/obj/structure/sign/departments/restroom - name = "\improper RESTROOM" - desc = "A sign labelling a restroom." - icon_state = "restroom" +///////MEDBAY /obj/structure/sign/departments/medbay - name = "\improper MEDBAY" + name = "\improper Medbay sign" + sign_change_name = "Department - Medbay" desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." icon_state = "bluecross" + is_editable = TRUE /obj/structure/sign/departments/medbay/alt + name = "\improper Medbay sign" + sign_change_name = "Department - Medbay Alt" + desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." icon_state = "bluecross2" + is_editable = TRUE -/obj/structure/sign/departments/mait - name = "\improper MAINTENANCE TUNNEL" - desc = "A sign labelling an area where the departments of the station are linked together." - icon_state = "mait1" +/obj/structure/sign/departments/examroom + name = "\improper Exam Room sign" + sign_change_name = "Department - Medbay: Exam Room" + desc = "A guidance sign which reads 'Exam Room'." + icon_state = "examroom" + is_editable = TRUE -/obj/structure/sign/departments/mait/alt - icon_state = "mait2" +/obj/structure/sign/departments/chemistry + name = "\improper Chemistry sign" + sign_change_name = "Department - Medbay: Chemistry" + desc = "A sign labelling an area containing chemical equipment." + icon_state = "chemistry1" + is_editable = TRUE -/obj/structure/sign/departments/nanites - name = "\improper NANITE LAB" - desc = "A sign labelling an area where testing and development of nanites is performed." - icon_state = "nanites" +/obj/structure/sign/departments/chemistry/pharmacy + name = "\improper Pharmacy sign" + sign_change_name = "Department - Medbay: Pharmacy" + desc = "A sign labelling an area containing pharmacy equipment." + icon_state = "pharmacy" + is_editable = TRUE + /obj/structure/sign/departments/psychology - name = "\improper PSYCHOLOGY" + name = "\improper Psychology sign" + sign_change_name = "Department - Medbay: Psychology" desc = "A sign labelling where the Psychologist works, they can probably help you get your head straight." icon_state = "psychology" + is_editable = TRUE + +///////ENGINEERING + +/obj/structure/sign/departments/engineering + name = "\improper Engineering sign" + sign_change_name = "Department - Engineering" + desc = "A sign labelling an area where engineers work." + icon_state = "engine" + is_editable = TRUE + +///////SCIENCE + +/obj/structure/sign/departments/science + name = "\improper Science sign" + sign_change_name = "Department - Science" + desc = "A sign labelling an area where research and science is performed." + icon_state = "science1" + is_editable = TRUE + +/obj/structure/sign/departments/science/alt + name = "\improper Science sign" + sign_change_name = "Department - Science Alt" + desc = "A sign labelling an area where research and science is performed." + icon_state = "science2" + is_editable = TRUE + +/obj/structure/sign/departments/xenobio + name = "\improper Xenobiolgoy sign" + sign_change_name = "Department - Science: Xenobiology" + desc = "A sign labelling an area as a place where xenobiological entities are researched." + icon_state = "xenobio" + is_editable = TRUE + +/obj/structure/sign/departments/nanites + name = "\improper Nanite Lab sign" + sign_change_name = "Department - Science: Nanites" + desc = "A sign labelling an area where testing and development of nanites is performed." + icon_state = "nanites" + is_editable = TRUE + +///////SERVICE + +/obj/structure/sign/departments/botany + name = "\improper Botany sign" + sign_change_name = "Department - Botany" + desc = "A sign labelling an area as a place where plants are grown." + icon_state = "hydro1" + is_editable = TRUE + +/obj/structure/sign/departments/custodian + name = "\improper Janitor sign" + sign_change_name = "Department - Janitor" + desc = "A sign labelling an area where the janitor works." + icon_state = "custodian" + is_editable = TRUE + +/obj/structure/sign/departments/holy + name = "\improper Chapel sign" + sign_change_name = "Department - Chapel" + desc = "A sign labelling a religious area." + icon_state = "holy" + is_editable = TRUE + +///////SUPPLY + +/obj/structure/sign/departments/cargo + name = "\improper Cargo sign" + sign_change_name = "Department - Cargo" + desc = "A sign labelling an area where cargo ships dock." + icon_state = "cargo" + is_editable = TRUE + +///////SECURITY + +/obj/structure/sign/departments/security + name = "\improper Security sign" + sign_change_name = "Department - Security" + desc = "A sign labelling an area where the law is law." + icon_state = "security" + is_editable = TRUE + +////MISC LOCATIONS + +/obj/structure/sign/departments/restroom + name = "\improper Restroom sign" + sign_change_name = "Location - Restroom" + desc = "A sign labelling a restroom." + icon_state = "restroom" + is_editable = TRUE + +/obj/structure/sign/departments/mait + name = "\improper Maintenance Tunnel sign" + sign_change_name = "Location - Maintenance" + desc = "A sign labelling an area where the departments of the station are linked together." + icon_state = "mait1" + is_editable = TRUE + +/obj/structure/sign/departments/mait/alt + name = "\improper Maintenance Tunnel sign" + sign_change_name = "Location - Maintenance Alt" + desc = "A sign labelling an area where the departments of the station are linked together." + icon_state = "mait2" + is_editable = TRUE + +/obj/structure/sign/departments/evac + name = "\improper Evacuation sign" + sign_change_name = "Location - Evacuation" + desc = "A sign labelling an area where evacuation procedures take place." + icon_state = "evac" + is_editable = TRUE + +/obj/structure/sign/departments/drop + name = "\improper Drop Pods sign" + sign_change_name = "Location - Drop Pods" + desc = "A sign labelling an area where drop pod loading procedures take place." + icon_state = "drop" + is_editable = TRUE diff --git a/code/game/objects/structures/signs/signs_maps.dm b/code/game/objects/structures/signs/signs_maps.dm index 63de37f2e8c..ba79b6ff93f 100644 --- a/code/game/objects/structures/signs/signs_maps.dm +++ b/code/game/objects/structures/signs/signs_maps.dm @@ -2,7 +2,7 @@ /obj/structure/sign/map name = "station map" - desc = "A framed picture of the station." + desc = "A navigational chart of the station." max_integrity = 500 /obj/structure/sign/map/left @@ -12,47 +12,47 @@ icon_state = "map-right" /obj/structure/sign/directions/science - name = "science department" + name = "science department sign" desc = "A direction sign, pointing out which way the Science department is." icon_state = "direction_sci" /obj/structure/sign/directions/engineering - name = "engineering department" + name = "engineering department sign" desc = "A direction sign, pointing out which way the Engineering department is." icon_state = "direction_eng" /obj/structure/sign/directions/security - name = "security department" + name = "security department sign" desc = "A direction sign, pointing out which way the Security department is." icon_state = "direction_sec" /obj/structure/sign/directions/medical - name = "medical bay" - desc = "A direction sign, pointing out which way the Medical Bay is." + name = "medbay sign" + desc = "A direction sign, pointing out which way the Medbay is." icon_state = "direction_med" /obj/structure/sign/directions/evac - name = "escape arm" + name = "evacuation sign" desc = "A direction sign, pointing out which way the escape shuttle dock is." icon_state = "direction_evac" /obj/structure/sign/directions/supply - name = "cargo bay" + name = "cargo sign" desc = "A direction sign, pointing out which way the Cargo Bay is." icon_state = "direction_supply" /obj/structure/sign/directions/command - name = "command department" + name = "command department sign" desc = "A direction sign, pointing out which way the Command department is." icon_state = "direction_bridge" /obj/structure/sign/directions/vault - name = "vault directions" + name = "vault sign" desc = "A direction sign, pointing out which way the station's Vault is." icon_state = "direction_vault" /obj/structure/sign/directions/upload - name = "upload directions" + name = "upload sign" desc = "A direction sign, pointing out which way the station's AI Upload is." icon_state = "direction_upload" diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm index 3a35f2d26ea..9b0867b5520 100644 --- a/code/game/objects/structures/signs/signs_warning.dm +++ b/code/game/objects/structures/signs/signs_warning.dm @@ -1,122 +1,181 @@ +//warning signs + + +///////DANGEROUS THINGS + /obj/structure/sign/warning - name = "\improper WARNING" + name = "\improper WARNING sign" + sign_change_name = "Warning" desc = "A warning sign." icon_state = "securearea" + is_editable = TRUE /obj/structure/sign/warning/securearea - name = "\improper SECURE AREA" + name = "\improper SECURE AREA sign" + sign_change_name = "Warning - Secure Area" desc = "A warning sign which reads 'SECURE AREA'." + is_editable = TRUE /obj/structure/sign/warning/docking - name = "\improper KEEP CLEAR: DOCKING AREA" + name = "\improper KEEP CLEAR: DOCKING AREA sign" + sign_change_name = "Warning - Docking Area" desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'." + is_editable = TRUE /obj/structure/sign/warning/biohazard - name = "\improper BIOHAZARD" + name = "\improper BIOHAZARD sign" + sign_change_name = "Warning - Biohazard" desc = "A warning sign which reads 'BIOHAZARD'." icon_state = "bio" + is_editable = TRUE /obj/structure/sign/warning/electricshock - name = "\improper HIGH VOLTAGE" + name = "\improper HIGH VOLTAGE sign" + sign_change_name = "Warning - High Voltage" desc = "A warning sign which reads 'HIGH VOLTAGE'." icon_state = "shock" + is_editable = TRUE /obj/structure/sign/warning/vacuum - name = "\improper HARD VACUUM AHEAD" + name = "\improper HARD VACUUM AHEAD sign" + sign_change_name = "Warning - Hard Vacuum" desc = "A warning sign which reads 'HARD VACUUM AHEAD'." icon_state = "space" + is_editable = TRUE /obj/structure/sign/warning/vacuum/external - name = "\improper EXTERNAL AIRLOCK" + name = "\improper EXTERNAL AIRLOCK sign" + sign_change_name = "Warning - External Airlock" desc = "A warning sign which reads 'EXTERNAL AIRLOCK'." layer = MOB_LAYER + is_editable = TRUE /obj/structure/sign/warning/deathsposal - name = "\improper DISPOSAL: LEADS TO SPACE" + name = "\improper DISPOSAL: LEADS TO SPACE sign" + sign_change_name = "Warning - Disposals: Leads to Space" desc = "A warning sign which reads 'DISPOSAL: LEADS TO SPACE'." icon_state = "deathsposal" + is_editable = TRUE /obj/structure/sign/warning/bodysposal - name = "\improper DISPOSAL: LEADS TO MORGUE" + name = "\improper DISPOSAL: LEADS TO MORGUE sign" + sign_change_name = "Warning - Disposals: Leads to Morgue" desc = "A warning sign which reads 'DISPOSAL: LEADS TO MORGUE'." icon_state = "bodysposal" - -/obj/structure/sign/warning/pods - name = "\improper ESCAPE PODS" - desc = "A warning sign which reads 'ESCAPE PODS'." - icon_state = "pods" + is_editable = TRUE /obj/structure/sign/warning/fire - name = "\improper DANGER: FIRE" + name = "\improper DANGER: FIRE sign" + sign_change_name = "Warning - Fire Hazard" desc = "A warning sign which reads 'DANGER: FIRE'." icon_state = "fire" resistance_flags = FIRE_PROOF + is_editable = TRUE /obj/structure/sign/warning/nosmoking - name = "\improper NO SMOKING" + name = "\improper NO SMOKING sign" + sign_change_name = "Warning - No Smoking" desc = "A warning sign which reads 'NO SMOKING'." icon_state = "nosmoking2" resistance_flags = FLAMMABLE + is_editable = TRUE /obj/structure/sign/warning/nosmoking/circle + name = "\improper NO SMOKING sign" + sign_change_name = "Warning - No Smoking Alt" + desc = "A warning sign which reads 'NO SMOKING'." icon_state = "nosmoking" + is_editable = TRUE /obj/structure/sign/warning/radiation - name = "\improper HAZARDOUS RADIATION" + name = "\improper HAZARDOUS RADIATION sign" + sign_change_name = "Warning - Radiation" desc = "A warning sign alerting the user of potential radiation hazards." icon_state = "radiation" + is_editable = TRUE /obj/structure/sign/warning/radiation/rad_area - name = "\improper RADIOACTIVE AREA" + name = "\improper RADIOACTIVE AREA sign" + sign_change_name = "Warning - Radioactive Area" desc = "A warning sign which reads 'RADIOACTIVE AREA'." + is_editable = TRUE /obj/structure/sign/warning/xeno_mining - name = "\improper DANGEROUS ALIEN LIFE" + name = "\improper DANGEROUS ALIEN LIFE sign" + sign_change_name = "Warning - Xenos" desc = "A sign that warns would-be travellers of hostile alien life in the vicinity." icon = 'icons/obj/mining.dmi' icon_state = "xeno_warning" + is_editable = TRUE /obj/structure/sign/warning/enginesafety - name = "\improper ENGINEERING SAFETY" + name = "\improper ENGINEERING SAFETY sign" + sign_change_name = "Warning - Engineering Safety Protocols" desc = "A sign detailing the various safety protocols when working on-site to ensure a safe shift." icon_state = "safety" + is_editable = TRUE /obj/structure/sign/warning/explosives - name = "\improper HIGH EXPLOSIVES" + name = "\improper HIGH EXPLOSIVES sign" + sign_change_name = "Warning - Explosives" desc = "A warning sign which reads 'HIGH EXPLOSIVES'." icon_state = "explosives" + is_editable = TRUE /obj/structure/sign/warning/explosives/alt - name = "\improper HIGH EXPLOSIVES" + name = "\improper HIGH EXPLOSIVES sign" + sign_change_name = "Warning - Explosives Alt" desc = "A warning sign which reads 'HIGH EXPLOSIVES'." icon_state = "explosives2" + is_editable = TRUE /obj/structure/sign/warning/testchamber - name = "\improper TESTING AREA" - desc = "A sign that warns of high-power testing equipment in the area. That's either a really powerful laser... or a satellite landing on some person's head." + name = "\improper TESTING AREA sign" + sign_change_name = "Warning - Testing Area" + desc = "A sign that warns of high-power testing equipment in the area." icon_state = "testchamber" + is_editable = TRUE /obj/structure/sign/warning/firingrange - name = "\improper FIRING RANGE" + name = "\improper FIRING RANGE sign" + sign_change_name = "Warning - Firing Range" desc = "A sign reminding you to remain behind the firing line, and to wear ear protection." icon_state = "firingrange" + is_editable = TRUE /obj/structure/sign/warning/coldtemp - name = "\improper FREEZING AIR" + name = "\improper FREEZING AIR sign" + sign_change_name = "Warning - Temp: Cold" desc = "A sign that warns of extremely cold air in the vicinity." icon_state = "cold" + is_editable = TRUE /obj/structure/sign/warning/hottemp - name = "\improper SUPERHEATED AIR" + name = "\improper SUPERHEATED AIR sign" + sign_change_name = "Warning - Temp: Hot" desc = "A sign that warns of extremely hot air in the vicinity." icon_state = "heat" + is_editable = TRUE /obj/structure/sign/warning/gasmask - name = "\improper CONTAMINATED AIR" - desc = "A sign that warns of dangerous particulates in the air, instructing you to wear a filtration device." + name = "\improper CONTAMINATED AIR sign" + sign_change_name = "Warning - Contaminated Air" + desc = "A sign that warns of dangerous particulates or gasses in the air, instructing you to wear a filtration device." icon_state = "gasmask" + is_editable = TRUE /obj/structure/sign/warning/chemdiamond name = "\improper REACTIVE CHEMICALS" + sign_change_name = "Warning - Hazardous Chemicals sign" desc = "A sign that warns of potentially reactive chemicals nearby, be they explosive, flamable, or acidic." icon_state = "chemdiamond" + is_editable = TRUE + +////MISC LOCATIONS + +/obj/structure/sign/warning/pods + name = "\improper ESCAPE PODS sign" + sign_change_name = "Location - Escape Pods" + desc = "A warning sign which reads 'ESCAPE PODS'." + icon_state = "pods" + is_editable = TRUE diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 2234b56eab9e3a5a6afed5db64eaeb67799d3d10..e239a2e2ccf08e35fa90f04be54ca3acad81aa57 100644 GIT binary patch literal 33203 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 z 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 diff --git a/tgstation.dme b/tgstation.dme index 15e59902c95..0fbc47b7afc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1223,8 +1223,9 @@ #include "code\game\objects\structures\signs\_signs.dm" #include "code\game\objects\structures\signs\signs_departments.dm" #include "code\game\objects\structures\signs\signs_maps.dm" -#include "code\game\objects\structures\signs\signs_plaques.dm" #include "code\game\objects\structures\signs\signs_warning.dm" +#include "code\game\objects\structures\plaques\_plaques.dm" +#include "code\game\objects\structures\plaques\static_plaques.dm" #include "code\game\objects\structures\transit_tubes\station.dm" #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm"