From 4306d27521cdb326f87b3774693d33b8a0673629 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sun, 22 Apr 2018 00:34:06 -0400 Subject: [PATCH] circuit imprinter update --- code/modules/research/circuitprinter.dm | 84 ++++---------- code/modules/research/designs.dm | 2 +- .../research/designs/AI_module_designs.dm | 30 ++--- .../research/designs/comp_board_designs.dm | 76 ++++++------ .../research/designs/computer_part_designs.dm | 19 +-- .../research/designs/machine_designs.dm | 108 +++++++++--------- .../modules/research/designs/mecha_designs.dm | 38 +++--- .../modules/research/designs/power_designs.dm | 10 +- .../research/designs/telecomms_designs.dm | 14 +-- .../research/designs/weapon_designs.dm | 4 +- code/modules/research/destructive_analyzer.dm | 10 +- code/modules/research/experimentor.dm | 1 - code/modules/research/protolathe.dm | 45 +------- code/modules/research/rdconsole.dm | 97 +++++++++------- code/modules/research/rdmachines.dm | 43 +++++++ icons/obj/machines/research.dmi | Bin 19815 -> 21616 bytes 16 files changed, 276 insertions(+), 305 deletions(-) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 00f0214828c..08266ecf5a8 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -10,10 +10,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). icon_state = "circuit_imprinter" flags = OPENCONTAINER - var/g_amount = 0 - var/gold_amount = 0 - var/diamond_amount = 0 - var/max_material_amount = 75000.0 var/efficiency_coeff var/list/categories = list( @@ -55,13 +51,16 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). reagents.my_atom = src /obj/machinery/r_n_d/circuit_imprinter/RefreshParts() - var/T = 0 + reagents.maximum_volume = 0 for(var/obj/item/reagent_containers/glass/G in component_parts) + reagents.maximum_volume += G.volume G.reagents.trans_to(src, G.reagents.total_volume) + + materials.max_amount = 0 for(var/obj/item/stock_parts/matter_bin/M in component_parts) - T += M.rating - max_material_amount = T * 75000.0 - T = 0 + materials.max_amount += M.rating * 75000 + + var/T = 0 for(var/obj/item/stock_parts/manipulator/M in component_parts) T += M.rating efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas @@ -72,23 +71,18 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M) - switch(M) - if(MAT_GLASS) - return (g_amount - (being_built.materials[M]/efficiency_coeff) >= 0) - if(MAT_GOLD) - return (gold_amount - (being_built.materials[M]/efficiency_coeff) >= 0) - if(MAT_DIAMOND) - return (diamond_amount - (being_built.materials[M]/efficiency_coeff) >= 0) - else - return (reagents.has_reagent(M, (being_built.materials[M]/efficiency_coeff)) != 0) + var/list/all_materials = being_built.reagents_list + being_built.materials + var/A = materials.amount(M) + if(!A) + A = reagents.get_reagent_amount(M) -/obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials() - return g_amount + gold_amount + diamond_amount + return round(A / max(1, (all_materials[M]/efficiency_coeff))) /obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(shocked) - shock(user,50) + if(shock(user,50)) + return TRUE if(default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O)) if(linked_console) linked_console.linked_imprinter = null @@ -104,57 +98,19 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). if(istype(I, /obj/item/reagent_containers/glass/beaker)) reagents.trans_to(I, reagents.total_volume) I.loc = src.loc - for(var/obj/item/reagent_containers/glass/G in component_parts) - reagents.trans_to(G, G.reagents.maximum_volume) - if(g_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / MINERAL_MATERIAL_AMOUNT) - if(gold_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc) - G.amount = round(gold_amount / MINERAL_MATERIAL_AMOUNT) - if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc) - G.amount = round(diamond_amount / MINERAL_MATERIAL_AMOUNT) + materials.retrieve_all() default_deconstruction_crowbar(O) return else to_chat(user, "You can't load the [src.name] while it's opened.") return - if(disabled) - return + if(O.is_open_container()) + return FALSE + if(!linked_console) to_chat(user, "The [name] must be linked to an R&D console first!") return 1 if(O.is_open_container()) return - if(!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond)) - to_chat(user, "You cannot insert this item into the [name]!") - return - if(stat) - return - if(busy) - to_chat(user, "The [name] is busy. Please wait for completion of previous operation.") - return - var/obj/item/stack/sheet/stack = O - if((TotalMaterials() + stack.perunit) > max_material_amount) - to_chat(user, "The [name] is full. Please remove glass from the protolathe in order to insert more.") - return - - var/amount = round(input("How many sheets do you want to add?") as num) - if(amount <= 0 || stack.amount <= 0) - return - if(amount > stack.amount) - amount = min(stack.amount, round((max_material_amount-TotalMaterials())/stack.perunit)) - - busy = 1 - use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount/10))) - to_chat(user, "You add [amount] sheets to the [src.name].") - if(istype(stack, /obj/item/stack/sheet/glass)) - g_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/gold)) - gold_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/diamond)) - diamond_amount += amount * MINERAL_MATERIAL_AMOUNT - stack.use(amount) - busy = 0 - src.updateUsrDialog() + else + return ..() \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index c1269def592..e7e3f1c3acd 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -42,6 +42,6 @@ other types of metals and chemistry for reagents). var/locked = 0 //If true it will spawn inside a lockbox with currently sec access var/access_requirement = list(access_armory) //What special access requirements will the lockbox have? Defaults to armory. var/category = null //Primarily used for Mech Fabricators, but can be used for anything - var/list/reagents = list() //List of reagents. Format: "id" = amount. + var/list/reagents_list = list() //List of reagents. Format: "id" = amount. var/maxstack = 1 var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 3e933bff543..af3d7e34b82 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -8,7 +8,7 @@ id = "freeform_module" req_tech = list("programming" = 5, "materials" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/freeform category = list("AI Modules") @@ -18,7 +18,7 @@ id = "onecrewmember_module" req_tech = list("programming" = 6, "materials" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/oneCrewMember category = list("AI Modules") @@ -28,7 +28,7 @@ id = "oxygen_module" req_tech = list("programming" = 4, "biotech" = 2, "materials" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/oxygen category = list("AI Modules") @@ -38,7 +38,7 @@ id = "protectstation_module" req_tech = list("programming" = 5, "materials" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/protectStation category = list("AI Modules") @@ -48,7 +48,7 @@ id = "purge_module" req_tech = list("programming" = 5, "materials" = 6) build_type = IMPRINTER - materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/purge category = list("AI Modules") @@ -58,7 +58,7 @@ id = "quarantine_module" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/quarantine category = list("AI Modules") @@ -68,7 +68,7 @@ id = "reset_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/reset category = list("AI Modules") @@ -78,7 +78,7 @@ id = "safeguard_module" req_tech = list("programming" = 3, "materials" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/safeguard category = list("AI Modules") @@ -88,7 +88,7 @@ id = "antimov_module" req_tech = list("programming" = 5, "syndicate" = 2, "materials" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/antimov category = list("AI Modules") @@ -98,7 +98,7 @@ id = "asimov_module" req_tech = list("programming" = 3, "materials" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/asimov category = list("AI Modules") @@ -108,7 +108,7 @@ id = "corporate_module" req_tech = list("programming" = 5, "materials" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/corp category = list("AI Modules") @@ -118,7 +118,7 @@ id = "crewsimov_module" req_tech = list("programming" = 3, "materials" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/crewsimov category = list("AI Modules") @@ -128,7 +128,7 @@ id = "freeformcore_module" req_tech = list("programming" = 6, "materials" = 6) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/freeformcore category = list("AI Modules") @@ -138,7 +138,7 @@ id = "paladin_module" req_tech = list("programming" = 5, "materials" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/paladin category = list("AI Modules") @@ -148,6 +148,6 @@ id = "tyrant_module" req_tech = list("programming" = 5, "syndicate" = 2, "materials" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/tyrant category = list("AI Modules") diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 4099f8457d0..57da7142b7c 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -8,7 +8,7 @@ id = "aicore" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/aicore category = list("Computer Boards") @@ -18,7 +18,7 @@ id = "aifixer" req_tech = list("programming" = 4, "magnets" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/aifixer category = list("Computer Boards") @@ -28,7 +28,7 @@ id = "aiupload" req_tech = list("programming" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/aiupload category = list("Computer Boards") @@ -38,7 +38,7 @@ id = "atmosalerts" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/atmos_alert category = list("Computer Boards") @@ -48,7 +48,7 @@ id = "air_management" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/air_management category = list("Computer Boards") @@ -58,7 +58,7 @@ id = "seccamera" req_tech = list("programming" = 2, "combat" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/camera category = list("Computer Boards") @@ -68,7 +68,7 @@ id = "clonecontrol" req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/cloning category = list("Computer Boards") @@ -78,7 +78,7 @@ id = "comconsole" req_tech = list("programming" = 3, "magnets" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/communications category = list("Computer Boards") @@ -88,7 +88,7 @@ id = "crewconsole" req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/crew category = list("Computer Boards") @@ -98,7 +98,7 @@ id = "borgupload" req_tech = list("programming" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/borgupload category = list("Computer Boards") @@ -108,7 +108,7 @@ id = "scan_console" req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/scan_consolenew category = list("Computer Boards") @@ -118,7 +118,7 @@ id = "dronecontrol" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/drone_control category = list("Computer Boards") @@ -128,7 +128,7 @@ id = "mechacontrol" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha_control category = list("Computer Boards") @@ -138,7 +138,7 @@ id = "idcardconsole" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/card category = list("Computer Boards") @@ -148,7 +148,7 @@ id = "mechapower" req_tech = list("programming" = 3, "powerstorage" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mech_bay_power_console category = list("Computer Boards") @@ -158,7 +158,7 @@ id = "med_data" req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/med_data category = list("Computer Boards") @@ -168,7 +168,7 @@ id = "message_monitor" req_tech = list("programming" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/message_monitor category = list("Computer Boards") @@ -178,7 +178,7 @@ id = "operating" req_tech = list("programming" = 2, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/operating category = list("Computer Boards") @@ -188,7 +188,7 @@ id = "pandemic" req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/pandemic category = list("Computer Boards") @@ -198,7 +198,7 @@ id = "powermonitor" req_tech = list("programming" = 2, "powerstorage" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/powermonitor category = list("Computer Boards") @@ -208,7 +208,7 @@ id = "prisonmanage" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/prisoner category = list("Computer Boards") @@ -218,7 +218,7 @@ id = "rdconsole" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/rdconsole category = list("Computer Boards") @@ -228,7 +228,7 @@ id = "rdservercontrol" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/rdservercontrol category = list("Computer Boards") @@ -238,7 +238,7 @@ id = "robocontrol" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/robotics category = list("Computer Boards") @@ -248,7 +248,7 @@ id = "secdata" req_tech = list("programming" = 2, "combat" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/secure_data category = list("Computer Boards") @@ -258,7 +258,7 @@ id = "solarcontrol" req_tech = list("programming" = 2, "powerstorage" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/solar_control category = list("Computer Boards") @@ -268,7 +268,7 @@ id = "spacepodc" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/pod_locater category = list("Computer Boards") @@ -278,7 +278,7 @@ id = "ordercomp" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/ordercomp category = list("Computer Boards") @@ -288,7 +288,7 @@ id = "supplycomp" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/supplycomp category = list("Computer Boards") @@ -298,7 +298,7 @@ id = "comm_monitor" req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/comm_monitor category = list("Computer Boards") @@ -308,7 +308,7 @@ id = "comm_server" req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/comm_server category = list("Computer Boards") @@ -318,7 +318,7 @@ id = "comm_traffic" req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/comm_traffic category = list("Computer Boards") @@ -328,7 +328,7 @@ id = "telesci_console" req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telesci_console category = list("Computer Boards") @@ -338,7 +338,7 @@ id = "teleconsole" req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/teleporter category = list("Computer Boards") @@ -348,7 +348,7 @@ id = "GAC" req_tech = list("programming" = 3, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/air_management category = list("Computer Boards") @@ -358,7 +358,7 @@ id = "tankcontrol" req_tech = list("programming" = 3, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/large_tank_control category = list("Computer Boards") @@ -368,7 +368,7 @@ id = "AAC" req_tech = list("programming" = 4, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/atmos_automation category = list("Computer Boards") @@ -378,6 +378,6 @@ id = "xenobioconsole" req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/xenobiology category = list("Computer Boards") diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm index 1b2640cbfa3..1b4f831611a 100644 --- a/code/modules/research/designs/computer_part_designs.dm +++ b/code/modules/research/designs/computer_part_designs.dm @@ -63,7 +63,8 @@ id = "netcard_basic" req_tech = list("programming" = 2, "engineering" = 1) build_type = IMPRINTER - materials = list(MAT_METAL = 250, MAT_GLASS = 100, "sacid" = 20) + materials = list(MAT_METAL = 250, MAT_GLASS = 100) + reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/network_card category = list("Computer Parts") @@ -72,7 +73,7 @@ id = "netcard_advanced" req_tech = list("programming" = 4, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_METAL = 500, MAT_GLASS = 200, "sacid" = 20) + materials = list(MAT_METAL = 500, MAT_GLASS = 200) build_path = /obj/item/computer_hardware/network_card/advanced category = list("Computer Parts") @@ -81,7 +82,7 @@ id = "netcard_wired" req_tech = list("programming" = 5, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_METAL = 2500, MAT_GLASS = 400, "sacid" = 20) + materials = list(MAT_METAL = 2500, MAT_GLASS = 400) build_path = /obj/item/computer_hardware/network_card/wired category = list("Computer Parts") @@ -101,7 +102,7 @@ id = "portadrive_advanced" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1600, "sacid" = 20) + materials = list(MAT_GLASS = 1600) build_path = /obj/item/computer_hardware/hard_drive/portable/advanced category = list("Computer Parts") @@ -110,7 +111,7 @@ id = "portadrive_super" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 3200, "sacid" = 20) + materials = list(MAT_GLASS = 3200) build_path = /obj/item/computer_hardware/hard_drive/portable/super category = list("Computer Parts") @@ -219,7 +220,7 @@ id = "cpu_normal" req_tech = list("programming" = 3, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1600, "sacid" = 20) + materials = list(MAT_GLASS = 1600) build_path = /obj/item/computer_hardware/processor_unit category = list("Computer Parts") @@ -228,7 +229,7 @@ id = "cpu_small" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 800, "sacid" = 20) + materials = list(MAT_GLASS = 800) build_path = /obj/item/computer_hardware/processor_unit/small category = list("Computer Parts") @@ -237,7 +238,7 @@ id = "pcpu_normal" req_tech = list("programming" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS= 6400, MAT_GOLD = 2000, "sacid" = 40) + materials = list(MAT_GLASS= 6400, MAT_GOLD = 2000) build_path = /obj/item/computer_hardware/processor_unit/photonic category = list("Computer Parts") @@ -246,6 +247,6 @@ id = "pcpu_small" req_tech = list("programming" = 4, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 3200, MAT_GOLD = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 3200, MAT_GOLD = 1000) build_path = /obj/item/computer_hardware/processor_unit/photonic/small category = list("Computer Parts") \ No newline at end of file diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 21a9d65aa87..fb5ff5cabd5 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -8,7 +8,7 @@ id = "thermomachine" req_tech = list("programming" = 3, "plasmatech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/thermomachine category = list ("Engineering Machinery") @@ -18,7 +18,7 @@ id = "smes" req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/smes category = list ("Engineering Machinery") @@ -28,7 +28,7 @@ id = "emitter" req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/emitter category = list ("Engineering Machinery") @@ -38,7 +38,7 @@ id = "power_turbine_console" req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/turbine_computer category = list ("Engineering Machinery") @@ -48,7 +48,7 @@ id = "power_compressor" req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/power_compressor category = list ("Engineering Machinery") @@ -58,7 +58,7 @@ id = "power_turbine" req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/power_turbine category = list ("Engineering Machinery") @@ -68,7 +68,7 @@ id = "quantumpad" req_tech = list("programming" = 4, "bluespace" = 4, "plasmatech" = 3, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/quantumpad category = list ("Teleportation Machinery") @@ -78,7 +78,7 @@ id = "telepad" req_tech = list("programming" = 4, "bluespace" = 5, "plasmatech" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telesci_pad category = list ("Teleportation Machinery") @@ -88,7 +88,7 @@ id = "tele_hub" req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/teleporter_hub category = list ("Teleportation Machinery") @@ -98,7 +98,7 @@ id = "tele_station" req_tech = list("programming" = 5, "bluespace" = 4, "engineering" = 4, "plasmatech" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/teleporter_station category = list ("Teleportation Machinery") @@ -108,7 +108,7 @@ id = "tele_perma" req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/teleporter_perma category = list ("Teleportation Machinery") @@ -118,7 +118,7 @@ id = "bodyscanner" req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/bodyscanner category = list("Medical Machinery") @@ -128,7 +128,7 @@ id = "bodyscanner_console" req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/bodyscanner_console category = list("Medical Machinery") @@ -138,7 +138,7 @@ id = "clonepod" req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/clonepod category = list("Medical Machinery") @@ -148,7 +148,7 @@ id = "clonescanner" req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/clonescanner category = list("Medical Machinery") @@ -158,7 +158,7 @@ id = "cryotube" req_tech = list("programming" = 5, "biotech" = 3, "engineering" = 4, "plasmatech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/cryo_tube category = list("Medical Machinery") @@ -168,7 +168,7 @@ id = "chem_dispenser" req_tech = list("programming" = 5, "biotech" = 3, "materials" = 4, "plasmatech" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/chem_dispenser category = list("Medical Machinery") @@ -178,7 +178,7 @@ id = "chem_master" req_tech = list("biotech" = 3, "materials" = 3, "programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/chem_master category = list("Medical Machinery") @@ -188,7 +188,7 @@ id = "chem_heater" req_tech = list("engineering" = 2, "biotech" = 2, "programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/chem_heater category = list ("Medical Machinery") @@ -198,7 +198,7 @@ id = "sleeper" req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/sleeper category = list("Medical Machinery") @@ -208,7 +208,7 @@ id = "biogenerator" req_tech = list("programming" = 2, "biotech" = 3, "materials" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/biogenerator category = list ("Hydroponics Machinery") @@ -218,7 +218,7 @@ id = "hydro_tray" req_tech = list("biotech" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/hydroponics category = list ("Hydroponics Machinery") @@ -228,7 +228,7 @@ id = "autolathe" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/autolathe category = list("Research Machinery") @@ -238,7 +238,7 @@ id = "circuit_imprinter" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/circuit_imprinter category = list("Research Machinery") @@ -248,7 +248,7 @@ id = "cyborgrecharger" req_tech = list("powerstorage" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/cyborgrecharger category = list("Research Machinery") @@ -258,7 +258,7 @@ id = "destructive_analyzer" req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/destructive_analyzer category = list("Research Machinery") @@ -268,7 +268,7 @@ id = "mechfab" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mechfab category = list("Research Machinery") @@ -278,7 +278,7 @@ id = "mech_recharger" req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mech_recharger category = list("Research Machinery") @@ -288,7 +288,7 @@ id = "experimentor" req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/experimentor category = list("Research Machinery") @@ -298,7 +298,7 @@ id = "protolathe" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/protolathe category = list("Research Machinery") @@ -308,7 +308,7 @@ id = "rdserver" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/rdserver category = list("Research Machinery") @@ -318,7 +318,7 @@ id = "gibber" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/gibber category = list ("Misc. Machinery") @@ -328,7 +328,7 @@ id = "smartfridge" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/smartfridge category = list ("Misc. Machinery") @@ -338,7 +338,7 @@ id = "monkey_recycler" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/monkey_recycler category = list ("Misc. Machinery") @@ -348,7 +348,7 @@ id = "seed_extractor" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/seed_extractor category = list ("Hydroponics Machinery") @@ -358,7 +358,7 @@ id = "processor" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/processor category = list ("Misc. Machinery") @@ -368,7 +368,7 @@ id = "recycler" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/recycler category = list ("Misc. Machinery") @@ -378,7 +378,7 @@ id = "holopad" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/holopad category = list ("Misc. Machinery") @@ -388,7 +388,7 @@ id = "arcademachinebattle" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/arcade/battle category = list("Misc. Machinery") @@ -398,7 +398,7 @@ id = "microwave" req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/microwave category = list("Misc. Machinery") @@ -408,7 +408,7 @@ id = "oven" req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/oven category = list("Misc. Machinery") @@ -418,7 +418,7 @@ id = "grill" req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/grill category = list("Misc. Machinery") @@ -428,7 +428,7 @@ id = "candymaker" req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/candy_maker category = list("Misc. Machinery") @@ -438,7 +438,7 @@ id = "deepfryer" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/deepfryer category = list("Misc. Machinery") @@ -448,7 +448,7 @@ id = "arcademachineonion" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/arcade/orion_trail category = list("Misc. Machinery") @@ -458,7 +458,7 @@ id = "selunload" req_tech = list("engineering" = 1, "programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 2000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/programmable category = list("Misc. Machinery") @@ -468,7 +468,7 @@ id = "pod" req_tech = list("programming" = 2,"engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 2000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/pod category = list("Misc. Machinery") @@ -478,7 +478,7 @@ id = "ore_redemption" req_tech = list("programming" = 2, "engineering" = 2, "plasmatech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/ore_redemption category = list ("Misc. Machinery") @@ -488,7 +488,7 @@ id = "mining_equipment_vendor" req_tech = list("engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/mining_equipment_vendor category = list ("Misc. Machinery") @@ -498,7 +498,7 @@ id = "clawgame" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/clawgame category = list ("Misc. Machinery") @@ -508,7 +508,7 @@ id = "prize_counter" req_tech = list("programming" = 2, "materials" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/prize_counter category = list("Misc. Machinery") @@ -518,7 +518,7 @@ id = "gameboard" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/gameboard category = list("Misc. Machinery") @@ -528,7 +528,7 @@ id = "plantgenes" req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/plantgenes category = list("Hydroponics Machinery") @@ -538,6 +538,6 @@ id = "ntnet_relay" req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS=1000, "sacid"=20) + materials = list(MAT_GLASS=1000) build_path = /obj/item/circuitboard/machine/ntnet_relay category = list("Subspace Telecomms") diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 008f3fc7a70..266d6dea0b6 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -8,7 +8,7 @@ id = "ripley_main" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/ripley/main category = list("Exosuit Modules") @@ -18,7 +18,7 @@ id = "ripley_peri" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/ripley/peripherals category = list("Exosuit Modules") @@ -29,7 +29,7 @@ id = "odysseus_main" req_tech = list("programming" = 3,"biotech" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/odysseus/main category = list("Exosuit Modules") @@ -39,7 +39,7 @@ id = "odysseus_peri" req_tech = list("programming" = 3,"biotech" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/odysseus/peripherals category = list("Exosuit Modules") @@ -50,7 +50,7 @@ id = "gygax_main" req_tech = list("programming" = 4, "combat" = 3, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/gygax/main category = list("Exosuit Modules") @@ -60,7 +60,7 @@ id = "gygax_peri" req_tech = list("programming" = 4, "combat" = 3, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/gygax/peripherals category = list("Exosuit Modules") @@ -70,7 +70,7 @@ id = "gygax_targ" req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/gygax/targeting category = list("Exosuit Modules") @@ -81,7 +81,7 @@ id = "durand_main" req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/durand/main category = list("Exosuit Modules") @@ -91,7 +91,7 @@ id = "durand_peri" req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/durand/peripherals category = list("Exosuit Modules") @@ -101,7 +101,7 @@ id = "durand_targ" req_tech = list("programming" = 5, "combat" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/durand/targeting category = list("Exosuit Modules") @@ -112,7 +112,7 @@ id = "phazon_main" req_tech = list("programming" = 6, "materials" = 6, "plasmatech" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/phazon/main category = list("Exosuit Modules") @@ -122,7 +122,7 @@ id = "phazon_peri" req_tech = list("programming" = 6, "bluespace" = 5, "plasmatech" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/phazon/peripherals category = list("Exosuit Modules") @@ -132,7 +132,7 @@ id = "phazon_targ" req_tech = list("programming" = 6, "magnets" = 5, "plasmatech" = 5) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/phazon/targeting category = list("Exosuit Modules") @@ -143,7 +143,7 @@ id = "honker_main" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/honker/main category = list("Exosuit Modules") @@ -153,7 +153,7 @@ id = "honker_peri" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/honker/peripherals category = list("Exosuit Modules") @@ -163,7 +163,7 @@ id = "honker_targ" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/honker/targeting category = list("Exosuit Modules") @@ -173,7 +173,7 @@ id = "reticence_main" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/reticence/main category = list("Exosuit Modules") @@ -183,7 +183,7 @@ id = "reticence_peri" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/reticence/peripherals category = list("Exosuit Modules") @@ -193,6 +193,6 @@ id = "reticence_targ" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/mecha/reticence/targeting category = list("Exosuit Modules") diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 4be4cafe874..df78a037c56 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -63,7 +63,7 @@ id = "pacman" req_tech = list("programming" = 2, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/pacman category = list("Engineering Machinery") @@ -73,7 +73,7 @@ id = "mrspacman" req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5, "plasmatech" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 2000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/pacman/mrs category = list("Engineering Machinery") @@ -83,7 +83,7 @@ id = "superpacman" req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/pacman/super category = list("Engineering Machinery") @@ -93,7 +93,7 @@ id = "tesla_coil" req_tech = list("programming" = 3, "powerstorage" = 3, "magnets" = 3) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/tesla_coil category = list("Engineering Machinery") @@ -103,6 +103,6 @@ id = "grounding_rod" req_tech = list("programming" = 3, "powerstorage" = 3, "magnets" = 3, "plasmatech" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/grounding_rod category = list("Engineering Machinery") diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm index 997b39aff18..848349dab83 100644 --- a/code/modules/research/designs/telecomms_designs.dm +++ b/code/modules/research/designs/telecomms_designs.dm @@ -7,7 +7,7 @@ id = "s-bus" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/bus category = list("Subspace Telecomms") @@ -17,7 +17,7 @@ id = "s-hub" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/hub category = list("Subspace Telecomms") @@ -28,7 +28,7 @@ id = "s-processor" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/processor category = list("Subspace Telecomms") @@ -38,7 +38,7 @@ id = "s-relay" req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/relay category = list("Subspace Telecomms") @@ -48,7 +48,7 @@ id = "s-server" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/server category = list("Subspace Telecomms") @@ -58,7 +58,7 @@ id = "s-broadcaster" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/broadcaster category = list("Subspace Telecomms") @@ -68,7 +68,7 @@ id = "s-receiver" req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000) build_path = /obj/item/circuitboard/telecomms/receiver category = list("Subspace Telecomms") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 2dd864fdab6..8f724ed337f 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -20,7 +20,7 @@ req_tech = list("combat" = 5, "materials" = 5, "biotech" = 6, "plasmatech" = 7) build_type = PROTOLATHE materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000) - reagents = list("mutagen" = 40) + reagents_list = list("mutagen" = 40) build_path = /obj/item/gun/energy/decloner locked = 1 category = list("Weapons") @@ -43,7 +43,7 @@ req_tech = list("materials" = 2, "biotech" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_GLASS = 500) - reagents = list("radium" = 20) + reagents_list = list("radium" = 20) build_path = /obj/item/gun/energy/floragun category = list("Weapons") diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 79bbeb2a494..027a8549df4 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -9,7 +9,6 @@ Note: Must be placed within 3 tiles of the R&D Console name = "Destructive Analyzer" desc = "Learn science by destroying things!" icon_state = "d_analyzer" - var/obj/item/loaded_item = null var/decon_mod = 0 /obj/machinery/r_n_d/destructive_analyzer/New() @@ -46,7 +45,8 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(shocked) - shock(user,50) + if(shock(user,50)) + return TRUE if(default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O)) if(linked_console) linked_console.linked_destroy = null @@ -56,7 +56,8 @@ Note: Must be placed within 3 tiles of the R&D Console if(exchange_parts(user, O)) return - default_deconstruction_crowbar(O) + if(default_deconstruction_crowbar(O)) + return if(disabled) return @@ -84,5 +85,4 @@ Note: Must be placed within 3 tiles of the R&D Console flick("d_analyzer_la", src) spawn(10) icon_state = "d_analyzer_l" - busy = 0 - return + busy = 0 \ No newline at end of file diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index e58c1bb6994..ea3d4c7c182 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -25,7 +25,6 @@ var/recentlyExperimented = 0 var/mob/trackedIan var/mob/trackedRuntime - var/obj/item/loaded_item = null var/badThingCoeff = 0 var/resetTime = 15 var/cloneMode = FALSE diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index c430e660178..0fa843cb8ae 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -27,15 +27,11 @@ Note: Must be placed west/left of and R&D console to function. "Stock Parts", "Weapons" ) - var/datum/component/material_container/materials //Store for hyper speed! + reagents = new() /obj/machinery/r_n_d/protolathe/New() - materials = AddComponent(/datum/component/material_container, - list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0, - FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) - materials.precise_insertion = TRUE ..() component_parts = list() component_parts += new /obj/item/circuitboard/protolathe(null) @@ -79,7 +75,7 @@ Note: Must be placed west/left of and R&D console to function. var/A = materials.amount(M) if(!A) A = reagents.get_reagent_amount(M) - A = A / max(1, (being_built.reagents[M])) + A = A / max(1, (being_built.reagents_list[M])) else A = A / max(1, (being_built.materials[M])) return A @@ -114,39 +110,4 @@ Note: Must be placed west/left of and R&D console to function. if(O.is_open_container()) return FALSE else - return ..() - -//whether the machine can have an item inserted in its current state. -/obj/machinery/r_n_d/protolathe/proc/is_insertion_ready(mob/user) - if(panel_open) - to_chat(user, "You can't load [src] while it's opened!") - return FALSE - if(disabled) - return FALSE - if(!linked_console) - to_chat(user, "[src] must be linked to an R&D console first!") - return FALSE - if(busy) - to_chat(user, "[src] is busy right now.") - return FALSE - if(stat & BROKEN) - to_chat(user, "[src] is broken.") - return FALSE - if(stat & NOPOWER) - to_chat(user, "[src] has no power.") - return FALSE - return TRUE - -/obj/machinery/r_n_d/protolathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) - var/stack_name - if(ispath(type_inserted, /obj/item/ore/bluespace_crystal)) - stack_name = "bluespace polycrystal" - use_power(MINERAL_MATERIAL_AMOUNT / 10) - else - var/obj/item/stack/S = type_inserted - stack_name = initial(S.name) - use_power(min(1000, (amount_inserted / 100))) - overlays += "protolathe_[stack_name]" - sleep(10) - overlays -= "protolathe_[stack_name]" - SSnanoui.update_uis(src) \ No newline at end of file + return ..() \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 152a1665cca..8f3df6ef37a 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -447,16 +447,16 @@ won't update every console in existence) but it's more of a hassle to do. Also, enough_materials = 0 g2g = 0 else - for(var/R in being_built.reagents) - if(!linked_lathe.reagents.has_reagent(R, being_built.reagents[R])*coeff) + for(var/R in being_built.reagents_list) + if(!linked_lathe.reagents.has_reagent(R, being_built.reagents_list[R])*coeff) src.visible_message("The [src.name] beeps, \"Not enough reagents to complete prototype.\"") enough_materials = 0 g2g = 0 if(enough_materials) linked_lathe.materials.use_amount(efficient_mats, amount) - for(var/R in being_built.reagents) - linked_lathe.reagents.remove_reagent(R, being_built.reagents[R]*coeff) + for(var/R in being_built.reagents_list) + linked_lathe.reagents.remove_reagent(R, being_built.reagents_list[R]*coeff) var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. var/O = being_built.locked @@ -488,6 +488,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something. var/coeff = linked_imprinter.efficiency_coeff var/g2g = 1 + var/enough_materials = 1 if(linked_imprinter) if(linked_imprinter.busy) to_chat(usr, "Circuit Imprinter is busy at the moment.") @@ -509,20 +510,25 @@ won't update every console in existence) but it's more of a hassle to do. Also, flick("circuit_imprinter_ani",linked_imprinter) use_power(power) - for(var/M in being_built.materials) - if(!linked_imprinter.check_mat(being_built, M)) - src.visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") - g2g = 0 - break - switch(M) - if(MAT_GLASS) - linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]/coeff)) - if(MAT_GOLD) - linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]/coeff)) - if(MAT_DIAMOND) - linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]/coeff)) - else - linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]/coeff) + var/list/efficient_mats = list() + for(var/MAT in being_built.materials) + efficient_mats[MAT] = being_built.materials[MAT]/coeff + + if(!linked_imprinter.materials.has_materials(efficient_mats)) + visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") + enough_materials = 0 + g2g = 0 + else + for(var/R in being_built.reagents_list) + if(!linked_imprinter.reagents.has_reagent(R, being_built.reagents_list[R]/coeff)) + visible_message("The [name] beeps, \"Not enough reagents to complete prototype.\"") + enough_materials = 0 + g2g = 0 + + if(enough_materials) + linked_imprinter.materials.use_amount(efficient_mats) + for(var/R in being_built.reagents_list) + linked_imprinter.reagents.remove_reagent(R, being_built.reagents_list[R]/coeff) var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. spawn(IMPRINTER_DELAY) @@ -567,25 +573,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, desired_num_sheets = round(desired_num_sheets) // No partial-sheet goofery else desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"]) - var/res_amount, type - switch(href_list["imprinter_ejectsheet"]) - if(MAT_GLASS) - type = /obj/item/stack/sheet/glass - res_amount = "g_amount" - if(MAT_GOLD) - type = /obj/item/stack/sheet/mineral/gold - res_amount = "gold_amount" - if(MAT_DIAMOND) - type = /obj/item/stack/sheet/mineral/diamond - res_amount = "diamond_amount" - if(ispath(type) && hasvar(linked_imprinter, res_amount)) - var/obj/item/stack/sheet/sheet = new type(linked_imprinter.loc) - var/available_num_sheets = round(linked_imprinter.vars[res_amount]/sheet.perunit) - if(available_num_sheets>0) - sheet.amount = min(available_num_sheets, desired_num_sheets) - linked_imprinter.vars[res_amount] = max(0, (linked_imprinter.vars[res_amount]-sheet.amount * sheet.perunit)) - else - qdel(sheet) + linked_imprinter.materials.retrieve_sheets(desired_num_sheets, href_list["imprinter_ejectsheet"]) else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with. add_wait_message("Updating Database...", SYNC_DEVICE_DELAY) @@ -789,11 +777,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, material_list["is_red"] = 0 c = min(c, t) - for(var/R in D.reagents) + for(var/R in D.reagents_list) var/list/material_list = list() materials_list[++materials_list.len] = material_list material_list["name"] = CallMaterialName(R) - material_list["amount"] = D.reagents[R]*coeff + material_list["amount"] = D.reagents_list[R]*coeff var/t = linked_lathe.check_mat(D, R) if(t < 1) @@ -828,8 +816,10 @@ won't update every console in existence) but it's more of a hassle to do. Also, loaded_chemical["id"] = R.id if(menu == 5 && linked_imprinter) - data["total_materials"] = linked_imprinter.TotalMaterials() + data["total_materials"] = linked_imprinter.materials.total_amount + data["max_materials"] = linked_imprinter.materials.max_amount data["total_chemicals"] = linked_imprinter.reagents.total_volume + data["max_chemicals"] = linked_imprinter.reagents.maximum_volume data["categories"] = linked_imprinter.categories if(submenu == 1) var/list/designs_list = list() @@ -853,13 +843,34 @@ won't update every console in existence) but it's more of a hassle to do. Also, material_list["is_red"] = 1 else material_list["is_red"] = 0 + + for(var/R in D.reagents_list) + var/list/material_list = list() + materials_list[++materials_list.len] = material_list + material_list["name"] = CallMaterialName(R) + material_list["amount"] = D.reagents_list[R]*coeff + if(!linked_imprinter.check_mat(D, R)) + check_materials = 0 + material_list["is_red"] = 1 + else + material_list["is_red"] = 0 + design_list["can_build"] = check_materials if(submenu == 2) var/list/materials_list = list() data["loaded_materials"] = materials_list - materials_list[++materials_list.len] = list("name" = "Glass", "id" = MAT_GLASS, "amount" = linked_imprinter.g_amount) - materials_list[++materials_list.len] = list("name" = "Gold", "id" = MAT_GOLD, "amount" = linked_imprinter.gold_amount) - materials_list[++materials_list.len] = list("name" = "Diamond", "id" = MAT_DIAMOND, "amount" = linked_imprinter.diamond_amount) + materials_list[++materials_list.len] = list("name" = "Metal", "id" = MAT_METAL, "amount" = linked_imprinter.materials.amount(MAT_METAL)) + materials_list[++materials_list.len] = list("name" = "Glass", "id" = MAT_GLASS, "amount" = linked_imprinter.materials.amount(MAT_GLASS)) + materials_list[++materials_list.len] = list("name" = "Gold", "id" = MAT_GOLD, "amount" = linked_imprinter.materials.amount(MAT_GOLD)) + materials_list[++materials_list.len] = list("name" = "Silver", "id" = MAT_SILVER, "amount" = linked_imprinter.materials.amount(MAT_SILVER)) + materials_list[++materials_list.len] = list("name" = "Solid Plasma", "id" = MAT_PLASMA, "amount" = linked_imprinter.materials.amount(MAT_PLASMA)) + materials_list[++materials_list.len] = list("name" = "Uranium", "id" = MAT_URANIUM, "amount" = linked_imprinter.materials.amount(MAT_URANIUM)) + materials_list[++materials_list.len] = list("name" = "Diamond", "id" = MAT_DIAMOND, "amount" = linked_imprinter.materials.amount(MAT_DIAMOND)) + materials_list[++materials_list.len] = list("name" = "Bananium", "id" = MAT_BANANIUM, "amount" = linked_imprinter.materials.amount(MAT_BANANIUM)) + materials_list[++materials_list.len] = list("name" = "Tranquillite", "id" = MAT_TRANQUILLITE, "amount" = linked_imprinter.materials.amount(MAT_TRANQUILLITE)) + materials_list[++materials_list.len] = list("name" = "Titanium", "id" = MAT_TITANIUM, "amount" = linked_imprinter.materials.amount(MAT_TITANIUM)) + materials_list[++materials_list.len] = list("name" = "Plastic", "id" = MAT_PLASTIC, "amount" = linked_imprinter.materials.amount(MAT_PLASTIC)) + materials_list[++materials_list.len] = list("name" = "Bluespace Mesh", "id" = MAT_BLUESPACE, "amount" = linked_imprinter.materials.amount(MAT_BLUESPACE)) if(submenu == 3) var/list/loaded_chemicals = list() data["loaded_chemicals"] = loaded_chemicals diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index bebddfaf6c0..fde13d4d478 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -16,8 +16,14 @@ var/disable_wire var/shock_wire var/obj/machinery/computer/rdconsole/linked_console + var/obj/item/loaded_item = null + var/datum/component/material_container/materials //Store for hyper speed! /obj/machinery/r_n_d/New() + materials = AddComponent(/datum/component/material_container, + list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0, + FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + materials.precise_insertion = TRUE ..() wires["Red"] = 0 wires["Blue"] = 0 @@ -88,3 +94,40 @@ src.shocked = !src.shocked src.shock(usr,50) src.updateUsrDialog() + +//whether the machine can have an item inserted in its current state. +/obj/machinery/r_n_d/proc/is_insertion_ready(mob/user) + if(panel_open) + to_chat(user, "You can't load [src] while it's opened!") + return FALSE + if(disabled) + return FALSE + if(!linked_console) + to_chat(user, "[src] must be linked to an R&D console first!") + return FALSE + if(busy) + to_chat(user, "[src] is busy right now.") + return FALSE + if(stat & BROKEN) + to_chat(user, "[src] is broken.") + return FALSE + if(stat & NOPOWER) + to_chat(user, "[src] has no power.") + return FALSE + if(loaded_item) + to_chat(user, "[src] is already loaded.") + return FALSE + return TRUE + +/obj/machinery/r_n_d/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) + var/stack_name + if(ispath(type_inserted, /obj/item/ore/bluespace_crystal)) + stack_name = "bluespace polycrystal" + use_power(MINERAL_MATERIAL_AMOUNT / 10) + else + var/obj/item/stack/S = type_inserted + stack_name = initial(S.name) + use_power(min(1000, (amount_inserted / 100))) + overlays += "protolathe_[stack_name]" + sleep(10) + overlays -= "protolathe_[stack_name]" \ No newline at end of file diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi index c0f2dabd5b302538468c622db90add044332d383..d5ab5866f8cd37ebc386ae17c4cf0c1720e4f9b9 100644 GIT binary patch literal 21616 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 MEhEiR4aczm03?^SZU6uP literal 19815 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