From bd9bcd55ab91784bb421ce37a6a24c41e2d00733 Mon Sep 17 00:00:00 2001 From: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> Date: Tue, 25 Aug 2026 04:49:20 +0000 Subject: [PATCH] Adds Flock Tables and Shelves (#32361) * Adds flock tables * Flock! * Update shelves.dm * crafting * Apply suggestion from @alfalfascout Co-authored-by: Alan Signed-off-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> * comma * Update code/__DEFINES/icon_smoothing_defines.dm Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> --------- Signed-off-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> Co-authored-by: Alan Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --- code/__DEFINES/icon_smoothing_defines.dm | 1 + .../objects/items/stacks/sheets/mineral.dm | 2 + code/game/objects/structures/shelves.dm | 4 ++ code/game/objects/structures/tables_racks.dm | 4 ++ .../flockmind/flock_structure/flock_shelf.dm | 26 +++++++++++ .../flockmind/flock_structure/flock_table.dm | 43 ++++++++++++++++++ .../smooth_structures/tables/flock_table.dmi | Bin 0 -> 5079 bytes icons/obj/structures/shelves.dmi | Bin 4609 -> 2574 bytes paradise.dme | 4 +- 9 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 code/modules/antagonists/flockmind/flock_structure/flock_shelf.dm create mode 100644 code/modules/antagonists/flockmind/flock_structure/flock_table.dm create mode 100644 icons/obj/smooth_structures/tables/flock_table.dmi diff --git a/code/__DEFINES/icon_smoothing_defines.dm b/code/__DEFINES/icon_smoothing_defines.dm index 525ccd6b9f0..0fc60109b58 100644 --- a/code/__DEFINES/icon_smoothing_defines.dm +++ b/code/__DEFINES/icon_smoothing_defines.dm @@ -114,6 +114,7 @@ DEFINE_BITFIELD(smoothing_flags, list( #define SMOOTH_GROUP_GLASS_TABLES S_OBJ(55) ///obj/structure/table/glass #define SMOOTH_GROUP_REINFORCED_TABLES S_OBJ(56) ///obj/structure/table/reinforced, /obj/structure/table/glass/reinforced #define SMOOTH_GROUP_CULT_TABLES S_OBJ(57) ///obj/structire/table/reinforced/cult +#define SMOOTH_GROUP_FLOCK_TABLES S_OBJ(58) /// obj/structure/table/reinforced/flock #define SMOOTH_GROUP_ALIEN_RESIN S_OBJ(60) ///obj/structure/alien/resin #define SMOOTH_GROUP_ALIEN_WALLS S_OBJ(61) ///obj/structure/alien/resin/wall, diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 0ab1b79ed5a..29c3d93e8b5 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -141,6 +141,8 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( GLOBAL_LIST_INIT(gnesis_recipes, list ( new /datum/stack_recipe("flock chair", /obj/structure/chair/comfy/flock, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("flock table", /obj/structure/table/reinforced/flock, 2, time = 5.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("flock shelf", /obj/structure/shelf/flock, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("flock closet", /obj/structure/closet/flock, 2, time = 10 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("flock grille", /obj/structure/grille/flock, 1, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("flock door", /obj/machinery/door/flock, 10, time = 10 SECONDS, one_per_turf = TRUE, on_floor = TRUE), diff --git a/code/game/objects/structures/shelves.dm b/code/game/objects/structures/shelves.dm index 151b1daf991..68c622c57e8 100644 --- a/code/game/objects/structures/shelves.dm +++ b/code/game/objects/structures/shelves.dm @@ -85,6 +85,10 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec", new build_stack_type(get_turf(src), 5) return ..() +/obj/structure/shelf/try_flock_convert(datum/flock/flock, force) + new /obj/structure/shelf/flock(loc) + qdel(src) + /obj/structure/shelf/engineering icon_state = "shelf_engi" shelf_style = "engi" diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 355f0ab12bf..eb5a2061dde 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -105,6 +105,10 @@ new /obj/structure/table/reinforced/cult(loc) qdel(src) +/obj/structure/table/try_flock_convert(datum/flock/flock, force) + new /obj/structure/table/reinforced/flock(loc) + qdel(src) + /obj/structure/table/start_climb(mob/living/user) . = ..() item_placed(user) diff --git a/code/modules/antagonists/flockmind/flock_structure/flock_shelf.dm b/code/modules/antagonists/flockmind/flock_structure/flock_shelf.dm new file mode 100644 index 00000000000..cf12a7baa30 --- /dev/null +++ b/code/modules/antagonists/flockmind/flock_structure/flock_shelf.dm @@ -0,0 +1,26 @@ +/obj/structure/shelf/flock + name = "strange shelf" + desc = "A shelf (most likely), made of a strange material." + icon_state = "shelf_flock" + shelf_style = "flock" + build_stack_type = /obj/item/stack/sheet/gnesis + +/obj/structure/shelf/flock/Initialize(mapload, datum/flock/join_flock) + . = ..() + AddComponent(/datum/component/flock_protection, FALSE, TRUE, FALSE, FALSE) + ADD_TRAIT(src, TRAIT_FLOCK_EXAMINE, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_FLOCK_THING, INNATE_TRAIT) + +/obj/structure/shelf/flock/examine(mob/user) + if(!isflockmob(user)) + return ..() + + . = list( + SPAN_FLOCKSAY("###=- Ident confirmed, data packet received."), + SPAN_FLOCKSAY("ID: Vertical material storage rack."), + SPAN_FLOCKSAY("System Integrity: [get_integrity_percentage()]%"), + SPAN_FLOCKSAY("###=-") + ) + +/obj/structure/shelf/flock/try_flock_convert(datum/flock/flock, force) + return diff --git a/code/modules/antagonists/flockmind/flock_structure/flock_table.dm b/code/modules/antagonists/flockmind/flock_structure/flock_table.dm new file mode 100644 index 00000000000..a0c8eb25404 --- /dev/null +++ b/code/modules/antagonists/flockmind/flock_structure/flock_table.dm @@ -0,0 +1,43 @@ +/obj/structure/table/reinforced/flock + name = "odd slab" + desc = "It's a flat surface made of a strange material. Despite its alien appearance, there's not many things this could be except a table." + icon = 'icons/obj/smooth_structures/tables/flock_table.dmi' + icon_state = "flock_table-0" + base_icon_state = "flock_table" + buildstack = /obj/item/stack/sheet/gnesis + buildstackamount = 2 + framestack = null + frame = null + framestackamount = 0 + armor = list(MELEE = -20, BULLET = -20, LASER = 80, ENERGY = 80, BOMB = 0, RAD = 100, FIRE = 80, ACID = 100) + smoothing_groups = list(SMOOTH_GROUP_FLOCK_TABLES) + canSmoothWith = list(SMOOTH_GROUP_FLOCK_TABLES) + +/obj/structure/table/reinforced/flock/Initialize(mapload, datum/flock/join_flock) + . = ..() + AddComponent(/datum/component/flock_protection, FALSE, TRUE, FALSE, FALSE) + ADD_TRAIT(src, TRAIT_FLOCK_EXAMINE, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_FLOCK_THING, INNATE_TRAIT) + +/obj/structure/table/reinforced/flock/examine(mob/user) + if(!isflockmob(user)) + return ..() + + . = list( + SPAN_FLOCKSAY("###=- Ident confirmed, data packet received."), + SPAN_FLOCKSAY("ID: Table."), + SPAN_FLOCKSAY("System Integrity: [get_integrity_percentage()]%"), + SPAN_FLOCKSAY("###=-") + ) + +/obj/structure/table/reinforced/flock/screwdriver_act() + return + +/obj/structure/table/reinforced/flock/deconstruct(disassembled = TRUE, wrench_disassembly = FALSE) + if(!(flags & NODECONSTRUCT)) + var/turf/T = get_turf(src) + new buildstack(T, buildstackamount) + qdel(src) + +/obj/structure/table/reinforced/flock/try_flock_convert(datum/flock/flock, force) + return diff --git a/icons/obj/smooth_structures/tables/flock_table.dmi b/icons/obj/smooth_structures/tables/flock_table.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e20381d8078e76337dcb0f4f96cf7eef500bcf83 GIT binary patch literal 5079 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 op3mF}1s|T0sFZ