From 2558111cba7b553c419135887f0da4cce7785a5d Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 7 Aug 2020 02:39:32 +0200 Subject: [PATCH] [MIRROR] RCD Additions + Cyborg RCD Upgrades (#225) * RCD Additions + Cyborg RCD Upgrades (#52018) * adds directional window setting for normal grille window mode adds furnishing upgrading to the rcd for chairs, stools, tables, and glass tables both of these new introductions have their direction based on where you are facing when the timer for the build finishes * adds the luxary rcd cargo pack with a loaded rcd, all 4 upgrade disks, and 3 extra compressed matter cartridges * adds the furnishing upgrade to the techwebs allows cyborgs to install rcd upgrades except silos allows loading of metal and matter into the rcd by simply clicking on the thing you want to insert lowers price of the cargo pack and removes the silo upgrade adds banned upgrades var to the rcd * you can now create windoors and deconstruct them as well you can now deconstruct tables doubles the price of the cargo pack for rcds * removed cargo pack * changes define to bitshift flags moves matter addition to rcds to a proc on sheets * matter amount is now a stack variable * RCD Additions + Cyborg RCD Upgrades Co-authored-by: Whoneedspacee --- code/__DEFINES/construction.dm | 26 ++- code/game/machinery/doors/windowdoor.dm | 15 ++ code/game/objects/items/RCD.dm | 219 +++++++++++++----- code/game/objects/items/stacks/rods.dm | 1 + .../game/objects/items/stacks/sheets/glass.dm | 3 + .../items/stacks/sheets/sheet_types.dm | 2 + code/game/objects/items/stacks/stack.dm | 2 + .../objects/items/stacks/tiles/tile_types.dm | 1 + code/game/objects/structures/grille.dm | 13 +- code/game/objects/structures/tables_racks.dm | 14 ++ code/game/turfs/open/floor.dm | 65 ++++-- code/modules/mining/aux_base_camera.dm | 4 +- code/modules/research/designs/tool_designs.dm | 10 + code/modules/research/techweb/all_nodes.dm | 2 +- icons/mob/radial.dmi | Bin 16655 -> 20187 bytes 15 files changed, 282 insertions(+), 95 deletions(-) diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index aeae88a328c..7838697ccdb 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -99,13 +99,21 @@ #define CAT_ICE "Frozen" #define CAT_DRINK "Drinks" -#define RCD_FLOORWALL 1 -#define RCD_AIRLOCK 2 -#define RCD_DECONSTRUCT 3 -#define RCD_WINDOWGRILLE 4 -#define RCD_MACHINE 8 -#define RCD_COMPUTER 16 +// these aren't even used as bitflags so who even knows why they are treated like them +#define RCD_FLOORWALL (1<<0) +#define RCD_AIRLOCK (1<<1) +#define RCD_DECONSTRUCT (1<<2) +#define RCD_WINDOWGRILLE (1<<3) +#define RCD_MACHINE (1<<4) +#define RCD_COMPUTER (1<<5) +#define RCD_FURNISHING (1<<6) -#define RCD_UPGRADE_FRAMES 1 -#define RCD_UPGRADE_SIMPLE_CIRCUITS 2 -#define RCD_UPGRADE_SILO_LINK 4 +#define RCD_UPGRADE_FRAMES (1<<0) +#define RCD_UPGRADE_SIMPLE_CIRCUITS (1<<1) +#define RCD_UPGRADE_SILO_LINK (1<<2) +#define RCD_UPGRADE_FURNISHING (1<<3) + +#define RCD_WINDOW_FULLTILE "full tile" +#define RCD_WINDOW_DIRECTIONAL "directional" +#define RCD_WINDOW_NORMAL "glass" +#define RCD_WINDOW_REINFORCED "reinforced glass" diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index f9429a546aa..aca2ae897ee 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -334,6 +334,21 @@ if("touch") INVOKE_ASYNC(src, .proc/open_and_close) +/obj/machinery/door/window/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) + switch(the_rcd.mode) + if(RCD_DECONSTRUCT) + return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 32) + return FALSE + +/obj/machinery/door/window/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + to_chat(user, "You deconstruct the windoor.") + qdel(src) + return TRUE + return FALSE + + /obj/machinery/door/window/brigdoor name = "secure door" icon_state = "leftsecure" diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 2ede9daeb74..7b924c5e64c 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -29,14 +29,13 @@ RLD var/datum/effect_system/spark_spread/spark_system var/matter = 0 var/max_matter = 100 - var/sheetmultiplier = 4 //Controls the amount of matter added for each glass/metal sheet, triple for plasteel - var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal - var/plasmarglassmultiplier = 2 //50% less plasma than in plasteel - var/rglassmultiplier = 1.5 //One metal sheet, half a glass sheet var/no_ammo_message = "The \'Low Ammo\' light on the device blinks yellow." var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states - var/upgrade = FALSE + /// Bitflags for upgrades + var/upgrade = NONE + /// Bitflags for banned upgrades + var/banned_upgrades = NONE var/datum/component/remote_materials/silo_mats //remote connection to the silo var/silo_link = FALSE //switch to use internal or remote storage @@ -61,49 +60,65 @@ RLD silo_mats = null return ..() +/obj/item/construction/pre_attack(atom/target, mob/user, params) + if(istype(target, /obj/item/rcd_upgrade)) + install_upgrade(target, user) + return TRUE + if(insert_matter(target, user)) + return TRUE + return ..() + /obj/item/construction/attackby(obj/item/W, mob/user, params) - if(iscyborg(user)) + if(istype(W, /obj/item/rcd_upgrade)) + install_upgrade(W, user) + return TRUE + if(insert_matter(W, user)) + return TRUE + return ..() + +/// Installs an upgrade into the RCD checking if it is already installed, or if it is a banned upgrade +/obj/item/construction/proc/install_upgrade(obj/item/rcd_upgrade/rcd_up, mob/user) + if(rcd_up.upgrade & upgrade) + to_chat(user, "[src] has already installed this upgrade!") return - var/loaded = 0 - if(istype(W, /obj/item/rcd_ammo)) - var/obj/item/rcd_ammo/R = W + if(rcd_up.upgrade & banned_upgrades) + to_chat(user, "[src] can't install this upgrade!") + return + upgrade |= rcd_up.upgrade + if((rcd_up.upgrade & RCD_UPGRADE_SILO_LINK) && !silo_mats) + silo_mats = AddComponent(/datum/component/remote_materials, "RCD", FALSE, FALSE) + playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) + qdel(rcd_up) + +/// Inserts matter into the RCD allowing it to build +/obj/item/construction/proc/insert_matter(obj/O, mob/user) + if(iscyborg(user)) + return FALSE + var/loaded = FALSE + if(istype(O, /obj/item/rcd_ammo)) + var/obj/item/rcd_ammo/R = O var/load = min(R.ammoamt, max_matter - matter) if(load <= 0) to_chat(user, "[src] can't hold any more matter-units!") - return + return FALSE R.ammoamt -= load if(R.ammoamt <= 0) qdel(R) matter += load playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) - loaded = 1 - else if(istype(W, /obj/item/stack/sheet/metal) || istype(W, /obj/item/stack/sheet/glass)) - loaded = loadwithsheets(W, sheetmultiplier, user) - else if(istype(W, /obj/item/stack/sheet/plasteel)) - loaded = loadwithsheets(W, plasteelmultiplier*sheetmultiplier, user) //12 matter for 1 plasteel sheet - else if(istype(W, /obj/item/stack/sheet/plasmarglass)) - loaded = loadwithsheets(W, plasmarglassmultiplier*sheetmultiplier, user) //8 matter for one plasma rglass sheet - else if(istype(W, /obj/item/stack/sheet/rglass)) - loaded = loadwithsheets(W, rglassmultiplier*sheetmultiplier, user) //6 matter for one rglass sheet - else if(istype(W, /obj/item/stack/rods)) - loaded = loadwithsheets(W, sheetmultiplier * 0.5, user) // 2 matter for 1 rod, as 2 rods are produced from 1 metal - else if(istype(W, /obj/item/stack/tile/plasteel)) - loaded = loadwithsheets(W, sheetmultiplier * 0.25, user) // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal + loaded = TRUE + else if(istype(O, /obj/item/stack)) + loaded = loadwithsheets(O, user) if(loaded) to_chat(user, "[src] now holds [matter]/[max_matter] matter-units.") - else if(istype(W, /obj/item/rcd_upgrade)) - var/obj/item/rcd_upgrade/rcd_up = W - if(!(upgrade & rcd_up.upgrade)) - upgrade |= rcd_up.upgrade - if((rcd_up.upgrade & RCD_UPGRADE_SILO_LINK) && !silo_mats) - silo_mats = AddComponent(/datum/component/remote_materials, "RCD", FALSE, FALSE) - playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) - qdel(W) - else - return ..() - update_icon() //ensures that ammo counters (if present) get updated + update_icon() //ensures that ammo counters (if present) get updated + return loaded -/obj/item/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user) +/obj/item/construction/proc/loadwithsheets(obj/item/stack/S, mob/user) + var/value = S.matter_amount + if(value <= 0) + to_chat(user, "You can't insert [S.name] into [src]!") + return FALSE var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD if(maxsheets > 0) var/amount_to_use = min(S.amount, maxsheets) @@ -111,9 +126,9 @@ RLD matter += value*amount_to_use playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) to_chat(user, "You insert [amount_to_use] [S.name] sheets into [src]. ") - return 1 + return TRUE to_chat(user, "You can't insert any more [S.name] sheets into [src]!") - return 0 + return FALSE /obj/item/construction/proc/activate() playsound(src.loc, 'sound/items/deconstruct.ogg', 50, TRUE) @@ -204,6 +219,11 @@ RLD var/airlock_type = /obj/machinery/door/airlock var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use var/window_type = /obj/structure/window/fulltile + var/window_glass = RCD_WINDOW_NORMAL + var/window_size = RCD_WINDOW_FULLTILE + var/furnish_type = /obj/structure/chair + var/furnish_cost = 8 + var/furnish_delay = 10 var/advanced_airlock_setting = 1 //Set to 1 if you want more paintjobs available var/delay_mod = 1 var/canRturf = FALSE //Variable for R walls to deconstruct them @@ -214,26 +234,56 @@ RLD user.visible_message("[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..") return (BRUTELOSS) -/obj/item/construction/rcd/verb/toggle_window_type_verb() - set name = "RCD : Toggle Window Type" +/obj/item/construction/rcd/verb/toggle_window_glass_verb() + set name = "RCD : Toggle Window Glass" set category = "Object" set src in view(1) if(!usr.canUseTopic(src, BE_CLOSE)) return - toggle_window_type(usr) + toggle_window_glass(usr) -/obj/item/construction/rcd/proc/toggle_window_type(mob/user) - var/window_type_name - if (window_type == /obj/structure/window/fulltile) - window_type = /obj/structure/window/reinforced/fulltile - window_type_name = "reinforced glass" +/obj/item/construction/rcd/verb/toggle_window_size_verb() + set name = "RCD : Toggle Window Size" + set category = "Object" + set src in view(1) + + if(!usr.canUseTopic(src, BE_CLOSE)) + return + + toggle_window_size(usr) + +/// Toggles the usage of reinforced or normal glass +/obj/item/construction/rcd/proc/toggle_window_glass(mob/user) + if (window_glass != RCD_WINDOW_REINFORCED) + set_window_type(user, RCD_WINDOW_REINFORCED, window_size) + return + set_window_type(user, RCD_WINDOW_NORMAL, window_size) + +/// Toggles the usage of directional or full tile windows +/obj/item/construction/rcd/proc/toggle_window_size(mob/user) + if (window_size != RCD_WINDOW_DIRECTIONAL) + set_window_type(user, window_glass, RCD_WINDOW_DIRECTIONAL) + return + set_window_type(user, window_glass, RCD_WINDOW_FULLTILE) + +/// Sets the window type to be created based on parameters +/obj/item/construction/rcd/proc/set_window_type(mob/user, glass, size) + window_glass = glass + window_size = size + if(window_glass == RCD_WINDOW_REINFORCED) + if(window_size == RCD_WINDOW_DIRECTIONAL) + window_type = /obj/structure/window/reinforced + else + window_type = /obj/structure/window/reinforced/fulltile else - window_type = /obj/structure/window/fulltile - window_type_name = "glass" + if(window_size == RCD_WINDOW_DIRECTIONAL) + window_type = /obj/structure/window + else + window_type = /obj/structure/window/fulltile - to_chat(user, "You change \the [src]'s window mode to [window_type_name].") + to_chat(user, "You change \the [src]'s window mode to [window_size] [window_glass] window.") /obj/item/construction/rcd/proc/toggle_silo_link(mob/user) if(silo_mats) @@ -243,7 +293,7 @@ RLD silo_link = !silo_link to_chat(user, "You change \the [src]'s storage link state: [silo_link ? "ON" : "OFF"].") else - to_chat(user, "\the [src] dont have remote storage connection.") + to_chat(user, "\the [src] doesn't have remote storage connection.") /obj/item/construction/rcd/proc/get_airlock_image(airlock_type) var/obj/machinery/door/airlock/proto = airlock_type @@ -282,7 +332,9 @@ RLD var/list/solid_or_glass_choices = list( "Solid" = get_airlock_image(/obj/machinery/door/airlock), - "Glass" = get_airlock_image(/obj/machinery/door/airlock/glass) + "Glass" = get_airlock_image(/obj/machinery/door/airlock/glass), + "Windoor" = image(icon = 'icons/mob/radial.dmi', icon_state = "windoor"), + "Secure Windoor" = image(icon = 'icons/mob/radial.dmi', icon_state = "secure_windoor") ) var/list/solid_choices = list( @@ -403,10 +455,47 @@ RLD else airlock_type = /obj/machinery/door/airlock/glass airlock_glass = TRUE + if("Windoor") + airlock_type = /obj/machinery/door/window + airlock_glass = TRUE + if("Secure Windoor") + airlock_type = /obj/machinery/door/window/brigdoor + airlock_glass = TRUE else airlock_type = /obj/machinery/door/airlock airlock_glass = FALSE +/// Radial menu for choosing the object you want to be created with the furnishing mode +/obj/item/construction/rcd/proc/change_furnishing_type(mob/user) + if(!user) + return + var/static/list/choices = list( + "Chair" = image(icon = 'icons/mob/radial.dmi', icon_state = "chair"), + "Stool" = image(icon = 'icons/mob/radial.dmi', icon_state = "stool"), + "Table" = image(icon = 'icons/mob/radial.dmi', icon_state = "table"), + "Glass Table" = image(icon = 'icons/mob/radial.dmi', icon_state = "glass_table") + ) + var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user)) + return + switch(choice) + if("Chair") + furnish_type = /obj/structure/chair + furnish_cost = 8 + furnish_delay = 10 + if("Stool") + furnish_type = /obj/structure/chair/stool + furnish_cost = 8 + furnish_delay = 10 + if("Table") + furnish_type = /obj/structure/table + furnish_cost = 16 + furnish_delay = 20 + if("Glass Table") + furnish_type = /obj/structure/table/glass + furnish_cost = 16 + furnish_delay = 20 + /obj/item/construction/rcd/proc/rcd_create(atom/A, mob/user) var/list/rcd_results = A.rcd_vals(user, src) if(!rcd_results) @@ -453,6 +542,10 @@ RLD choices += list( "Silo Link" = image(icon = 'icons/obj/mining.dmi', icon_state = "silo"), ) + if(upgrade & RCD_UPGRADE_FURNISHING) + choices += list( + "Furnishing" = image(icon = 'icons/mob/radial.dmi', icon_state = "chair") + ) if(mode == RCD_AIRLOCK) choices += list( "Change Access" = image(icon = 'icons/mob/radial.dmi', icon_state = "access"), @@ -460,7 +553,12 @@ RLD ) else if(mode == RCD_WINDOWGRILLE) choices += list( - "Change Window Type" = image(icon = 'icons/mob/radial.dmi', icon_state = "windowtype") + "Change Window Glass" = image(icon = 'icons/mob/radial.dmi', icon_state = "windowtype"), + "Change Window Size" = image(icon = 'icons/mob/radial.dmi', icon_state = "windowsize") + ) + else if(mode == RCD_FURNISHING) + choices += list( + "Change Furnishing Type" = image(icon = 'icons/mob/radial.dmi', icon_state = "chair") ) var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE) if(!check_menu(user)) @@ -476,6 +574,8 @@ RLD mode = RCD_WINDOWGRILLE if("Machine Frames") mode = RCD_MACHINE + if("Furnishing") + mode = RCD_FURNISHING if("Computer Frames") mode = RCD_COMPUTER change_computer_dir(user) @@ -486,8 +586,14 @@ RLD if("Change Airlock Type") change_airlock_setting(user) return - if("Change Window Type") - toggle_window_type(user) + if("Change Window Glass") + toggle_window_glass(user) + return + if("Change Window Size") + toggle_window_size(user) + return + if("Change Furnishing Type") + change_furnishing_type(user) return if("Silo Link") toggle_silo_link(user) @@ -534,6 +640,7 @@ RLD no_ammo_message = "Insufficient charge." desc = "A device used to rapidly build walls and floors." canRturf = TRUE + banned_upgrades = RCD_UPGRADE_SILO_LINK var/energyfactor = 72 @@ -600,7 +707,7 @@ RLD name = "admin RCD" max_matter = INFINITY matter = INFINITY - upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS + upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS | RCD_UPGRADE_FURNISHING // Ranged RCD @@ -893,6 +1000,10 @@ RLD desc = "It contains direct silo connection RCD upgrade." upgrade = RCD_UPGRADE_SILO_LINK +/obj/item/rcd_upgrade/furnishing + desc = "It contains the design for chairs, stools, tables, and glass tables." + upgrade = RCD_UPGRADE_FURNISHING + #undef GLOW_MODE #undef LIGHT_MODE #undef REMOVE_MODE diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index b5142017b14..053baeafc96 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -24,6 +24,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ hitsound = 'sound/weapons/gun/general/grenade_launch.ogg' embedding = list() novariants = TRUE + matter_amount = 2 /obj/item/stack/rods/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins to stuff \the [src] down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide!")//it looks like theyre ur mum diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 16419573993..486f56c4061 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ material_type = /datum/material/glass point_value = 1 tableVariant = /obj/structure/table/glass + matter_amount = 4 /obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -143,6 +144,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ merge_type = /obj/item/stack/sheet/rglass grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10) point_value = 4 + matter_amount = 6 /obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -189,6 +191,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ merge_type = /obj/item/stack/sheet/plasmarglass grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10) point_value = 23 + matter_amount = 8 /obj/item/stack/sheet/plasmarglass/get_main_recipes() . = ..() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 728a4b32bd7..de46d12aea3 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -108,6 +108,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ point_value = 2 tableVariant = /obj/structure/table material_type = /datum/material/iron + matter_amount = 4 /obj/item/stack/sheet/metal/narsie_act() new /obj/item/stack/sheet/runed_metal(loc, amount) @@ -167,6 +168,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ point_value = 23 tableVariant = /obj/structure/table/reinforced material_flags = MATERIAL_NO_EFFECTS + matter_amount = 12 /obj/item/stack/sheet/plasteel/get_main_recipes() . = ..() diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 0099c33e6ec..b4bffe6ccfd 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -38,6 +38,8 @@ var/absorption_capacity /// How quickly we lower the blood flow on a cut wound we're bandaging. Expected lifetime of this bandage in ticks is thus absorption_capacity/absorption_rate, or until the cut heals, whichever comes first var/absorption_rate + /// Amount of matter for RCD + var/matter_amount = 0 /obj/item/stack/on_grind() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index fcd0328a9cf..1c4b243c2ee 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -339,6 +339,7 @@ mineralType = "metal" armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF + matter_amount = 1 /obj/item/stack/tile/plasteel/cyborg custom_materials = null // All other Borg versions of items have no Metal or Glass - RR diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 993bed6f80a..6cba435b139 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -50,10 +50,9 @@ if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5) if(RCD_WINDOWGRILLE) - if(the_rcd.window_type == /obj/structure/window/reinforced/fulltile) + if(the_rcd.window_glass == RCD_WINDOW_REINFORCED) return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 12) - else - return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8) + return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8) return FALSE /obj/structure/grille/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) @@ -63,10 +62,14 @@ qdel(src) return TRUE if(RCD_WINDOWGRILLE) - if(locate(/obj/structure/window) in loc) + if(!isturf(loc)) + return FALSE + var/turf/T = loc + var/window_dir = the_rcd.window_size == RCD_WINDOW_FULLTILE ? FULLTILE_WINDOW_DIR : user.dir + if(!valid_window_location(T, window_dir)) return FALSE to_chat(user, "You construct the window.") - var/obj/structure/window/WD = new the_rcd.window_type(drop_location()) + var/obj/structure/window/WD = new the_rcd.window_type(T, window_dir) WD.set_anchored(TRUE) return TRUE return FALSE diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index badc82ec316..081d31aaff1 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -239,6 +239,20 @@ new framestack(T, framestackamount) qdel(src) +/obj/structure/table/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) + switch(the_rcd.mode) + if(RCD_DECONSTRUCT) + return list("mode" = RCD_DECONSTRUCT, "delay" = 24, "cost" = 16) + return FALSE + +/obj/structure/table/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) + switch(passed_mode) + if(RCD_DECONSTRUCT) + to_chat(user, "You deconstruct the table.") + qdel(src) + return TRUE + return FALSE + /obj/structure/table/greyscale icon = 'icons/obj/smooth_structures/table_greyscale.dmi' diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 8691db8d43f..be0c581a7dc 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -255,6 +255,8 @@ return list("mode" = RCD_MACHINE, "delay" = 20, "cost" = 25) if(RCD_COMPUTER) return list("mode" = RCD_COMPUTER, "delay" = 20, "cost" = 25) + if(RCD_FURNISHING) + return list("mode" = RCD_FURNISHING, "delay" = the_rcd.furnish_delay, "cost" = the_rcd.furnish_cost) return FALSE /turf/open/floor/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) @@ -264,23 +266,33 @@ PlaceOnTop(/turf/closed/wall) return TRUE if(RCD_AIRLOCK) - if(locate(/obj/machinery/door/airlock) in src) + if(locate(/obj/machinery/door) in src) return FALSE + if(ispath(the_rcd.airlock_type, /obj/machinery/door/window)) + to_chat(user, "You build a windoor.") + var/obj/machinery/door/window/new_window = new the_rcd.airlock_type(src, user.dir) + if(the_rcd.airlock_electronics) + new_window.req_access = the_rcd.airlock_electronics.accesses.Copy() + new_window.req_one_access = the_rcd.airlock_electronics.one_access + new_window.unres_sides = the_rcd.airlock_electronics.unres_sides + new_window.autoclose = TRUE + new_window.update_icon() + return TRUE to_chat(user, "You build an airlock.") - var/obj/machinery/door/airlock/A = new the_rcd.airlock_type(src) - A.electronics = new /obj/item/electronics/airlock(A) + var/obj/machinery/door/airlock/new_airlock = new the_rcd.airlock_type(src) + new_airlock.electronics = new /obj/item/electronics/airlock(new_airlock) if(the_rcd.airlock_electronics) - A.electronics.accesses = the_rcd.airlock_electronics.accesses.Copy() - A.electronics.one_access = the_rcd.airlock_electronics.one_access - A.electronics.unres_sides = the_rcd.airlock_electronics.unres_sides - if(A.electronics.one_access) - A.req_one_access = A.electronics.accesses + new_airlock.electronics.accesses = the_rcd.airlock_electronics.accesses.Copy() + new_airlock.electronics.one_access = the_rcd.airlock_electronics.one_access + new_airlock.electronics.unres_sides = the_rcd.airlock_electronics.unres_sides + if(new_airlock.electronics.one_access) + new_airlock.req_one_access = new_airlock.electronics.accesses else - A.req_access = A.electronics.accesses - if(A.electronics.unres_sides) - A.unres_sides = A.electronics.unres_sides - A.autoclose = TRUE - A.update_icon() + new_airlock.req_access = new_airlock.electronics.accesses + if(new_airlock.electronics.unres_sides) + new_airlock.unres_sides = new_airlock.electronics.unres_sides + new_airlock.autoclose = TRUE + new_airlock.update_icon() return TRUE if(RCD_DECONSTRUCT) if(!ScrapeAway(flags = CHANGETURF_INHERIT_AIR)) @@ -291,26 +303,31 @@ if(locate(/obj/structure/grille) in src) return FALSE to_chat(user, "You construct the grille.") - var/obj/structure/grille/G = new(src) - G.set_anchored(TRUE) + var/obj/structure/grille/new_grille = new(src) + new_grille.set_anchored(TRUE) return TRUE if(RCD_MACHINE) if(locate(/obj/structure/frame/machine) in src) return FALSE - var/obj/structure/frame/machine/M = new(src) - M.state = 2 - M.icon_state = "box_1" - M.set_anchored(TRUE) + var/obj/structure/frame/machine/new_machine = new(src) + new_machine.state = 2 + new_machine.icon_state = "box_1" + new_machine.set_anchored(TRUE) return TRUE if(RCD_COMPUTER) if(locate(/obj/structure/frame/computer) in src) return FALSE - var/obj/structure/frame/computer/C = new(src) - C.set_anchored(TRUE) - C.state = 1 - C.setDir(the_rcd.computer_dir) + var/obj/structure/frame/computer/new_computer = new(src) + new_computer.set_anchored(TRUE) + new_computer.state = 1 + new_computer.setDir(the_rcd.computer_dir) + return TRUE + if(RCD_FURNISHING) + if(locate(the_rcd.furnish_type) in src) + return FALSE + var/atom/new_furnish = new the_rcd.furnish_type(src) + new_furnish.setDir(user.dir) return TRUE - return FALSE /turf/open/floor/material diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index 988a83d8392..b69fb772fc1 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -210,13 +210,13 @@ /datum/action/innate/aux_base/window_type - name = "Select Window Type" + name = "Select Window Glass" button_icon_state = "window_select" /datum/action/innate/aux_base/window_type/Activate() if(..()) return - B.RCD.toggle_window_type() + B.RCD.toggle_window_glass() /datum/action/innate/aux_base/place_fan name = "Place Tiny Fan" diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm index 3eb106ce1ef..99fd14aabc1 100644 --- a/code/modules/research/designs/tool_designs.dm +++ b/code/modules/research/designs/tool_designs.dm @@ -73,6 +73,16 @@ category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING +/datum/design/rcd_upgrade/furnishing + name = "RCD furnishing upgrade" + desc = "Adds the ability to furnish areas using the RCD." + id = "rcd_upgrade_furnishing" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 1500, /datum/material/titanium = 2000) + build_path = /obj/item/rcd_upgrade/furnishing + category = list("Tool Designs") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + /datum/design/rcd_upgrade/silo_link name = "Advanced RCD silo link upgrade" desc = "Upgrades the RCD to be able to pull materials from the ore silo. The RCD must be linked to the silo using a multitool before it will function." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 7e71f86788b..71f0bb000e0 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -583,7 +583,7 @@ id = "rcd_upgrade" display_name = "RCD designs upgrade" description = "Unlocks new RCD designs." - design_ids = list("rcd_upgrade_frames", "rcd_upgrade_simple_circuits") + design_ids = list("rcd_upgrade_frames", "rcd_upgrade_simple_circuits", "rcd_upgrade_furnishing") prereq_ids = list("adv_engi") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/icons/mob/radial.dmi b/icons/mob/radial.dmi index d2d032fbbb42c293979651b5ea67a4dd31bf0bd3..6e5c79cc34dc29b9c89b8c36c14dc809902a9f61 100644 GIT binary patch literal 20187 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%0DZ$|XkQ1Hfs%~?wL>>|_hkTxKY3wN74;#<- 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