diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/bluemoon/engine_rbmk_bluemoon.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/bluemoon/engine_rbmk_bluemoon.dmm
index 70a10ee558b3..39eff27ac125 100644
--- a/_maps/RandomRuins/StationRuins/Box/Engine/bluemoon/engine_rbmk_bluemoon.dmm
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/bluemoon/engine_rbmk_bluemoon.dmm
@@ -510,6 +510,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/structure/noticeboard/directional/east,
/obj/structure/table/reinforced,
/obj/machinery/microwave{
pixel_x = -3;
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index a25bedb443d7..494377a0147e 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -31203,6 +31203,7 @@
/obj/effect/turf_decal/tile/dark_green{
dir = 1
},
+/obj/structure/noticeboard/directional/west,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm
index cb38e28c2f62..6d4c5a776218 100644
--- a/code/__DEFINES/layers_planes.dm
+++ b/code/__DEFINES/layers_planes.dm
@@ -109,7 +109,6 @@
#define ON_EDGED_TURF_LAYER 4.35
#define LARGE_MOB_LAYER 4.4
#define ABOVE_ALL_MOB_LAYER 4.5
-#define RAILING_LAYER 4.7
#define SPACEVINE_LAYER 4.8
#define SPACEVINE_MOB_LAYER 4.9
diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm
index 9e1c685b899b..1b0d893768f6 100644
--- a/code/controllers/subsystem/materials.dm
+++ b/code/controllers/subsystem/materials.dm
@@ -22,11 +22,11 @@ SUBSYSTEM_DEF(materials)
var/list/list/material_combos
///List of stackcrafting recipes for materials using base recipes
var/list/base_stack_recipes = list(
- new /datum/stack_recipe("chair", /obj/structure/chair/greyscale, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
- new /datum/stack_recipe("toilet", /obj/structure/toilet/greyscale, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
- new /datum/stack_recipe("sink frame", /obj/structure/sink/greyscale, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
- new /datum/stack_recipe("material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
- new /datum/stack_recipe("material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE),
+ new /datum/stack_recipe("Chair", /obj/structure/chair/greyscale, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
+ new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
+ new /datum/stack_recipe("Sink Frame", /obj/structure/sink/greyscale, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
+ new /datum/stack_recipe("Material Airlock Assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
+ new /datum/stack_recipe("Material Floor Tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE),
)
///List of stackcrafting recipes for materials using rigid recipes
var/list/rigid_stack_recipes = list(
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index e968be75ef0e..cc1c03941f6e 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -1,17 +1,12 @@
GLOBAL_LIST_INIT(rod_recipes, list ( \
- new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \
- new/datum/stack_recipe("catwalk tile", /obj/item/stack/tile/catwalk, 1, 4, 20), \
- new/datum/stack_recipe("guard rail", /obj/structure/deployable_barricade/guardrail, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 5, one_per_turf = TRUE, on_floor = FALSE), \
- new/datum/stack_recipe("glasses frame", /obj/item/glasswork/glass_base/glasses_frame, 3, 1, 1, 30 SECONDS), \
- new /datum/stack_recipe_list("railing", list( \
- new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 18, window_checks = TRUE), \
- new/datum/stack_recipe("railing corner", /obj/structure/railing/corner, 2, time = 18, window_checks = TRUE), \
- new/datum/stack_recipe("railing end", /obj/structure/railing/corner/end, 2, time = 18, window_checks = TRUE), \
- new/datum/stack_recipe("flipped railing end", /obj/structure/railing/corner/end/flip, 2, time = 18, window_checks = TRUE), \
- )), \
+ new/datum/stack_recipe("Grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("Table Frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("Scooter Frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \
+ new/datum/stack_recipe("Railing", /obj/structure/railing, 3, time = 18, window_checks = TRUE), \
+ new/datum/stack_recipe("Catwalk Tile", /obj/item/stack/tile/catwalk, 1, 4, 20), \
+ new/datum/stack_recipe("Guard Rail", /obj/structure/deployable_barricade/guardrail, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Tank Holder", /obj/structure/tank_holder, 2, time = 5, one_per_turf = TRUE, on_floor = FALSE), \
+ new/datum/stack_recipe("Glasses Frame", /obj/item/glasswork/glass_base/glasses_frame, 3, 1, 1, 30 SECONDS), \
))
/obj/item/stack/rods
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index d80ff82a1e53..a1ee6198fe05 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -42,8 +42,8 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
//END OF CIT CHANGES
new/datum/stack_recipe_list("fancy sofas", list( \
new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa/corp, one_per_turf = TRUE, on_floor = TRUE), \
- new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/corp/left, one_per_turf = TRUE, on_floor = TRUE), \
- new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/corp/right, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/corp/right, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/corp/left, one_per_turf = TRUE, on_floor = TRUE), \
new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corp/corner, one_per_turf = TRUE, on_floor = TRUE), \
)), \
null, \
@@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("iron ingot", /obj/item/ingot/iron, 6, time = 100), \
null, \
new/datum/stack_recipe("tiny fan", /obj/structure/fans/tiny, 2, time = 4, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("metal barricade", /obj/structure/deployable_barricade/metal, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Metal Barricade", /obj/structure/deployable_barricade/metal, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("desk bell", /obj/structure/desk_bell, 2, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
))
@@ -252,9 +252,9 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
* Wood
*/
GLOBAL_LIST_INIT(wood_recipes, list ( \
- new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \
- new/datum/stack_recipe("sauna oven", /obj/structure/sauna_oven, 50, time = 15 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("wooden half-barricade", /obj/structure/deployable_barricade/wooden, 5, time = 2 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Wooden Sandals", /obj/item/clothing/shoes/sandal, 1), \
+ new/datum/stack_recipe("Sauna Oven", /obj/structure/sauna_oven, 50, time = 15 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Wooden Half-Barricade", /obj/structure/deployable_barricade/wooden, 5, time = 2 SECONDS, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
null, \
@@ -302,7 +302,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
new/datum/stack_recipe("urn", /obj/item/reagent_containers/glass/mortar/urn, 3), \
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
- new/datum/stack_recipe("notice board frame", /obj/item/wallframe/noticeboard, 5, time = 10),\
))
/obj/item/stack/sheet/mineral/wood
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index a56d4683f831..a9ec3fd36c45 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -183,7 +183,10 @@
//prevents remote "kicks" with TK
if (!Adjacent(user))
return
- to_chat(user, span_notice("You poke the [src] glass."))
+ user.visible_message(span_danger("[user] kicks the display case."), null, null, COMBAT_MESSAGE_RANGE)
+ log_combat(user, src, "kicks")
+ user.do_attack_animation(src, ATTACK_EFFECT_KICK)
+ take_damage(2)
/obj/structure/displaycase_chassis
anchored = TRUE
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 915ad1153efa..34fbdb302912 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -2,27 +2,37 @@
/obj/structure/noticeboard
name = "notice board"
- desc = "A board for pinning important notices upon. It is made of the finest Spanish cork."
- icon = 'icons/obj/wallmounts.dmi'
- icon_state = "noticeboard"
+ desc = "A board for pinning important notices upon."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "nboard00"
+ plane = ABOVE_WALL_PLANE
density = FALSE
anchored = TRUE
- max_integrity = 100
+ max_integrity = 150
/// Current number of a pinned notices
var/notices = 0
-/obj/structure/noticeboard/Initialize(mapload, ndir, building)
- . = ..()
+/obj/structure/noticeboard/directional/north
+ dir = SOUTH
+ pixel_y = 32
- if(building)
- setDir(ndir)
+/obj/structure/noticeboard/directional/south
+ dir = NORTH
+ pixel_y = -32
- var/static/list/tool_behaviors = list(
- TOOL_WRENCH = list(
- SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Detach"),
- )
- )
- AddElement(/datum/element/contextual_screentip_tools, tool_behaviors)
+/obj/structure/noticeboard/directional/east
+ dir = WEST
+ pixel_x = 32
+
+/obj/structure/noticeboard/directional/west
+ dir = EAST
+ pixel_x = -32
+
+/obj/structure/noticeboard/Initialize(mapload)
+ . = ..()
+
+ if(!mapload)
+ return
for(var/obj/item/I in loc)
if(notices >= MAX_NOTICES)
@@ -30,7 +40,7 @@
if(istype(I, /obj/item/paper))
I.forceMove(src)
notices++
- update_appearance(UPDATE_ICON)
+ icon_state = "nboard0[notices]"
//attaching papers!!
/obj/structure/noticeboard/attackby(obj/item/O, mob/user, params)
@@ -42,21 +52,12 @@
if(!user.transferItemToLoc(O, src))
return
notices++
- update_appearance(UPDATE_ICON)
- to_chat(user, span_notice("You pin the [O] to the [src]."))
+ icon_state = "nboard0[notices]"
+ to_chat(user, span_notice("You pin the [O] to the noticeboard."))
else
- to_chat(user, span_warning("There is no space left on the [src]!"))
- else if(O.tool_behaviour == TOOL_WRENCH)
- user.visible_message("[user] starts unsecuring [src]...", "You start unsecuring [src]...")
- O.play_tool_sound(src)
- if(O.use_tool(src, user, 80))
- user.visible_message("[user] unsecures [src]!", "You detach [src] from the wall.")
- playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
- deconstruct()
- return
+ to_chat(user, span_warning("The notice board is full!"))
else
return ..()
- return ..()
/obj/structure/noticeboard/ui_state(mob/user)
return GLOB.physical_state
@@ -79,7 +80,7 @@
data["items"] += list(content_data)
return data
-/obj/structure/noticeboard/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+/obj/structure/noticeboard/ui_act(action, params)
. = ..()
if(.)
return
@@ -110,41 +111,22 @@
* * item - The item that is to be removed
* * user - The mob that is trying to get the item removed, if there is one
*/
-
/obj/structure/noticeboard/proc/remove_item(obj/item/item, mob/user)
item.forceMove(drop_location())
if(user)
user.put_in_hands(item)
- to_chat(user, span_notice("You tear the [item] off the [src]."))
balloon_alert(user, "removed from board")
notices--
- update_appearance(UPDATE_ICON)
+ icon_state = "nboard0[notices]"
/obj/structure/noticeboard/deconstruct(disassembled = TRUE)
- if(!disassembled)
- new /obj/item/stack/sheet/mineral/wood(loc, 2)
- else
- new /obj/item/wallframe/noticeboard(loc)
+ if(!(flags_1 & NODECONSTRUCT_1))
+ new /obj/item/stack/sheet/metal (loc, 1)
for(var/obj/item/content in contents)
remove_item(content)
qdel(src)
-/obj/item/wallframe/noticeboard
- name = "notice board"
- desc = "Right now it's more of a clipboard. Attach to a wall to use."
- icon = 'icons/obj/wallframe.dmi'
- icon_state = "noticeboard"
- pixel_shift = -32
- custom_materials = list(
- /datum/material/wood = SHEET_MATERIAL_AMOUNT,
- )
- resistance_flags = FLAMMABLE
- result_path = /obj/structure/noticeboard
-
-/obj/structure/noticeboard/update_overlays()
- . = ..()
- if(notices)
- . += "notices_[notices]"
+// Notice boards for the heads of staff (plus the qm)
/obj/structure/noticeboard/captain
name = "Captain's Notice Board"
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 1ed10fcde179..922da0f1ebe0 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -1,75 +1,26 @@
/obj/structure/railing
name = "railing"
desc = "Basic railing meant to protect idiots like you from falling."
- icon = 'icons/obj/railings.dmi'
+ icon = 'icons/obj/fluff.dmi'
icon_state = "railing"
density = TRUE
anchored = TRUE
climbable = TRUE
- layer = ABOVE_ALL_MOB_LAYER
///Initial direction of the railing.
var/ini_dir
-/datum/armor/structure_railing
- melee = 35
- bullet = 50
- laser = 50
- energy = 100
- bomb = 10
-
-/obj/structure/railing/unbreakable
- resistance_flags = INDESTRUCTIBLE
-
/obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch
icon_state = "railing_corner"
density = FALSE
climbable = FALSE
-/obj/structure/railing/corner/unbreakable
- resistance_flags = INDESTRUCTIBLE
-
-/obj/structure/railing/corner/end //end of a segment of railing without making a loop
- icon_state = "railing_end"
-
-/obj/structure/railing/corner/end/unbreakable
- resistance_flags = INDESTRUCTIBLE
-
-/obj/structure/railing/corner/end/flip //same as above but flipped around
- icon_state = "railing_end_flip"
-
-/obj/structure/railing/corner/end/flip/unbreakable
- resistance_flags = INDESTRUCTIBLE
-
/obj/structure/railing/ComponentInitialize()
. = ..()
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, PROC_REF(can_be_rotated)),CALLBACK(src, PROC_REF(after_rotation)))
-/obj/structure/railing/examine(mob/user)
- . = ..()
- if(anchored == TRUE)
- . += span_notice("The railing is bolted to the floor.")
- else
- . += span_notice("The railing is unbolted from the floor and can be deconstructed with wirecutters.")
-
/obj/structure/railing/Initialize(mapload)
. = ..()
-
- var/static/list/tool_behaviors = list(
- TOOL_WELDER = list(
- SCREENTIP_CONTEXT_LMB = list(INTENT_HELP = "Repair"),
- ),
- TOOL_WRENCH = list(
- SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Anchor/Unanchor"),
- ),
- TOOL_WIRECUTTER= list(
- SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Cut"),
- )
- )
-
- AddElement(/datum/element/contextual_screentip_tools, tool_behaviors)
-
- RegisterSignal(src, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_change_layer))
- adjust_dir_layer(dir)
+ ini_dir = dir
/obj/structure/railing/attackby(obj/item/I, mob/living/user, params)
..()
@@ -83,13 +34,13 @@
obj_integrity = max_integrity
to_chat(user, "Вы починили [src].")
else
- to_chat(user, "[src] выглядит целым.")
+ to_chat(user, "[src] is already in good condition!")
return
/obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I)
. = ..()
if(!anchored)
- to_chat(user, "Вы перекусываете крепление [src].")
+ to_chat(user, "You cut apart the railing.")
I.play_tool_sound(src, 100)
deconstruct()
return TRUE
@@ -99,7 +50,8 @@
if(!loc) //quick check if it's qdeleted already.
return
if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/rods(loc, 2)
+ var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 3)
+ transfer_fingerprints_to(rod)
qdel(src)
///Implements behaviour that makes it possible to unanchor the railing.
/obj/structure/railing/wrench_act(mob/living/user, obj/item/I)
@@ -153,14 +105,3 @@
air_update_turf(TRUE)
ini_dir = dir
add_fingerprint(user)
-
-/obj/structure/railing/proc/on_change_layer(datum/source, old_dir, new_dir)
- SIGNAL_HANDLER
- adjust_dir_layer(new_dir)
-
-/obj/structure/railing/proc/adjust_dir_layer(direction)
- layer = (direction & NORTH) ? MOB_LAYER : initial(layer)
-
-
-
-
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index e63ec4a7d506..919a1883f4d0 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/railings.dmi b/icons/obj/railings.dmi
deleted file mode 100644
index 49b560d2c870..000000000000
Binary files a/icons/obj/railings.dmi and /dev/null differ
diff --git a/icons/obj/stairs.dmi b/icons/obj/stairs.dmi
index 8c5ae6f4ac28..685609a533de 100644
Binary files a/icons/obj/stairs.dmi and b/icons/obj/stairs.dmi differ
diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi
index 0993c6e967ae..c447263db585 100644
Binary files a/icons/obj/wallframe.dmi and b/icons/obj/wallframe.dmi differ
diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi
index e7be7af936f7..6c491ff25735 100644
Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ
diff --git a/icons/obj/wallmounts2.dmi b/icons/obj/wallmounts2.dmi
deleted file mode 100644
index 2ea6eda3d6ab..000000000000
Binary files a/icons/obj/wallmounts2.dmi and /dev/null differ
diff --git a/icons/turf/decals.dmi b/icons/turf/decals.dmi
index b62de82252d5..f3f960c29cd5 100644
Binary files a/icons/turf/decals.dmi and b/icons/turf/decals.dmi differ