From a7376598997732f18ab472d3585a74b79d1e5d43 Mon Sep 17 00:00:00 2001
From: mcbalaam <104003807+mcbalaam@users.noreply.github.com>
Date: Mon, 8 Jun 2026 12:36:43 +0700
Subject: [PATCH] feat: A Plastic World (plastic floral decorations) (#96350)
## About The Pull Request
Adds the Rapid Decoration Device and plastic plants and stones!
Plastic plants are very cheap to make but at the same time are very
fragile (20 integrity points). They cannot be deconstructed by wrenching
(only by destroying them or using a RDD to suck them in) and yield no
resources.
The RDD is available in the service protolathe roundstart.
## Why It's Good For The Game
RDD is a great way to decorate the station or your passion projects
without having to hunt down and dig out decorative flora piece by piece.
I think this will also pair greatly with
https://github.com/tgstation/tgstation/pull/96345
## Changelog
:cl:
add: Added fake plastic plants to be used for decoration
add: RDD: Rapid Decoration Device is now available for the service
department
/:cl:
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
---
code/game/objects/items/rcd/RDD.dm | 344 ++++++++++
code/game/objects/items/rcd/RHD.dm | 6 +-
code/game/objects/structures/decorations.dm | 609 ++++++++++++++++++
code/modules/asset_cache/assets/rdd.dm | 11 +
.../designs/autolathe/service_designs.dm | 17 +
.../research/techweb/nodes/service_nodes.dm | 1 +
.../mob/inhands/equipment/tools_lefthand.dmi | Bin 20999 -> 22686 bytes
.../mob/inhands/equipment/tools_righthand.dmi | Bin 22885 -> 22621 bytes
icons/obj/tools.dmi | Bin 38322 -> 32204 bytes
tgstation.dme | 3 +
.../tgui/interfaces/RapidDecorationDevice.tsx | 102 +++
11 files changed, 1091 insertions(+), 2 deletions(-)
create mode 100644 code/game/objects/items/rcd/RDD.dm
create mode 100644 code/game/objects/structures/decorations.dm
create mode 100644 code/modules/asset_cache/assets/rdd.dm
create mode 100644 tgui/packages/tgui/interfaces/RapidDecorationDevice.tsx
diff --git a/code/game/objects/items/rcd/RDD.dm b/code/game/objects/items/rcd/RDD.dm
new file mode 100644
index 00000000000..b3b65931fe1
--- /dev/null
+++ b/code/game/objects/items/rcd/RDD.dm
@@ -0,0 +1,344 @@
+//RAPID DECORATION DEVICE
+
+/// Multiplier applied to cost when using RDD — each decoration costs this many matter units
+#define RDD_COST_MULTIPLIER 2
+
+/// All decoration designs available in the RDD
+GLOBAL_LIST_INIT(rdd_designs, list(
+ "Grasses" = list(
+ list("name" = "Plastic Grass Patch", "path" = /obj/structure/decoration/grass/first),
+ list("name" = "Plastic Grass Patch (Alt)", "path" = /obj/structure/decoration/grass/second),
+ list("name" = "Plastic Grass Patch (Alt 2)", "path" = /obj/structure/decoration/grass/third),
+ list("name" = "Plastic Grass Patch (Random)", "path" = /obj/structure/decoration/grass/style_random),
+ list("name" = "Plastic Brown Grass", "path" = /obj/structure/decoration/grass/brown/first),
+ list("name" = "Plastic Brown Grass (Alt)", "path" = /obj/structure/decoration/grass/brown/second),
+ list("name" = "Plastic Brown Grass (Alt 2)", "path" = /obj/structure/decoration/grass/brown/third),
+ list("name" = "Plastic Brown Grass (Random)", "path" = /obj/structure/decoration/grass/brown/style_random),
+ list("name" = "Plastic Jungle Grass", "path" = /obj/structure/decoration/jungle_grass/first),
+ list("name" = "Plastic Jungle Grass (Alt)", "path" = /obj/structure/decoration/jungle_grass/second),
+ list("name" = "Plastic Jungle Grass (Alt 2)", "path" = /obj/structure/decoration/jungle_grass/third),
+ list("name" = "Plastic Jungle Grass (Alt 3)", "path" = /obj/structure/decoration/jungle_grass/fourth),
+ list("name" = "Plastic Jungle Grass (Alt 4)", "path" = /obj/structure/decoration/jungle_grass/fifth),
+ list("name" = "Plastic Jungle Grass (Random)", "path" = /obj/structure/decoration/jungle_grass/style_random),
+ list("name" = "Plastic Jungle Grass B", "path" = /obj/structure/decoration/jungle_grass/b/first),
+ list("name" = "Plastic Jungle Grass B (Alt)", "path" = /obj/structure/decoration/jungle_grass/b/second),
+ list("name" = "Plastic Jungle Grass B (Alt 2)", "path" = /obj/structure/decoration/jungle_grass/b/third),
+ list("name" = "Plastic Jungle Grass B (Alt 3)", "path" = /obj/structure/decoration/jungle_grass/b/fourth),
+ list("name" = "Plastic Jungle Grass B (Alt 4)", "path" = /obj/structure/decoration/jungle_grass/b/fifth),
+ list("name" = "Plastic Jungle Grass B (Random)", "path" = /obj/structure/decoration/jungle_grass/b/style_random),
+ ),
+ "Bushes" = list(
+ list("name" = "Plastic Bush", "path" = /obj/structure/decoration/bush/first),
+ list("name" = "Plastic Bush (Alt)", "path" = /obj/structure/decoration/bush/second),
+ list("name" = "Plastic Bush (Alt 2)", "path" = /obj/structure/decoration/bush/third),
+ list("name" = "Plastic Bush (Alt 3)", "path" = /obj/structure/decoration/bush/fourth),
+ list("name" = "Plastic Bush (Random)", "path" = /obj/structure/decoration/bush/style_random),
+ list("name" = "Plastic Reeds", "path" = /obj/structure/decoration/bush/reed/first),
+ list("name" = "Plastic Reeds (Alt)", "path" = /obj/structure/decoration/bush/reed/second),
+ list("name" = "Plastic Reeds (Alt 2)", "path" = /obj/structure/decoration/bush/reed/third),
+ list("name" = "Plastic Reeds (Alt 3)", "path" = /obj/structure/decoration/bush/reed/fourth),
+ list("name" = "Plastic Reeds (Random)", "path" = /obj/structure/decoration/bush/reed/style_random),
+ list("name" = "Plastic Leafy Bush", "path" = /obj/structure/decoration/bush/leafy/first),
+ list("name" = "Plastic Leafy Bush (Alt)", "path" = /obj/structure/decoration/bush/leafy/second),
+ list("name" = "Plastic Leafy Bush (Alt 2)", "path" = /obj/structure/decoration/bush/leafy/third),
+ list("name" = "Plastic Leafy Bush (Random)", "path" = /obj/structure/decoration/bush/leafy/style_random),
+ list("name" = "Plastic Pale Bush", "path" = /obj/structure/decoration/bush/pale/first),
+ list("name" = "Plastic Pale Bush (Alt)", "path" = /obj/structure/decoration/bush/pale/second),
+ list("name" = "Plastic Pale Bush (Alt 2)", "path" = /obj/structure/decoration/bush/pale/third),
+ list("name" = "Plastic Pale Bush (Alt 3)", "path" = /obj/structure/decoration/bush/pale/fourth),
+ list("name" = "Plastic Pale Bush (Random)", "path" = /obj/structure/decoration/bush/pale/style_random),
+ list("name" = "Plastic Stalky Bush", "path" = /obj/structure/decoration/bush/stalky/first),
+ list("name" = "Plastic Stalky Bush (Alt)", "path" = /obj/structure/decoration/bush/stalky/second),
+ list("name" = "Plastic Stalky Bush (Alt 2)", "path" = /obj/structure/decoration/bush/stalky/third),
+ list("name" = "Plastic Stalky Bush (Random)", "path" = /obj/structure/decoration/bush/stalky/style_random),
+ list("name" = "Plastic Grassy Bush", "path" = /obj/structure/decoration/bush/grassy/first),
+ list("name" = "Plastic Grassy Bush (Alt)", "path" = /obj/structure/decoration/bush/grassy/second),
+ list("name" = "Plastic Grassy Bush (Alt 2)", "path" = /obj/structure/decoration/bush/grassy/third),
+ list("name" = "Plastic Grassy Bush (Alt 3)", "path" = /obj/structure/decoration/bush/grassy/fourth),
+ list("name" = "Plastic Grassy Bush (Random)", "path" = /obj/structure/decoration/bush/grassy/style_random),
+ list("name" = "Plastic Sparse Grass", "path" = /obj/structure/decoration/bush/sparsegrass/first),
+ list("name" = "Plastic Sparse Grass (Alt)", "path" = /obj/structure/decoration/bush/sparsegrass/second),
+ list("name" = "Plastic Sparse Grass (Alt 2)", "path" = /obj/structure/decoration/bush/sparsegrass/third),
+ list("name" = "Plastic Sparse Grass (Random)", "path" = /obj/structure/decoration/bush/sparsegrass/style_random),
+ list("name" = "Plastic Full Grass", "path" = /obj/structure/decoration/bush/fullgrass/first),
+ list("name" = "Plastic Full Grass (Alt)", "path" = /obj/structure/decoration/bush/fullgrass/second),
+ list("name" = "Plastic Full Grass (Alt 2)", "path" = /obj/structure/decoration/bush/fullgrass/third),
+ list("name" = "Plastic Full Grass (Random)", "path" = /obj/structure/decoration/bush/fullgrass/style_random),
+ list("name" = "Plastic Ferny Bush", "path" = /obj/structure/decoration/bush/ferny/first),
+ list("name" = "Plastic Ferny Bush (Alt)", "path" = /obj/structure/decoration/bush/ferny/second),
+ list("name" = "Plastic Ferny Bush (Alt 2)", "path" = /obj/structure/decoration/bush/ferny/third),
+ list("name" = "Plastic Ferny Bush (Random)", "path" = /obj/structure/decoration/bush/ferny/style_random),
+ list("name" = "Plastic Sunny Bush", "path" = /obj/structure/decoration/bush/sunny/first),
+ list("name" = "Plastic Sunny Bush (Alt)", "path" = /obj/structure/decoration/bush/sunny/second),
+ list("name" = "Plastic Sunny Bush (Alt 2)", "path" = /obj/structure/decoration/bush/sunny/third),
+ list("name" = "Plastic Sunny Bush (Random)", "path" = /obj/structure/decoration/bush/sunny/style_random),
+ list("name" = "Plastic Generic Bush", "path" = /obj/structure/decoration/bush/generic/first),
+ list("name" = "Plastic Generic Bush (Alt)", "path" = /obj/structure/decoration/bush/generic/second),
+ list("name" = "Plastic Generic Bush (Alt 2)", "path" = /obj/structure/decoration/bush/generic/third),
+ list("name" = "Plastic Generic Bush (Alt 3)", "path" = /obj/structure/decoration/bush/generic/fourth),
+ list("name" = "Plastic Generic Bush (Random)", "path" = /obj/structure/decoration/bush/generic/style_random),
+ list("name" = "Plastic Pointy Bush", "path" = /obj/structure/decoration/bush/pointy/first),
+ list("name" = "Plastic Pointy Bush (Alt)", "path" = /obj/structure/decoration/bush/pointy/second),
+ list("name" = "Plastic Pointy Bush (Alt 2)", "path" = /obj/structure/decoration/bush/pointy/third),
+ list("name" = "Plastic Pointy Bush (Alt 3)", "path" = /obj/structure/decoration/bush/pointy/fourth),
+ list("name" = "Plastic Pointy Bush (Random)", "path" = /obj/structure/decoration/bush/pointy/style_random),
+ list("name" = "Plastic Lavender Grass", "path" = /obj/structure/decoration/bush/lavendergrass/first),
+ list("name" = "Plastic Lavender Grass (Alt)", "path" = /obj/structure/decoration/bush/lavendergrass/second),
+ list("name" = "Plastic Lavender Grass (Alt 2)", "path" = /obj/structure/decoration/bush/lavendergrass/third),
+ list("name" = "Plastic Lavender Grass (Alt 3)", "path" = /obj/structure/decoration/bush/lavendergrass/fourth),
+ list("name" = "Plastic Lavender Grass (Random)", "path" = /obj/structure/decoration/bush/lavendergrass/style_random),
+ ),
+ "Flowers" = list(
+ list("name" = "Plastic Yellow-White Flowers", "path" = /obj/structure/decoration/bush/flowers_yw/first),
+ list("name" = "Plastic Yellow-White Flowers (Alt)", "path" = /obj/structure/decoration/bush/flowers_yw/second),
+ list("name" = "Plastic Yellow-White Flowers (Alt 2)", "path" = /obj/structure/decoration/bush/flowers_yw/third),
+ list("name" = "Plastic Yellow-White Flowers (Random)", "path" = /obj/structure/decoration/bush/flowers_yw/style_random),
+ list("name" = "Plastic Blue-Red Flowers", "path" = /obj/structure/decoration/bush/flowers_br/first),
+ list("name" = "Plastic Blue-Red Flowers (Alt)", "path" = /obj/structure/decoration/bush/flowers_br/second),
+ list("name" = "Plastic Blue-Red Flowers (Alt 2)", "path" = /obj/structure/decoration/bush/flowers_br/third),
+ list("name" = "Plastic Blue-Red Flowers (Random)", "path" = /obj/structure/decoration/bush/flowers_br/style_random),
+ list("name" = "Plastic Purple Flowers", "path" = /obj/structure/decoration/bush/flowers_pp/first),
+ list("name" = "Plastic Purple Flowers (Alt)", "path" = /obj/structure/decoration/bush/flowers_pp/second),
+ list("name" = "Plastic Purple Flowers (Alt 2)", "path" = /obj/structure/decoration/bush/flowers_pp/third),
+ list("name" = "Plastic Purple Flowers (Random)", "path" = /obj/structure/decoration/bush/flowers_pp/style_random),
+ ),
+ "Snow" = list(
+ list("name" = "Plastic Snowy Bush", "path" = /obj/structure/decoration/bush/snow/first),
+ list("name" = "Plastic Snowy Bush (Alt)", "path" = /obj/structure/decoration/bush/snow/second),
+ list("name" = "Plastic Snowy Bush (Alt 2)", "path" = /obj/structure/decoration/bush/snow/third),
+ list("name" = "Plastic Snowy Bush (Alt 3)", "path" = /obj/structure/decoration/bush/snow/fourth),
+ list("name" = "Plastic Snowy Bush (Alt 4)", "path" = /obj/structure/decoration/bush/snow/fifth),
+ list("name" = "Plastic Snowy Bush (Alt 5)", "path" = /obj/structure/decoration/bush/snow/sixth),
+ list("name" = "Plastic Snowy Bush (Random)", "path" = /obj/structure/decoration/bush/snow/style_random),
+ ),
+ "Jungle" = list(
+ list("name" = "Plastic Jungle Bush", "path" = /obj/structure/decoration/bush/jungle/first),
+ list("name" = "Plastic Jungle Bush (Alt)", "path" = /obj/structure/decoration/bush/jungle/second),
+ list("name" = "Plastic Jungle Bush (Alt 2)", "path" = /obj/structure/decoration/bush/jungle/third),
+ list("name" = "Plastic Jungle Bush (Random)", "path" = /obj/structure/decoration/bush/jungle/style_random),
+ list("name" = "Plastic Jungle Bush B", "path" = /obj/structure/decoration/bush/jungle/b/first),
+ list("name" = "Plastic Jungle Bush B (Alt)", "path" = /obj/structure/decoration/bush/jungle/b/second),
+ list("name" = "Plastic Jungle Bush B (Alt 2)", "path" = /obj/structure/decoration/bush/jungle/b/third),
+ list("name" = "Plastic Jungle Bush B (Random)", "path" = /obj/structure/decoration/bush/jungle/b/style_random),
+ list("name" = "Plastic Jungle Bush C", "path" = /obj/structure/decoration/bush/jungle/c/first),
+ list("name" = "Plastic Jungle Bush C (Alt)", "path" = /obj/structure/decoration/bush/jungle/c/second),
+ list("name" = "Plastic Jungle Bush C (Alt 2)", "path" = /obj/structure/decoration/bush/jungle/c/third),
+ list("name" = "Plastic Jungle Bush C (Random)", "path" = /obj/structure/decoration/bush/jungle/c/style_random),
+ list("name" = "Large Plastic Bush", "path" = /obj/structure/decoration/bush/large/first),
+ list("name" = "Large Plastic Bush (Alt)", "path" = /obj/structure/decoration/bush/large/second),
+ list("name" = "Large Plastic Bush (Alt 2)", "path" = /obj/structure/decoration/bush/large/third),
+ list("name" = "Large Plastic Bush (Random)", "path" = /obj/structure/decoration/bush/large/style_random),
+ ),
+ "Rocks" = list(
+ list("name" = "Plastic Rock", "path" = /obj/structure/decoration/rock/first),
+ list("name" = "Plastic Rock (Alt)", "path" = /obj/structure/decoration/rock/second),
+ list("name" = "Plastic Rock (Alt 2)", "path" = /obj/structure/decoration/rock/third),
+ list("name" = "Plastic Rock (Alt 3)", "path" = /obj/structure/decoration/rock/fourth),
+ list("name" = "Plastic Rock (Random)", "path" = /obj/structure/decoration/rock/style_random),
+ list("name" = "Plastic Rock Pile", "path" = /obj/structure/decoration/rock/pile/first),
+ list("name" = "Plastic Rock Pile (Alt)", "path" = /obj/structure/decoration/rock/pile/second),
+ list("name" = "Plastic Rock Pile (Alt 2)", "path" = /obj/structure/decoration/rock/pile/third),
+ list("name" = "Plastic Rock Pile (Random)", "path" = /obj/structure/decoration/rock/pile/style_random),
+ list("name" = "Plastic Jungle Rocks", "path" = /obj/structure/decoration/rock/pile/jungle/first),
+ list("name" = "Plastic Jungle Rocks (Alt)", "path" = /obj/structure/decoration/rock/pile/jungle/second),
+ list("name" = "Plastic Jungle Rocks (Alt 2)", "path" = /obj/structure/decoration/rock/pile/jungle/third),
+ list("name" = "Plastic Jungle Rocks (Alt 3)", "path" = /obj/structure/decoration/rock/pile/jungle/fourth),
+ list("name" = "Plastic Jungle Rocks (Alt 4)", "path" = /obj/structure/decoration/rock/pile/jungle/fifth),
+ list("name" = "Plastic Jungle Rocks (Random)", "path" = /obj/structure/decoration/rock/pile/jungle/style_random),
+ list("name" = "Large Plastic Rocks", "path" = /obj/structure/decoration/rock/pile/jungle/large/first),
+ list("name" = "Large Plastic Rocks (Alt)", "path" = /obj/structure/decoration/rock/pile/jungle/large/second),
+ list("name" = "Large Plastic Rocks (Alt 2)", "path" = /obj/structure/decoration/rock/pile/jungle/large/third),
+ list("name" = "Large Plastic Rocks (Random)", "path" = /obj/structure/decoration/rock/pile/jungle/large/style_random),
+ ),
+))
+
+/obj/item/construction/rdd
+ name = "rapid-decoration-device (RDD)"
+ desc = "A device used to rapidly deploy plastic decorative flora. \
+ Internally synthesizes cheap plastic replicas of natural scenery."
+ icon = 'icons/obj/tools.dmi'
+ icon_state = "rdd"
+ worn_icon_state = "RCD"
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ custom_premium_price = PAYCHECK_COMMAND * 1
+ max_matter = 200
+ slot_flags = ITEM_SLOT_BELT
+ item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
+ has_ammobar = TRUE
+ banned_upgrades = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK
+ charge_icon_state = "rtd"
+ drop_sound = 'sound/items/handling/tools/rcd_drop.ogg'
+ pickup_sound = 'sound/items/handling/tools/rcd_pickup.ogg'
+ sound_vary = TRUE
+
+ /// Currently selected decoration path
+ var/obj/structure/decoration/selected_decoration
+ /// Currently selected category name (for UI)
+ var/selected_category
+ /// Currently selected design name (for UI)
+ var/selected_design_name
+
+/obj/item/construction/rdd/Initialize(mapload)
+ . = ..()
+ selected_category = GLOB.rdd_designs[1]
+ var/list/category_designs = GLOB.rdd_designs[selected_category]
+ if(length(category_designs))
+ var/list/first_design = category_designs[1]
+ selected_decoration = first_design["path"]
+ selected_design_name = first_design["name"]
+
+/obj/item/construction/rdd/examine(mob/user)
+ . = ..()
+ . += span_info("Currently set to produce: [span_bold(initial(selected_decoration.name))].")
+
+/obj/item/construction/rdd/attack_self(mob/user)
+ . = ..()
+ ui_interact(user)
+
+/obj/item/construction/rdd/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "RapidDecorationDevice", name)
+ ui.open()
+
+/obj/item/construction/rdd/ui_assets(mob/user)
+ return list(
+ get_asset_datum(/datum/asset/spritesheet_batched/rdd),
+ )
+
+/obj/item/construction/rdd/ui_static_data(mob/user)
+ var/list/data = ..()
+
+ data["categories"] = list()
+ for(var/category in GLOB.rdd_designs)
+ var/list/cat_entry = list("cat_name" = category, "designs" = list())
+ for(var/list/design in GLOB.rdd_designs[category])
+ cat_entry["designs"] += list(list(
+ "name" = design["name"],
+ "icon" = sanitize_css_class_name(design["name"]),
+ ))
+ data["categories"] += list(cat_entry)
+
+ return data
+
+/obj/item/construction/rdd/ui_data(mob/user)
+ var/list/data = ..()
+
+ var/total_matter = get_matter(user)
+ data["matter"] = isnum(total_matter) ? total_matter : 0
+ data["max_matter"] = max_matter
+ data["selected_category"] = selected_category
+ data["selected_design"] = selected_design_name
+
+ return data
+
+/obj/item/construction/rdd/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+
+ switch(action)
+ if("design")
+ var/category = params["category"]
+ var/design_name = params["name"]
+ for(var/list/design as anything in GLOB.rdd_designs[category])
+ if(design["name"] == design_name)
+ selected_decoration = design["path"]
+ selected_category = category
+ selected_design_name = design_name
+ playsound(src, SFX_TOOL_SWITCH, 20, TRUE)
+ return TRUE
+
+ return TRUE
+
+/obj/item/construction/rdd/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+ . = ..()
+ if(. & ITEM_INTERACT_ANY_BLOCKER)
+ return .
+
+ var/turf/target_turf = get_turf(interacting_with)
+ if(!target_turf)
+ return ITEM_INTERACT_BLOCKING
+
+ if(target_turf.is_blocked_turf(exclude_mobs = TRUE))
+ balloon_alert(user, "tile is blocked!")
+ return ITEM_INTERACT_BLOCKING
+
+ var/decoration_count = 0
+ for(var/obj/structure/decoration/existing in target_turf.contents)
+ decoration_count++
+ if(decoration_count >= 3)
+ balloon_alert(user, "too many decorations here!")
+ return ITEM_INTERACT_BLOCKING
+
+ var/cost = RDD_COST_MULTIPLIER
+ if(!useResource(cost, user, TRUE))
+ return ITEM_INTERACT_BLOCKING
+
+ playsound(loc, 'sound/machines/click.ogg', 50, TRUE)
+ if(!do_after(user, 0.5 SECONDS, target_turf))
+ return ITEM_INTERACT_BLOCKING
+ if(!useResource(cost, user, TRUE))
+ return ITEM_INTERACT_BLOCKING
+
+ playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
+ new selected_decoration(target_turf)
+ useResource(cost, user)
+
+ log_tool("[key_name(user)] used [src] to create [initial(selected_decoration.name)] at [AREACOORD(target_turf)]")
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/construction/rdd/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
+ var/turf/target_turf = get_turf(interacting_with)
+ if(!target_turf)
+ return NONE
+
+ var/obj/structure/decoration/found = locate() in target_turf
+
+ if(!found)
+ return NONE
+
+ playsound(target_turf, 'sound/machines/click.ogg', 50, TRUE)
+ if(!do_after(user, 0.5 SECONDS, target_turf))
+ return ITEM_INTERACT_BLOCKING
+
+ playsound(target_turf, 'sound/items/deconstruct.ogg', 50, TRUE)
+ qdel(found)
+
+ log_tool("[key_name(user)] used [src] to deconstruct [found] at [AREACOORD(target_turf)]")
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/construction/rdd/borg
+ desc = "A device used to rapidly deploy plastic decorative flora. Uses the cyborg's internal cell."
+ /// energy usage per decoration
+ var/energyfactor = 0.05 * STANDARD_CELL_CHARGE
+
+/obj/item/construction/rdd/borg/get_matter(mob/user)
+ if(!iscyborg(user))
+ return 0
+ var/mob/living/silicon/robot/borgy = user
+ if(!borgy.cell)
+ return 0
+ max_matter = borgy.cell.maxcharge
+ return borgy.cell.charge
+
+/obj/item/construction/rdd/borg/useResource(amount, mob/user, dry_run)
+ var/mob/living/silicon/robot/borgy = user
+ if(!iscyborg(borgy))
+ return FALSE
+ if(!borgy.cell)
+ balloon_alert(user, "no cell found!")
+ return FALSE
+ if(borgy.cell.charge < amount * energyfactor)
+ balloon_alert(user, "insufficient charge!")
+ return FALSE
+ if(!dry_run)
+ playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
+ return borgy.cell.use(amount * energyfactor)
+ return TRUE
+
+/obj/item/construction/rdd/loaded
+ matter = 200
+
+#undef RDD_COST_MULTIPLIER
diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm
index 40f989ee088..93663639a9c 100644
--- a/code/game/objects/items/rcd/RHD.dm
+++ b/code/game/objects/items/rcd/RHD.dm
@@ -30,6 +30,8 @@
var/has_ammobar = FALSE
/// amount of divisions in the ammo indicator overlay/number of ammo indicator states
var/ammo_sections = 10
+ /// icon_state prefix used for charge overlays — defaults to icon_state if not set
+ var/charge_icon_state
/// bitflags for upgrades
var/construction_upgrades = NONE
/// bitflags for banned upgrades
@@ -179,7 +181,7 @@
if(has_ammobar)
var/ratio = ceil((matter / max_matter) * ammo_sections)
if(ratio > 0)
- . += "[icon_state]_charge[ratio]"
+ . += "[charge_icon_state || icon_state]_charge[ratio]"
/**
* Uses resource to do some action. Returns amount of resource used or TRUE/FALSE if only an dry run is required
@@ -193,7 +195,7 @@
if(!silo_mats || !silo_link)
if(matter < amount)
if(has_ammobar)
- flick("[icon_state]_empty", src)
+ flick("[charge_icon_state || icon_state]_empty", src)
if(user)
balloon_alert(user, "not enough matter!")
return FALSE
diff --git a/code/game/objects/structures/decorations.dm b/code/game/objects/structures/decorations.dm
new file mode 100644
index 00000000000..fb05b6478e2
--- /dev/null
+++ b/code/game/objects/structures/decorations.dm
@@ -0,0 +1,609 @@
+/obj/structure/decoration
+ name = "plastic decoration"
+ desc = "A cheap plastic imitation of nature. At least it doesn't need watering."
+ icon = 'icons/obj/fluff/flora/ausflora.dmi'
+ resistance_flags = FLAMMABLE
+ max_integrity = 20
+ anchored = TRUE
+ alpha = 210
+ /// No material refund on deconstruction, it's cheap plastic
+ custom_materials = null
+
+/obj/structure/decoration/Initialize(mapload)
+ . = ..()
+
+/obj/structure/decoration/atom_deconstruct(disassembled = TRUE)
+ if(!disassembled)
+ new /obj/effect/decal/cleanable/plastic(loc)
+ return
+
+/obj/structure/decoration/examine(mob/user)
+ . = ..()
+ . += span_notice("It's made of cheap, hollow plastic.")
+
+/obj/structure/decoration/grass
+ name = "plastic grass patch"
+ desc = "Fake grass. Feels like a brillo pad."
+ icon = /obj/structure/flora/grass/green::icon
+ icon_state = /obj/structure/flora/grass/green::icon_state
+
+/obj/structure/decoration/grass/first
+ // inherits from parent
+
+/obj/structure/decoration/grass/second
+ icon_state = /obj/structure/flora/grass/green/style_2::icon_state
+
+/obj/structure/decoration/grass/third
+ icon_state = /obj/structure/flora/grass/green/style_3::icon_state
+
+/obj/structure/decoration/grass/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "snowgrass[rand(1, 3)]gb"
+ update_appearance()
+
+/obj/structure/decoration/grass/brown
+ icon = /obj/structure/flora/grass/brown::icon
+ icon_state = /obj/structure/flora/grass/brown::icon_state
+
+/obj/structure/decoration/grass/brown/first
+
+/obj/structure/decoration/grass/brown/second
+ icon_state = /obj/structure/flora/grass/brown/style_2::icon_state
+
+/obj/structure/decoration/grass/brown/third
+ icon_state = /obj/structure/flora/grass/brown/style_3::icon_state
+
+/obj/structure/decoration/grass/brown/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "snowgrass[rand(1, 3)]bb"
+ update_appearance()
+
+/obj/structure/decoration/jungle_grass
+ name = "plastic jungle grass"
+ desc = "Plastic alien-looking grass. The jungle vibe without the jungle bugs."
+ icon = /obj/structure/flora/grass/jungle::icon
+ icon_state = /obj/structure/flora/grass/jungle::icon_state
+
+/obj/structure/decoration/jungle_grass/first
+
+/obj/structure/decoration/jungle_grass/second
+ icon_state = /obj/structure/flora/grass/jungle/a/style_2::icon_state
+
+/obj/structure/decoration/jungle_grass/third
+ icon_state = /obj/structure/flora/grass/jungle/a/style_3::icon_state
+
+/obj/structure/decoration/jungle_grass/fourth
+ icon_state = /obj/structure/flora/grass/jungle/a/style_4::icon_state
+
+/obj/structure/decoration/jungle_grass/fifth
+ icon_state = /obj/structure/flora/grass/jungle/a/style_5::icon_state
+
+/obj/structure/decoration/jungle_grass/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "grassa[rand(1, 5)]"
+ update_appearance()
+
+/obj/structure/decoration/jungle_grass/b
+ icon = /obj/structure/flora/grass/jungle/b::icon
+ icon_state = /obj/structure/flora/grass/jungle/b::icon_state
+
+/obj/structure/decoration/jungle_grass/b/first
+
+/obj/structure/decoration/jungle_grass/b/second
+ icon_state = /obj/structure/flora/grass/jungle/b/style_2::icon_state
+
+/obj/structure/decoration/jungle_grass/b/third
+ icon_state = /obj/structure/flora/grass/jungle/b/style_3::icon_state
+
+/obj/structure/decoration/jungle_grass/b/fourth
+ icon_state = /obj/structure/flora/grass/jungle/b/style_4::icon_state
+
+/obj/structure/decoration/jungle_grass/b/fifth
+ icon_state = /obj/structure/flora/grass/jungle/b/style_5::icon_state
+
+/obj/structure/decoration/jungle_grass/b/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "grassb[rand(1, 5)]"
+ update_appearance()
+
+/obj/structure/decoration/bush
+ name = "plastic bush"
+ desc = "A plastic shrub. Bristly to the touch and slightly off-color."
+ icon = /obj/structure/flora/bush::icon
+ icon_state = /obj/structure/flora/bush::icon_state
+
+/obj/structure/decoration/bush/first
+
+/obj/structure/decoration/bush/second
+ icon_state = /obj/structure/flora/bush/style_2::icon_state
+
+/obj/structure/decoration/bush/third
+ icon_state = /obj/structure/flora/bush/style_3::icon_state
+
+/obj/structure/decoration/bush/fourth
+ icon_state = /obj/structure/flora/bush/style_4::icon_state
+
+/obj/structure/decoration/bush/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "firstbush_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/reed
+ name = "plastic reeds"
+ icon = /obj/structure/flora/bush/reed::icon
+ icon_state = /obj/structure/flora/bush/reed::icon_state
+
+/obj/structure/decoration/bush/reed/first
+
+/obj/structure/decoration/bush/reed/second
+ icon_state = /obj/structure/flora/bush/reed/style_2::icon_state
+
+/obj/structure/decoration/bush/reed/third
+ icon_state = /obj/structure/flora/bush/reed/style_3::icon_state
+
+/obj/structure/decoration/bush/reed/fourth
+ icon_state = /obj/structure/flora/bush/reed/style_4::icon_state
+
+/obj/structure/decoration/bush/reed/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "reedbush_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/leafy
+ name = "plastic leafy bush"
+ icon = /obj/structure/flora/bush/leafy::icon
+ icon_state = /obj/structure/flora/bush/leafy::icon_state
+
+/obj/structure/decoration/bush/leafy/first
+
+/obj/structure/decoration/bush/leafy/second
+ icon_state = /obj/structure/flora/bush/leavy/style_2::icon_state
+
+/obj/structure/decoration/bush/leafy/third
+ icon_state = /obj/structure/flora/bush/leavy/style_3::icon_state
+
+/obj/structure/decoration/bush/leafy/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "leafybush_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/pale
+ name = "plastic pale bush"
+ icon = /obj/structure/flora/bush/pale::icon
+ icon_state = /obj/structure/flora/bush/pale::icon_state
+
+/obj/structure/decoration/bush/pale/first
+
+/obj/structure/decoration/bush/pale/second
+ icon_state = /obj/structure/flora/bush/pale/style_2::icon_state
+
+/obj/structure/decoration/bush/pale/third
+ icon_state = /obj/structure/flora/bush/pale/style_3::icon_state
+
+/obj/structure/decoration/bush/pale/fourth
+ icon_state = /obj/structure/flora/bush/pale/style_4::icon_state
+
+/obj/structure/decoration/bush/pale/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "palebush_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/stalky
+ name = "plastic stalky bush"
+ icon = /obj/structure/flora/bush/stalky::icon
+ icon_state = /obj/structure/flora/bush/stalky::icon_state
+
+/obj/structure/decoration/bush/stalky/first
+
+/obj/structure/decoration/bush/stalky/second
+ icon_state = /obj/structure/flora/bush/stalky/style_2::icon_state
+
+/obj/structure/decoration/bush/stalky/third
+ icon_state = /obj/structure/flora/bush/stalky/style_3::icon_state
+
+/obj/structure/decoration/bush/stalky/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "stalkybush_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/grassy
+ name = "plastic grassy bush"
+ icon = /obj/structure/flora/bush/grassy::icon
+ icon_state = /obj/structure/flora/bush/grassy::icon_state
+
+/obj/structure/decoration/bush/grassy/first
+
+/obj/structure/decoration/bush/grassy/second
+ icon_state = /obj/structure/flora/bush/grassy/style_2::icon_state
+
+/obj/structure/decoration/bush/grassy/third
+ icon_state = /obj/structure/flora/bush/grassy/style_3::icon_state
+
+/obj/structure/decoration/bush/grassy/fourth
+ icon_state = /obj/structure/flora/bush/grassy/style_4::icon_state
+
+/obj/structure/decoration/bush/grassy/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "grassybush_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/sparsegrass
+ name = "plastic sparse grass"
+ icon = /obj/structure/flora/bush/sparsegrass::icon
+ icon_state = /obj/structure/flora/bush/sparsegrass::icon_state
+
+/obj/structure/decoration/bush/sparsegrass/first
+
+/obj/structure/decoration/bush/sparsegrass/second
+ icon_state = /obj/structure/flora/bush/sparsegrass/style_2::icon_state
+
+/obj/structure/decoration/bush/sparsegrass/third
+ icon_state = /obj/structure/flora/bush/sparsegrass/style_3::icon_state
+
+/obj/structure/decoration/bush/sparsegrass/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "sparsegrass_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/fullgrass
+ name = "plastic full grass"
+ icon = /obj/structure/flora/bush/fullgrass::icon
+ icon_state = /obj/structure/flora/bush/fullgrass::icon_state
+
+/obj/structure/decoration/bush/fullgrass/first
+
+/obj/structure/decoration/bush/fullgrass/second
+ icon_state = /obj/structure/flora/bush/fullgrass/style_2::icon_state
+
+/obj/structure/decoration/bush/fullgrass/third
+ icon_state = /obj/structure/flora/bush/fullgrass/style_3::icon_state
+
+/obj/structure/decoration/bush/fullgrass/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "fullgrass_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/ferny
+ name = "plastic ferny bush"
+ icon = /obj/structure/flora/bush/ferny::icon
+ icon_state = /obj/structure/flora/bush/ferny::icon_state
+
+/obj/structure/decoration/bush/ferny/first
+
+/obj/structure/decoration/bush/ferny/second
+ icon_state = /obj/structure/flora/bush/ferny/style_2::icon_state
+
+/obj/structure/decoration/bush/ferny/third
+ icon_state = /obj/structure/flora/bush/ferny/style_3::icon_state
+
+/obj/structure/decoration/bush/ferny/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "fernybush_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/sunny
+ name = "plastic sunny bush"
+ icon = /obj/structure/flora/bush/sunny::icon
+ icon_state = /obj/structure/flora/bush/sunny::icon_state
+
+/obj/structure/decoration/bush/sunny/first
+
+/obj/structure/decoration/bush/sunny/second
+ icon_state = /obj/structure/flora/bush/sunny/style_2::icon_state
+
+/obj/structure/decoration/bush/sunny/third
+ icon_state = /obj/structure/flora/bush/sunny/style_3::icon_state
+
+/obj/structure/decoration/bush/sunny/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "sunnybush_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/generic
+ name = "plastic generic bush"
+ icon = /obj/structure/flora/bush/generic::icon
+ icon_state = /obj/structure/flora/bush/generic::icon_state
+
+/obj/structure/decoration/bush/generic/first
+
+/obj/structure/decoration/bush/generic/second
+ icon_state = /obj/structure/flora/bush/generic/style_2::icon_state
+
+/obj/structure/decoration/bush/generic/third
+ icon_state = /obj/structure/flora/bush/generic/style_3::icon_state
+
+/obj/structure/decoration/bush/generic/fourth
+ icon_state = /obj/structure/flora/bush/generic/style_4::icon_state
+
+/obj/structure/decoration/bush/generic/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "genericbush_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/pointy
+ name = "plastic pointy bush"
+ icon = /obj/structure/flora/bush/pointy::icon
+ icon_state = /obj/structure/flora/bush/pointy::icon_state
+
+/obj/structure/decoration/bush/pointy/first
+
+/obj/structure/decoration/bush/pointy/second
+ icon_state = /obj/structure/flora/bush/pointy/style_2::icon_state
+
+/obj/structure/decoration/bush/pointy/third
+ icon_state = /obj/structure/flora/bush/pointy/style_3::icon_state
+
+/obj/structure/decoration/bush/pointy/fourth
+ icon_state = /obj/structure/flora/bush/pointy/style_4::icon_state
+
+/obj/structure/decoration/bush/pointy/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "pointybush_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/lavendergrass
+ name = "plastic lavender grass"
+ icon = /obj/structure/flora/bush/lavendergrass::icon
+ icon_state = /obj/structure/flora/bush/lavendergrass::icon_state
+
+/obj/structure/decoration/bush/lavendergrass/first
+
+/obj/structure/decoration/bush/lavendergrass/second
+ icon_state = /obj/structure/flora/bush/lavendergrass/style_2::icon_state
+
+/obj/structure/decoration/bush/lavendergrass/third
+ icon_state = /obj/structure/flora/bush/lavendergrass/style_3::icon_state
+
+/obj/structure/decoration/bush/lavendergrass/fourth
+ icon_state = /obj/structure/flora/bush/lavendergrass/style_4::icon_state
+
+/obj/structure/decoration/bush/lavendergrass/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "lavendergrass_[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/flowers_yw
+ name = "plastic yellow-white flowers"
+ icon = /obj/structure/flora/bush/flowers_yw::icon
+ icon_state = /obj/structure/flora/bush/flowers_yw::icon_state
+
+/obj/structure/decoration/bush/flowers_yw/first
+
+/obj/structure/decoration/bush/flowers_yw/second
+ icon_state = /obj/structure/flora/bush/flowers_yw/style_2::icon_state
+
+/obj/structure/decoration/bush/flowers_yw/third
+ icon_state = /obj/structure/flora/bush/flowers_yw/style_3::icon_state
+
+/obj/structure/decoration/bush/flowers_yw/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "ywflowers_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/flowers_br
+ name = "plastic blue-red flowers"
+ icon = /obj/structure/flora/bush/flowers_br::icon
+ icon_state = /obj/structure/flora/bush/flowers_br::icon_state
+
+/obj/structure/decoration/bush/flowers_br/first
+
+/obj/structure/decoration/bush/flowers_br/second
+ icon_state = /obj/structure/flora/bush/flowers_br/style_2::icon_state
+
+/obj/structure/decoration/bush/flowers_br/third
+ icon_state = /obj/structure/flora/bush/flowers_br/style_3::icon_state
+
+/obj/structure/decoration/bush/flowers_br/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "brflowers_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/flowers_pp
+ name = "plastic purple flowers"
+ icon = /obj/structure/flora/bush/flowers_pp::icon
+ icon_state = /obj/structure/flora/bush/flowers_pp::icon_state
+
+/obj/structure/decoration/bush/flowers_pp/first
+
+/obj/structure/decoration/bush/flowers_pp/second
+ icon_state = /obj/structure/flora/bush/flowers_pp/style_2::icon_state
+
+/obj/structure/decoration/bush/flowers_pp/third
+ icon_state = /obj/structure/flora/bush/flowers_pp/style_3::icon_state
+
+/obj/structure/decoration/bush/flowers_pp/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "ppflowers_[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/snow
+ name = "plastic snowy bush"
+ desc = "A plastic bush dusted with fake snow. Year-round winter cheer."
+ icon = /obj/structure/flora/bush/snow::icon
+ icon_state = /obj/structure/flora/bush/snow::icon_state
+
+/obj/structure/decoration/bush/snow/first
+
+/obj/structure/decoration/bush/snow/second
+ icon_state = /obj/structure/flora/bush/snow/style_2::icon_state
+
+/obj/structure/decoration/bush/snow/third
+ icon_state = /obj/structure/flora/bush/snow/style_3::icon_state
+
+/obj/structure/decoration/bush/snow/fourth
+ icon_state = /obj/structure/flora/bush/snow/style_4::icon_state
+
+/obj/structure/decoration/bush/snow/fifth
+ icon_state = /obj/structure/flora/bush/snow/style_5::icon_state
+
+/obj/structure/decoration/bush/snow/sixth
+ icon_state = /obj/structure/flora/bush/snow/style_6::icon_state
+
+/obj/structure/decoration/bush/snow/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "snowbush[rand(1, 6)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/jungle
+ name = "plastic jungle bush"
+ desc = "Plastic jungle foliage. All the looks, none of the allergens."
+ icon = /obj/structure/flora/bush/jungle::icon
+ icon_state = /obj/structure/flora/bush/jungle::icon_state
+
+/obj/structure/decoration/bush/jungle/first
+
+/obj/structure/decoration/bush/jungle/second
+ icon_state = /obj/structure/flora/bush/jungle/a/style_2::icon_state
+
+/obj/structure/decoration/bush/jungle/third
+ icon_state = /obj/structure/flora/bush/jungle/a/style_3::icon_state
+
+/obj/structure/decoration/bush/jungle/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "busha[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/jungle/b
+ icon = /obj/structure/flora/bush/jungle/b::icon
+ icon_state = /obj/structure/flora/bush/jungle/b::icon_state
+
+/obj/structure/decoration/bush/jungle/b/first
+
+/obj/structure/decoration/bush/jungle/b/second
+ icon_state = /obj/structure/flora/bush/jungle/b/style_2::icon_state
+
+/obj/structure/decoration/bush/jungle/b/third
+ icon_state = /obj/structure/flora/bush/jungle/b/style_3::icon_state
+
+/obj/structure/decoration/bush/jungle/b/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "bushb[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/jungle/c
+ icon = /obj/structure/flora/bush/jungle/c::icon
+ icon_state = /obj/structure/flora/bush/jungle/c::icon_state
+
+/obj/structure/decoration/bush/jungle/c/first
+
+/obj/structure/decoration/bush/jungle/c/second
+ icon_state = /obj/structure/flora/bush/jungle/c/style_2::icon_state
+
+/obj/structure/decoration/bush/jungle/c/third
+ icon_state = /obj/structure/flora/bush/jungle/c/style_3::icon_state
+
+/obj/structure/decoration/bush/jungle/c/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "bushc[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/bush/large
+ name = "large plastic bush"
+ desc = "A large plastic bush. Dominates the room with its hollow presence."
+ icon = /obj/structure/flora/bush/large::icon
+ icon_state = /obj/structure/flora/bush/large::icon_state
+ pixel_x = /obj/structure/flora/bush/large::pixel_x
+ pixel_y = /obj/structure/flora/bush/large::pixel_y
+ layer = /obj/structure/flora/bush/large::layer
+ plane = /obj/structure/flora/bush/large::plane
+ density = /obj/structure/flora/bush/large::density
+
+/obj/structure/decoration/bush/large/first
+
+/obj/structure/decoration/bush/large/second
+ icon_state = /obj/structure/flora/bush/large/style_2::icon_state
+
+/obj/structure/decoration/bush/large/third
+ icon_state = /obj/structure/flora/bush/large/style_3::icon_state
+
+/obj/structure/decoration/bush/large/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "bush[rand(1, 3)]"
+ update_appearance()
+
+/obj/structure/decoration/rock
+ name = "plastic rock"
+ desc = "A hollow plastic boulder. Surprisingly convincing from a distance."
+ icon = /obj/structure/flora/rock::icon
+ icon_state = /obj/structure/flora/rock::icon_state
+
+/obj/structure/decoration/rock/first
+
+/obj/structure/decoration/rock/second
+ icon_state = /obj/structure/flora/rock/style_2::icon_state
+
+/obj/structure/decoration/rock/third
+ icon_state = /obj/structure/flora/rock/style_3::icon_state
+
+/obj/structure/decoration/rock/fourth
+ icon_state = /obj/structure/flora/rock/style_4::icon_state
+
+/obj/structure/decoration/rock/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "basalt[rand(1, 4)]"
+ update_appearance()
+
+/obj/structure/decoration/rock/pile
+ name = "plastic rock pile"
+ desc = "A pile of hollow plastic rocks. Light enough to kick over."
+ icon = /obj/structure/flora/rock/pile::icon
+ icon_state = /obj/structure/flora/rock/pile::icon_state
+
+/obj/structure/decoration/rock/pile/first
+
+/obj/structure/decoration/rock/pile/second
+ icon_state = /obj/structure/flora/rock/pile/style_2::icon_state
+
+/obj/structure/decoration/rock/pile/third
+ icon_state = /obj/structure/flora/rock/pile/style_3::icon_state
+
+/obj/structure/decoration/rock/pile/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "lavarocks[pick(3;1,3;2,1;3)]"
+ update_appearance()
+
+/obj/structure/decoration/rock/pile/jungle
+ name = "plastic jungle rocks"
+ desc = "Fake rocks with a jungle theme. No actual geological history."
+ icon = /obj/structure/flora/rock/pile/jungle::icon
+ icon_state = /obj/structure/flora/rock/pile/jungle::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/first
+
+/obj/structure/decoration/rock/pile/jungle/second
+ icon_state = /obj/structure/flora/rock/pile/jungle/style_2::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/third
+ icon_state = /obj/structure/flora/rock/pile/jungle/style_3::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/fourth
+ icon_state = /obj/structure/flora/rock/pile/jungle/style_4::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/fifth
+ icon_state = /obj/structure/flora/rock/pile/jungle/style_5::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "rock[rand(1, 5)]"
+ update_appearance()
+
+/obj/structure/decoration/rock/pile/jungle/large
+ name = "plastic large rocks"
+ desc = "A pile of large fake jungle rocks. Surprisingly light."
+ icon = /obj/structure/flora/rock/pile/jungle/large::icon
+ icon_state = /obj/structure/flora/rock/pile/jungle/large::icon_state
+ pixel_x = /obj/structure/flora/rock/pile/jungle/large::pixel_x
+ pixel_y = /obj/structure/flora/rock/pile/jungle/large::pixel_y
+
+/obj/structure/decoration/rock/pile/jungle/large/first
+
+/obj/structure/decoration/rock/pile/jungle/large/second
+ icon_state = /obj/structure/flora/rock/pile/jungle/large/style_2::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/large/third
+ icon_state = /obj/structure/flora/rock/pile/jungle/large/style_3::icon_state
+
+/obj/structure/decoration/rock/pile/jungle/large/style_random/Initialize(mapload)
+ . = ..()
+ icon_state = "rocks[rand(1, 3)]"
+ update_appearance()
diff --git a/code/modules/asset_cache/assets/rdd.dm b/code/modules/asset_cache/assets/rdd.dm
new file mode 100644
index 00000000000..a5f422b420b
--- /dev/null
+++ b/code/modules/asset_cache/assets/rdd.dm
@@ -0,0 +1,11 @@
+/datum/asset/spritesheet_batched/rdd
+ name = "rdd"
+
+/datum/asset/spritesheet_batched/rdd/create_spritesheets()
+ for(var/category in GLOB.rdd_designs)
+ for(var/list/design in GLOB.rdd_designs[category])
+ var/obj/structure/decoration/dec_path = design["path"]
+ var/sprite_name = sanitize_css_class_name(design["name"])
+ var/datum/universal_icon/icon = uni_icon(initial(dec_path.icon), initial(dec_path.icon_state))
+ icon.scale(32, 32)
+ insert_icon(sprite_name, icon)
diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm
index 784cc5688b8..316feffcd93 100644
--- a/code/modules/research/designs/autolathe/service_designs.dm
+++ b/code/modules/research/designs/autolathe/service_designs.dm
@@ -661,3 +661,20 @@
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE,
)
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
+
+/datum/design/rdd
+ name = "Rapid Decoration Device (RDD)"
+ id = "rdd"
+ build_type = PROTOLATHE | AWAY_LATHE
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 8,
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 4,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
+ build_path = /obj/item/construction/rdd/loaded
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE,
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SERVICE
+
diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm
index c0a07e72c68..c1e5abb7bd1 100644
--- a/code/modules/research/techweb/nodes/service_nodes.dm
+++ b/code/modules/research/techweb/nodes/service_nodes.dm
@@ -38,6 +38,7 @@
"water_balloon",
"ticket_machine",
"radio_entertainment",
+ "rdd",
"photocopier",
)
diff --git a/icons/mob/inhands/equipment/tools_lefthand.dmi b/icons/mob/inhands/equipment/tools_lefthand.dmi
index adaedb6483f79bbf0225eb8998a67206b846bc03..5c0cf513166bd3c698be488c370340234216cb8e 100644
GIT binary patch
literal 22686
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
literal 20999
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
z