From 1f32d160d93807fe5f3fc56257ce044b9af62787 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 10 Dec 2017 08:58:42 -0800 Subject: [PATCH] Automatic changelog compile, [ci skip] (#33393) --- code/__DEFINES/research.dm | 4 + code/datums/components/material_container.dm | 2 +- code/modules/research/circuitprinter.dm | 3 +- code/modules/research/protolathe.dm | 3 +- code/modules/research/rdconsole.dm | 78 ++++++++++++++------ code/modules/research/rdmachines.dm | 26 +++---- code/modules/research/techweb/all_nodes.dm | 47 +++++++----- 7 files changed, 106 insertions(+), 57 deletions(-) diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 42a8370491fa7..bb2e232886342 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -1,4 +1,8 @@ +#define RDCONSOLE_UI_MODE_NORMAL 1 +#define RDCONSOLE_UI_MODE_EXPERT 2 +#define RDCONSOLE_UI_MODE_LIST 3 + //RDSCREEN screens #define RDSCREEN_MENU 0 #define RDSCREEN_TECHDISK 1 diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index b33cee4059562..c6c422298029e 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -67,7 +67,7 @@ if(!has_space(material_amount)) to_chat(user, "[parent] is full. Please remove metal or glass from [parent] in order to insert more.") return - user_insert(I, user) + INVOKE_ASYNC(src, .proc/user_insert, I, user) //It wasn't returning COMPONENT_NO_AFTERATTACK properly without this being specifically asynced. /datum/component/material_container/proc/user_insert(obj/item/I, mob/living/user) var/requested_amount diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 4a9ddb569106d..38259b56d6a0a 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -12,8 +12,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). circuit = /obj/item/circuitboard/machine/circuit_imprinter var/efficiency_coeff - var/console_link = TRUE //can this link to a console? - var/requires_console = TRUE var/datum/component/material_container/materials //Store for hyper speed! @@ -36,6 +34,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE create_reagents(0) + RefreshParts() return ..() /obj/machinery/rnd/circuit_imprinter/RefreshParts() diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index b247645f0c012..d6bfea7f15cb7 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -15,8 +15,6 @@ Note: Must be placed west/left of and R&D console to function. circuit = /obj/item/circuitboard/machine/protolathe var/efficiency_coeff - var/console_link = TRUE //allow console link. - var/requires_console = TRUE var/list/categories = list( "Power Designs", "Medical Designs", @@ -39,6 +37,7 @@ Note: Must be placed west/left of and R&D console to function. list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 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 + RefreshParts() return ..() /obj/machinery/rnd/protolathe/RefreshParts() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 0371d2fc7e4e4..0b9453a62d1fd 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -45,6 +45,7 @@ doesn't have toxins access. var/disk_slot_selected var/searchstring = "" var/searchtype = "" + var/ui_mode = RDCONSOLE_UI_MODE_NORMAL var/research_control = TRUE @@ -220,6 +221,7 @@ doesn't have toxins access. l += "Available points: [round(stored_research.research_points)] (+[round(stored_research.last_bitcoins * 60)] / minute)" l += "Security protocols: [emagged? "Disabled" : "Enabled"]" l += "Main Menu | Back[RDSCREEN_NOBREAK]" + l += "[ui_mode == 1? "Normal View" : "Normal View"] | [ui_mode == 2? "Expert View" : "Expert View"] | [ui_mode == 3? "List View" : "List View"]" return l /obj/machinery/computer/rdconsole/proc/ui_main_menu() @@ -598,23 +600,52 @@ doesn't have toxins access. l += "" return l -/obj/machinery/computer/rdconsole/proc/ui_techweb() //Legacy code. +/obj/machinery/computer/rdconsole/proc/ui_techweb() var/list/l = list() - var/list/columns = list() - var/max_tier = 0 - for (var/node_ in stored_research.tiers) - var/datum/techweb_node/node = node_ - var/tier = stored_research.tiers[node] - LAZYINITLIST(columns["[tier]"]) // String hackery to make the numbers associative - columns["[tier]"] += ui_techweb_single_node(node, minimal=(tier != 1)) - max_tier = max(max_tier, tier) - - l += "[RDSCREEN_NOBREAK]" - for(var/tier in 0 to max_tier) - l += "[RDSCREEN_NOBREAK]" - l += "
ResearchedAvailableFuture
[RDSCREEN_NOBREAK]" - l += columns["[tier]"] - l += "
[RDSCREEN_NOBREAK]" + if(ui_mode != RDCONSOLE_UI_MODE_LIST) + var/list/columns = list() + var/max_tier = 0 + for (var/node_ in stored_research.tiers) + var/datum/techweb_node/node = node_ + var/tier = stored_research.tiers[node] + LAZYINITLIST(columns["[tier]"]) // String hackery to make the numbers associative + columns["[tier]"] += ui_techweb_single_node(node, minimal=(tier != 1)) + max_tier = max(max_tier, tier) + + l += "[RDSCREEN_NOBREAK]" + for(var/tier in 0 to max_tier) + l += "[RDSCREEN_NOBREAK]" + l += "
ResearchedAvailableFuture
[RDSCREEN_NOBREAK]" + l += columns["[tier]"] + l += "
[RDSCREEN_NOBREAK]" + else + var/list/avail = list() //This could probably be optimized a bit later. + var/list/unavail = list() + var/list/res = list() + for(var/v in stored_research.researched_nodes) + res += stored_research.researched_nodes[v] + for(var/v in stored_research.available_nodes) + if(stored_research.researched_nodes[v]) + continue + avail += stored_research.available_nodes[v] + for(var/v in stored_research.visible_nodes) + if(stored_research.available_nodes[v]) + continue + unavail += stored_research.visible_nodes[v] + l += "

Technology Nodes:

[RDSCREEN_NOBREAK]" + l += "

Available for Research:

" + for(var/datum/techweb_node/N in avail) + var/not_unlocked = (stored_research.available_nodes[N.id] && !stored_research.researched_nodes[N.id]) + var/has_points = (stored_research.research_points >= N.get_price(stored_research)) + var/research_href = not_unlocked? (has_points? "Research" : "Not Enough Points") : null + l += "[N.display_name][research_href]" + l += "

Locked Nodes:

" + for(var/datum/techweb_node/N in unavail) + l += "[N.display_name]" + l += "

Researched Nodes:

" + for(var/datum/techweb_node/N in res) + l += "[N.display_name]" + l += "
[RDSCREEN_NOBREAK]" return l /obj/machinery/computer/rdconsole/proc/machine_icon(atom/item) @@ -629,7 +660,7 @@ doesn't have toxins access. if (selflink) display_name = "[display_name]" l += "
[display_name] [RDSCREEN_NOBREAK]" - if (minimal) + if(minimal) l += "
[node.description]" else if(stored_research.researched_nodes[node.id]) @@ -641,14 +672,15 @@ doesn't have toxins access. l += "[price]" // gray - too expensive else l += "[price]" // red - missing prereqs - l += "[node.description]" - for(var/i in node.designs) - var/datum/design/D = node.designs[i] - l += "[D.icon_html(usr)][RDSCREEN_NOBREAK]" + if(ui_mode == RDCONSOLE_UI_MODE_NORMAL) + l += "[node.description]" + for(var/i in node.designs) + var/datum/design/D = node.designs[i] + l += "[D.icon_html(usr)][RDSCREEN_NOBREAK]" l += "
[RDSCREEN_NOBREAK]" return l -/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() //Legacy code +/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() RDSCREEN_UI_SNODE_CHECK var/list/l = list() if(stored_research.hidden_nodes[selected_node.id]) @@ -780,6 +812,8 @@ doesn't have toxins access. if(ls["switch_screen"]) back = screen screen = text2num(ls["switch_screen"]) + if(ls["ui_mode"]) + ui_mode = text2num(ls["ui_mode"]) if(ls["lock_console"]) if(allowed(usr)) lock_console(usr) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index cda8ab1c7b011..ce98b911d3b20 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -10,6 +10,8 @@ use_power = IDLE_POWER_USE var/busy = FALSE var/hacked = FALSE + var/console_link = TRUE //allow console link. + var/requires_console = TRUE var/disabled = FALSE var/shocked = FALSE var/obj/machinery/computer/rdconsole/linked_console @@ -78,28 +80,26 @@ /obj/machinery/rnd/proc/is_insertion_ready(mob/user) if(panel_open) to_chat(user, "You can't load [src] while it's opened!") - return - if (disabled) - return - if (!linked_console) // Try to auto-connect to new RnD consoles nearby. - if(!linked_console) - to_chat(user, "[src] must be linked to an R&D console first!") - return - if (busy) + return FALSE + if(disabled) + return FALSE + if(requires_console && !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 + return FALSE if(stat & BROKEN) to_chat(user, "[src] is broken.") - return + return FALSE if(stat & NOPOWER) to_chat(user, "[src] has no power.") - return + return FALSE if(loaded_item) to_chat(user, "[src] is already loaded.") - return + return FALSE return TRUE - //we eject the loaded item when deconstructing the machine /obj/machinery/rnd/on_deconstruction() if(loaded_item) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 405286fa92a51..f85153b790338 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -506,7 +506,7 @@ display_name = "Radioactive Weaponry" description = "Weapons using radioactive technology." prereq_ids = list("adv_engi", "adv_weaponry") - design_ids = list("nuclear_gun", "decloner") + design_ids = list("nuclear_gun") research_cost = 2500 export_price = 10000 @@ -834,6 +834,35 @@ export_price = 20000 hidden = TRUE +/datum/techweb_node/syndicate_basic + id = "syndicate_basic" + display_name = "Illegal Technology" + description = "Dangerous research used to create dangerous objects." + prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons") + design_ids = list("decloner", "borg_syndicate_module", "suppressor", "largecrossbow") + research_cost = 10000 + export_price = 10000 + hidden = TRUE + +/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way. + . = ..() + boost_item_paths = list() + for(var/cat in GLOB.uplink_items) + var/list/l = cat + for(var/i in l) + var/datum/uplink_item/UI = i + boost_item_paths[UI.item] = 0 //allows deconning to unlock. + +//HELPERS +/proc/total_techweb_exports() + var/list/datum/techweb_node/processing = list() + for(var/i in subtypesof(/datum/techweb_node)) + processing += new i + . = 0 + for(var/i in processing) + var/datum/techweb_node/TN = i + . += TN.export_price + /proc/total_techweb_points() var/list/datum/techweb_node/processing = list() for(var/i in subtypesof(/datum/techweb_node)) @@ -842,19 +871,3 @@ for(var/i in processing) var/datum/techweb_node/TN = i . += TN.research_cost - -/* -/datum/design/borg_syndicate_module - name = "Cyborg Upgrade (Illegal Modules)" - id = "borg_syndicate_module" - construction_time = 120 - -/datum/design/suppressor - name = "Universal Suppressor" - id = "suppressor" - -/datum/design/largecrossbow - name = "Energy Crossbow" - id = "largecrossbow" - build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large -*/