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 += "
Researched | Available | Future |
---|
[RDSCREEN_NOBREAK]"
- for(var/tier in 0 to max_tier)
- l += "[RDSCREEN_NOBREAK]"
- l += columns["[tier]"]
- l += " | [RDSCREEN_NOBREAK]"
- 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 += "Researched | Available | Future |
---|
[RDSCREEN_NOBREAK]"
+ for(var/tier in 0 to max_tier)
+ l += "[RDSCREEN_NOBREAK]"
+ l += columns["[tier]"]
+ l += " | [RDSCREEN_NOBREAK]"
+ 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
-*/