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