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 adaedb6483f..5c0cf513166 100644 Binary files a/icons/mob/inhands/equipment/tools_lefthand.dmi and b/icons/mob/inhands/equipment/tools_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/tools_righthand.dmi b/icons/mob/inhands/equipment/tools_righthand.dmi index 454a225c82a..e96f9fa959b 100644 Binary files a/icons/mob/inhands/equipment/tools_righthand.dmi and b/icons/mob/inhands/equipment/tools_righthand.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 0f1f57eb860..4c820902199 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fd48e58b266..7575b8fdc36 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2830,6 +2830,7 @@ #include "code\game\objects\items\kirby_plants\synthetic_plants.dm" #include "code\game\objects\items\rcd\RCD.dm" #include "code\game\objects\items\rcd\RCL.dm" +#include "code\game\objects\items\rcd\RDD.dm" #include "code\game\objects\items\rcd\RHD.dm" #include "code\game\objects\items\rcd\RLD.dm" #include "code\game\objects\items\rcd\RPD.dm" @@ -2969,6 +2970,7 @@ #include "code\game\objects\structures\chess.dm" #include "code\game\objects\structures\containers.dm" #include "code\game\objects\structures\curtains.dm" +#include "code\game\objects\structures\decorations.dm" #include "code\game\objects\structures\deployable_turret.dm" #include "code\game\objects\structures\destructible_structures.dm" #include "code\game\objects\structures\detectiveboard.dm" @@ -3744,6 +3746,7 @@ #include "code\modules\asset_cache\assets\portraits.dm" #include "code\modules\asset_cache\assets\radar.dm" #include "code\modules\asset_cache\assets\rcd.dm" +#include "code\modules\asset_cache\assets\rdd.dm" #include "code\modules\asset_cache\assets\research_designs.dm" #include "code\modules\asset_cache\assets\rtd.dm" #include "code\modules\asset_cache\assets\safe.dm" diff --git a/tgui/packages/tgui/interfaces/RapidDecorationDevice.tsx b/tgui/packages/tgui/interfaces/RapidDecorationDevice.tsx new file mode 100644 index 00000000000..60baf422efa --- /dev/null +++ b/tgui/packages/tgui/interfaces/RapidDecorationDevice.tsx @@ -0,0 +1,102 @@ +import { ImageButton, LabeledList, Section, Stack } from 'tgui-core/components'; +import { capitalizeAll } from 'tgui-core/string'; + +import { useBackend } from '../backend'; +import { Window } from '../layouts'; + +type Design = { + name: string; + icon: string; +}; + +type Category = { + cat_name: string; + designs: Design[]; +}; + +type Data = { + selected_category: string; + selected_design: string; + categories: Category[]; + matter: number; + max_matter: number; +}; + +const DecorationCard = (props: { + design: Design; + selected: boolean; + onClick: () => void; +}) => { + const { design, selected, onClick } = props; + + return ( + + ); +}; + +export const RapidDecorationDevice = () => { + const { act, data } = useBackend(); + const { + categories = [], + selected_category, + selected_design, + matter, + max_matter, + } = data; + + return ( + + + + +
+ + + {matter}/{max_matter} Units + + + {selected_design ? capitalizeAll(selected_design) : 'None'} + + +
+
+ +
+ {categories.map((category) => ( +
+ + {category.designs.map((design) => ( + + + act('design', { + category: category.cat_name, + name: design.name, + }) + } + /> + + ))} + +
+ ))} +
+
+
+
+
+ ); +};