diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 0cd7eb9c61..4b379f9066 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -50,9 +50,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
req_access = list(access_research) //Data and setting manipulation requires scientist access.
-
-
-
/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID.
var/datum/tech/check_tech
var/return_name = null
@@ -125,7 +122,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
C.files.AddDesign2Known(D)
C.files.RefreshResearch()
-
/obj/machinery/computer/rdconsole/New()
..()
files = new /datum/research(src) //Setup the research data holder.
@@ -440,7 +436,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
linked_lathe.reagents.clear_reagents()
else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material
- var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"])
+ var/desired_num_sheets = text2num(href_list["amount"])
var/res_amount, type
switch(href_list["lathe_ejectsheet"])
if("metal")
@@ -474,7 +470,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else
del sheet
else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material
- var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"])
+ var/desired_num_sheets = text2num(href_list["amount"])
var/res_amount, type
switch(href_list["imprinter_ejectsheet"])
if("glass")
@@ -576,22 +572,37 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(1.0) //Main Menu
dat += "Main Menu:
"
- dat += "Current Research Levels
"
- if(t_disk) dat += "Disk Operations
"
- else if(d_disk) dat += "Disk Operations
"
- else dat += "(Please Insert Disk)
"
- if(linked_destroy != null) dat += "Destructive Analyzer Menu
"
- if(linked_lathe != null) dat += "Protolathe Construction Menu
"
- if(linked_imprinter != null) dat += "Circuit Construction Menu
"
- dat += "Settings"
+ dat += "Loaded disk: "
+ dat += (t_disk || d_disk) ? (t_disk ? "technology storage disk" : "design storage disk") : "none"
+ dat += "
"
if(1.1) //Research viewer
+ dat += "Main Menu
"
dat += "Current Research Levels:
"
+ dat += ""
for(var/datum/tech/T in files.known_tech)
- dat += "[T.name]
"
- dat += "* Level: [T.level]
"
- dat += "* Summary: [T.desc]
"
- dat += "Main Menu"
+ dat += "- "
+ dat += "[T.name]"
+ dat += "
"
+ dat += "- Level: [T.level]
"
+ dat += "- Summary: [T.desc]
"
+ dat += "
"
+ dat += "
"
if(1.2) //Technology Disk Menu
@@ -614,9 +625,11 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "
Main Menu || "
dat += "Return to Disk Operations
"
dat += "Load Technology to Disk:
"
+ dat += ""
for(var/datum/tech/T in files.known_tech)
- dat += "[T.name] "
- dat += "(Copy to Disk)
"
+ dat += "- [T.name] "
+ dat += "\[copy to disk\]"
+ dat += "
"
if(1.4) //Design Disk menu.
dat += "Main Menu
"
@@ -644,13 +657,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Main Menu || "
dat += "Return to Disk Operations
"
dat += "Load Design to Disk:
"
+ dat += ""
for(var/datum/design/D in files.known_designs)
- dat += "[D.name] "
- dat += "(Copy to Disk)
"
+ if(D.build_path)
+ dat += "- [D.name] "
+ dat += "\[copy to disk\]"
+ dat += "
"
if(1.6) //R&D console settings
dat += "Main Menu
"
- dat += "R&D Console Setting:
"
+ dat += "R&D Console Setting:
"
if(sync)
dat += "Sync Database with Network
"
dat += "Disconnect from Research Network
"
@@ -662,40 +678,44 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(1.7) //R&D device linkage
dat += "Main Menu || "
- dat += "Settings Menu
"
+ dat += "Settings Menu
"
dat += "R&D Console Device Linkage Menu:
"
- dat += "Re-sync with Nearby Devices
"
- dat += "Linked Devices:
"
+ dat += "Re-sync with Nearby Devices
"
+ dat += "Linked Devices:"
+ dat += ""
if(linked_destroy)
- dat += "* Destructive Analyzer (Disconnect)
"
+ dat += "- Destructive Analyzer (Disconnect)
"
else
- dat += "* (No Destructive Analyzer Linked)
"
+ dat += "- (No Destructive Analyzer Linked)
"
if(linked_lathe)
- dat += "* Protolathe (Disconnect)
"
+ dat += "- Protolathe (Disconnect)
"
else
- dat += "* (No Protolathe Linked)
"
+ dat += "- (No Protolathe Linked)
"
if(linked_imprinter)
- dat += "* Circuit Imprinter (Disconnect)
"
+ dat += "- Circuit Imprinter (Disconnect)
"
else
- dat += "* (No Circuit Imprinter Linked)
"
+ dat += "- (No Circuit Imprinter Linked)
"
+ dat += "
"
////////////////////DESTRUCTIVE ANALYZER SCREENS////////////////////////////
if(2.0)
+ dat += "Main Menu
"
dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE
"
- dat += "Main Menu"
if(2.1)
+ dat += "Main Menu
"
dat += "No Item Loaded. Standing-by...
"
- dat += "Main Menu"
if(2.2)
dat += "Main Menu
"
dat += "Deconstruction Menu
"
dat += "Name: [linked_destroy.loaded_item.name]
"
- dat += "Origin Tech:
"
+ dat += "Origin Tech:"
+ dat += ""
var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
for(var/T in temp_tech)
- dat += "* [CallTechName(T)] [temp_tech[T]]
"
+ dat += "- [CallTechName(T)] [temp_tech[T]]
"
+ dat += "
"
dat += "
Deconstruct Item || "
dat += "Eject Item || "
@@ -711,13 +731,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Protolathe Menu:
"
dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage])
"
dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])
"
+ dat += ""
for(var/datum/design/D in files.known_designs)
- if(!(D.build_type & PROTOLATHE))
+ if(!D.build_path || !(D.build_type & PROTOLATHE))
continue
- var/temp_dat = "[D.name]"
+ var/temp_dat
var/check_materials = 1
for(var/M in D.materials)
- temp_dat += " [D.materials[M]] [CallMaterialName(M)]"
+ temp_dat += ", [D.materials[M]] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
@@ -736,64 +757,52 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0
else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]))
check_materials = 0
+ if(temp_dat)
+ temp_dat = " \[[copytext(temp_dat,3)]\]"
if (check_materials)
- dat += "* [temp_dat]
"
+ dat += "- [D.name][temp_dat]
"
else
- dat += "* [temp_dat]
"
+ dat += "- [D.name][temp_dat]
"
+ dat += "
"
if(3.2) //Protolathe Material Storage Sub-menu
dat += "Main Menu || "
dat += "Protolathe Menu
"
dat += "Material Storage
"
- //Metal
- dat += "* [linked_lathe.m_amount] cm3 of Metal || "
- dat += "Eject: "
- if(linked_lathe.m_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.m_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.m_amount >= 3750) dat += "(Max Sheets)"
- dat += "
"
- //Glass
- dat += "* [linked_lathe.g_amount] cm3 of Glass || "
- dat += "Eject: "
- if(linked_lathe.g_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.g_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.g_amount >= 3750) dat += "(Max Sheets)"
- dat += "
"
- //Gold
- dat += "* [linked_lathe.gold_amount] cm3 of Gold || "
- dat += "Eject: "
- if(linked_lathe.gold_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.gold_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.gold_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
- //Silver
- dat += "* [linked_lathe.silver_amount] cm3 of Silver || "
- dat += "Eject: "
- if(linked_lathe.silver_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.silver_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.silver_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
- //Phoron
- dat += "* [linked_lathe.phoron_amount] cm3 of Solid Phoron || "
- dat += "Eject: "
- if(linked_lathe.phoron_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.phoron_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.phoron_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
- //Uranium
- dat += "* [linked_lathe.uranium_amount] cm3 of Uranium || "
- dat += "Eject: "
- if(linked_lathe.uranium_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.uranium_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.uranium_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
- //Diamond
- dat += "* [linked_lathe.diamond_amount] cm3 of Diamond || "
- dat += "Eject: "
- if(linked_lathe.diamond_amount >= 2000) dat += "(1 Sheet) "
- if(linked_lathe.diamond_amount >= 10000) dat += "(5 Sheets) "
- if(linked_lathe.diamond_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
+ dat += ""
+ for(var/M in list("metal", "glass", "gold", "silver", "phoron", "uranium", "diamond"))
+ var/amount
+ var/sheetsize = 2000
+ switch(M)
+ if("metal")
+ amount = linked_lathe.m_amount
+ sheetsize = 3750
+ if("glass")
+ amount = linked_lathe.g_amount
+ sheetsize = 3750
+ if("gold")
+ amount = linked_lathe.gold_amount
+ if("silver")
+ amount = linked_lathe.silver_amount
+ if("phoron")
+ amount = linked_lathe.phoron_amount
+ if("uranium")
+ amount = linked_lathe.uranium_amount
+ if("diamond")
+ amount = linked_lathe.diamond_amount
+ else
+ continue
+ dat += "- [capitalize(M)]: [amount] cm3"
+ if(amount >= sheetsize)
+ dat += " || Eject "
+ for (var/C in list(1,3,5,10,15,20,25,30,40))
+ if(amount < C * sheetsize)
+ break
+ dat += "[C > 1 ? ", " : ""][C] "
+
+ dat += " or max sheets"
+ dat += "
"
+ dat += "
"
if(3.3) //Protolathe Chemical Storage Submenu
dat += "Main Menu || "
@@ -816,14 +825,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Circuit Imprinter Menu:
"
dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3
"
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
"
-
+ dat += ""
for(var/datum/design/D in files.known_designs)
- if(!(D.build_type & IMPRINTER))
+ if(!D.build_path || !(D.build_type & IMPRINTER))
continue
- var/temp_dat = "[D.name]"
+ var/temp_dat
var/check_materials = 1
for(var/M in D.materials)
- temp_dat += " [D.materials[M]] [CallMaterialName(M)]"
+ temp_dat += ", [D.materials[M]] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
@@ -836,10 +845,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(D.materials[M] > linked_imprinter.uranium_amount) check_materials = 0
else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]))
check_materials = 0
+ if(temp_dat)
+ temp_dat = " \[[copytext(temp_dat,3)]\]"
if (check_materials)
- dat += "* [temp_dat]
"
+ dat += "- [D.name][temp_dat]
"
else
- dat += "* [temp_dat]
"
+ dat += "- [D.name][temp_dat]
"
+ dat += "
"
if(4.2)
dat += "Main Menu || "
@@ -854,35 +866,34 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Main Menu || "
dat += "Circuit Imprinter Menu
"
dat += "Material Storage
"
- //Glass
- dat += "* [linked_imprinter.g_amount] cm3 of Glass || "
- dat += "Eject: "
- if(linked_imprinter.g_amount >= 3750) dat += "(1 Sheet) "
- if(linked_imprinter.g_amount >= 18750) dat += "(5 Sheets) "
- if(linked_imprinter.g_amount >= 3750) dat += "(Max Sheets)"
- dat += "
"
- //Gold
- dat += "* [linked_imprinter.gold_amount] cm3 of Gold || "
- dat += "Eject: "
- if(linked_imprinter.gold_amount >= 2000) dat += "(1 Sheet) "
- if(linked_imprinter.gold_amount >= 10000) dat += "(5 Sheets) "
- if(linked_imprinter.gold_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
- //Diamond
- dat += "* [linked_imprinter.diamond_amount] cm3 of Diamond || "
- dat += "Eject: "
- if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) "
- if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) "
- if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)"
- dat += "
"
- //Uranium
- dat += "* [linked_imprinter.uranium_amount] cm3 of Uranium || "
- dat += "Eject: "
- if(linked_imprinter.uranium_amount >= 2000) dat += "(1 Sheet) "
- if(linked_imprinter.uranium_amount >= 10000) dat += "(5 Sheets) "
- if(linked_imprinter.uranium_amount >= 2000) dat += "(Max Sheets)"
+ dat += ""
+ for(var/M in list("glass", "gold", "diamond", "uranium"))
+ var/amount
+ var/sheetsize = 2000
+ switch(M)
+ if("glass")
+ amount = linked_imprinter.g_amount
+ sheetsize = 3750
+ if("gold")
+ amount = linked_imprinter.gold_amount
+ if("diamond")
+ amount = linked_imprinter.diamond_amount
+ if("uranium")
+ amount = linked_imprinter.uranium_amount
+ dat += "- [capitalize(M)]: [amount] cm3"
+ if(amount >= sheetsize)
+ dat += " || Eject: "
+ for (var/C in list(1,3,5,10,15,20,25,30,40))
+ if(amount < C * sheetsize)
+ break
+ dat += "[C > 1 ? ", " : ""][C] "
- user << browse("Research and Development Console
[dat]", "window=rdconsole;size=575x400")
+ dat += " or max sheets"
+ dat += " "
+ dat += "
"
+
+
+ user << browse("Research and Development Console
[dat]", "window=rdconsole;size=850x600")
onclose(user, "rdconsole")
/obj/machinery/computer/rdconsole/robotics