[MIRROR] [READY] RND TECHWEBS + DEPARTMENTAL LATHES (#4014)

* [READY] RND TECHWEBS + DEPARTMENTAL LATHES

* resetting all the maps because we can worry about them later.

* Regexing

* I'm fucked

* Fixes

* .

* maps

* bleh

* ree

* fixes
This commit is contained in:
CitadelStationBot
2017-12-11 18:36:38 -06:00
committed by kevinz000
parent b5600cb91c
commit cc0b768c72
332 changed files with 4962 additions and 4331 deletions
+57 -8
View File
@@ -4,7 +4,7 @@ a /datum/desgin on the linked R&D console. You can then print them out in a fasi
using metal and glass, it uses glass and reagents (usually sulfuric acis).
*/
/obj/machinery/r_n_d/circuit_imprinter
/obj/machinery/rnd/circuit_imprinter
name = "circuit imprinter"
desc = "Manufactures circuit boards for the construction of machines."
icon_state = "circuit_imprinter"
@@ -12,6 +12,10 @@ 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!
var/list/categories = list(
"AI Modules",
@@ -27,16 +31,15 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
"Computer Parts"
)
/obj/machinery/rnd/circuit_imprinter/Initialize()
var/datum/component/material_container/materials
/obj/machinery/r_n_d/circuit_imprinter/Initialize()
materials = AddComponent(/datum/component/material_container, list(MAT_GLASS, MAT_GOLD, MAT_DIAMOND, MAT_METAL, 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
create_reagents(0)
return ..()
/obj/machinery/r_n_d/circuit_imprinter/RefreshParts()
/obj/machinery/rnd/circuit_imprinter/RefreshParts()
reagents.maximum_volume = 0
for(var/obj/item/reagent_containers/glass/G in component_parts)
reagents.maximum_volume += G.volume
@@ -52,11 +55,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
T += M.rating
efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas
/obj/machinery/r_n_d/circuit_imprinter/blob_act(obj/structure/blob/B)
/obj/machinery/rnd/circuit_imprinter/blob_act(obj/structure/blob/B)
if (prob(50))
qdel(src)
/obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material
/obj/machinery/rnd/circuit_imprinter/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material
var/list/all_materials = being_built.reagents_list + being_built.materials
GET_COMPONENT(materials, /datum/component/material_container)
@@ -67,7 +70,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
return round(A / max(1, (all_materials[M]/efficiency_coeff)))
//we eject the materials upon deconstruction.
/obj/machinery/r_n_d/circuit_imprinter/on_deconstruction()
/obj/machinery/rnd/circuit_imprinter/on_deconstruction()
for(var/obj/item/reagent_containers/glass/G in component_parts)
reagents.trans_to(G, G.reagents.maximum_volume)
GET_COMPONENT(materials, /datum/component/material_container)
@@ -75,6 +78,52 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
..()
/obj/machinery/r_n_d/circuit_imprinter/disconnect_console()
/obj/machinery/rnd/circuit_imprinter/disconnect_console()
linked_console.linked_imprinter = null
..()
/obj/machinery/rnd/circuit_imprinter/proc/user_try_print_id(id)
if((!linked_console && requires_console) || !id)
return FALSE
var/datum/design/D = (linked_console || requires_console)? linked_console.stored_research.researched_designs[id] : get_techweb_design_by_id(id)
if(!istype(D))
return FALSE
var/power = 1000
for(var/M in D.materials)
power += round(D.materials[M] / 5)
power = max(4000, power)
use_power(power)
var/list/efficient_mats = list()
for(var/MAT in D.materials)
efficient_mats[MAT] = D.materials[MAT]/efficiency_coeff
if(!materials.has_materials(efficient_mats))
say("Not enough materials to complete prototype.")
return FALSE
for(var/R in D.reagents_list)
if(!reagents.has_reagent(R, D.reagents_list[R]/efficiency_coeff))
say("Not enough reagents to complete prototype.")
return FALSE
busy = TRUE
flick("circuit_imprinter_ani", src)
materials.use_amount(efficient_mats)
for(var/R in D.reagents_list)
reagents.remove_reagent(R, D.reagents_list[R]/efficiency_coeff)
var/P = D.build_path
addtimer(CALLBACK(src, .proc/reset_busy), 16)
addtimer(CALLBACK(src, .proc/do_print, P, efficient_mats, D.dangerous_construction), 16)
return TRUE
/obj/machinery/rnd/circuit_imprinter/proc/do_print(path, list/matlist, notify_admins)
if(notify_admins)
if(usr)
usr.investigate_log("built [path] at a circuit imprinter.", INVESTIGATE_RESEARCH)
var/turf/T = get_turf(usr)
message_admins("[key_name(usr)][ADMIN_JMP(T)] has built [path] at a circuit imprinter at [COORD(usr)]")
var/obj/item/I = new path(get_turf(src))
I.materials = matlist.Copy()
SSblackbox.record_feedback("nested_tally", "circuit_printed", 1, list("[type]", "[path]"))
@@ -0,0 +1,203 @@
/obj/machinery/rnd/circuit_imprinter/department
name = "Department Circuit Imprinter"
desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type. Features a bluespace materials reciever for recieving materials without the hassle of running to mining!"
icon_state = "circuit_imprinter"
container_type = OPENCONTAINER_1
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department
console_link = FALSE
requires_console = FALSE
var/list/allowed_department_flags = DEPARTMENTAL_FLAG_ALL
var/list/datum/design/cached_designs
var/list/datum/design/matching_designs
var/department_tag = "Unidentified" //used for material distribution among other things.
var/datum/techweb/stored_research
var/datum/techweb/host_research
var/screen = DEPPRINTER_SCREEN_PRIMARY
/obj/machinery/rnd/circuit_imprinter/department/science
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE
department_tag = "Science"
/obj/machinery/rnd/circuit_imprinter/department/Initialize()
. = ..()
stored_research = new
cached_designs = list()
host_research = SSresearch.science_tech
matching_designs = list()
update_research()
/obj/machinery/rnd/circuit_imprinter/department/Destroy()
QDEL_NULL(stored_research)
return ..()
/obj/machinery/rnd/circuit_imprinter/department/user_try_print_id(id, amount)
var/datum/design/D = get_techweb_design_by_id(id)
if(!D || !(D.departmental_flags & allowed_department_flags))
say("Warning: Printing failed. Please update the research data with the on-screen button!")
return FALSE
. = ..()
/obj/machinery/rnd/circuit_imprinter/department/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/rnd/circuit_imprinter/department/interact(mob/user)
user.set_machine(src)
var/datum/browser/popup = new(user, "rndconsole", name, 460, 550)
popup.set_content(generate_ui())
popup.open()
/obj/machinery/rnd/circuit_imprinter/department/proc/search(string)
matching_designs.Cut()
for(var/v in stored_research.researched_designs)
var/datum/design/D = stored_research.researched_designs[v]
if(!(D.build_type & IMPRINTER) || !(D.departmental_flags & allowed_department_flags))
continue
if(findtext(D.name,string))
matching_designs.Add(D)
/obj/machinery/rnd/circuit_imprinter/department/proc/update_research()
host_research.copy_research_to(stored_research, TRUE)
update_designs()
/obj/machinery/rnd/circuit_imprinter/department/proc/update_designs()
cached_designs.Cut()
for(var/i in stored_research.researched_designs)
var/datum/design/d = stored_research.researched_designs[i]
if((d.departmental_flags & allowed_department_flags) && (d.build_type & IMPRINTER))
cached_designs |= d
/obj/machinery/rnd/circuit_imprinter/department/proc/generate_ui()
var/list/ui = list()
ui += ui_header()
switch(screen)
if(DEPPRINTER_SCREEN_MATERIALS)
ui += ui_materials()
if(DEPPRINTER_SCREEN_CHEMICALS)
ui += ui_chemicals()
if(DEPPRINTER_SCREEN_SEARCH)
ui += ui_search()
else
ui += ui_department_imprinter()
for(var/i in 1 to length(ui))
if(!findtextEx(ui[i], RDSCREEN_NOBREAK))
ui[i] += "<br>"
ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "")
return ui.Join("")
/obj/machinery/rnd/circuit_imprinter/department/proc/ui_search() //Legacy code
var/list/l = list()
l += "<h2>Search Results:</h2>"
l += "<form name='search' action='?src=[REF(src)]'>\
<input type='hidden' name='src' value='[REF(src)]'>\
<input type='hidden' name='search' value='to_search'>\
<input type='text' name='to_search'>\
<input type='submit' value='Search'>\
</form><HR>"
var/coeff = efficiency_coeff
for(var/datum/design/D in matching_designs)
var/temp_materials
var/check_materials = TRUE
var/all_materials = D.materials + D.reagents_list
for(var/M in all_materials)
temp_materials += " | "
if (!check_mat(D, M))
check_materials = FALSE
temp_materials += " <span class='bad'>[all_materials[M]/coeff] [CallMaterialName(M)]</span>"
else
temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]"
if (check_materials)
l += "<A href='?src=[REF(src)];imprint=[D.id]'>[D.name]</A>[temp_materials]"
else
l += "<span class='linkOff'>[D.name]</span>[temp_materials]"
l += "</div>"
return l
/obj/machinery/rnd/circuit_imprinter/department/proc/ui_department_imprinter()
var/list/l = list()
var/coeff = efficiency_coeff
l += "<form name='search' action='?src=[REF(src)]'>\
<input type='hidden' name='src' value='[REF(src)]'>\
<input type='hidden' name='search' value='to_search'>\
<input type='text' name='to_search'>\
<input type='submit' value='Search'>\
</form><HR>"
for(var/datum/design/D in cached_designs)
var/temp_materials
var/check_materials = TRUE
var/all_materials = D.materials + D.reagents_list
for(var/M in all_materials)
temp_materials += " | "
if (!check_mat(D, M))
check_materials = FALSE
temp_materials += " <span class='bad'>[all_materials[M]/coeff] [CallMaterialName(M)]</span>"
else
temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]"
if (check_materials)
l += "<A href='?src=[REF(src)];imprint=[D.id]'>[D.name]</A>[temp_materials]"
else
l += "<span class='linkOff'>[D.name]</span>[temp_materials]"
l += "</div>"
return l
/obj/machinery/rnd/circuit_imprinter/department/proc/ui_header()
var/list/l = list()
l += "<h2>Nanotrasen Department Circuit Imprinter: [department_tag]</h2>[RDSCREEN_NOBREAK]"
l += "<div class='statusDisplay'><b>Connected Technology database: [host_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]"
l += "Security protocols: [emagged? "<font color='red'>Disabled</font>" : "<font color='green'>Enabled</font>"]"
l += "<A href='?src=[REF(src)];switch_screen=[DEPPRINTER_SCREEN_MATERIALS]'><B>Material Amount:</B> [materials.total_amount] / [materials.max_amount]</A>"
l += "<A href='?src=[REF(src)];switch_screen=[DEPPRINTER_SCREEN_CHEMICALS]'><B>Chemical volume:</B> [reagents.total_volume] / [reagents.maximum_volume]</A>"
l += "<a href='?src=[REF(src)];sync_research=1'>Synchronize Research</a>"
l += "<a href='?src=[REF(src)];switch_screen=[DEPPRINTER_SCREEN_PRIMARY]'>Main Screen</a></div>[RDSCREEN_NOBREAK]"
return l
/obj/machinery/rnd/circuit_imprinter/department/proc/ui_materials()
var/list/l = list()
l += "<div class='statusDisplay'><h3>Material Storage:</h3>"
for(var/mat_id in materials.materials)
var/datum/material/M = materials.materials[mat_id]
l += "* [M.amount] of [M.name]: "
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=1'>Eject</A> [RDSCREEN_NOBREAK]"
if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=5'>5x</A> [RDSCREEN_NOBREAK]"
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=50'>All</A>[RDSCREEN_NOBREAK]"
l += ""
l += "</div>[RDSCREEN_NOBREAK]"
return l
/obj/machinery/rnd/circuit_imprinter/department/proc/ui_chemicals()
var/list/l = list()
l += "<div class='statusDisplay'><A href='?src=[REF(src)];disposeall=1'>Disposal All Chemicals in Storage</A>"
l += "<h3>Chemical Storage:</h3>"
for(var/datum/reagent/R in reagents.reagent_list)
l += "[R.name]: [R.volume]"
l += "<A href='?src=[REF(src)];dispose=[R.id]'>Purge</A>"
l += "</div>"
return l
/obj/machinery/rnd/circuit_imprinter/department/Topic(raw, ls)
if(..())
return
add_fingerprint(usr)
usr.set_machine(src)
if(ls["switch_screen"])
screen = text2num(ls["switch_screen"])
if(ls["imprint"]) //Causes the circuit_imprinter to build something.
if(busy)
say("Warning: Fabricators busy!")
else
user_try_print_id(ls["imprint"])
if(ls["search"]) //Search for designs with name matching pattern
search(ls["to_search"])
screen = DEPPRINTER_SCREEN_SEARCH
if(ls["sync_research"])
update_research()
say("Synchronizing research with host technology database.")
if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it)
reagents.del_reagent(ls["dispose"])
if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents.
reagents.clear_reagents()
if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material
materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"])
+247
View File
@@ -0,0 +1,247 @@
/obj/machinery/rnd/protolathe/department
name = "department protolathe"
desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type. Features a bluespace materials reciever for recieving materials without the hassle of running to mining!"
icon_state = "protolathe"
container_type = OPENCONTAINER_1
circuit = /obj/item/circuitboard/machine/protolathe/department
console_link = FALSE
requires_console = FALSE
var/list/allowed_department_flags = DEPARTMENTAL_FLAG_ALL
var/list/datum/design/cached_designs
var/list/datum/design/matching_designs
var/department_tag = "Unidentified" //used for material distribution among other things.
var/datum/techweb/stored_research
var/datum/techweb/host_research
var/screen = DEPLATHE_SCREEN_PRIMARY
/obj/machinery/rnd/protolathe/department/engineering
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_ENGINEERING
department_tag = "Engineering"
circuit = /obj/item/circuitboard/machine/protolathe/department/engineering
/obj/machinery/rnd/protolathe/department/service
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SERVICE
department_tag = "Service"
circuit = /obj/item/circuitboard/machine/protolathe/department/service
/obj/machinery/rnd/protolathe/department/medical
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_MEDICAL
department_tag = "Medical"
circuit = /obj/item/circuitboard/machine/protolathe/department/medical
/obj/machinery/rnd/protolathe/department/cargo
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_CARGO
department_tag = "Cargo"
circuit = /obj/item/circuitboard/machine/protolathe/department/cargo
/obj/machinery/rnd/protolathe/department/science
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE
department_tag = "Science"
circuit = /obj/item/circuitboard/machine/protolathe/department/science
/obj/machinery/rnd/protolathe/department/security
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY
department_tag = "Security"
circuit = /obj/item/circuitboard/machine/protolathe/department/security
/obj/machinery/rnd/protolathe/department/Initialize()
. = ..()
matching_designs = list()
cached_designs = list()
stored_research = new
host_research = SSresearch.science_tech
update_research()
/obj/machinery/rnd/protolathe/department/Destroy()
QDEL_NULL(stored_research)
return ..()
/obj/machinery/rnd/protolathe/department/user_try_print_id(id, amount)
var/datum/design/D = get_techweb_design_by_id(id)
if(!D || !(D.departmental_flags & allowed_department_flags))
say("Warning: Printing failed. Please update the research data with the on-screen button!")
return FALSE
. = ..()
/obj/machinery/rnd/protolathe/department/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/machinery/rnd/protolathe/department/interact(mob/user)
user.set_machine(src)
var/datum/browser/popup = new(user, "rndconsole", name, 460, 550)
popup.set_content(generate_ui())
popup.open()
/obj/machinery/rnd/protolathe/department/proc/search(string)
matching_designs.Cut()
for(var/v in stored_research.researched_designs)
var/datum/design/D = stored_research.researched_designs[v]
if(!(D.build_type & PROTOLATHE) || !(D.departmental_flags & allowed_department_flags))
continue
if(findtext(D.name,string))
matching_designs.Add(D)
/obj/machinery/rnd/protolathe/department/proc/update_research()
host_research.copy_research_to(stored_research, TRUE)
update_designs()
/obj/machinery/rnd/protolathe/department/proc/update_designs()
cached_designs.Cut()
for(var/i in stored_research.researched_designs)
var/datum/design/d = stored_research.researched_designs[i]
if((d.departmental_flags & allowed_department_flags) && (d.build_type & PROTOLATHE))
cached_designs |= d
/obj/machinery/rnd/protolathe/department/proc/generate_ui()
var/list/ui = list()
ui += ui_header()
switch(screen)
if(DEPLATHE_SCREEN_MATERIALS)
ui += ui_materials()
if(DEPLATHE_SCREEN_CHEMICALS)
ui += ui_chemicals()
if(DEPLATHE_SCREEN_SEARCH)
ui += ui_search()
else
ui += ui_department_lathe()
for(var/i in 1 to length(ui))
if(!findtextEx(ui[i], RDSCREEN_NOBREAK))
ui[i] += "<br>"
ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "")
return ui.Join("")
/obj/machinery/rnd/protolathe/department/proc/ui_search() //Legacy code
var/list/l = list()
var/coeff = efficiency_coeff
l += "<h2>Search Results:</h2>"
l += "<form name='search' action='?src=[REF(src)]'>\
<input type='hidden' name='src' value='[REF(src)]'>\
<input type='hidden' name='search' value='to_search'>\
<input type='text' name='to_search'>\
<input type='submit' value='Search'>\
</form><HR>"
for(var/datum/design/D in matching_designs)
var/temp_material
var/c = 50
var/t
var/all_materials = D.materials + D.reagents_list
for(var/M in all_materials)
t = check_mat(D, M)
temp_material += " | "
if (t < 1)
temp_material += "<span class='bad'>[all_materials[M]*coeff] [CallMaterialName(M)]</span>"
else
temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]"
c = min(c,t)
if (c >= 1)
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
if(c >= 5)
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
if(c >= 10)
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
l += "[temp_material][RDSCREEN_NOBREAK]"
else
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
l += ""
l += "</div>"
return l
/obj/machinery/rnd/protolathe/department/proc/ui_department_lathe()
var/list/l = list()
var/coeff = efficiency_coeff
l += "<form name='search' action='?src=[REF(src)]'>\
<input type='hidden' name='src' value='[REF(src)]'>\
<input type='hidden' name='search' value='to_search'>\
<input type='text' name='to_search'>\
<input type='submit' value='Search'>\
</form><HR>"
for(var/datum/design/D in cached_designs)
var/temp_material
var/c = 50
var/t
var/all_materials = D.materials + D.reagents_list
for(var/M in all_materials)
t = check_mat(D, M)
temp_material += " | "
if (t < 1)
temp_material += "<span class='bad'>[all_materials[M]*coeff] [CallMaterialName(M)]</span>"
else
temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]"
c = min(c,t)
if (c >= 1)
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
if(c >= 5)
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
if(c >= 10)
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
l += "[temp_material][RDSCREEN_NOBREAK]"
else
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
l += ""
l += "</div>"
return l
/obj/machinery/rnd/protolathe/department/proc/ui_header()
var/list/l = list()
l += "<h2>Nanotrasen Department Lathe: [department_tag]</h2>[RDSCREEN_NOBREAK]"
l += "<div class='statusDisplay'><b>Connected Technology database: [host_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]"
l += "Security protocols: [emagged? "<font color='red'>Disabled</font>" : "<font color='green'>Enabled</font>"]"
l += "<A href='?src=[REF(src)];switch_screen=[DEPLATHE_SCREEN_MATERIALS]'><B>Material Amount:</B> [materials.total_amount] / [materials.max_amount]</A>"
l += "<A href='?src=[REF(src)];switch_screen=[DEPLATHE_SCREEN_CHEMICALS]'><B>Chemical volume:</B> [reagents.total_volume] / [reagents.maximum_volume]</A>"
l += "<a href='?src=[REF(src)];sync_research=1'>Synchronize Research</a>"
l += "<a href='?src=[REF(src)];switch_screen=[DEPLATHE_SCREEN_PRIMARY]'>Main Screen</a></div>[RDSCREEN_NOBREAK]"
return l
/obj/machinery/rnd/protolathe/department/proc/ui_materials()
var/list/l = list()
l += "<div class='statusDisplay'><h3>Material Storage:</h3>"
for(var/mat_id in materials.materials)
var/datum/material/M = materials.materials[mat_id]
l += "* [M.amount] of [M.name]: "
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=1'>Eject</A> [RDSCREEN_NOBREAK]"
if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=5'>5x</A> [RDSCREEN_NOBREAK]"
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=50'>All</A>[RDSCREEN_NOBREAK]"
l += ""
l += "</div>[RDSCREEN_NOBREAK]"
return l
/obj/machinery/rnd/protolathe/department/proc/ui_chemicals()
var/list/l = list()
l += "<div class='statusDisplay'><A href='?src=[REF(src)];disposeall=1'>Disposal All Chemicals in Storage</A>"
l += "<h3>Chemical Storage:</h3>"
for(var/datum/reagent/R in reagents.reagent_list)
l += "[R.name]: [R.volume]"
l += "<A href='?src=[REF(src)];dispose=[R.id]'>Purge</A>"
l += "</div>"
return l
/obj/machinery/rnd/protolathe/department/Topic(raw, ls)
if(..())
return
add_fingerprint(usr)
usr.set_machine(src)
if(ls["switch_screen"])
screen = text2num(ls["switch_screen"])
if(ls["build"]) //Causes the Protolathe to build something.
if(busy)
say("Warning: Fabricators busy!")
else
user_try_print_id(ls["build"], ls["amount"])
if(ls["search"]) //Search for designs with name matching pattern
search(ls["to_search"])
screen = DEPLATHE_SCREEN_SEARCH
if(ls["sync_research"])
update_research()
say("Synchronizing research with host technology database.")
if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it)
reagents.del_reagent(ls["dispose"])
if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents.
reagents.clear_reagents()
if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material
materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"])
updateUsrDialog()
+8 -608
View File
@@ -26,11 +26,12 @@ other types of metals and chemistry for reagents).
- Add the AUTOLATHE tag to
*/
//DESIGNS ARE GLOBAL. DO NOT CREATE OR DESTROY THEM AT RUNTIME OUTSIDE OF INIT, JUST REFERENCE THEM TO WHATEVER YOU'RE DOING!
/datum/design //Datum for object designs, used in construction
var/name = "Name" //Name of the created object.
var/desc = "Desc" //Description of the created object.
var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols
var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements.
var/id = DESIGN_ID_IGNORE //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols
var/build_type = null //Flag as to what kind machine the design is built in. See defines.
var/list/materials = list() //List of materials. Format: "id" = amount.
var/construction_time //Amount of time required for building the object
@@ -40,7 +41,12 @@ other types of metals and chemistry for reagents).
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
var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed.
var/departmental_flags = NONE //bitflags for deplathes.
/datum/design/Destroy()
CRASH("DESIGN DATUMS SHOULD NOT EVER BE DESTROYED AS THEY ARE ONLY MEANT TO BE IN A GLOBAL LIST AND REFERENCED FOR US.")
return ..()
////////////////////////////////////////
//Disks for transporting design datums//
@@ -66,609 +72,3 @@ other types of metals and chemistry for reagents).
desc = "A disk for storing device design data for construction in lathes. This one has extra storage space."
materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER = 50)
max_blueprints = 5
///////////////////////////////////
/////Non-Board Computer Stuff//////
///////////////////////////////////
/datum/design/intellicard
name = "Intellicard AI Transportation System"
desc = "Allows for the construction of an intellicard."
id = "intellicard"
req_tech = list("programming" = 3, "materials" = 3)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 1000, MAT_GOLD = 200)
build_path = /obj/item/device/aicard
category = list("Electronics")
/datum/design/paicard
name = "Personal Artificial Intelligence Card"
desc = "Allows for the construction of a pAI Card."
id = "paicard"
req_tech = list("programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/device/paicard
category = list("Electronics")
/datum/design/integrated_printer
name = "Integrated circuits printer"
desc = "This machine provides all neccesary things for circuitry."
id = "icprinter"
req_tech = list("programming" = 2,"materials" = 2, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 5000, MAT_METAL = 5000)
build_path = /obj/item/device/integrated_circuit_printer
category = list("Electronics")
/datum/design/advupdisk
name = "Upgrade disk-advanced circuits"
desc = "Upgrade disk for integrated circuits printer.Allows advanced designs."
id = "udiskadv"
req_tech = list("programming" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/disk/integrated_circuit/upgrade/advanced
category = list("Electronics")
/datum/design/cloneupisk
name = "Upgrade disk-assembly cloning"
desc = "Upgrade disk for integrated circuits printer.Allows assembly cloning."
id = "udiskclone"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/disk/integrated_circuit/upgrade/clone
category = list("Electronics")
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
/datum/design/design_disk
name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/disk/design_disk
category = list("Electronics")
/datum/design/design_disk_adv
name = "Advanced Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk_adv"
req_tech = list("programming" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
build_path = /obj/item/disk/design_disk/adv
category = list("Electronics")
/datum/design/tech_disk
name = "Technology Data Storage Disk"
desc = "Produce additional disks for storing technology data."
id = "tech_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/disk/tech_disk
category = list("Electronics")
/datum/design/tech_disk_adv
name = "Advanced Technology Data Storage Disk"
desc = "Produce disks with extra storage capacity for storing technology data."
id = "tech_disk_adv"
req_tech = list("programming" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
build_path = /obj/item/disk/tech_disk/adv
category = list("Electronics")
/datum/design/tech_disk_super_adv
name = "Quantum Technology Data Storage Disk"
desc = "Produce disks with extremely large storage capacity for storing technology data."
id = "tech_disk_super_adv"
req_tech = list("programming" = 6)
build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=100, MAT_GOLD=100, MAT_BLUESPACE = 100)
build_path = /obj/item/disk/tech_disk/super_adv
category = list("Electronics")
/////////////////////////////////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
/datum/design/drill
name = "Mining Drill"
desc = "Yours is the drill that will pierce through the rock walls."
id = "drill"
req_tech = list("materials" = 2, "powerstorage" = 2, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 1000) //expensive, but no need for miners.
build_path = /obj/item/pickaxe/drill
category = list("Mining Designs")
/datum/design/drill_diamond
name = "Diamond-Tipped Mining Drill"
desc = "Yours is the drill that will pierce the heavens!"
id = "drill_diamond"
req_tech = list("materials" = 6, "powerstorage" = 5, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed.
build_path = /obj/item/pickaxe/drill/diamonddrill
category = list("Mining Designs")
/datum/design/plasmacutter
name = "Plasma Cutter"
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
id = "plasmacutter"
req_tech = list("materials" = 3, "plasmatech" = 3, "magnets" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_PLASMA = 400)
build_path = /obj/item/gun/energy/plasmacutter
category = list("Mining Designs")
/datum/design/plasmacutter_adv
name = "Advanced Plasma Cutter"
desc = "It's an advanced plasma cutter, oh my god."
id = "plasmacutter_adv"
req_tech = list("materials" = 4, "plasmatech" = 4, "engineering" = 2, "combat" = 3, "magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500)
build_path = /obj/item/gun/energy/plasmacutter/adv
category = list("Mining Designs")
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well."
id = "jackhammer"
req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 6, "magnets" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_DIAMOND = 6000)
build_path = /obj/item/pickaxe/drill/jackhammer
category = list("Mining Designs")
/datum/design/superresonator
name = "Upgraded Resonator"
desc = "An upgraded version of the resonator that allows more fields to be active at once."
id = "superresonator"
req_tech = list("materials" = 4, "powerstorage" = 3, "engineering" = 3, "magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_URANIUM = 1000)
build_path = /obj/item/resonator/upgraded
category = list("Mining Designs")
/datum/design/trigger_guard_mod
name = "Kinetic Accelerator Trigger Guard Mod"
desc = "A device which allows kinetic accelerators to be wielded by any organism."
id = "triggermod"
req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/trigger_guard
category = list("Mining Designs")
/datum/design/damage_mod
name = "Kinetic Accelerator Damage Mod"
desc = "A device which allows kinetic accelerators to deal more damage."
id = "damagemod"
req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/damage
category = list("Mining Designs", "Cyborg Upgrade Modules")
/datum/design/cooldown_mod
name = "Kinetic Accelerator Cooldown Mod"
desc = "A device which decreases the cooldown of a Kinetic Accelerator."
id = "cooldownmod"
req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/cooldown
category = list("Mining Designs", "Cyborg Upgrade Modules")
/datum/design/range_mod
name = "Kinetic Accelerator Range Mod"
desc = "A device which allows kinetic accelerators to fire at a further range."
id = "rangemod"
req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/range
category = list("Mining Designs", "Cyborg Upgrade Modules")
/datum/design/hyperaccelerator
name = "Kinetic Accelerator Mining AoE Mod"
desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock."
id = "hypermod"
req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000)
build_path = /obj/item/borg/upgrade/modkit/aoe/turfs
category = list("Mining Designs", "Cyborg Upgrade Modules")
/////////////////////////////////////////
//////////////Blue Space/////////////////
/////////////////////////////////////////
/datum/design/beacon
name = "Tracking Beacon"
desc = "A blue space tracking beacon."
id = "beacon"
req_tech = list("bluespace" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/device/radio/beacon
category = list("Bluespace Designs")
/datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of bluespace."
id = "bag_holding"
req_tech = list("bluespace" = 7, "materials" = 5, "engineering" = 5, "plasmatech" = 6)
build_type = PROTOLATHE
materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000)
build_path = /obj/item/storage/backpack/holding
category = list("Bluespace Designs")
/datum/design/bluespace_crystal
name = "Artificial Bluespace Crystal"
desc = "A small blue crystal with mystical properties."
id = "bluespace_crystal"
req_tech = list("bluespace" = 3, "materials" = 6, "plasmatech" = 4)
build_type = PROTOLATHE
materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500)
build_path = /obj/item/ore/bluespace_crystal/artificial
category = list("Bluespace Designs")
/datum/design/telesci_gps
name = "GPS Device"
desc = "Little thingie that can track its position at all times."
id = "telesci_gps"
req_tech = list("materials" = 2, "bluespace" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 1000)
build_path = /obj/item/device/gps
category = list("Bluespace Designs")
/datum/design/miningsatchel_holding
name = "Mining Satchel of Holding"
desc = "A mining satchel that can hold an infinite amount of ores."
id = "minerbag_holding"
req_tech = list("bluespace" = 4, "materials" = 3, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience
build_path = /obj/item/storage/bag/ore/holding
category = list("Bluespace Designs")
/////////////////////////////////////////
/////////////////HUDs////////////////////
/////////////////////////////////////////
/datum/design/health_hud
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
id = "health_hud"
req_tech = list("biotech" = 2, "magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/hud/health
category = list("Equipment")
/datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
id = "health_hud_night"
req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_SILVER = 350)
build_path = /obj/item/clothing/glasses/hud/health/night
category = list("Equipment")
/datum/design/security_hud
name = "Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
id = "security_hud"
req_tech = list("magnets" = 3, "combat" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/hud/security
category = list("Equipment")
/datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
id = "security_hud_night"
req_tech = list("combat" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_GOLD = 350)
build_path = /obj/item/clothing/glasses/hud/security/night
category = list("Equipment")
/datum/design/diagnostic_hud
name = "Diagnostic HUD"
desc = "A HUD used to analyze and determine faults within robotic machinery."
id = "dianostic_hud"
req_tech = list("magnets" = 3, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/hud/diagnostic
category = list("Equipment")
/datum/design/diagnostic_hud_night
name = "Night Vision Diagnostic HUD"
desc = "Upgraded version of the diagnostic HUD designed to function during a power failure."
id = "dianostic_hud_night"
req_tech = list("magnets" = 5, "plasmatech" = 4, "engineering" = 6, "powerstorage" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_PLASMA = 300)
build_path = /obj/item/clothing/glasses/hud/diagnostic/night
category = list("Equipment")
/////////////////////////////////////////
//////////////////Test///////////////////
/////////////////////////////////////////
/* test
name = "Test Design"
desc = "A design to test the new protolathe."
id = "protolathe_test"
build_type = PROTOLATHE
req_tech = list("materials" = 1)
materials = list(MAT_GOLD = 3000, "iron" = 15, "copper" = 10, MAT_SILVER = 2500)
build_path = /obj/item/banhammer"
category = list("Weapons") */
/////////////////////////////////////////
//////////////////Misc///////////////////
/////////////////////////////////////////
/datum/design/welding_mask
name = "Welding Gas Mask"
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
id = "weldingmask"
req_tech = list("materials" = 2, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
build_path = /obj/item/clothing/mask/gas/welding
category = list("Equipment")
/datum/design/portaseeder
name = "Portable Seed Extractor"
desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
build_type = PROTOLATHE
req_tech = list("biotech" = 3, "engineering" = 2)
materials = list(MAT_METAL = 1000, MAT_GLASS = 400)
build_path = /obj/item/storage/bag/plants/portaseeder
category = list("Equipment")
/datum/design/air_horn
name = "Air Horn"
desc = "Damn son, where'd you find this?"
id = "air_horn"
req_tech = list("materials" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
build_path = /obj/item/bikehorn/airhorn
category = list("Equipment")
/datum/design/mesons
name = "Optical Meson Scanners"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
id = "mesons"
req_tech = list("magnets" = 2, "engineering" = 2, "plasmatech" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/meson
category = list("Equipment")
/datum/design/engine_goggles
name = "Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes."
id = "engine_goggles"
req_tech = list("materials" = 4, "magnets" = 3, "engineering" = 4, "plasmatech" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_PLASMA = 100)
build_path = /obj/item/clothing/glasses/meson/engine
category = list("Equipment")
/datum/design/tray_goggles
name = "Optical T-Ray Scanners"
desc = "Used by engineering staff to see underfloor objects such as cables and pipes."
id = "tray_goggles"
req_tech = list("materials" = 3, "magnets" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/meson/engine/tray
category = list("Equipment")
/datum/design/nvgmesons
name = "Night Vision Optical Meson Scanners"
desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display."
id = "nvgmesons"
req_tech = list("magnets" = 5, "plasmatech" = 5, "engineering" = 6)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000)
build_path = /obj/item/clothing/glasses/meson/night
category = list("Equipment")
/datum/design/night_vision_goggles
name = "Night Vision Goggles"
desc = "Goggles that let you see through darkness unhindered."
id = "night_visision_goggles"
req_tech = list("materials" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000)
build_path = /obj/item/clothing/glasses/night
category = list("Equipment")
/datum/design/magboots
name = "Magnetic Boots"
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
id = "magboots"
req_tech = list("materials" = 4, "magnets" = 4, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4500, MAT_SILVER = 1500, MAT_GOLD = 2500)
build_path = /obj/item/clothing/shoes/magboots
category = list("Equipment")
/datum/design/sci_goggles
name = "Science Goggles"
desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
id = "scigoggles"
req_tech = list("magnets" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/science
category = list("Equipment")
/datum/design/handdrill
name = "Hand Drill"
desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
id = "handdrill"
req_tech = list("materials" = 4, "engineering" = 6)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500)
build_path = /obj/item/screwdriver/power
category = list("Equipment")
/datum/design/jawsoflife
name = "Jaws of Life"
desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws"
id = "jawsoflife"
req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) // added one more requirment since the Jaws of Life are a bit OP
build_path = /obj/item/crowbar/power
build_type = PROTOLATHE
materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500)
category = list("Equipment")
/datum/design/alienwrench
name = "Alien Wrench"
desc = "An advanced wrench obtained through Abductor technology."
id = "alien_wrench"
req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4)
build_path = /obj/item/wrench/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
/datum/design/alienwirecutters
name = "Alien Wirecutters"
desc = "Advanced wirecutters obtained through Abductor technology."
id = "alien_wirecutters"
req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4)
build_path = /obj/item/wirecutters/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
/datum/design/alienscrewdriver
name = "Alien Screwdriver"
desc = "An advanced screwdriver obtained through Abductor technology."
id = "alien_screwdriver"
req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4)
build_path = /obj/item/screwdriver/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
/datum/design/aliencrowbar
name = "Alien Crowbar"
desc = "An advanced crowbar obtained through Abductor technology."
id = "alien_crowbar"
req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4)
build_path = /obj/item/crowbar/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
/datum/design/alienwelder
name = "Alien Welding Tool"
desc = "An advanced welding tool obtained through Abductor technology."
id = "alien_welder"
req_tech = list("engineering" = 5, "plasmatech" = 5, "abductor" = 4)
build_path = /obj/item/weldingtool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
/datum/design/alienmultitool
name = "Alien Multitool"
desc = "An advanced multitool obtained through Abductor technology."
id = "alien_multitool"
req_tech = list("engineering" = 5, "programming" = 5, "abductor" = 4)
build_path = /obj/item/device/multitool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
/datum/design/diskplantgene
name = "Plant Data Disk"
desc = "A disk for storing plant genetic data."
id = "diskplantgene"
req_tech = list("programming" = 4, "biotech" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL=200, MAT_GLASS=100)
build_path = /obj/item/disk/plantgene
category = list("Electronics")
/////////////////////////////////////////
////////////Janitor Designs//////////////
/////////////////////////////////////////
/datum/design/advmop
name = "Advanced Mop"
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
id = "advmop"
req_tech = list("materials" = 4, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2500, MAT_GLASS = 200)
build_path = /obj/item/mop/advanced
category = list("Equipment")
/datum/design/blutrash
name = "Trashbag of Holding"
desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage."
id = "blutrash"
req_tech = list("materials" = 5, "bluespace" = 4, "engineering" = 4, "plasmatech" = 3)
build_type = PROTOLATHE
materials = list(MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PLASMA = 1500)
build_path = /obj/item/storage/bag/trash/bluespace
category = list("Equipment")
/datum/design/buffer
name = "Floor Buffer Upgrade"
desc = "A floor buffer that can be attached to vehicular janicarts."
id = "buffer"
req_tech = list("materials" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 200)
build_path = /obj/item/janiupgrade
category = list("Equipment")
/datum/design/holosign
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
id = "holosign"
req_tech = list("programming" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/holosign_creator
category = list("Equipment")
/////////////////////////////////////////
////////////Tools//////////////
/////////////////////////////////////////
/datum/design/exwelder
name = "Experimental Welding Tool"
desc = "An experimental welder capable of self-fuel generation."
id = "exwelder"
req_tech = list("materials" = 4, "engineering" = 5, "bluespace" = 3, "plasmatech" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200)
build_path = /obj/item/weldingtool/experimental
category = list("Equipment")
@@ -6,146 +6,142 @@
name = "AI Design (AI Core)"
desc = "Allows for the construction of circuit boards used to build new AI cores."
id = "aicore"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/aicore
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/safeguard_module
name = "Module Design (Safeguard)"
desc = "Allows for the construction of a Safeguard AI Module."
id = "safeguard_module"
req_tech = list("programming" = 3, "materials" = 3)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/aiModule/supplied/safeguard
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/onehuman_module
name = "Module Design (OneCrew)"
desc = "Allows for the construction of a OneCrew AI Module."
id = "onehuman_module"
req_tech = list("programming" = 6, "materials" = 4)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/zeroth/oneHuman
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/protectstation_module
name = "Module Design (ProtectStation)"
desc = "Allows for the construction of a ProtectStation AI Module."
id = "protectstation_module"
req_tech = list("programming" = 5, "materials" = 4)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/aiModule/supplied/protectStation
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/quarantine_module
name = "Module Design (Quarantine)"
desc = "Allows for the construction of a Quarantine AI Module."
id = "quarantine_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/aiModule/supplied/quarantine
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/oxygen_module
name = "Module Design (OxygenIsToxicToHumans)"
desc = "Allows for the construction of a Safeguard AI Module."
id = "oxygen_module"
req_tech = list("programming" = 4, "biotech" = 2, "materials" = 4)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/aiModule/supplied/oxygen
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/freeform_module
name = "Module Design (Freeform)"
desc = "Allows for the construction of a Freeform AI Module."
id = "freeform_module"
req_tech = list("programming" = 5, "materials" = 4)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/aiModule/supplied/freeform
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/reset_module
name = "Module Design (Reset)"
desc = "Allows for the construction of a Reset AI Module."
id = "reset_module"
req_tech = list("programming" = 4, "materials" = 6)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/aiModule/reset
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/purge_module
name = "Module Design (Purge)"
desc = "Allows for the construction of a Purge AI Module."
id = "purge_module"
req_tech = list("programming" = 5, "materials" = 6)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/reset/purge
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/remove_module
name = "Module Design (Law Removal)"
desc = "Allows for the construction of a Law Removal AI Core Module."
id = "remove_module"
req_tech = list("programming" = 5, "materials" = 5)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/remove
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/freeformcore_module
name = "AI Core Module (Freeform)"
desc = "Allows for the construction of a Freeform AI Core Module."
id = "freeformcore_module"
req_tech = list("programming" = 6, "materials" = 6)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/core/freeformcore
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/asimov
name = "Core Module Design (Asimov)"
desc = "Allows for the construction of an Asimov AI Core Module."
id = "asimov_module"
req_tech = list("programming" = 3, "materials" = 5)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/core/full/asimov
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/paladin_module
name = "Core Module Design (P.A.L.A.D.I.N.)"
desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module."
id = "paladin_module"
req_tech = list("programming" = 5, "materials" = 5)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/core/full/paladin
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/tyrant_module
name = "Core Module Design (T.Y.R.A.N.T.)"
desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module."
id = "tyrant_module"
req_tech = list("programming" = 5, "syndicate" = 2, "materials" = 5)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/core/full/tyrant
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/corporate_module
name = "Core Module Design (Corporate)"
desc = "Allows for the construction of a Corporate AI Core Module."
id = "corporate_module"
req_tech = list("programming" = 5, "materials" = 5)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/core/full/corp
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/default_module
name = "Core Module Design (Default)"
desc = "Allows for the construction of a Default AI Core Module."
id = "default_module"
req_tech = list("programming" = 5, "materials" = 5)
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
build_path = /obj/item/aiModule/core/full/custom
category = list("AI Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
@@ -0,0 +1,55 @@
/////////////////////////////////////////
//////////////Blue Space/////////////////
/////////////////////////////////////////
/datum/design/beacon
name = "Tracking Beacon"
desc = "A blue space tracking beacon."
id = "beacon"
build_type = PROTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/device/radio/beacon
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
/datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of bluespace."
id = "bag_holding"
build_type = PROTOLATHE
materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000)
build_path = /obj/item/storage/backpack/holding
category = list("Bluespace Designs")
dangerous_construction = TRUE
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/bluespace_crystal
name = "Artificial Bluespace Crystal"
desc = "A small blue crystal with mystical properties."
id = "bluespace_crystal"
build_type = PROTOLATHE
materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500)
build_path = /obj/item/ore/bluespace_crystal/artificial
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/telesci_gps
name = "GPS Device"
desc = "Little thingie that can track its position at all times."
id = "telesci_gps"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 1000)
build_path = /obj/item/device/gps
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO
/datum/design/miningsatchel_holding
name = "Mining Satchel of Holding"
desc = "A mining satchel that can hold an infinite amount of ores."
id = "minerbag_holding"
build_type = PROTOLATHE
materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience
build_path = /obj/item/storage/bag/ore/holding
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
@@ -1,30 +1,32 @@
///////////////////Computer Boards///////////////////////////////////
/datum/design/board
name = "Computer Design (Battle Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
id = "arcade_battle"
req_tech = list("programming" = 1)
name = "Computer Design ( NULL ENTRY )"
desc = "I promise this doesn't give you syndicate goodies!"
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
reagents_list = list("sacid" = 20)
/datum/design/board/arcade_battle
name = "Computer Design (Battle Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
id = "arcade_battle"
build_path = /obj/item/circuitboard/computer/arcade/battle
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/orion_trail
name = "Computer Design (Orion Trail Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
id = "arcade_orion"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/computer/arcade/orion_trail
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/seccamera
name = "Computer Design (Security Camera)"
desc = "Allows for the construction of circuit boards used to build security camera computers."
id = "seccamera"
req_tech = list("programming" = 2, "combat" = 2)
build_path = /obj/item/circuitboard/computer/security
category = list("Computer Boards")
@@ -32,15 +34,14 @@
name = "Computer Design (Xenobiology Console)"
desc = "Allows for the construction of circuit boards used to build xenobiology camera computers."
id = "xenobioconsole"
req_tech = list("programming" = 3, "biotech" = 3)
build_path = /obj/item/circuitboard/computer/xenobiology
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/aiupload
name = "Computer Design (AI Upload)"
desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
id = "aiupload"
req_tech = list("programming" = 5, "engineering" = 4)
build_path = /obj/item/circuitboard/computer/aiupload
category = list("Computer Boards")
@@ -48,7 +49,6 @@
name = "Computer Design (Cyborg Upload)"
desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
id = "borgupload"
req_tech = list("programming" = 5, "engineering" = 4)
build_path = /obj/item/circuitboard/computer/borgupload
category = list("Computer Boards")
@@ -56,7 +56,6 @@
name = "Computer Design (Medical Records)"
desc = "Allows for the construction of circuit boards used to build a medical records console."
id = "med_data"
req_tech = list("programming" = 2, "biotech" = 2)
build_path = /obj/item/circuitboard/computer/med_data
category = list("Computer Boards")
@@ -64,7 +63,6 @@
name = "Computer Design (Operating Computer)"
desc = "Allows for the construction of circuit boards used to build an operating computer console."
id = "operating"
req_tech = list("programming" = 2, "biotech" = 3)
build_path = /obj/item/circuitboard/computer/operating
category = list("Computer Boards")
@@ -72,7 +70,6 @@
name = "Computer Design (PanD.E.M.I.C. 2200)"
desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console."
id = "pandemic"
req_tech = list("programming" = 3, "biotech" = 3)
build_path = /obj/item/circuitboard/computer/pandemic
category = list("Computer Boards")
@@ -80,7 +77,6 @@
name = "Computer Design (DNA Machine)"
desc = "Allows for the construction of circuit boards used to build a new DNA scanning console."
id = "scan_console"
req_tech = list("programming" = 2, "biotech" = 2)
build_path = /obj/item/circuitboard/computer/scan_consolenew
category = list("Computer Boards")
@@ -88,7 +84,6 @@
name = "Computer Design (Communications)"
desc = "Allows for the construction of circuit boards used to build a communications console."
id = "comconsole"
req_tech = list("programming" = 3, "magnets" = 3)
build_path = /obj/item/circuitboard/computer/communications
category = list("Computer Boards")
@@ -96,7 +91,6 @@
name = "Computer Design (ID Console)"
desc = "Allows for the construction of circuit boards used to build an ID computer."
id = "idcardconsole"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/computer/card
category = list("Computer Boards")
@@ -104,7 +98,6 @@
name = "Computer Design (Crew monitoring computer)"
desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
id = "crewconsole"
req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
build_path = /obj/item/circuitboard/computer/crew
category = list("Computer Boards")
@@ -112,7 +105,6 @@
name = "Computer Design (Security Records Console)"
desc = "Allows for the construction of circuit boards used to build a security records console."
id = "secdata"
req_tech = list("programming" = 2, "combat" = 2)
build_path = /obj/item/circuitboard/computer/secure_data
category = list("Computer Boards")
@@ -120,7 +112,6 @@
name = "Computer Design (Atmosphere Alert)"
desc = "Allows for the construction of circuit boards used to build an atmosphere alert console."
id = "atmosalerts"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/computer/atmos_alert
category = list("Computer Boards")
@@ -128,7 +119,6 @@
name = "Computer Design (Atmospheric Monitor)"
desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
id = "atmos_control"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/computer/atmos_control
category = list("Computer Boards")
@@ -136,7 +126,6 @@
name = "Computer Design (Robotics Control Console)"
desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
id = "robocontrol"
req_tech = list("programming" = 4)
build_path = /obj/item/circuitboard/computer/robotics
category = list("Computer Boards")
@@ -144,7 +133,6 @@
name = "Computer Design (Slot Machine)"
desc = "Allows for the construction of circuit boards used to build a new slot machine."
id = "slotmachine"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/computer/slot_machine
category = list("Computer Boards")
@@ -152,7 +140,6 @@
name = "Computer Design (Power Monitor)"
desc = "Allows for the construction of circuit boards used to build a new power monitor."
id = "powermonitor"
req_tech = list("programming" = 2, "powerstorage" = 2)
build_path = /obj/item/circuitboard/computer/powermonitor
category = list("Computer Boards")
@@ -160,7 +147,6 @@
name = "Computer Design (Solar Control)"
desc = "Allows for the construction of circuit boards used to build a solar control console."
id = "solarcontrol"
req_tech = list("programming" = 2, "powerstorage" = 2)
build_path = /obj/item/circuitboard/computer/solar_control
category = list("Computer Boards")
@@ -168,7 +154,6 @@
name = "Computer Design (Prisoner Management Console)"
desc = "Allows for the construction of circuit boards used to build a prisoner management console."
id = "prisonmanage"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/computer/prisoner
category = list("Computer Boards")
@@ -176,31 +161,30 @@
name = "Computer Design (Exosuit Control Console)"
desc = "Allows for the construction of circuit boards used to build an exosuit control console."
id = "mechacontrol"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/computer/mecha_control
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/mechapower
name = "Computer Design (Mech Bay Power Control Console)"
desc = "Allows for the construction of circuit boards used to build a mech bay power control console."
id = "mechapower"
req_tech = list("programming" = 3, "powerstorage" = 3)
build_path = /obj/item/circuitboard/computer/mech_bay_power_console
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/rdconsole
name = "Computer Design (R&D Console)"
desc = "Allows for the construction of circuit boards used to build a new R&D console."
id = "rdconsole"
req_tech = list("programming" = 4)
build_path = /obj/item/circuitboard/computer/rdconsole
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/cargo
name = "Computer Design (Supply Console)"
desc = "Allows for the construction of circuit boards used to build a Supply Console."
id = "cargo"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/computer/cargo
category = list("Computer Boards")
@@ -208,7 +192,6 @@
name = "Computer Design (Supply Request Console)"
desc = "Allows for the construction of circuit boards used to build a Supply Request Console."
id = "cargorequest"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/computer/cargo/request
category = list("Computer Boards")
@@ -216,7 +199,6 @@
name = "Computer Design (Stock Exchange Console)"
desc = "Allows for the construction of circuit boards used to build a Stock Exchange Console."
id = "stockexchange"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/computer/stockexchange
category = list("Computer Boards")
@@ -224,7 +206,6 @@
name = "Computer Design (Outpost Status Display)"
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
id = "mining"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/computer/mining
category = list("Computer Boards")
@@ -232,7 +213,6 @@
name = "Computer Design (Telecommunications Monitoring Console)"
desc = "Allows for the construction of circuit boards used to build a telecommunications monitor."
id = "comm_monitor"
req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2)
build_path = /obj/item/circuitboard/computer/comm_monitor
category = list("Computer Boards")
@@ -240,7 +220,6 @@
name = "Computer Design (Telecommunications Server Monitoring Console)"
desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor."
id = "comm_server"
req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2)
build_path = /obj/item/circuitboard/computer/comm_server
category = list("Computer Boards")
@@ -248,7 +227,6 @@
name = "Computer Design (Messaging Monitor Console)"
desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
id = "message_monitor"
req_tech = list("programming" = 5)
build_path = /obj/item/circuitboard/computer/message_monitor
category = list("Computer Boards")
@@ -256,15 +234,14 @@
name = "Computer Design (AI Integrity Restorer)"
desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
id = "aifixer"
req_tech = list("programming" = 4, "magnets" = 3)
build_path = /obj/item/circuitboard/computer/aifixer
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/libraryconsole
name = "Computer Design (Library Console)"
desc = "Allows for the construction of circuit boards used to build a new library console."
id = "libraryconsole"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/computer/libraryconsole
category = list("Computer Boards")
@@ -272,6 +249,5 @@
name = "Computer Design (APC Control)"
desc = "Allows for the construction of circuit boards used to build a new APC control console."
id = "apc_control"
req_tech = list("programming" = 4, "engineering" = 4, "powerstorage" = 5)
build_path = /obj/item/circuitboard/computer/apc_control
category = list("Computer Boards")
@@ -5,257 +5,251 @@
/datum/design/disk/normal
name = "Hard Disk Drive"
id = "hdd_basic"
req_tech = list("programming" = 1, "engineering" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 400, MAT_GLASS = 100)
build_path = /obj/item/computer_hardware/hard_drive
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/disk/advanced
name = "Advanced Hard Disk Drive"
id = "hdd_advanced"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/computer_hardware/hard_drive/advanced
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/disk/super
name = "Super Hard Disk Drive"
id = "hdd_super"
req_tech = list("programming" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 1600, MAT_GLASS = 400)
build_path = /obj/item/computer_hardware/hard_drive/super
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/disk/cluster
name = "Cluster Hard Disk Drive"
id = "hdd_cluster"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3200, MAT_GLASS = 800)
build_path = /obj/item/computer_hardware/hard_drive/cluster
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/disk/small
name = "Solid State Drive"
id = "ssd_small"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/computer_hardware/hard_drive/small
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/disk/micro
name = "Micro Solid State Drive"
id = "ssd_micro"
req_tech = list("programming" = 1, "engineering" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 400, MAT_GLASS = 100)
build_path = /obj/item/computer_hardware/hard_drive/micro
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Network cards
/datum/design/netcard/basic
name = "Network Card"
id = "netcard_basic"
req_tech = list("programming" = 2, "engineering" = 1)
build_type = IMPRINTER
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")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/netcard/advanced
name = "Advanced Network Card"
id = "netcard_advanced"
req_tech = list("programming" = 4, "engineering" = 2)
build_type = IMPRINTER
materials = list(MAT_METAL = 500, MAT_GLASS = 200)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/network_card/advanced
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/netcard/wired
name = "Wired Network Card"
id = "netcard_wired"
req_tech = list("programming" = 5, "engineering" = 3)
build_type = IMPRINTER
materials = list(MAT_METAL = 2500, MAT_GLASS = 400)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/network_card/wired
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Data disks
/datum/design/portabledrive/basic
name = "Data Disk"
id = "portadrive_basic"
req_tech = list("programming" = 1)
build_type = IMPRINTER
materials = list(MAT_GLASS = 800)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/hard_drive/portable
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/portabledrive/advanced
name = "Advanced Data Disk"
id = "portadrive_advanced"
req_tech = list("programming" = 2)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1600)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/hard_drive/portable/advanced
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/portabledrive/super
name = "Super Data Disk"
id = "portadrive_super"
req_tech = list("programming" = 4)
build_type = IMPRINTER
materials = list(MAT_GLASS = 3200)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/hard_drive/portable/super
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Card slot
/datum/design/cardslot
name = "ID Card Slot"
id = "cardslot"
req_tech = list("programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600)
build_path = /obj/item/computer_hardware/card_slot
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Intellicard slot
/datum/design/aislot
name = "Intellicard Slot"
id = "aislot"
req_tech = list("programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600)
build_path = /obj/item/computer_hardware/ai_slot
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Mini printer
/datum/design/miniprinter
name = "Miniprinter"
id = "miniprinter"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600)
build_path = /obj/item/computer_hardware/printer/mini
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// APC Link
/datum/design/APClink
name = "Area Power Connector"
id = "APClink"
req_tech = list("programming" = 2, "powerstorage" = 3, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000)
build_path = /obj/item/computer_hardware/recharger/APC
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Batteries
/datum/design/battery/controller
name = "Power Cell Controller"
id = "bat_control"
req_tech = list("powerstorage" = 1, "engineering" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 400)
build_path = /obj/item/computer_hardware/battery
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/battery/normal
name = "Battery Module"
id = "bat_normal"
req_tech = list("powerstorage" = 1, "engineering" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 400)
build_path = /obj/item/stock_parts/cell/computer
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/battery/advanced
name = "Advanced Battery Module"
id = "bat_advanced"
req_tech = list("powerstorage" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 800)
build_path = /obj/item/stock_parts/cell/computer/advanced
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/battery/super
name = "Super Battery Module"
id = "bat_super"
req_tech = list("powerstorage" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 1600)
build_path = /obj/item/stock_parts/cell/computer/super
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/battery/nano
name = "Nano Battery Module"
id = "bat_nano"
req_tech = list("powerstorage" = 1, "engineering" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/stock_parts/cell/computer/nano
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/battery/micro
name = "Micro Battery Module"
id = "bat_micro"
req_tech = list("powerstorage" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 400)
build_path = /obj/item/stock_parts/cell/computer/micro
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
// Processor unit
/datum/design/cpu
name = "Processor Board"
id = "cpu_normal"
req_tech = list("programming" = 3, "engineering" = 2)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1600)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/processor_unit
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/cpu/small
name = "Microprocessor"
id = "cpu_small"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
materials = list(MAT_GLASS = 800)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/processor_unit/small
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/cpu/photonic
name = "Photonic Processor Board"
id = "pcpu_normal"
req_tech = list("programming" = 5, "engineering" = 4)
build_type = IMPRINTER
materials = list(MAT_GLASS= 6400, MAT_GOLD = 2000)
reagents_list = list("sacid" = 40)
build_path = /obj/item/computer_hardware/processor_unit/photonic
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/cpu/photonic/small
name = "Photonic Microprocessor"
id = "pcpu_small"
req_tech = list("programming" = 4, "engineering" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 3200, MAT_GOLD = 1000)
reagents_list = list("sacid" = 20)
build_path = /obj/item/computer_hardware/processor_unit/photonic/small
category = list("Computer Parts")
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
@@ -0,0 +1,87 @@
///////////////////////////////////
/////Non-Board Computer Stuff//////
///////////////////////////////////
/datum/design/intellicard
name = "Intellicard AI Transportation System"
desc = "Allows for the construction of an intellicard."
id = "intellicard"
build_type = PROTOLATHE
materials = list(MAT_GLASS = 1000, MAT_GOLD = 200)
build_path = /obj/item/device/aicard
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/paicard
name = "Personal Artificial Intelligence Card"
desc = "Allows for the construction of a pAI Card."
id = "paicard"
build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/device/paicard
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ALL
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
/datum/design/design_disk
name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk"
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/disk/design_disk
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/design_disk_adv
name = "Advanced Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk_adv"
build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
build_path = /obj/item/disk/design_disk/adv
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/tech_disk
name = "Technology Data Storage Disk"
desc = "Produce additional disks for storing technology data."
id = "tech_disk"
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
build_path = /obj/item/disk/tech_disk
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/integrated_printer
name = "Integrated circuits printer"
desc = "This machine provides all neccesary things for circuitry."
id = "icprinter"
build_type = PROTOLATHE
materials = list(MAT_GLASS = 5000, MAT_METAL = 5000)
build_path = /obj/item/device/integrated_circuit_printer
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/IC_printer_upgrade_advanced
name = "Integrated Circuits printer upgrade: Advanced Designs"
desc = "This disk allows for integrated circuit printers to print advanced circuitry designs."
id = "icupgadv"
build_type = PROTOLATHE
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
build_path = /obj/item/disk/integrated_circuit/upgrade/advanced
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/IC_printer_upgrade_clone
name = "Integrated Circuits printer upgrade: Clone Ability"
desc = "This disk allows for integrated circuit printers to clone designs."
id = "icupgclo"
build_type = PROTOLATHE
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
build_path = /obj/item/disk/integrated_circuit/upgrade/clone
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
@@ -0,0 +1,32 @@
/datum/design/flightsuit
name = "Flight Suit"
desc = "A specialized hardsuit that is able to attach a flightpack and accessories.."
id = "flightsuit"
build_type = PROTOLATHE
build_path = /obj/item/clothing/suit/space/hardsuit/flightsuit
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 200, MAT_GOLD = 3000, MAT_SILVER = 3000, MAT_TITANIUM = 16000) //This expensive enough for you?
construction_time = 250
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/flightpack
name = "Flight Pack"
desc = "An advanced back-worn system that has dual ion engines powerful enough to grant a humanoid flight. Contains an internal self-recharging high-current capacitor for short, powerful boosts."
id = "flightpack"
build_type = PROTOLATHE
build_path = /obj/item/device/flightpack
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 4000, MAT_GOLD = 12000, MAT_SILVER = 12000, MAT_URANIUM = 20000, MAT_PLASMA = 16000, MAT_TITANIUM = 16000) //This expensive enough for you?
construction_time = 250
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/flightshoes
name = "Flight Shoes"
desc = "Flight shoes, attachable to a flight suit to provide additional functions."
id = "flightshoes"
build_type = PROTOLATHE
build_path = /obj/item/clothing/shoes/flightshoes
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 1500, MAT_SILVER = 1500, MAT_PLASMA = 2000, MAT_TITANIUM = 2000)
construction_time = 100
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
@@ -6,7 +6,6 @@
name = "Machine Design (SMES Board)"
desc = "The circuit board for a SMES."
id = "smes"
req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4)
build_path = /obj/item/circuitboard/machine/smes
category = list ("Engineering Machinery")
@@ -14,7 +13,6 @@
name = "Machine Design (Automated Announcement System Board)"
desc = "The circuit board for an automated announcement system."
id = "automated_announcement"
req_tech = list("programming" = 3, "bluespace" = 3, "magnets" = 2)
build_path = /obj/item/circuitboard/machine/announcement_system
category = list("Subspace Telecomms")
@@ -22,7 +20,6 @@
name = "Computer Design (Power Turbine Console Board)"
desc = "The circuit board for a power turbine console."
id = "power_turbine_console"
req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4)
build_path = /obj/item/circuitboard/computer/turbine_computer
category = list ("Engineering Machinery")
@@ -30,7 +27,6 @@
name = "Machine Design (Emitter Board)"
desc = "The circuit board for an emitter."
id = "emitter"
req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 4)
build_path = /obj/item/circuitboard/machine/emitter
category = list ("Engineering Machinery")
@@ -38,7 +34,6 @@
name = "Machine Design (Power Compressor Board)"
desc = "The circuit board for a power compressor."
id = "power_compressor"
req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4)
build_path = /obj/item/circuitboard/machine/power_compressor
category = list ("Engineering Machinery")
@@ -46,7 +41,6 @@
name = "Machine Design (Power Turbine Board)"
desc = "The circuit board for a power turbine."
id = "power_turbine"
req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 5)
build_path = /obj/item/circuitboard/machine/power_turbine
category = list ("Engineering Machinery")
@@ -54,7 +48,6 @@
name = "Machine Design (Freezer/Heater Board)"
desc = "The circuit board for a freezer/heater."
id = "thermomachine"
req_tech = list("programming" = 3, "plasmatech" = 3)
build_path = /obj/item/circuitboard/machine/thermomachine
category = list ("Engineering Machinery")
@@ -62,7 +55,6 @@
name = "Machine Design (Space Heater Board)"
desc = "The circuit board for a space heater."
id = "space_heater"
req_tech = list("programming" = 2, "engineering" = 2, "plasmatech" = 2)
build_path = /obj/item/circuitboard/machine/space_heater
category = list ("Engineering Machinery")
@@ -70,55 +62,54 @@
name = "Machine Design (Teleportation Station Board)"
desc = "The circuit board for a teleportation station."
id = "tele_station"
req_tech = list("programming" = 5, "bluespace" = 4, "engineering" = 4, "plasmatech" = 4)
build_path = /obj/item/circuitboard/machine/teleporter_station
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/teleport_hub
name = "Machine Design (Teleportation Hub Board)"
desc = "The circuit board for a teleportation hub."
id = "tele_hub"
req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5)
build_path = /obj/item/circuitboard/machine/teleporter_hub
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/quantumpad
name = "Machine Design (Quantum Pad Board)"
desc = "The circuit board for a quantum telepad."
id = "quantumpad"
req_tech = list("programming" = 4, "bluespace" = 4, "plasmatech" = 3, "engineering" = 4)
build_path = /obj/item/circuitboard/machine/quantumpad
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/launchpad
name = "Machine Design (Bluespace Launchpad Board)"
desc = "The circuit board for a bluespace Launchpad."
id = "launchpad"
req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 2, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/launchpad
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/launchpad_console
name = "Machine Design (Bluespace Launchpad Console Board)"
desc = "The circuit board for a bluespace launchpad Console."
id = "launchpad_console"
req_tech = list("programming" = 4, "bluespace" = 3, "plasmatech" = 3)
build_path = /obj/item/circuitboard/computer/launchpad_console
category = list ("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/teleconsole
name = "Computer Design (Teleporter Console)"
desc = "Allows for the construction of circuit boards used to build a teleporter control console."
id = "teleconsole"
req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 4)
build_path = /obj/item/circuitboard/computer/teleporter
category = list("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/sleeper
name = "Machine Design (Sleeper Board)"
desc = "The circuit board for a sleeper."
id = "sleeper"
req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/sleeper
category = list ("Medical Machinery")
@@ -126,7 +117,6 @@
name = "Machine Design (Cryotube Board)"
desc = "The circuit board for a cryotube."
id = "cryotube"
req_tech = list("programming" = 5, "biotech" = 3, "engineering" = 4, "plasmatech" = 3)
build_path = /obj/item/circuitboard/machine/cryo_tube
category = list ("Medical Machinery")
@@ -134,7 +124,6 @@
name = "Machine Design (Portable Chem Dispenser Board)"
desc = "The circuit board for a portable chem dispenser."
id = "chem_dispenser"
req_tech = list("programming" = 5, "biotech" = 3, "materials" = 4, "plasmatech" = 4)
build_path = /obj/item/circuitboard/machine/chem_dispenser
category = list ("Medical Machinery")
@@ -142,7 +131,6 @@
name = "Machine Design (Chem Master Board)"
desc = "The circuit board for a Chem Master 3000."
id = "chem_master"
req_tech = list("biotech" = 3, "materials" = 3, "programming" = 2)
build_path = /obj/item/circuitboard/machine/chem_master
category = list ("Medical Machinery")
@@ -150,7 +138,6 @@
name = "Machine Design (Chemical Heater Board)"
desc = "The circuit board for a chemical heater."
id = "chem_heater"
req_tech = list("engineering" = 2, "biotech" = 2, "programming" = 2)
build_path = /obj/item/circuitboard/machine/chem_heater
category = list ("Medical Machinery")
@@ -158,7 +145,6 @@
name = "Machine Design (Smoke Machine)"
desc = "The circuit board for a smoke machine."
id = "smoke_machine"
req_tech = list("materials" = 4, "biotech" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/smoke_machine
category = list ("Medical Machinery")
@@ -166,7 +152,6 @@
name = "Computer Design (Cloning Machine Console)"
desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console."
id = "clonecontrol"
req_tech = list("programming" = 4, "biotech" = 3)
build_path = /obj/item/circuitboard/computer/cloning
category = list("Medical Machinery")
@@ -174,7 +159,6 @@
name = "Machine Design (Clone Pod)"
desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
id = "clonepod"
req_tech = list("programming" = 4, "biotech" = 3)
build_path = /obj/item/circuitboard/machine/clonepod
category = list("Medical Machinery")
@@ -182,7 +166,6 @@
name = "Machine Design (Cloning Scanner)"
desc = "Allows for the construction of circuit boards used to build a Cloning Scanner."
id = "clonescanner"
req_tech = list("programming" = 4, "biotech" = 3)
build_path = /obj/item/circuitboard/machine/clonescanner
category = list("Medical Machinery")
@@ -190,7 +173,6 @@
name = "Machine Design (Biogenerator Board)"
desc = "The circuit board for a biogenerator."
id = "biogenerator"
req_tech = list("programming" = 2, "biotech" = 3, "materials" = 3)
build_path = /obj/item/circuitboard/machine/biogenerator
category = list ("Hydroponics Machinery")
@@ -198,7 +180,6 @@
name = "Machine Design (Hydroponics Tray Board)"
desc = "The circuit board for a hydroponics tray."
id = "hydro_tray"
req_tech = list("biotech" = 2)
build_path = /obj/item/circuitboard/machine/hydroponics
category = list ("Hydroponics Machinery")
@@ -206,23 +187,22 @@
name = "Machine Design (Destructive Analyzer Board)"
desc = "The circuit board for a destructive analyzer."
id = "destructive_analyzer"
req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/destructive_analyzer
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/experimentor
name = "Machine Design (E.X.P.E.R.I-MENTOR Board)"
desc = "The circuit board for an E.X.P.E.R.I-MENTOR."
id = "experimentor"
req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2, "bluespace" = 2)
build_path = /obj/item/circuitboard/machine/experimentor
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/protolathe
name = "Machine Design (Protolathe Board)"
desc = "The circuit board for a protolathe."
id = "protolathe"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/protolathe
category = list("Research Machinery")
@@ -230,7 +210,6 @@
name = "Machine Design (Circuit Imprinter Board)"
desc = "The circuit board for a circuit imprinter."
id = "circuit_imprinter"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/circuit_imprinter
category = list("Research Machinery")
@@ -238,47 +217,46 @@
name = "Computer Design (R&D Server Control Console Board)"
desc = "The circuit board for an R&D Server Control Console."
id = "rdservercontrol"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/computer/rdservercontrol
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/rdserver
name = "Machine Design (R&D Server Board)"
desc = "The circuit board for an R&D Server."
id = "rdserver"
req_tech = list("programming" = 3)
build_path = /obj/item/circuitboard/machine/rdserver
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/mechfab
name = "Machine Design (Exosuit Fabricator Board)"
desc = "The circuit board for an Exosuit Fabricator."
id = "mechfab"
req_tech = list("programming" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/mechfab
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/cyborgrecharger
name = "Machine Design (Cyborg Recharger Board)"
desc = "The circuit board for a Cyborg Recharger."
id = "cyborgrecharger"
req_tech = list("powerstorage" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/cyborgrecharger
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/mech_recharger
name = "Machine Design (Mechbay Recharger Board)"
desc = "The circuit board for a Mechbay Recharger."
id = "mech_recharger"
req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/mech_recharger
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/microwave
name = "Machine Design (Microwave Board)"
desc = "The circuit board for a microwave."
id = "microwave"
req_tech = list("programming" = 2, "magnets" = 2)
build_path = /obj/item/circuitboard/machine/microwave
category = list ("Misc. Machinery")
@@ -286,7 +264,6 @@
name = "Machine Design (Gibber Board)"
desc = "The circuit board for a gibber."
id = "gibber"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/gibber
category = list ("Misc. Machinery")
@@ -294,7 +271,6 @@
name = "Machine Design (Smartfridge Board)"
desc = "The circuit board for a smartfridge."
id = "smartfridge"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/smartfridge
category = list ("Misc. Machinery")
@@ -302,7 +278,6 @@
name = "Machine Design (Monkey Recycler Board)"
desc = "The circuit board for a monkey recycler."
id = "monkey_recycler"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/monkey_recycler
category = list ("Misc. Machinery")
@@ -310,7 +285,6 @@
name = "Machine Design (Seed Extractor Board)"
desc = "The circuit board for a seed extractor."
id = "seed_extractor"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/seed_extractor
category = list ("Misc. Machinery")
@@ -318,7 +292,6 @@
name = "Machine Design (Food Processor Board)"
desc = "The circuit board for a food processor."
id = "processor"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/processor
category = list ("Misc. Machinery")
@@ -326,7 +299,6 @@
name = "Machine Design (Slime Processor Board)"
desc = "The circuit board for a slime processor."
id = "slimeprocessor"
req_tech = list("programming" = 1, "plasmatech" = 1)
build_path = /obj/item/circuitboard/machine/processor/slime
category = list ("Misc. Machinery")
@@ -334,7 +306,6 @@
name = "Machine Design (Recycler Board)"
desc = "The circuit board for a recycler."
id = "recycler"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/recycler
category = list ("Misc. Machinery")
@@ -342,15 +313,14 @@
name = "Machine Design (AI Holopad Board)"
desc = "The circuit board for a holopad."
id = "holopad"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/holopad
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/board/autolathe
name = "Machine Design (Autolathe Board)"
desc = "The circuit board for an autolathe."
id = "autolathe"
req_tech = list("programming" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/autolathe
category = list ("Misc. Machinery")
@@ -358,7 +328,6 @@
name = "Machine Design (Weapon Recharger Board)"
desc = "The circuit board for a Weapon Recharger."
id = "recharger"
req_tech = list("powerstorage" = 4, "engineering" = 3, "materials" = 4)
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
build_path = /obj/item/circuitboard/machine/recharger
category = list("Misc. Machinery")
@@ -367,7 +336,6 @@
name = "Machine Design (Vendor Board)"
desc = "The circuit board for a Vendor."
id = "vendor"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/vendor
category = list ("Misc. Machinery")
@@ -375,23 +343,22 @@
name = "Machine Design (Ore Redemption Board)"
desc = "The circuit board for an Ore Redemption machine."
id = "ore_redemption"
req_tech = list("programming" = 2, "engineering" = 2, "plasmatech" = 3)
build_path = /obj/item/circuitboard/machine/ore_redemption
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/mining_equipment_vendor
name = "Machine Design (Mining Rewards Vender Board)"
desc = "The circuit board for a Mining Rewards Vender."
id = "mining_equipment_vendor"
req_tech = list("engineering" = 3)
build_path = /obj/item/circuitboard/machine/mining_equipment_vendor
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/tesla_coil
name = "Machine Design (Tesla Coil Board)"
desc = "The circuit board for a tesla coil."
id = "tesla_coil"
req_tech = list("programming" = 3, "powerstorage" = 3, "magnets" = 3)
build_path = /obj/item/circuitboard/machine/tesla_coil
category = list ("Misc. Machinery")
@@ -399,7 +366,6 @@
name = "Machine Design (Grounding Rod Board)"
desc = "The circuit board for a grounding rod."
id = "grounding_rod"
req_tech = list("programming" = 3, "powerstorage" = 3, "magnets" = 3, "plasmatech" = 2)
build_path = /obj/item/circuitboard/machine/grounding_rod
category = list ("Misc. Machinery")
@@ -407,7 +373,6 @@
name = "Machine Design (Plant DNA Manipulator Board)"
desc = "The circuit board for a plant DNA manipulator."
id = "plantgenes"
req_tech = list("programming" = 4, "biotech" = 3)
build_path = /obj/item/circuitboard/machine/plantgenes
category = list ("Misc. Machinery")
@@ -415,15 +380,14 @@
name = "Machine Design (NTNet Relay Board)"
desc = "The circuit board for a wireless network relay."
id = "ntnet_relay"
req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2)
build_path = /obj/item/circuitboard/machine/ntnet_relay
category = list("Subspace Telecomms")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/limbgrower
name = "Machine Design (Limb Grower Board)"
desc = "The circuit board for a limb grower."
id = "limbgrower"
req_tech = list("programming" = 3, "biotech" = 2)
build_path = /obj/item/circuitboard/machine/limbgrower
category = list("Medical Machinery")
@@ -431,7 +395,6 @@
name = "Machine Design (Deep Fryer)"
desc = "The circuit board for a Deep Fryer."
id = "deepfryer"
req_tech = list("programming" = 1)
build_path = /obj/item/circuitboard/machine/deep_fryer
category = list ("Misc. Machinery")
@@ -439,6 +402,5 @@
name = "Machine Design (Donksoft Toy Vendor Board)"
desc = "The circuit board for a Donksoft Toy Vendor."
id = "donksofttoyvendor"
req_tech = list("programming" = 1, "syndicate" = 2)
build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor
category = list ("Misc. Machinery")
+16 -46
View File
@@ -6,137 +6,132 @@
name = "APLU \"Ripley\" Central Control module"
desc = "Allows for the construction of a \"Ripley\" Central Control module."
id = "ripley_main"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/mecha/ripley/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/ripley_peri
name = "APLU \"Ripley\" Peripherals Control module"
desc = "Allows for the construction of a \"Ripley\" Peripheral Control module."
id = "ripley_peri"
req_tech = list("programming" = 2)
build_path = /obj/item/circuitboard/mecha/ripley/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/odysseus_main
name = "\"Odysseus\" Central Control module"
desc = "Allows for the construction of a \"Odysseus\" Central Control module."
id = "odysseus_main"
req_tech = list("programming" = 3,"biotech" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/mecha/odysseus/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/odysseus_peri
name = "\"Odysseus\" Peripherals Control module"
desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module."
id = "odysseus_peri"
req_tech = list("programming" = 3,"biotech" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/mecha/odysseus/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/gygax_main
name = "\"Gygax\" Central Control module"
desc = "Allows for the construction of a \"Gygax\" Central Control module."
id = "gygax_main"
req_tech = list("programming" = 4, "combat" = 3, "engineering" = 4)
build_path = /obj/item/circuitboard/mecha/gygax/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/gygax_peri
name = "\"Gygax\" Peripherals Control module"
desc = "Allows for the construction of a \"Gygax\" Peripheral Control module."
id = "gygax_peri"
req_tech = list("programming" = 4, "combat" = 3, "engineering" = 4)
build_path = /obj/item/circuitboard/mecha/gygax/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/gygax_targ
name = "\"Gygax\" Weapons & Targeting Control module"
desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module."
id = "gygax_targ"
req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4)
build_path = /obj/item/circuitboard/mecha/gygax/targeting
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/durand_main
name = "\"Durand\" Central Control module"
desc = "Allows for the construction of a \"Durand\" Central Control module."
id = "durand_main"
req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4)
build_path = /obj/item/circuitboard/mecha/durand/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/durand_peri
name = "\"Durand\" Peripherals Control module"
desc = "Allows for the construction of a \"Durand\" Peripheral Control module."
id = "durand_peri"
req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4)
build_path = /obj/item/circuitboard/mecha/durand/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/durand_targ
name = "\"Durand\" Weapons & Targeting Control module"
desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module."
id = "durand_targ"
req_tech = list("programming" = 5, "combat" = 4, "engineering" = 4)
build_path = /obj/item/circuitboard/mecha/durand/targeting
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/honker_main
name = "\"H.O.N.K\" Central Control module"
desc = "Allows for the construction of a \"H.O.N.K\" Central Control module."
id = "honker_main"
req_tech = list("programming" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/mecha/honker/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/honker_peri
name = "\"H.O.N.K\" Peripherals Control module"
desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module."
id = "honker_peri"
req_tech = list("programming" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/mecha/honker/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/honker_targ
name = "\"H.O.N.K\" Weapons & Targeting Control module"
desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module."
id = "honker_targ"
req_tech = list("programming" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/mecha/honker/targeting
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/phazon_main
name = "\"Phazon\" Central Control module"
desc = "Allows for the construction of a \"Phazon\" Central Control module."
id = "phazon_main"
materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100)
req_tech = list("programming" = 6, "materials" = 6, "plasmatech" = 5)
build_path = /obj/item/circuitboard/mecha/phazon/main
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/phazon_peri
name = "\"Phazon\" Peripherals Control module"
desc = "Allows for the construction of a \"Phazon\" Peripheral Control module."
id = "phazon_peri"
materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100)
req_tech = list("programming" = 6, "bluespace" = 5, "plasmatech" = 5)
build_path = /obj/item/circuitboard/mecha/phazon/peripherals
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/phazon_targ
name = "\"Phazon\" Weapons & Targeting Control module"
desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module."
id = "phazon_targ"
materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100)
req_tech = list("programming" = 6, "magnets" = 5, "plasmatech" = 5)
build_path = /obj/item/circuitboard/mecha/phazon/targeting
category = list("Exosuit Modules")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
////////////////////////////////////////
/////////// Mecha Equpment /////////////
@@ -147,7 +142,6 @@
desc = "Allows for the construction of LBX AC 10."
id = "mech_scattershot"
build_type = MECHFAB
req_tech = list("combat" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -158,7 +152,6 @@
desc = "Allows for the construction of FNX-99 \"Hades\" Carbine."
id = "mech_carbine"
build_type = MECHFAB
req_tech = list("combat" = 5, "materials" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -169,7 +162,6 @@
desc = "Allows for the construction of MKIV Ion Heavy Cannon."
id = "mech_ion"
build_type = MECHFAB
req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
materials = list(MAT_METAL=20000,MAT_SILVER=6000,MAT_URANIUM=2000)
construction_time = 100
@@ -180,7 +172,6 @@
desc = "Allows for the construction of MKI Tesla Cannon."
id = "mech_tesla"
build_type = MECHFAB
req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla
materials = list(MAT_METAL=20000,MAT_SILVER=8000)
construction_time = 100
@@ -191,7 +182,6 @@
desc = "Allows for the construction of CH-PS Laser."
id = "mech_laser"
build_type = MECHFAB
req_tech = list("combat" = 3, "magnets" = 3, "engineering" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -202,7 +192,6 @@
desc = "Allows for the construction of CH-LC Laser Cannon."
id = "mech_laser_heavy"
build_type = MECHFAB
req_tech = list("combat" = 4, "magnets" = 4, "engineering" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -213,7 +202,6 @@
desc = "Allows for the construction of SGL-6 Grenade Launcher."
id = "mech_grenade_launcher"
build_type = MECHFAB
req_tech = list("combat" = 4, "engineering" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang
materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000)
construction_time = 100
@@ -224,7 +212,6 @@
desc = "Allows for the construction of SRM-8 Missile Rack."
id = "mech_missile_rack"
build_type = MECHFAB
req_tech = list("combat" = 6, "materials" = 5, "engineering" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000)
construction_time = 100
@@ -235,7 +222,6 @@
desc = "A weapon that violates the Geneva Convention at 3 rounds per minute"
id = "clusterbang_launcher"
build_type = MECHFAB
req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang
materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000)
construction_time = 100
@@ -246,7 +232,6 @@
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
id = "mech_wormhole_gen"
build_type = MECHFAB
req_tech = list("bluespace" = 4, "magnets" = 4, "plasmatech" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -257,7 +242,6 @@
desc = "An exosuit module that allows exosuits to teleport to any position in view."
id = "mech_teleporter"
build_type = MECHFAB
req_tech = list("bluespace" = 8, "magnets" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
materials = list(MAT_METAL=10000,MAT_DIAMOND=10000)
construction_time = 100
@@ -268,7 +252,6 @@
desc = "An exosuit-mounted Rapid Construction Device."
id = "mech_rcd"
build_type = MECHFAB
req_tech = list("materials" = 5, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/rcd
materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000)
construction_time = 1200
@@ -279,7 +262,6 @@
desc = "An exosuit mounted Gravitational Catapult."
id = "mech_gravcatapult"
build_type = MECHFAB
req_tech = list("bluespace" = 4, "magnets" = 3, "engineering" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -290,7 +272,6 @@
desc = "Automated Repair Droid. BEEP BOOP"
id = "mech_repair_droid"
build_type = MECHFAB
req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000)
construction_time = 100
@@ -301,7 +282,6 @@
desc = "Tesla Energy Relay"
id = "mech_energy_relay"
build_type = MECHFAB
req_tech = list("magnets" = 4, "powerstorage" = 5, "engineering" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
materials = list(MAT_METAL=10000,MAT_GLASS=2000,MAT_GOLD=2000,MAT_SILVER=3000)
construction_time = 100
@@ -312,7 +292,6 @@
desc = "Exosuit-mounted armor booster."
id = "mech_ccw_armor"
build_type = MECHFAB
req_tech = list("materials" = 5, "combat" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
materials = list(MAT_METAL=20000,MAT_SILVER=5000)
construction_time = 100
@@ -323,7 +302,6 @@
desc = "Exosuit-mounted armor booster."
id = "mech_proj_armor"
build_type = MECHFAB
req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
materials = list(MAT_METAL=20000,MAT_GOLD=5000)
construction_time = 100
@@ -334,7 +312,6 @@
desc = "An upgraded version of the standard drill."
id = "mech_diamond_drill"
build_type = MECHFAB
req_tech = list("materials" = 5, "engineering" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill
materials = list(MAT_METAL=10000,MAT_DIAMOND=6500)
construction_time = 100
@@ -345,7 +322,6 @@
desc = "Compact nuclear reactor module."
id = "mech_generator_nuclear"
build_type = MECHFAB
req_tech = list("powerstorage"= 5, "engineering" = 4, "materials" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500)
construction_time = 100
@@ -356,7 +332,6 @@
desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles."
id = "mech_plasma_cutter"
build_type = MECHFAB
req_tech = list("engineering" = 3, "materials" = 3, "plasmatech" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
materials = list(MAT_METAL = 8000, MAT_GLASS = 1000, MAT_PLASMA = 2000)
construction_time = 100
@@ -367,7 +342,6 @@
desc = "A weapon for combat exosuits. Shoots non-lethal stunning electrodes."
id = "mech_taser"
build_type = MECHFAB
req_tech = list("combat" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -378,7 +352,6 @@
desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst."
id = "mech_lmg"
build_type = MECHFAB
req_tech = list("combat" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
materials = list(MAT_METAL=10000)
construction_time = 100
@@ -389,7 +362,6 @@
desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves."
id = "mech_sleeper"
build_type = MECHFAB
req_tech = list("biotech" = 3, "engineering" = 3, "plasmatech" = 2)
build_path = /obj/item/mecha_parts/mecha_equipment/medical/sleeper
materials = list(MAT_METAL=5000,MAT_GLASS=10000)
construction_time = 100
@@ -400,7 +372,6 @@
desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur."
id = "mech_syringe_gun"
build_type = MECHFAB
req_tech = list("magnets" = 4,"biotech" = 4, "combat" = 3, "materials" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun
materials = list(MAT_METAL=3000,MAT_GLASS=2000)
construction_time = 200
@@ -410,7 +381,6 @@
name = "Exosuit Medical Equipment (Medical Beamgun)"
desc = "Equipment for medical exosuits. A mounted medical nanite projector which will treat patients with a focused beam."
id = "mech_medi_beam"
req_tech = list("engineering" = 6, "materials" = 7, "powerstorage" = 5, "biotech" = 6)
build_type = MECHFAB
materials = list(MAT_METAL = 15000, MAT_GLASS = 8000, MAT_PLASMA = 3000, MAT_GOLD = 8000, MAT_DIAMOND = 2000)
construction_time = 250
@@ -593,7 +593,6 @@
id = "borg_upgrade_vtec"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/vtec
req_tech = list("engineering" = 4, "materials" = 5, "programming" = 4)
materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_URANIUM= 5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -603,7 +602,6 @@
id = "borg_upgrade_thrusters"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/thrusters
req_tech = list("engineering" = 4, "powerstorage" = 4)
materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -613,7 +611,6 @@
id = "borg_upgrade_disablercooler"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/disablercooler
req_tech = list("combat" = 5, "powerstorage" = 4, "engineering" = 4)
materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_GOLD= 2000, MAT_DIAMOND = 500)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -623,7 +620,6 @@
id = "borg_upgrade_diamonddrill"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/ddrill
req_tech = list("engineering" = 5, "materials" = 6)
materials = list(MAT_METAL=10000, MAT_DIAMOND=2000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -633,7 +629,6 @@
id = "borg_upgrade_holding"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/soh
req_tech = list("engineering" = 4, "materials" = 4, "bluespace" = 4)
materials = list(MAT_METAL = 10000, MAT_GOLD = 250, MAT_URANIUM = 500)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -643,7 +638,6 @@
id = "borg_upgrade_lavaproof"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/lavaproof
req_tech = list("plasmatech" = 4, "materials" = 4, "engineering" = 4)
materials = list(MAT_METAL = 10000, MAT_PLASMA = 4000, MAT_TITANIUM = 5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -652,7 +646,6 @@
name = "Cyborg Upgrade (Illegal Modules)"
id = "borg_syndicate_module"
build_type = MECHFAB
req_tech = list("combat" = 4, "syndicate" = 2)
build_path = /obj/item/borg/upgrade/syndicate
materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000)
construction_time = 120
@@ -663,7 +656,6 @@
id = "borg_upgrade_selfrepair"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/selfrepair
req_tech = list("materials" = 4, "engineering" = 4)
materials = list(MAT_METAL=15000, MAT_GLASS=15000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -673,7 +665,6 @@
id = "borg_upgrade_expandedsynthesiser"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/hypospray/expanded
req_tech = list("programming" = 5, "engineering" = 4, "biotech" = 5)
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_PLASMA=5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -683,7 +674,6 @@
id = "borg_upgrade_highstrengthsynthesiser"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/hypospray/high_strength
req_tech = list("programming" = 5, "engineering" = 5, "biotech" = 6)
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_PLASMA=10000, MAT_URANIUM=5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -693,7 +683,6 @@
id = "borg_upgrade_piercinghypospray"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/piercing_hypospray
req_tech = list("materials" = 5, "engineering" = 7, "combat" = 3)
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_TITANIUM=10000, MAT_DIAMOND=5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -703,7 +692,6 @@
id = "borg_upgrade_defibrillator"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/defib
req_tech = list("programming" = 4, "engineering" = 5, "materials" = 5, "powerstorage" = 5, "biotech" = 5)
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_SILVER=10000, MAT_GOLD=10000, MAT_TITANIUM=5000, MAT_DIAMOND=5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -714,7 +702,6 @@
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/ai
materials = list(MAT_METAL = 1200, MAT_GLASS = 1500, MAT_GOLD = 200)
req_tech = list("programming" = 4, "magnets" = 4, "engineering" = 4)
construction_time = 50
category = list("Misc")
@@ -734,7 +721,6 @@
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_tracking/ai_control
materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_SILVER = 200)
req_tech = list("programming" = 3, "magnets" = 2, "engineering" = 2)
construction_time = 50
category = list("Misc")
@@ -742,12 +728,12 @@
name = "Drone Shell"
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
id = "drone_shell"
req_tech = list("programming" = 2, "biotech" = 4)
build_type = MECHFAB | PROTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 350)
construction_time=150
build_path = /obj/item/drone_shell
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/synthetic_flash
name = "Flash"
@@ -758,36 +744,3 @@
construction_time = 100
build_path = /obj/item/device/assembly/flash/handheld
category = list("Misc")
/datum/design/flightsuit //Multi step build process/redo WIP
name = "Flight Suit"
desc = "A specialized hardsuit that is able to attach a flightpack and accessories.."
id = "flightsuit"
build_type = MECHFAB
build_path = /obj/item/clothing/suit/space/hardsuit/flightsuit
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 200, MAT_GOLD = 3000, MAT_SILVER = 3000, MAT_TITANIUM = 16000) //This expensive enough for you?
construction_time = 250
category = list("Misc")
req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 2, "materials" = 4, "engineering" = 3, "powerstorage" = 2)
/datum/design/flightpack
name = "Flight Pack"
desc = "An advanced back-worn system that has dual ion engines powerful enough to grant a humanoid flight. Contains an internal self-recharging high-current capacitor for short, powerful boosts."
id = "flightpack"
build_type = MECHFAB
build_path = /obj/item/device/flightpack
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 4000, MAT_GOLD = 12000, MAT_SILVER = 12000, MAT_URANIUM = 20000, MAT_PLASMA = 16000, MAT_TITANIUM = 16000) //This expensive enough for you?
construction_time = 250
category = list("Misc")
req_tech = list("magnets" = 4, "combat" = 3, "plasmatech" = 4, "materials" = 5, "engineering" = 4, "powerstorage" = 4)
/datum/design/flightshoes
name = "Flight Shoes"
desc = "Flight shoes, attachable to a flight suit to provide additional functions."
id = "flightshoes"
build_type = MECHFAB
build_path = /obj/item/clothing/shoes/flightshoes
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 1500, MAT_SILVER = 1500, MAT_PLASMA = 2000, MAT_TITANIUM = 2000)
construction_time = 100
category = list("Misc")
req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 3, "materials" = 3, "engineering" = 2, "powerstorage" = 2)
@@ -6,153 +6,153 @@
name = "Man-Machine Interface"
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity."
id = "mmi"
req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 2)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
construction_time = 75
build_path = /obj/item/device/mmi
category = list("Misc","Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/posibrain
name = "Positronic Brain"
desc = "The latest in Artificial Intelligences."
id = "mmi_posi"
req_tech = list("programming" = 5, "biotech" = 4, "plasmatech" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 1700, MAT_GLASS = 1350, MAT_GOLD = 500) //Gold, because SWAG.
construction_time = 75
build_path = /obj/item/device/mmi/posibrain
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/bluespacebeaker
name = "Bluespace Beaker"
desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
id = "bluespacebeaker"
req_tech = list("bluespace" = 6, "materials" = 5, "plasmatech" = 4)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 250, MAT_BLUESPACE = 250)
build_path = /obj/item/reagent_containers/glass/beaker/bluespace
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/noreactbeaker
name = "Cryostasis Beaker"
desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
id = "splitbeaker"
req_tech = list("materials" = 3, "engineering" = 3, "plasmatech" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000)
build_path = /obj/item/reagent_containers/glass/beaker/noreact
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/bluespacesyringe
name = "Bluespace Syringe"
desc = "An advanced syringe that can hold 60 units of chemicals"
id = "bluespacesyringe"
req_tech = list("bluespace" = 5, "materials" = 4, "biotech" = 4)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 2000, MAT_PLASMA = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 500)
build_path = /obj/item/reagent_containers/syringe/bluespace
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/noreactsyringe
name = "Cryo Syringe"
desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units."
id = "noreactsyringe"
req_tech = list("materials" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 2000, MAT_GOLD = 1000)
build_path = /obj/item/reagent_containers/syringe/noreact
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/piercesyringe
name = "Piercing Syringe"
desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units."
id = "piercesyringe"
req_tech = list("materials" = 7, "combat" = 3, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 2000, MAT_DIAMOND = 1000)
build_path = /obj/item/reagent_containers/syringe/piercing
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/bluespacebodybag
name = "Bluespace Body Bag"
desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures."
id = "bluespacebodybag"
req_tech = list("bluespace" = 5, "materials" = 4, "plasmatech" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_PLASMA = 2000, MAT_DIAMOND = 500, MAT_BLUESPACE = 500)
build_path = /obj/item/bodybag/bluespace
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/plasmarefiller
name = "Plasma-Man Jumpsuit Refill"
desc = "A refill pack for the auto-extinguisher on Plasma-man suits."
id = "plasmarefiller"
req_tech = list("materials" = 2, "plasmatech" = 3) //Why did this have no plasmatech
id = "plasmarefiller" //Why did this have no plasmatech
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_PLASMA = 1000)
build_path = /obj/item/device/extinguisher_refill
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/alienscalpel
name = "Alien Scalpel"
desc = "An advanced scalpel obtained through Abductor technology."
id = "alien_scalpel"
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/scalpel/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/alienhemostat
name = "Alien Hemostat"
desc = "An advanced hemostat obtained through Abductor technology."
id = "alien_hemostat"
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/hemostat/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/alienretractor
name = "Alien Retractor"
desc = "An advanced retractor obtained through Abductor technology."
id = "alien_retractor"
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/retractor/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/aliensaw
name = "Alien Circular Saw"
desc = "An advanced surgical saw obtained through Abductor technology."
id = "alien_saw"
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/circular_saw/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/aliendrill
name = "Alien Drill"
desc = "An advanced drill obtained through Abductor technology."
id = "alien_drill"
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/surgicaldrill/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/aliencautery
name = "Alien Cautery"
desc = "An advanced cautery obtained through Abductor technology."
id = "alien_cautery"
req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3)
build_path = /obj/item/cautery/alien
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////////////////////////
//////////Cybernetic Implants////////////
@@ -162,167 +162,166 @@
name = "Welding Shield Eyes"
desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision."
id = "ci-welding"
req_tech = list("materials" = 4, "biotech" = 4, "engineering" = 5, "plasmatech" = 4)
build_type = PROTOLATHE | MECHFAB
construction_time = 40
materials = list(MAT_METAL = 600, MAT_GLASS = 400)
build_path = /obj/item/organ/eyes/robotic/shield
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_gloweyes
name = "Luminescent Eyes"
desc = "A pair of cybernetic eyes that can emit multicolored light"
id = "ci-gloweyes"
req_tech = list("materials" = 3, "biotech" = 3, "engineering" = 4)
build_type = PROTOLATHE | MECHFAB
construction_time = 40
materials = list(MAT_METAL = 600, MAT_GLASS = 1000)
build_path = /obj/item/organ/eyes/robotic/glow
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_breather
name = "Breathing Tube Implant"
desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked."
id = "ci-breather"
req_tech = list("materials" = 2, "biotech" = 3)
build_type = PROTOLATHE | MECHFAB
construction_time = 35
materials = list(MAT_METAL = 600, MAT_GLASS = 250)
build_path = /obj/item/organ/cyberimp/mouth/breathing_tube
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_surgical
name = "Surgical Arm Implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
id = "ci-surgery"
req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500)
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/surgery
category = list("Misc", "Medical Designs")
name = "Surgical Arm Implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
id = "ci-surgery"
build_type = PROTOLATHE | MECHFAB
materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500)
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/surgery
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_toolset
name = "Toolset Arm Implant"
desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm."
id = "ci-toolset"
req_tech = list("materials" = 3, "engineering" = 4, "biotech" = 4, "powerstorage" = 4)
build_type = PROTOLATHE | MECHFAB
materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500)
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/toolset
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_medical_hud
name = "Medical HUD Implant"
desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control."
id = "ci-medhud"
req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4)
build_type = PROTOLATHE | MECHFAB
construction_time = 50
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500)
build_path = /obj/item/organ/cyberimp/eyes/hud/medical
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_security_hud
name = "Security HUD Implant"
desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control."
id = "ci-sechud"
req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4, "combat" = 3)
build_type = PROTOLATHE | MECHFAB
construction_time = 50
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 750, MAT_GOLD = 750)
build_path = /obj/item/organ/cyberimp/eyes/hud/security
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_xray
name = "X-Ray Eyes"
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
id = "ci-xray"
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5,"plasmatech" = 6)
build_type = PROTOLATHE | MECHFAB
construction_time = 60
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 1000)
build_path = /obj/item/organ/eyes/robotic/xray
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_thermals
name = "Thermal Eyes"
desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included."
id = "ci-thermals"
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "magnets" = 5,"plasmatech" = 4)
build_type = PROTOLATHE | MECHFAB
construction_time = 60
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000)
build_path = /obj/item/organ/eyes/robotic/thermals
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_antidrop
name = "Anti-Drop Implant"
desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle."
id = "ci-antidrop"
req_tech = list("materials" = 5, "programming" = 6, "biotech" = 5)
build_type = PROTOLATHE | MECHFAB
construction_time = 60
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 400, MAT_GOLD = 400)
build_path = /obj/item/organ/cyberimp/brain/anti_drop
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_antistun
name = "CNS Rebooter Implant"
desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned."
id = "ci-antistun"
req_tech = list("materials" = 6, "programming" = 5, "biotech" = 6)
build_type = PROTOLATHE | MECHFAB
construction_time = 60
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 1000)
build_path = /obj/item/organ/cyberimp/brain/anti_stun
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_nutriment
name = "Nutriment Pump Implant"
desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
id = "ci-nutriment"
req_tech = list("materials" = 3, "powerstorage" = 4, "biotech" = 3)
build_type = PROTOLATHE | MECHFAB
construction_time = 40
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500)
build_path = /obj/item/organ/cyberimp/chest/nutriment
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_nutriment_plus
name = "Nutriment Pump Implant PLUS"
desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
id = "ci-nutrimentplus"
req_tech = list("materials" = 5, "powerstorage" = 4, "biotech" = 4)
build_type = PROTOLATHE | MECHFAB
construction_time = 50
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_GOLD = 500, MAT_URANIUM = 750)
build_path = /obj/item/organ/cyberimp/chest/nutriment/plus
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_reviver
name = "Reviver Implant"
desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!"
id = "ci-reviver"
req_tech = list("materials" = 5, "programming" = 4, "biotech" = 5)
build_type = PROTOLATHE | MECHFAB
construction_time = 60
materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 300, MAT_URANIUM = 500)
build_path = /obj/item/organ/cyberimp/chest/reviver
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cyberimp_thrusters
name = "Thrusters Set Implant"
desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas."
id = "ci-thrusters"
req_tech = list("materials" = 5, "biotech" = 5, "magnets" = 4, "engineering" = 7)
build_type = PROTOLATHE | MECHFAB
construction_time = 80
materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_SILVER = 1000, MAT_DIAMOND = 1000)
build_path = /obj/item/organ/cyberimp/chest/thrusters
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////////////////////////
////////////Regular Implants/////////////
@@ -332,51 +331,51 @@
name = "Implanter"
desc = "A sterile automatic implant injector."
id = "implanter"
req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 200)
build_path = /obj/item/implanter
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/implantcase
name = "Implant Case"
desc = "A glass case for containing an implant."
id = "implantcase"
req_tech = list("biotech" = 2)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/implantcase
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/implant_sadtrombone
name = "Sad Trombone Implant Case"
desc = "Makes death amusing."
id = "implant_trombone"
req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 500, MAT_BANANIUM = 500)
build_path = /obj/item/implantcase/sad_trombone
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_ALL //if you get bananium you get the sad trombones.
/datum/design/implant_chem
name = "Chemical Implant Case"
desc = "A glass case containing an implant."
id = "implant_chem"
req_tech = list("materials" = 3, "biotech" = 5,)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 700)
build_path = /obj/item/implantcase/chem
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/implant_tracking
name = "Tracking Implant Case"
desc = "A glass case containing an implant."
id = "implant_tracking"
req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/implantcase/track
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
//Cybernetic organs
@@ -384,48 +383,48 @@
name = "Cybernetic Liver"
desc = "A cybernetic liver"
id = "cybernetic_liver"
req_tech = list("biotech" = 4, "materials" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/organ/liver/cybernetic
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cybernetic_heart
name = "Cybernetic Heart"
desc = "A cybernetic heart"
id = "cybernetic_heart"
req_tech = list("biotech" = 4, "materials" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/organ/heart/cybernetic
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cybernetic_liver_u
name = "Upgraded Cybernetic Liver"
desc = "An upgraded cybernetic liver"
id = "cybernetic_liver_u"
req_tech = list("biotech" = 5, "materials" = 5, "plasmatech" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/organ/liver/cybernetic/upgraded
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cybernetic_lungs
name = "Cybernetic Lungs"
desc = "A pair of cybernetic lungs."
id = "cybernetic_lungs"
req_tech = list("biotech" = 4, "materials" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/organ/lungs/cybernetic
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cybernetic_lungs_u
name = "Upgraded Cybernetic Lungs"
desc = "A pair of upgraded cybernetic lungs."
id = "cybernetic_lungs_u"
req_tech = list("biotech" = 5, "materials" = 5, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 500)
build_path = /obj/item/organ/lungs/cybernetic/upgraded
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
@@ -0,0 +1,114 @@
/////////////////////////////////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
/datum/design/drill
name = "Mining Drill"
desc = "Yours is the drill that will pierce through the rock walls."
id = "drill"
build_type = PROTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 1000) //expensive, but no need for miners.
build_path = /obj/item/pickaxe/drill
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/drill_diamond
name = "Diamond-Tipped Mining Drill"
desc = "Yours is the drill that will pierce the heavens!"
id = "drill_diamond"
build_type = PROTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed.
build_path = /obj/item/pickaxe/drill/diamonddrill
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/plasmacutter
name = "Plasma Cutter"
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
id = "plasmacutter"
build_type = PROTOLATHE
materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_PLASMA = 400)
build_path = /obj/item/gun/energy/plasmacutter
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/plasmacutter_adv
name = "Advanced Plasma Cutter"
desc = "It's an advanced plasma cutter, oh my god."
id = "plasmacutter_adv"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500)
build_path = /obj/item/gun/energy/plasmacutter/adv
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well."
id = "jackhammer"
build_type = PROTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_DIAMOND = 6000)
build_path = /obj/item/pickaxe/drill/jackhammer
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/superresonator
name = "Upgraded Resonator"
desc = "An upgraded version of the resonator that allows more fields to be active at once."
id = "superresonator"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_URANIUM = 1000)
build_path = /obj/item/resonator/upgraded
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/trigger_guard_mod
name = "Kinetic Accelerator Trigger Guard Mod"
desc = "A device which allows kinetic accelerators to be wielded by any organism."
id = "triggermod"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/trigger_guard
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/damage_mod
name = "Kinetic Accelerator Damage Mod"
desc = "A device which allows kinetic accelerators to deal more damage."
id = "damagemod"
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/damage
category = list("Mining Designs", "Cyborg Upgrade Modules")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/cooldown_mod
name = "Kinetic Accelerator Cooldown Mod"
desc = "A device which decreases the cooldown of a Kinetic Accelerator."
id = "cooldownmod"
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/cooldown
category = list("Mining Designs", "Cyborg Upgrade Modules")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/range_mod
name = "Kinetic Accelerator Range Mod"
desc = "A device which allows kinetic accelerators to fire at a further range."
id = "rangemod"
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000)
build_path = /obj/item/borg/upgrade/modkit/range
category = list("Mining Designs", "Cyborg Upgrade Modules")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/hyperaccelerator
name = "Kinetic Accelerator Mining AoE Mod"
desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock."
id = "hypermod"
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000)
build_path = /obj/item/borg/upgrade/modkit/aoe/turfs
category = list("Mining Designs", "Cyborg Upgrade Modules")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
@@ -0,0 +1,316 @@
/////////////////////////////////////////
/////////////////HUDs////////////////////
/////////////////////////////////////////
/datum/design/health_hud
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
id = "health_hud"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/hud/health
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
id = "health_hud_night"
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_SILVER = 350)
build_path = /obj/item/clothing/glasses/hud/health/night
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/security_hud
name = "Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
id = "security_hud"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/hud/security
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
id = "security_hud_night"
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_GOLD = 350)
build_path = /obj/item/clothing/glasses/hud/security/night
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/diagnostic_hud
name = "Diagnostic HUD"
desc = "A HUD used to analyze and determine faults within robotic machinery."
id = "diagnostic_hud"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/hud/diagnostic
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/diagnostic_hud_night
name = "Night Vision Diagnostic HUD"
desc = "Upgraded version of the diagnostic HUD designed to function during a power failure."
id = "diagnostic_hud_night"
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_PLASMA = 300)
build_path = /obj/item/clothing/glasses/hud/diagnostic/night
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/////////////////////////////////////////
//////////////////Misc///////////////////
/////////////////////////////////////////
/datum/design/welding_mask
name = "Welding Gas Mask"
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
id = "weldingmask"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
build_path = /obj/item/clothing/mask/gas/welding
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/portaseeder
name = "Portable Seed Extractor"
desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
id = "portaseeder"
build_type = PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 400)
build_path = /obj/item/storage/bag/plants/portaseeder
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/air_horn
name = "Air Horn"
desc = "Damn son, where'd you find this?"
id = "air_horn"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
build_path = /obj/item/bikehorn/airhorn
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK!
/datum/design/mesons
name = "Optical Meson Scanners"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
id = "mesons"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/meson
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/engine_goggles
name = "Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes."
id = "engine_goggles"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_PLASMA = 100)
build_path = /obj/item/clothing/glasses/meson/engine
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/tray_goggles
name = "Optical T-Ray Scanners"
desc = "Used by engineering staff to see underfloor objects such as cables and pipes."
id = "tray_goggles"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/meson/engine/tray
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/nvgmesons
name = "Night Vision Optical Meson Scanners"
desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display."
id = "nvgmesons"
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000)
build_path = /obj/item/clothing/glasses/meson/night
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO
/datum/design/night_vision_goggles
name = "Night Vision Goggles"
desc = "Goggles that let you see through darkness unhindered."
id = "night_visision_goggles"
build_type = PROTOLATHE
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000)
build_path = /obj/item/clothing/glasses/night
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY
/datum/design/magboots
name = "Magnetic Boots"
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
id = "magboots"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4500, MAT_SILVER = 1500, MAT_GOLD = 2500)
build_path = /obj/item/clothing/shoes/magboots
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/sci_goggles
name = "Science Goggles"
desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
id = "scigoggles"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/glasses/science
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/handdrill
name = "Hand Drill"
desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
id = "handdrill"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500)
build_path = /obj/item/screwdriver/power
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/jawsoflife
name = "Jaws of Life"
desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws"
id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP
build_path = /obj/item/crowbar/power
build_type = PROTOLATHE
materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwrench
name = "Alien Wrench"
desc = "An advanced wrench obtained through Abductor technology."
id = "alien_wrench"
build_path = /obj/item/wrench/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwirecutters
name = "Alien Wirecutters"
desc = "Advanced wirecutters obtained through Abductor technology."
id = "alien_wirecutters"
build_path = /obj/item/wirecutters/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienscrewdriver
name = "Alien Screwdriver"
desc = "An advanced screwdriver obtained through Abductor technology."
id = "alien_screwdriver"
build_path = /obj/item/screwdriver/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/aliencrowbar
name = "Alien Crowbar"
desc = "An advanced crowbar obtained through Abductor technology."
id = "alien_crowbar"
build_path = /obj/item/crowbar/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwelder
name = "Alien Welding Tool"
desc = "An advanced welding tool obtained through Abductor technology."
id = "alien_welder"
build_path = /obj/item/weldingtool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienmultitool
name = "Alien Multitool"
desc = "An advanced multitool obtained through Abductor technology."
id = "alien_multitool"
build_path = /obj/item/device/multitool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/diskplantgene
name = "Plant Data Disk"
desc = "A disk for storing plant genetic data."
id = "diskplantgene"
build_type = PROTOLATHE
materials = list(MAT_METAL=200, MAT_GLASS=100)
build_path = /obj/item/disk/plantgene
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/////////////////////////////////////////
////////////Janitor Designs//////////////
/////////////////////////////////////////
/datum/design/advmop
name = "Advanced Mop"
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
id = "advmop"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2500, MAT_GLASS = 200)
build_path = /obj/item/mop/advanced
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/blutrash
name = "Trashbag of Holding"
desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage."
id = "blutrash"
build_type = PROTOLATHE
materials = list(MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PLASMA = 1500)
build_path = /obj/item/storage/bag/trash/bluespace
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/buffer
name = "Floor Buffer Upgrade"
desc = "A floor buffer that can be attached to vehicular janicarts."
id = "buffer"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 200)
build_path = /obj/item/janiupgrade
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/holosign
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
id = "holosign"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/holosign_creator
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/////////////////////////////////////////
////////////Tools//////////////
/////////////////////////////////////////
/datum/design/exwelder
name = "Experimental Welding Tool"
desc = "An experimental welder capable of self-fuel generation."
id = "exwelder"
build_type = PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200)
build_path = /obj/item/weldingtool/experimental
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+10 -11
View File
@@ -6,96 +6,95 @@
name = "Basic Power Cell"
desc = "A basic power cell that holds 1 MJ of energy."
id = "basic_cell"
req_tech = list("powerstorage" = 1)
build_type = PROTOLATHE | AUTOLATHE |MECHFAB
materials = list(MAT_METAL = 700, MAT_GLASS = 50)
construction_time=100
build_path = /obj/item/stock_parts/cell
category = list("Misc","Power Designs","Machinery","initial")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/high_cell
name = "High-Capacity Power Cell"
desc = "A power cell that holds 10 MJ of energy."
id = "high_cell"
req_tech = list("powerstorage" = 2)
build_type = PROTOLATHE | AUTOLATHE | MECHFAB
materials = list(MAT_METAL = 700, MAT_GLASS = 60)
construction_time=100
build_path = /obj/item/stock_parts/cell/high
category = list("Misc","Power Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/super_cell
name = "Super-Capacity Power Cell"
desc = "A power cell that holds 20 MJ of energy."
id = "super_cell"
req_tech = list("powerstorage" = 3, "materials" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 700, MAT_GLASS = 70)
construction_time=100
build_path = /obj/item/stock_parts/cell/super
category = list("Misc","Power Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/hyper_cell
name = "Hyper-Capacity Power Cell"
desc = "A power cell that holds 30 MJ of energy."
id = "hyper_cell"
req_tech = list("powerstorage" = 5, "materials" = 5, "engineering" = 5)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 700, MAT_GOLD = 150, MAT_SILVER = 150, MAT_GLASS = 80)
construction_time=100
build_path = /obj/item/stock_parts/cell/hyper
category = list("Misc","Power Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/bluespace_cell
name = "Bluespace Power Cell"
desc = "A power cell that holds 40 MJ of energy."
id = "bluespace_cell"
req_tech = list("powerstorage" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 800, MAT_GOLD = 120, MAT_GLASS = 160, MAT_DIAMOND = 160, MAT_TITANIUM = 300, MAT_BLUESPACE = 100)
construction_time=100
build_path = /obj/item/stock_parts/cell/bluespace
category = list("Misc","Power Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/light_replacer
name = "Light Replacer"
desc = "A device to automatically replace lights. Refill with working lightbulbs."
id = "light_replacer"
req_tech = list("magnets" = 3, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000)
build_path = /obj/item/device/lightreplacer
category = list("Power Designs")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/inducer
name = "Inducer"
desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them."
id = "inducer"
req_tech = list("powerstorage" = 4, "engineering" = 4, "magnets" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
build_path = /obj/item/inducer/sci
category = list("Power Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/pacman
name = "Machine Design (PACMAN-type Generator Board)"
desc = "The circuit board that for a PACMAN-type portable generator."
id = "pacman"
req_tech = list("programming" = 2, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3)
build_path = /obj/item/circuitboard/machine/pacman
category = list("Engineering Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/pacman/super
name = "Machine Design (SUPERPACMAN-type Generator Board)"
desc = "The circuit board that for a SUPERPACMAN-type portable generator."
id = "superpacman"
req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
build_path = /obj/item/circuitboard/machine/pacman/super
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/pacman/mrs
name = "Machine Design (MRSPACMAN-type Generator Board)"
desc = "The circuit board that for a MRSPACMAN-type portable generator."
id = "mrspacman"
req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5, "plasmatech" = 4)
build_path = /obj/item/circuitboard/machine/pacman/mrs
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
@@ -29,8 +29,8 @@
name = "Alien Alloy"
desc = "A sheet of reverse-engineered alien alloy."
id = "alienalloy"
req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2)
build_type = PROTOLATHE | SMELTER
materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000)
build_path = /obj/item/stack/sheet/mineral/abductor
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE
@@ -6,272 +6,271 @@
name = "Rapid Part Exchange Device"
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
id = "rped"
req_tech = list("engineering" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 5000) //hardcore
build_path = /obj/item/storage/part_replacer
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/BS_RPED
name = "Bluespace RPED"
desc = "Powered by bluespace technology, this RPED variant can upgrade buildings from a distance, without needing to remove the panel first."
id = "bs_rped"
req_tech = list("engineering" = 4, "bluespace" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 15000, MAT_GLASS = 5000, MAT_SILVER = 2500) //hardcore
build_path = /obj/item/storage/part_replacer/bluespace
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
//Capacitors
/datum/design/basic_capacitor
name = "Basic Capacitor"
desc = "A stock part used in the construction of various devices."
id = "basic_capacitor"
req_tech = list("powerstorage" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/stock_parts/capacitor
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/adv_capacitor
name = "Advanced Capacitor"
desc = "A stock part used in the construction of various devices."
id = "adv_capacitor"
req_tech = list("powerstorage" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
build_path = /obj/item/stock_parts/capacitor/adv
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/super_capacitor
name = "Super Capacitor"
desc = "A stock part used in the construction of various devices."
id = "super_capacitor"
req_tech = list("powerstorage" = 5, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 100)
build_path = /obj/item/stock_parts/capacitor/super
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/quadratic_capacitor
name = "Quadratic Capacitor"
desc = "A stock part used in the construction of various devices."
id = "quadratic_capacitor"
req_tech = list("powerstorage" = 6, "engineering" = 5, "materials" = 5, "bluespace" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 100, MAT_DIAMOND = 100)
build_path = /obj/item/stock_parts/capacitor/quadratic
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
//Scanning modules
/datum/design/basic_scanning
name = "Basic Scanning Module"
desc = "A stock part used in the construction of various devices."
id = "basic_scanning"
req_tech = list("magnets" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 50)
build_path = /obj/item/stock_parts/scanning_module
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/adv_scanning
name = "Advanced Scanning Module"
desc = "A stock part used in the construction of various devices."
id = "adv_scanning"
req_tech = list("magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/stock_parts/scanning_module/adv
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/phasic_scanning
name = "Phasic Scanning Module"
desc = "A stock part used in the construction of various devices."
id = "phasic_scanning"
req_tech = list("magnets" = 5, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 150, MAT_SILVER = 60)
build_path = /obj/item/stock_parts/scanning_module/phasic
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/triphasic_scanning
name = "Triphasic Scanning Module"
desc = "A stock part used in the construction of various devices."
id = "triphasic_scanning"
req_tech = list("magnets" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_DIAMOND = 30, MAT_BLUESPACE = 30)
build_path = /obj/item/stock_parts/scanning_module/triphasic
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
//Maipulators
/datum/design/micro_mani
name = "Micro Manipulator"
desc = "A stock part used in the construction of various devices."
id = "micro_mani"
req_tech = list("materials" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 100)
build_path = /obj/item/stock_parts/manipulator
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/nano_mani
name = "Nano Manipulator"
desc = "A stock part used in the construction of various devices."
id = "nano_mani"
req_tech = list("materials" = 3, "programming" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 150)
build_path = /obj/item/stock_parts/manipulator/nano
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/pico_mani
name = "Pico Manipulator"
desc = "A stock part used in the construction of various devices."
id = "pico_mani"
req_tech = list("materials" = 5, "programming" = 4, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/stock_parts/manipulator/pico
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/femto_mani
name = "Femto Manipulator"
desc = "A stock part used in the construction of various devices."
id = "femto_mani"
req_tech = list("materials" = 7, "programming" = 5, "engineering" = 5, "bluespace" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_DIAMOND = 30, MAT_TITANIUM = 30)
build_path = /obj/item/stock_parts/manipulator/femto
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
//Micro-lasers
/datum/design/basic_micro_laser
name = "Basic Micro-Laser"
desc = "A stock part used in the construction of various devices."
id = "basic_micro_laser"
req_tech = list("magnets" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 50)
build_path = /obj/item/stock_parts/micro_laser
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/high_micro_laser
name = "High-Power Micro-Laser"
desc = "A stock part used in the construction of various devices."
id = "high_micro_laser"
req_tech = list("magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/stock_parts/micro_laser/high
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/ultra_micro_laser
name = "Ultra-High-Power Micro-Laser"
desc = "A stock part used in the construction of various devices."
id = "ultra_micro_laser"
req_tech = list("magnets" = 5, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 150, MAT_URANIUM = 60)
build_path = /obj/item/stock_parts/micro_laser/ultra
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/quadultra_micro_laser
name = "Quad-Ultra Micro-Laser"
desc = "A stock part used in the construction of various devices."
id = "quadultra_micro_laser"
req_tech = list("magnets" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 100, MAT_DIAMOND = 60)
build_path = /obj/item/stock_parts/micro_laser/quadultra
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/basic_matter_bin
name = "Basic Matter Bin"
desc = "A stock part used in the construction of various devices."
id = "basic_matter_bin"
req_tech = list("materials" = 1)
build_type = PROTOLATHE | AUTOLATHE
materials = list(MAT_METAL = 100)
build_path = /obj/item/stock_parts/matter_bin
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/adv_matter_bin
name = "Advanced Matter Bin"
desc = "A stock part used in the construction of various devices."
id = "adv_matter_bin"
req_tech = list("materials" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 150)
build_path = /obj/item/stock_parts/matter_bin/adv
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/super_matter_bin
name = "Super Matter Bin"
desc = "A stock part used in the construction of various devices."
id = "super_matter_bin"
req_tech = list("materials" = 5, "engineering" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/stock_parts/matter_bin/super
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/bluespace_matter_bin
name = "Bluespace Matter Bin"
desc = "A stock part used in the construction of various devices."
id = "bluespace_matter_bin"
req_tech = list("materials" = 7, "engineering" = 5, "bluespace" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 250, MAT_DIAMOND = 100, MAT_BLUESPACE = 100)
build_path = /obj/item/stock_parts/matter_bin/bluespace
category = list("Stock Parts")
lathe_time_factor = 0.2
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
//T-Comms devices
/datum/design/subspace_ansible
name = "Subspace Ansible"
desc = "A compact module capable of sensing extradimensional activity."
id = "s-ansible"
req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 100, MAT_SILVER = 100)
build_path = /obj/item/stock_parts/subspace/ansible
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/hyperwave_filter
name = "Hyperwave Filter"
desc = "A tiny device capable of filtering and converting super-intense radiowaves."
id = "s-filter"
req_tech = list("programming" = 3, "magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 100, MAT_SILVER = 100)
build_path = /obj/item/stock_parts/subspace/filter
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/subspace_amplifier
name = "Subspace Amplifier"
desc = "A compact micro-machine capable of amplifying weak subspace transmissions."
id = "s-amplifier"
req_tech = list("programming" = 3, "magnets" = 4, "materials" = 3, "bluespace" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 100, MAT_GOLD = 100, MAT_URANIUM = 100)
build_path = /obj/item/stock_parts/subspace/amplifier
@@ -281,38 +280,38 @@
name = "Subspace Treatment Disk"
desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves."
id = "s-treatment"
req_tech = list("programming" = 2, "magnets" = 3, "materials" = 2, "bluespace" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 100, MAT_SILVER = 200)
build_path = /obj/item/stock_parts/subspace/treatment
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/subspace_analyzer
name = "Subspace Analyzer"
desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths."
id = "s-analyzer"
req_tech = list("programming" = 3, "magnets" = 4, "materials" = 2, "bluespace" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 100, MAT_GOLD = 100)
build_path = /obj/item/stock_parts/subspace/analyzer
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/subspace_crystal
name = "Ansible Crystal"
desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths."
id = "s-crystal"
req_tech = list("magnets" = 2, "materials" = 2, "bluespace" = 3, "plasmatech" = 3)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 800, MAT_SILVER = 100, MAT_GOLD = 100)
build_path = /obj/item/stock_parts/subspace/crystal
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/subspace_transmitter
name = "Subspace Transmitter"
desc = "A large piece of equipment used to open a window into the subspace dimension."
id = "s-transmitter"
req_tech = list("magnets" = 3, "materials" = 4, "bluespace" = 4)
build_type = PROTOLATHE
materials = list(MAT_GLASS = 100, MAT_SILVER = 100, MAT_URANIUM = 100)
build_path = /obj/item/stock_parts/subspace/transmitter
category = list("Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
@@ -6,7 +6,6 @@
name = "Machine Design (Subspace Receiver)"
desc = "Allows for the construction of Subspace Receiver equipment."
id = "s-receiver"
req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1)
build_path = /obj/item/circuitboard/machine/telecomms/receiver
category = list("Subspace Telecomms")
@@ -14,7 +13,6 @@
name = "Machine Design (Bus Mainframe)"
desc = "Allows for the construction of Telecommunications Bus Mainframes."
id = "s-bus"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/telecomms/bus
category = list("Subspace Telecomms")
@@ -22,7 +20,6 @@
name = "Machine Design (Hub Mainframe)"
desc = "Allows for the construction of Telecommunications Hub Mainframes."
id = "s-hub"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/telecomms/hub
category = list("Subspace Telecomms")
@@ -30,7 +27,6 @@
name = "Machine Design (Relay Mainframe)"
desc = "Allows for the construction of Telecommunications Relay Mainframes."
id = "s-relay"
req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2)
build_path = /obj/item/circuitboard/machine/telecomms/relay
category = list("Subspace Telecomms")
@@ -38,7 +34,6 @@
name = "Machine Design (Processor Unit)"
desc = "Allows for the construction of Telecommunications Processor equipment."
id = "s-processor"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/telecomms/processor
category = list("Subspace Telecomms")
@@ -46,7 +41,6 @@
name = "Machine Design (Server Mainframe)"
desc = "Allows for the construction of Telecommunications Servers."
id = "s-server"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/telecomms/server
category = list("Subspace Telecomms")
@@ -54,6 +48,5 @@
name = "Machine Design (Subspace Broadcaster)"
desc = "Allows for the construction of Subspace Broadcasting equipment."
id = "s-broadcaster"
req_tech = list("programming" = 2, "engineering" = 2)
build_path = /obj/item/circuitboard/machine/telecomms/broadcaster
category = list("Subspace Telecomms")
+34 -23
View File
@@ -6,163 +6,173 @@
name = "Test-Range Firing Pin"
desc = "This safety firing pin allows firearms to be operated within proximity to a firing range."
id = "pin_testing"
req_tech = list("combat" = 2, "materials" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 300)
build_path = /obj/item/device/firing_pin/test_range
category = list("Firing Pins")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/pin_mindshield
name = "Mindshield Firing Pin"
desc = "This is a security firing pin which only authorizes users who are mindshield-implanted."
id = "pin_loyalty"
req_tech = list("combat" = 5, "materials" = 6)
build_type = PROTOLATHE
materials = list(MAT_SILVER = 600, MAT_DIAMOND = 600, MAT_URANIUM = 200)
build_path = /obj/item/device/firing_pin/implant/mindshield
category = list("Firing Pins")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/stunrevolver
name = "Tesla Revolver"
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
id = "stunrevolver"
req_tech = list("combat" = 4, "materials" = 4, "powerstorage" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000)
build_path = /obj/item/gun/energy/tesla_revolver
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/nuclear_gun
name = "Advanced Energy Gun"
desc = "An energy gun with an experimental miniaturized reactor."
id = "nuclear_gun"
req_tech = list("combat" = 5, "magnets" = 5, "powerstorage" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 3000, MAT_TITANIUM = 1000)
build_path = /obj/item/gun/energy/e_gun/nuclear
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/tele_shield
name = "Telescopic Riot Shield"
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
id = "tele_shield"
req_tech = list("combat" = 4, "materials" = 3, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200)
build_path = /obj/item/shield/riot/tele
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/beamrifle
name = "Beam Marksman Rifle"
desc = "A powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets."
id = "beamrifle"
req_tech = list("combat" = 7, "magnets" = 5, "powerstorage" = 5, "materials" = 7, "programming" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_DIAMOND = 5000, MAT_URANIUM = 8000, MAT_SILVER = 4500, MAT_GOLD = 5000)
build_path = /obj/item/gun/energy/beam_rifle
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/decloner
name = "Decloner"
desc = "Your opponent will bubble into a messy pile of goop."
id = "decloner"
req_tech = list("combat" = 5, "materials" = 5, "biotech" = 6, "plasmatech" = 7)
build_type = PROTOLATHE
materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000)
reagents_list = list("mutagen" = 40)
build_path = /obj/item/gun/energy/decloner
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/rapidsyringe
name = "Rapid Syringe Gun"
desc = "A gun that fires many syringes."
id = "rapidsyringe"
req_tech = list("combat" = 2, "biotech" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 1000)
build_path = /obj/item/gun/syringe/rapidsyringe
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL //uwu
/datum/design/temp_gun
name = "Temperature Gun"
desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want
id = "temp_gun"
req_tech = list("combat" = 4, "materials" = 4, "powerstorage" = 3, "magnets" = 2)
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 500, MAT_SILVER = 3000)
build_path = /obj/item/gun/energy/temperature
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/flora_gun
name = "Floral Somatoray"
desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life."
id = "flora_gun"
req_tech = list("materials" = 2, "biotech" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 500)
reagents_list = list("radium" = 20)
build_path = /obj/item/gun/energy/floragun
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/large_grenade
name = "Large Grenade"
desc = "A grenade that affects a larger area and use larger containers."
id = "large_Grenade"
req_tech = list("combat" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000)
build_path = /obj/item/grenade/chem_grenade/large
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/pyro_grenade
name = "Pyro Grenade"
desc = "An advanced grenade that is able to self ignite its mixture."
id = "pyro_Grenade"
req_tech = list("combat" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_PLASMA = 500)
build_path = /obj/item/grenade/chem_grenade/pyro
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cryo_grenade
name = "Cryo Grenade"
desc = "An advanced grenade that rapidly cools its contents upon detonation."
id = "cryo_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/grenade/chem_grenade/cryo
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/adv_grenade
name = "Advanced Release Grenade"
desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter."
id = "adv_Grenade"
req_tech = list("combat" = 3, "engineering" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 500)
build_path = /obj/item/grenade/chem_grenade/adv_release
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/xray
name = "Xray Laser Gun"
desc = "Not quite as menacing as it sounds"
id = "xray"
req_tech = list("combat" = 7, "magnets" = 5, "biotech" = 5, "powerstorage" = 4)
id = "xray_laser"
build_type = PROTOLATHE
materials = list(MAT_GOLD = 5000, MAT_URANIUM = 4000, MAT_METAL = 5000, MAT_TITANIUM = 2000, MAT_BLUESPACE = 2000)
build_path = /obj/item/gun/energy/xray
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/ioncarbine
name = "Ion Carbine"
desc = "How to dismantle a cyborg : The gun."
id = "ioncarbine"
req_tech = list("combat" = 5, "magnets" = 4)
build_type = PROTOLATHE
materials = list(MAT_SILVER = 6000, MAT_METAL = 8000, MAT_URANIUM = 2000)
build_path = /obj/item/gun/energy/ionrifle/carbine
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/wormhole_projector
name = "Bluespace Wormhole Projector"
desc = "A projector that emits high density quantum-coupled bluespace beams."
id = "wormholeprojector"
req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6)
build_type = PROTOLATHE
materials = list(MAT_SILVER = 2000, MAT_METAL = 5000, MAT_DIAMOND = 2000, MAT_BLUESPACE = 3000)
build_path = /obj/item/gun/energy/wormhole_projector
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
//WT550 Mags
@@ -170,11 +180,11 @@
name = "WT-550 Auto Gun Magazine (4.6x30mm)"
desc = "A 20 round magazine for the out of date security WT-550 Auto Rifle"
id = "mag_oldsmg"
req_tech = list("combat" = 1, "materials" = 1)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_box/magazine/wt550m9
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mag_oldsmg/ap_mag
name = "WT-550 Auto Gun Armour Piercing Magazine (4.6x30mm AP)"
@@ -189,53 +199,54 @@
id = "mag_oldsmg_ic"
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/stunshell
name = "Stun Shell"
desc = "A stunning shell for a shotgun."
id = "stunshell"
req_tech = list("combat" = 3, "materials" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/ammo_casing/shotgun/stunslug
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/techshell
name = "Unloaded Technological Shotshell"
desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects."
id = "techshotshell"
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 4, "magnets" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 200)
build_path = /obj/item/ammo_casing/shotgun/techshell
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/suppressor
name = "Universal Suppressor"
desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels."
id = "suppressor"
req_tech = list("combat" = 6, "engineering" = 5, "syndicate" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/suppressor
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/gravitygun
name = "One-point Bluespace-gravitational Manipulator"
desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity."
id = "gravitygun"
req_tech = list("combat" = 4, "materials" = 5, "bluespace" = 4, "powerstorage" = 4, "magnets" = 5)
build_type = PROTOLATHE
materials = list(MAT_SILVER = 8000, MAT_URANIUM = 8000, MAT_GLASS = 12000, MAT_METAL = 12000, MAT_DIAMOND = 3000, MAT_BLUESPACE = 3000)
build_path = /obj/item/gun/energy/gravity_gun
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/largecrossbow
name = "Energy Crossbow"
desc = "A reverse-engineered energy crossbow favored by syndicate infiltration teams and carp hunters."
id = "largecrossbow"
req_tech = list("combat" = 5, "engineering" = 3, "magnets" = 5, "syndicate" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 1500, MAT_URANIUM = 1500, MAT_SILVER = 1500)
build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+91 -16
View File
@@ -7,42 +7,35 @@ It is used to destroy hand-held objects and advance technological research. Cont
Note: Must be placed within 3 tiles of the R&D Console
*/
/obj/machinery/r_n_d/destructive_analyzer
/obj/machinery/rnd/destructive_analyzer
name = "destructive analyzer"
desc = "Learn science by destroying things!"
icon_state = "d_analyzer"
circuit = /obj/item/circuitboard/machine/destructive_analyzer
var/decon_mod = 0
/obj/machinery/r_n_d/destructive_analyzer/RefreshParts()
/obj/machinery/rnd/destructive_analyzer/RefreshParts()
var/T = 0
for(var/obj/item/stock_parts/S in component_parts)
T += S.rating
decon_mod = T
/obj/machinery/r_n_d/destructive_analyzer/proc/ConvertReqString2List(list/source_list)
/obj/machinery/rnd/destructive_analyzer/proc/ConvertReqString2List(list/source_list)
var/list/temp_list = params2list(source_list)
for(var/O in temp_list)
temp_list[O] = text2num(temp_list[O])
return temp_list
/obj/machinery/r_n_d/destructive_analyzer/disconnect_console()
/obj/machinery/rnd/destructive_analyzer/disconnect_console()
linked_console.linked_destroy = null
..()
/obj/machinery/r_n_d/destructive_analyzer/Insert_Item(obj/item/O, mob/user)
/obj/machinery/rnd/destructive_analyzer/Insert_Item(obj/item/O, mob/user)
if(user.a_intent != INTENT_HARM)
. = 1
if(!is_insertion_ready(user))
return
if(!O.origin_tech)
to_chat(user, "<span class='warning'>This doesn't seem to have a tech origin!</span>")
return
var/list/temp_tech = ConvertReqString2List(O.origin_tech)
if (temp_tech.len == 0)
to_chat(user, "<span class='warning'>You cannot deconstruct this item!</span>")
return
if(!user.transferItemToLoc(O, src))
to_chat(user, "<span class='warning'>\The [O] is stuck to your hand, you cannot put it in the [src.name]!</span>")
return
@@ -52,9 +45,91 @@ Note: Must be placed within 3 tiles of the R&D Console
flick("d_analyzer_la", src)
addtimer(CALLBACK(src, .proc/finish_loading), 10)
/obj/machinery/r_n_d/destructive_analyzer/proc/finish_loading()
/obj/machinery/rnd/destructive_analyzer/proc/finish_loading()
update_icon()
busy = FALSE
reset_busy()
/obj/machinery/r_n_d/destructive_analyzer/update_icon()
icon_state = "d_analyzer_l"
/obj/machinery/rnd/destructive_analyzer/update_icon()
if(loaded_item)
icon_state = "d_analyzer_l"
else
icon_state = initial(icon_state)
/obj/machinery/rnd/destructive_analyzer/proc/reclaim_materials_from(obj/item/thing)
. = 0
if(linked_console && linked_console.linked_lathe) //Also sends salvaged materials to a linked protolathe, if any.
for(var/material in thing.materials)
var/can_insert = min((linked_console.linked_lathe.materials.max_amount - linked_console.linked_lathe.materials.total_amount), (max(thing.materials[material]*(decon_mod/10), thing.materials[material])))
linked_console.linked_lathe.materials.insert_amount(can_insert, material)
. += can_insert
/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(obj/item/thing, innermode = FALSE)
if(QDELETED(thing) || QDELETED(src) || QDELETED(linked_console))
return FALSE
if(!innermode)
flick("d_analyzer_process", src)
busy = TRUE
addtimer(CALLBACK(src, .proc/reset_busy), 24)
use_power(250)
if(thing == loaded_item)
loaded_item = null
update_icon()
var/list/food = thing.GetDeconstructableContents()
for(var/obj/item/innerthing in food)
destroy_item(innerthing, TRUE)
reclaim_materials_from(thing)
for(var/mob/M in thing)
M.death()
if(istype(thing, /obj/item/stack/sheet))
var/obj/item/stack/sheet/S = thing
if(S.amount > 1 && !innermode)
S.amount--
else
qdel(S)
else
qdel(thing)
return TRUE
/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user)
if(!istype(loaded_item) || !istype(linked_console))
return FALSE
if(id && !(id == RESEARCH_MATERIAL_RECLAMATION_ID))
var/datum/techweb_node/TN = get_techweb_node_by_id(id)
if(!istype(TN))
return FALSE
var/list/pos1 = techweb_item_boost_check(loaded_item)
if(isnull(pos1[id]))
return FALSE
var/dpath = loaded_item.type
if(isnull(TN.boost_item_paths[dpath]))
return FALSE
var/dboost = TN.boost_item_paths[dpath]
var/choice = input("Are you sure you want to destroy [loaded_item.name] for a boost of [dboost? 0 : dboost] in node [TN.display_name]") in list("Proceed", "Cancel")
if(choice == "Cancel")
return FALSE
if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src))
return FALSE
SSblackbox.record_feedback("nested_tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]"))
if(destroy_item(loaded_item))
linked_console.stored_research.boost_with_path(SSresearch.techweb_nodes[TN.id], dpath)
else
var/point_value = techweb_item_point_check(loaded_item)
if(linked_console.stored_research.deconstructed_items[loaded_item.type])
point_value = 0
var/choice = input("Are you sure you want to destroy [loaded_item.name] for [point_value? "[point_value] points" : "material reclaimation"]?") in list("Proceed", "Cancel")
if(choice == "Cancel")
return FALSE
if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src))
return FALSE
var/dtype = loaded_item.type
if(destroy_item(loaded_item))
linked_console.stored_research.research_points += point_value
linked_console.stored_research.deconstructed_items[dtype] = point_value
return TRUE
/obj/machinery/rnd/destructive_analyzer/proc/unload_item()
if(!loaded_item)
return FALSE
loaded_item.forceMove(get_turf(src))
loaded_item = null
return TRUE
+93 -100
View File
@@ -17,7 +17,7 @@
#define EFFECT_PROB_VERYHIGH 95
#define FAIL 8
/obj/machinery/r_n_d/experimentor
/obj/machinery/rnd/experimentor
name = "\improper E.X.P.E.R.I-MENTOR"
desc = "A \"replacement\" for the deconstructive analyzer with a slight tendency to catastrophically fail."
icon = 'icons/obj/machines/heavy_lathe.dmi'
@@ -37,13 +37,14 @@
var/list/valid_items = list() //valid items for special reactions like transforming
var/list/critical_items = list() //items that can cause critical reactions
/obj/machinery/r_n_d/experimentor/proc/ConvertReqString2List(list/source_list)
/obj/machinery/rnd/experimentor/proc/ConvertReqString2List(list/source_list)
var/list/temp_list = params2list(source_list)
for(var/O in temp_list)
temp_list[O] = text2num(temp_list[O])
return temp_list
/obj/machinery/r_n_d/experimentor/proc/SetTypeReactions()
/obj/machinery/rnd/experimentor/proc/SetTypeReactions()
var/probWeight = 0
for(var/I in typesof(/obj/item))
if(istype(I, /obj/item/relic))
@@ -69,14 +70,14 @@
critical_items += I
/obj/machinery/r_n_d/experimentor/Initialize()
/obj/machinery/rnd/experimentor/Initialize()
. = ..()
trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list
trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_living_list
SetTypeReactions()
/obj/machinery/r_n_d/experimentor/RefreshParts()
/obj/machinery/rnd/experimentor/RefreshParts()
for(var/obj/item/stock_parts/manipulator/M in component_parts)
if(resetTime > 0 && (resetTime - M.rating) >= 1)
resetTime -= M.rating
@@ -85,7 +86,7 @@
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
badThingCoeff += M.rating
/obj/machinery/r_n_d/experimentor/proc/checkCircumstances(obj/item/O)
/obj/machinery/rnd/experimentor/proc/checkCircumstances(obj/item/O)
//snowflake check to only take "made" bombs
if(istype(O, /obj/item/device/transfer_valve))
var/obj/item/device/transfer_valve/T = O
@@ -93,65 +94,106 @@
return FALSE
return TRUE
/obj/machinery/r_n_d/experimentor/Insert_Item(obj/item/O, mob/user)
/obj/machinery/rnd/experimentor/Insert_Item(obj/item/O, mob/user)
if(user.a_intent != INTENT_HARM)
. = 1
if(!is_insertion_ready(user))
return
if(!checkCircumstances(O))
to_chat(user, "<span class='warning'>[O] is not yet valid for [src] and must be completed!</span>")
return
if(!O.origin_tech)
to_chat(user, "<span class='warning'>This doesn't seem to have a tech origin!</span>")
return
var/list/temp_tech = ConvertReqString2List(O.origin_tech)
if (temp_tech.len == 0)
to_chat(user, "<span class='warning'>You cannot experiment on this item!</span>")
return
if(!user.transferItemToLoc(O, src))
return
loaded_item = O
to_chat(user, "<span class='notice'>You add [O] to the machine.</span>")
flick("h_lathe_load", src)
/obj/machinery/r_n_d/experimentor/default_deconstruction_crowbar(obj/item/O)
/obj/machinery/rnd/experimentor/default_deconstruction_crowbar(obj/item/O)
ejectItem()
..(O)
. = ..(O)
/obj/machinery/r_n_d/experimentor/attack_hand(mob/user)
/obj/machinery/rnd/experimentor/attack_hand(mob/user)
user.set_machine(src)
var/dat = "<center>"
var/list/dat = list("<center>")
if(!linked_console)
dat += "<b><a href='byond://?src=[REF(src)];function=search'>Scan for R&D Console</A></b><br>"
dat += "<b><a href='byond://?src=[REF(src)];function=search'>Scan for R&D Console</A></b>"
if(loaded_item)
dat += "<b>Loaded Item:</b> [loaded_item]<br>"
dat += "<b>Technology</b>:<br>"
var/list/D = ConvertReqString2List(loaded_item.origin_tech)
for(var/T in D)
dat += "[T]<br>"
dat += "<br><br>Available tests:"
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_POKE]'>Poke</A></b>"
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_IRRADIATE];'>Irradiate</A></b>"
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_GAS]'>Gas</A></b>"
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_HEAT]'>Burn</A></b>"
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_COLD]'>Freeze</A></b>"
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_OBLITERATE]'>Destroy</A></b><br>"
if(istype(loaded_item, /obj/item/relic))
dat += "<br><b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_DISCOVER]'>Discover</A></b><br>"
dat += "<br><b><a href='byond://?src=[REF(src)];function=eject'>Eject</A>"
dat += "<b>Loaded Item:</b> [loaded_item]"
dat += "<div>Available tests:"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_POKE]'>Poke</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_IRRADIATE];'>Irradiate</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_GAS]'>Gas</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_HEAT]'>Burn</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_COLD]'>Freeze</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_OBLITERATE]'>Destroy</A></b></div>"
if(istype(loaded_item,/obj/item/relic))
dat += "<b><a href='byond://?src=[REF(src)];item=[REF(loaded_item)];function=[SCANTYPE_DISCOVER]'>Discover</A></b>"
dat += "<b><a href='byond://?src=[REF(src)];function=eject'>Eject</A>"
var/list/listin = techweb_item_boost_check(src)
if(listin)
var/list/output = list("<b><font color='purple'>Research Boost Data:</font></b>")
var/list/res = list("<b><font color='blue'>Already researched:</font></b>")
var/list/boosted = list("<b><font color='red'>Already boosted:</font></b>")
for(var/node_id in listin)
var/datum/techweb_node/N = get_techweb_node_by_id(node_id)
var/str = "<b>[N.display_name]</b>: [listin[N]] points.</b>"
if(SSresearch.science_tech.researched_nodes[N])
res += str
else if(SSresearch.science_tech.boosted_nodes[N])
boosted += str
if(SSresearch.science_tech.visible_nodes[N]) //JOY OF DISCOVERY!
output += str
output += boosted + res
dat += output
else
dat += "<b>Nothing loaded.</b>"
dat += "<br><a href='byond://?src=[REF(src)];function=refresh'>Refresh</A><br>"
dat += "<br><a href='byond://?src=[REF(src)];close=1'>Close</A><br></center>"
dat += "<a href='byond://?src=[REF(src)];function=refresh'>Refresh</A>"
dat += "<a href='byond://?src=[REF(src)];close=1'>Close</A></center>"
var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src)
popup.set_content(dat)
popup.set_content(dat.Join("<br>"))
popup.open()
onclose(user, "experimentor")
/obj/machinery/rnd/experimentor/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
/obj/machinery/r_n_d/experimentor/proc/matchReaction(matching,reaction)
var/scantype = href_list["function"]
var/obj/item/process = locate(href_list["item"]) in src
if(href_list["close"])
usr << browse(null, "window=experimentor")
return
if(scantype == "search")
var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src)
if(D)
linked_console = D
else if(scantype == "eject")
ejectItem()
else if(scantype == "refresh")
updateUsrDialog()
else
if(recentlyExperimented)
to_chat(usr, "<span class='warning'>[src] has been used too recently!</span>")
else if(!loaded_item)
to_chat(usr, "<span class='warning'>[src] is not currently loaded!</span>")
else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item)
to_chat(usr, "<span class='danger'>Interface failure detected in [src]. Please try again.</span>")
else
var/dotype
if(text2num(scantype) == SCANTYPE_DISCOVER)
dotype = SCANTYPE_DISCOVER
else
dotype = matchReaction(process,scantype)
experiment(dotype,process)
use_power(750)
if(dotype != FAIL)
var/list/datum/techweb_node/nodes = techweb_item_boost_check(process)
var/picked = pickweight(nodes) //This should work.
if(linked_console)
linked_console.stored_research.boost_with_path(picked, process.type)
updateUsrDialog()
/obj/machinery/rnd/experimentor/proc/matchReaction(matching,reaction)
var/obj/item/D = matching
if(D)
if(item_reactions.Find("[D.type]"))
@@ -165,7 +207,7 @@
else
return FAIL
/obj/machinery/r_n_d/experimentor/proc/ejectItem(delete=FALSE)
/obj/machinery/rnd/experimentor/proc/ejectItem(delete=FALSE)
if(loaded_item)
if(cloneMode && cloneCount > 0)
visible_message("<span class='notice'>A duplicate [loaded_item] pops out!</span>")
@@ -183,12 +225,12 @@
qdel(loaded_item)
loaded_item = null
/obj/machinery/r_n_d/experimentor/proc/throwSmoke(turf/where)
/obj/machinery/rnd/experimentor/proc/throwSmoke(turf/where)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(0, where)
smoke.start()
/obj/machinery/r_n_d/experimentor/proc/pickWeighted(list/from)
/obj/machinery/rnd/experimentor/proc/pickWeighted(list/from)
var/result = FALSE
var/counter = 1
while(!result)
@@ -201,7 +243,7 @@
else
counter = 1
/obj/machinery/r_n_d/experimentor/proc/experiment(exp,obj/item/exp_on)
/obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on)
recentlyExperimented = 1
icon_state = "h_lathe_wloop"
var/chosenchem
@@ -481,62 +523,15 @@
addtimer(CALLBACK(src, .proc/reset_exp), resetTime)
/obj/machinery/r_n_d/experimentor/proc/reset_exp()
/obj/machinery/rnd/experimentor/proc/reset_exp()
update_icon()
recentlyExperimented = FALSE
/obj/machinery/r_n_d/experimentor/update_icon()
/obj/machinery/rnd/experimentor/update_icon()
icon_state = "h_lathe"
/obj/machinery/r_n_d/experimentor/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
var/scantype = href_list["function"]
var/obj/item/process = locate(href_list["item"]) in src
if(href_list["close"])
usr << browse(null, "window=experimentor")
return
else if(scantype == "search")
var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src)
if(D)
linked_console = D
else if(scantype == "eject")
ejectItem()
else if(scantype == "refresh")
updateUsrDialog()
else
if(recentlyExperimented)
to_chat(usr, "<span class='warning'>[src] has been used too recently!</span>")
return
else if(!loaded_item)
updateUsrDialog() //Set the interface to unloaded mode
to_chat(usr, "<span class='warning'>[src] is not currently loaded!</span>")
return
else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item)
updateUsrDialog() //Refresh interface to update interface hrefs
to_chat(usr, "<span class='danger'>Interface failure detected in [src]. Please try again.</span>")
return
var/dotype
if(text2num(scantype) == SCANTYPE_DISCOVER)
dotype = SCANTYPE_DISCOVER
else
dotype = matchReaction(process,scantype)
experiment(dotype,process)
use_power(750)
if(dotype != FAIL)
if(process && process.origin_tech)
var/list/temp_tech = ConvertReqString2List(process.origin_tech)
for(var/T in temp_tech)
linked_console.files.UpdateTech(T, temp_tech[T])
updateUsrDialog()
return
//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~
/obj/machinery/r_n_d/experimentor/proc/warn_admins(mob/user, ReactionName)
var/turf/T = get_turf(src)
/obj/machinery/rnd/experimentor/proc/warn_admins(user, ReactionName)
var/turf/T = get_turf(user)
message_admins("Experimentor reaction: [ReactionName] generated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(T)]",0,1)
log_game("Experimentor reaction: [ReactionName] generated by [key_name(user)] in ([T.x],[T.y],[T.z])")
@@ -563,7 +558,6 @@
name = "strange object"
desc = "What mysteries could this hold?"
icon = 'icons/obj/assemblies.dmi'
origin_tech = "combat=1;plasmatech=1;powerstorage=1;materials=1"
var/realName = "defined object"
var/revealed = FALSE
var/realProc
@@ -583,7 +577,6 @@
name = realName
cooldownMax = rand(60,300)
realProc = pick("teleport","explode","rapidDupe","petSpray","flash","clean","corgicannon")
origin_tech = pick("engineering=[rand(2,5)]","magnets=[rand(2,5)]","plasmatech=[rand(2,5)]","programming=[rand(2,5)]","powerstorage=[rand(2,5)]")
/obj/item/relic/attack_self(mob/user)
if(revealed)
+64 -9
View File
@@ -7,7 +7,7 @@ it creates. All the menus and other manipulation commands are in the R&D console
Note: Must be placed west/left of and R&D console to function.
*/
/obj/machinery/r_n_d/protolathe
/obj/machinery/rnd/protolathe
name = "protolathe"
desc = "Converts raw materials into useful objects."
icon_state = "protolathe"
@@ -15,7 +15,8 @@ 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",
@@ -32,8 +33,7 @@ Note: Must be placed west/left of and R&D console to function.
var/datum/component/material_container/materials
/obj/machinery/r_n_d/protolathe/Initialize()
/obj/machinery/rnd/protolathe/Initialize()
create_reagents(0)
materials = AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0,
@@ -41,7 +41,7 @@ Note: Must be placed west/left of and R&D console to function.
materials.precise_insertion = TRUE
return ..()
/obj/machinery/r_n_d/protolathe/RefreshParts()
/obj/machinery/rnd/protolathe/RefreshParts()
reagents.maximum_volume = 0
for(var/obj/item/reagent_containers/glass/G in component_parts)
reagents.maximum_volume += G.volume
@@ -57,7 +57,7 @@ Note: Must be placed west/left of and R&D console to function.
T -= M.rating/10
efficiency_coeff = min(max(0, T), 1)
/obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material
/obj/machinery/rnd/protolathe/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material
var/list/all_materials = being_built.reagents_list + being_built.materials
GET_COMPONENT(materials, /datum/component/material_container)
@@ -68,14 +68,69 @@ Note: Must be placed west/left of and R&D console to function.
return round(A / max(1, (all_materials[M]*efficiency_coeff)))
//we eject the materials upon deconstruction.
/obj/machinery/r_n_d/protolathe/on_deconstruction()
/obj/machinery/rnd/protolathe/on_deconstruction()
for(var/obj/item/reagent_containers/glass/G in component_parts)
reagents.trans_to(G, G.reagents.maximum_volume)
GET_COMPONENT(materials, /datum/component/material_container)
materials.retrieve_all()
..()
/obj/machinery/r_n_d/protolathe/disconnect_console()
/obj/machinery/rnd/protolathe/disconnect_console()
linked_console.linked_lathe = null
..()
/obj/machinery/rnd/protolathe/proc/user_try_print_id(id, amount)
if((!istype(linked_console) && requires_console) || !id)
return FALSE
if(istext(amount))
amount = text2num(amount)
if(isnull(amount))
amount = 1
var/datum/design/D = (linked_console || requires_console)? linked_console.stored_research.researched_designs[id] : get_techweb_design_by_id(id)
if(!istype(D))
return FALSE
if(D.make_reagents.len)
return FALSE
var/power = 1000
amount = Clamp(amount, 1, 10)
for(var/M in D.materials)
power += round(D.materials[M] * amount / 5)
power = max(3000, power)
use_power(power)
var/list/efficient_mats = list()
for(var/MAT in D.materials)
efficient_mats[MAT] = D.materials[MAT]*efficiency_coeff
if(!materials.has_materials(efficient_mats, amount))
say("Not enough materials to complete prototype[amount > 1? "s" : ""].")
return FALSE
for(var/R in D.reagents_list)
if(!reagents.has_reagent(R, D.reagents_list[R]*efficiency_coeff))
say("Not enough reagents to complete prototype[amount > 1? "s" : ""].")
return FALSE
materials.use_amount(efficient_mats, amount)
for(var/R in D.reagents_list)
reagents.remove_reagent(R, D.reagents_list[R]*efficiency_coeff)
busy = TRUE
flick("protolathe_n", src)
var/timecoeff = efficiency_coeff * D.lathe_time_factor
addtimer(CALLBACK(src, .proc/reset_busy), (32 * timecoeff * amount) ** 0.8)
addtimer(CALLBACK(src, .proc/do_print, D.build_path, amount, efficient_mats, D.dangerous_construction), (32 * timecoeff * amount) ** 0.8)
return TRUE
/obj/machinery/rnd/protolathe/proc/do_print(path, amount, list/matlist, notify_admins)
if(notify_admins)
if(usr)
usr.investigate_log("built [amount] of [path] at a protolathe.", INVESTIGATE_RESEARCH)
var/turf/T = get_turf(usr)
message_admins("[key_name(usr)][ADMIN_JMP(T)] has built [amount] of [path] at a protolathe at [COORD(usr)]")
for(var/i in 1 to amount)
var/obj/item/I = new path(get_turf(src))
if(!istype(I, /obj/item/stack/sheet) && !istype(I, /obj/item/ore/bluespace_crystal))
I.materials = matlist.Copy()
SSblackbox.record_feedback("nested_tally", "item_printed", amount, list("[type]", "[path]"))
-239
View File
@@ -1,239 +0,0 @@
/*
Research and Development System. (Designed specifically for the /tg/station 13 (Space Station 13) open source project)
///////////////Overview///////////////////
This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes
the "scientist" job is given this role) the tools necessiary to research new and better technologies. In general, the system works
by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses,
you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge).
A brief overview is below. For more details, see the related files.
////////////Game Use/////////////
The major research and development is performed using a combination of four machines:
- R&D Console: A computer console that allows you to manipulate the other devices that are linked to it and view/manipulate the
technologies you have researched so far.
- Protolathe: Used to make new hand-held devices and parts for larger devices. All metals and reagents as raw materials.
- Destructive Analyzer: You can put hand-held objects into it and it'll analyze them for technological advancements but it destroys
them in the process. Destroyed items will send their raw materials to a linked Protolathe (if any)
- Circuit Imprinter: Similar to the Protolathe, it allows for the construction of circuit boards. Uses glass and acid as the raw
materials.
While researching you are dealing with two different types of information: Technology Paths and Device Designs. Technology Paths
are the "Tech Trees" of the game. You start out with a number of them at the game start and they are improved by using the
Destructive Analyzer. By themselves, they don't do a whole lot. However, they unlock Device Designs. This is the information used
by the circuit imprinter and the protolathe to produce objects.
//EXISTING TECH
Each tech path should have at LEAST one item at every level (levels 1 - 20). This is to allow for a more fluid progression of the
researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then
level 5 or 7. Everything past that should be stuff you research.
Below is a checklist to make sure every tree is filled. As new items get added to R&D, add them here if there is an empty slot.
When thinking about new stuff, check here to see if there are any slots unfilled.
//MATERIALS
1 | Metal
2 | Solid Plasma
3 | Silver
4 | Gold, Super Capacitor
5 | Uranium, Nuclear Gun, SUPERPACMAN
6 | Diamond, MRSPACMAN
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//PLASMA TECH
1 |
2 | Solid Plasma
3 | Pacman Generator
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//POWER TECH
1 | Basic Capacitor, Basic Cell
2 | High-Capacity Cell (10,000)
3 | Super-Capacity Cell (20,000), Powersink, PACMAN
4 | SUPERPACMAN
5 | MRSPACMAN, Super Capacitor
6 | Hyper-Capacity Cell (30,000)
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//BLUE SPACE
1 |
2 | Teleporter Console Board
3 | Teleport Gun, Hand Tele
4 | Teleportation Scroll
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//BIOTECH
1 | Bruise Pack, Scalple
2 | PANDEMIC Board, Mass Spectrometer
3 | AI Core, Brains (MMI)
4 | MMI+Radio
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//MAGNETS
1 | Basic Sensor
2 | Comm Console Board
3 | Adv Sensor
4 | Adv Mass Spectrometer, Chameleon Projector
5 | Phasic Sensor
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//PROGRAMMING
1 | Arcade Board
2 | Sec Camera
3 | Cloning Machine Console Board
4 | AI Core, Intellicard
5 | Pico-Manipulator, Ultra-Micro-Laser
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//SYNDICATE
1 | Sleepypen
2 | TYRANT Module, Emag
3 | Power Sink
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
//COMBAT
1 | Flashbang, Mousetrap, Nettle
2 | Stun Baton
3 | Power Axe, Death Nettle, Nuclear Gun
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
*/
File diff suppressed because it is too large Load Diff
+26 -27
View File
@@ -3,7 +3,7 @@
//All devices that link into the R&D console fall into thise type for easy identification and some shared procs.
/obj/machinery/r_n_d
/obj/machinery/rnd
name = "R&D Device"
icon = 'icons/obj/machines/research.dmi'
density = TRUE
@@ -11,31 +11,34 @@
use_power = IDLE_POWER_USE
var/busy = FALSE
var/hacked = FALSE
var/disabled = 0
var/disabled = FALSE
var/shocked = FALSE
var/obj/machinery/computer/rdconsole/linked_console
var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer)
/obj/machinery/r_n_d/Initialize()
. = ..()
wires = new /datum/wires/r_n_d(src)
/obj/machinery/rnd/proc/reset_busy()
busy = FALSE
/obj/machinery/r_n_d/Destroy()
/obj/machinery/rnd/Initialize()
. = ..()
wires = new /datum/wires/rnd(src)
/obj/machinery/rnd/Destroy()
QDEL_NULL(wires)
return ..()
/obj/machinery/r_n_d/proc/shock(mob/user, prb)
/obj/machinery/rnd/proc/shock(mob/user, prb)
if(stat & (BROKEN|NOPOWER)) // unpowered, no shock
return 0
return FALSE
if(!prob(prb))
return 0
return FALSE
do_sparks(5, TRUE, src)
if (electrocute_mob(user, get_area(src), src, 0.7, TRUE))
return 1
return TRUE
else
return 0
return FALSE
/obj/machinery/r_n_d/attack_hand(mob/user)
/obj/machinery/rnd/attack_hand(mob/user)
if(shocked)
if(shock(user,50))
return
@@ -44,10 +47,10 @@
/obj/machinery/r_n_d/attackby(obj/item/O, mob/user, params)
/obj/machinery/rnd/attackby(obj/item/O, mob/user, params)
if (shocked)
if(shock(user,50))
return 1
return TRUE
if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O))
if(linked_console)
disconnect_console()
@@ -57,32 +60,28 @@
if(default_deconstruction_crowbar(O))
return
if(is_open_container() && O.is_open_container())
return 0 //inserting reagents into the machine
return FALSE //inserting reagents into the machine
if(Insert_Item(O, user))
return 1
return TRUE
else
return ..()
//to disconnect the machine from the r&d console it's linked to
/obj/machinery/r_n_d/proc/disconnect_console()
/obj/machinery/rnd/proc/disconnect_console()
linked_console = null
//proc used to handle inserting items or reagents into r_n_d machines
/obj/machinery/r_n_d/proc/Insert_Item(obj/item/I, mob/user)
//proc used to handle inserting items or reagents into rnd machines
/obj/machinery/rnd/proc/Insert_Item(obj/item/I, mob/user)
return
//whether the machine can have an item inserted in its current state.
/obj/machinery/r_n_d/proc/is_insertion_ready(mob/user)
/obj/machinery/rnd/proc/is_insertion_ready(mob/user)
if(panel_open)
to_chat(user, "<span class='warning'>You can't load [src] while it's opened!</span>")
return
if (disabled)
return
if (!linked_console) // Try to auto-connect to new RnD consoles nearby.
for(var/obj/machinery/computer/rdconsole/console in oview(3, src))
if(console.first_use)
console.SyncRDevices()
if(!linked_console)
to_chat(user, "<span class='warning'>[src] must be linked to an R&D console first!</span>")
return
@@ -98,16 +97,16 @@
if(loaded_item)
to_chat(user, "<span class='warning'>[src] is already loaded.</span>")
return
return 1
return TRUE
//we eject the loaded item when deconstructing the machine
/obj/machinery/r_n_d/on_deconstruction()
/obj/machinery/rnd/on_deconstruction()
if(loaded_item)
loaded_item.forceMove(loc)
..()
/obj/machinery/r_n_d/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
/obj/machinery/rnd/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
var/stack_name
if(ispath(type_inserted, /obj/item/ore/bluespace_crystal))
stack_name = "bluespace"
-371
View File
@@ -1,371 +0,0 @@
/*
General Explination:
The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the
various procs used to manipulate it. It has four variables and seven procs:
Variables:
- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc
(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech
but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess
with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to
refer to them since it makes it a bit easier to search through them for specific information.
- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this
list, it can't be improved. All the tech in this list are visible to the player.
- possible_designs is functionally identical to possbile_tech except it's for /datum/design.
- known_designs is functionally identical to known_tech except it's for /datum/design
Procs:
- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in
known_tech and at a high enough level.
- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design.
- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If
it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like
a player made tech?) you can.
- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs.
- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths
and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't
accidentally add "secret" tech to it.
- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When
it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to
the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher).
The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables:
- Name: Pretty obvious. This is often viewable to the players.
- Desc: Pretty obvious. Also player viewable.
- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it.
- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain
level in specific techs before you can produce them.
- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the
research holder datum.
*/
/***************************************************************
** Master Types **
** Includes all the helper procs and basic tech processing. **
***************************************************************/
/datum/research //Holder for all the existing, archived, and known tech. Individual to console.
//Datum/tech go here.
var/list/possible_tech = list() //List of all tech in the game that players have access to (barring special events).
var/list/known_tech = list() //List of locally known tech.
var/list/possible_designs = list() //List of all designs.
var/list/known_designs = list() //List of available designs.
/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated.
for(var/T in subtypesof(/datum/tech))
possible_tech += new T(src)
for(var/D in subtypesof(/datum/design))
possible_designs += new D(src)
RefreshResearch()
//Checks to see if tech has all the required pre-reqs.
//Input: datum/tech; Output: 0/1 (false/true)
/datum/research/proc/TechHasReqs(datum/tech/T)
if(T.req_tech.len == 0)
return TRUE
for(var/req in T.req_tech)
var/datum/tech/known = known_tech[req]
if(!known || known.level < T.req_tech[req])
return FALSE
return TRUE
//Checks to see if design has all the required pre-reqs.
//Input: datum/design; Output: 0/1 (false/true)
/datum/research/proc/DesignHasReqs(datum/design/D)//Heavily optimized -Sieve
if(D.req_tech.len == 0)
return TRUE
for(var/req in D.req_tech)
var/datum/tech/known = known_tech[req]
if(!known || known.level < D.req_tech[req])
return FALSE
return TRUE
//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed.
//Input: datum/tech; Output: Null
/datum/research/proc/AddTech2Known(datum/tech/T)
if(!T)
return
if(known_tech[T.id])
var/datum/tech/known = known_tech[T.id]
if(T.level > known.level)
known.level = T.level
return
known_tech[T.id] = T.copy()
/datum/research/proc/AddDesign2Known(datum/design/D)
if(known_designs[D.id])
return
known_designs[D.id] = D
//Refreshes known_tech and known_designs list.
//Input/Output: n/a
/datum/research/proc/RefreshResearch()
for(var/datum/tech/PT in possible_tech)
if(TechHasReqs(PT))
AddTech2Known(PT)
for(var/datum/design/PD in possible_designs)
if(DesignHasReqs(PD))
AddDesign2Known(PD)
for(var/v in known_tech)
var/datum/tech/T = known_tech[v]
T.level = Clamp(T.level, 0, 20)
return
//Refreshes the levels of a given tech.
//Input: Tech's ID and Level; Output: null
/datum/research/proc/UpdateTech(ID, level)
var/datum/tech/KT = known_tech[ID]
if(KT && KT.level <= level)
KT.level = max(KT.level + 1, level)
SSblackbox.log_research(KT.name, level)
//Checks if the origin level can raise current tech levels
//Input: Tech's ID and Level; Output: TRUE for yes, FALSE for no
/datum/research/proc/IsTechHigher(ID, level)
var/datum/tech/KT = known_tech[ID]
if(KT)
if(KT.level <= level)
return TRUE
else
return FALSE
/datum/research/proc/FindDesignByID(id)
return known_designs[id]
/datum/research/proc/LowerTech(tech_id,value)
var/datum/tech/T = known_tech[tech_id]
T.level = max(initial(T.level),T.level - value)
known_designs.Cut()
RefreshResearch()
//Autolathe files
/datum/research/autolathe/New()
for(var/T in (subtypesof(/datum/tech)))
possible_tech += new T(src)
for(var/path in subtypesof(/datum/design))
var/datum/design/D = new path(src)
possible_designs += D
if((D.build_type & AUTOLATHE) && ("initial" in D.category)) //autolathe starts without hacked designs
AddDesign2Known(D)
//Limb Grower files
/datum/research/limbgrower/New()
for(var/T in (subtypesof(/datum/tech)))
possible_tech += new T(src)
for(var/path in subtypesof(/datum/design))
var/datum/design/D = new path(src)
possible_designs += D
if((D.build_type & LIMBGROWER) && ("initial" in D.category))
AddDesign2Known(D)
/datum/research/autolathe/AddDesign2Known(datum/design/D)
if(!(D.build_type & AUTOLATHE))
return
..()
//Biogenerator files
/datum/research/biogenerator/New()
for(var/T in (subtypesof(/datum/tech)))
possible_tech += new T(src)
for(var/path in subtypesof(/datum/design))
var/datum/design/D = new path(src)
possible_designs += D
if((D.build_type & BIOGENERATOR) && ("initial" in D.category))
AddDesign2Known(D)
/datum/research/biogenerator/AddDesign2Known(datum/design/D)
if(!(D.build_type & BIOGENERATOR))
return
..()
//Smelter files
/datum/research/smelter/New()
for(var/T in (subtypesof(/datum/tech)))
possible_tech += new T(src)
for(var/path in subtypesof(/datum/design))
var/datum/design/D = new path(src)
possible_designs += D
if((D.build_type & SMELTER) && ("initial" in D.category))
AddDesign2Known(D)
/datum/research/smelter/AddDesign2Known(datum/design/D)
if(!(D.build_type & SMELTER))
return
..()
/***************************************************************
** Technology Datums **
** Includes all the various technoliges and what they make. **
***************************************************************/
/datum/tech //Datum of individual technologies.
var/name = "name" //Name of the technology.
var/desc = "description" //General description of what it does and what it makes.
var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols.
var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech.
var/rare = 1 //How much CentCom wants to get that tech. Used in supply shuttle tech cost calculation.
var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = #
//Trunk Technologies (don't require any other techs and you start knowning them).
/datum/tech/materials
name = "Materials Research"
desc = "Development of new and improved materials."
id = "materials"
/datum/tech/engineering
name = "Engineering Research"
desc = "Development of new and improved engineering parts and tools."
id = "engineering"
/datum/tech/plasmatech
name = "Plasma Research"
desc = "Research into the mysterious substance colloquially known as \"plasma\"."
id = "plasmatech"
rare = 3
/datum/tech/powerstorage
name = "Power Manipulation Technology"
desc = "The various technologies behind the storage and generation of electricity."
id = "powerstorage"
/datum/tech/bluespace
name = "\"Blue-space\" Research"
desc = "Research into the sub-reality known as \"blue-space\"."
id = "bluespace"
rare = 2
/datum/tech/biotech
name = "Biological Technology"
desc = "Research into the deeper mysteries of life and organic substances."
id = "biotech"
/datum/tech/combat
name = "Combat Systems Research"
desc = "The development of offensive and defensive systems."
id = "combat"
/datum/tech/magnets
name = "Electromagnetic Spectrum Research"
desc = "Research into the electromagnetic spectrum. No clue how they actually work, though."
id = "magnets"
/datum/tech/programming
name = "Data Theory Research"
desc = "The development of new computer and artificial intelligence and data storage systems."
id = "programming"
/datum/tech/syndicate
name = "Illegal Technologies Research"
desc = "The study of technologies that violate Nanotrasen regulations."
id = "syndicate"
rare = 4
//Secret Technologies (hidden by default, require rare items to reveal)
/datum/tech/abductor
name = "Alien Technologies Research"
desc = "The study of technologies used by the advanced alien race known as Abductors."
id = "abductor"
rare = 5
level = 0
/datum/tech/arcane
name = "Arcane Research"
desc = "When sufficiently analyzed, any magic becomes indistinguishable from technology."
id = "arcane"
rare = 5
level = 0
/*
//Branch Techs
/datum/tech/explosives
name = "Explosives Research"
desc = "The creation and application of explosive materials."
id = "explosives"
req_tech = list("materials" = 3)
/datum/tech/generators
name = "Power Generation Technology"
desc = "Research into more powerful and more reliable sources."
id = "generators"
req_tech = list("powerstorage" = 2)
/datum/tech/robotics
name = "Robotics Technology"
desc = "The development of advanced automated, autonomous machines."
id = "robotics"
req_tech = list("materials" = 3, "programming" = 3)
*/
/datum/tech/proc/getCost(var/current_level = null)
// Calculates tech disk's supply points sell cost
if(!current_level)
current_level = initial(level)
if(current_level >= level)
return 0
var/cost = 0
for(var/i=current_level+1, i<=level, i++)
if(i == initial(level))
continue
cost += i*rare
return cost
/datum/tech/proc/copy()
var/datum/tech/T = new type()
T.level = level
return T
/obj/item/disk/tech_disk
name = "technology disk"
desc = "A disk for storing technology data for further research."
icon_state = "datadisk0"
materials = list(MAT_METAL=300, MAT_GLASS=100)
var/list/tech_stored = list()
var/max_tech_stored = 1
/obj/item/disk/tech_disk/Initialize()
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
for(var/i in 1 to max_tech_stored)
tech_stored += null
/obj/item/disk/tech_disk/adv
name = "advanced technology disk"
desc = "A disk for storing technology data for further research. This one has extra storage space."
materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=50)
max_tech_stored = 5
/obj/item/disk/tech_disk/super_adv
name = "quantum technology disk"
desc = "A disk for storing technology data for further research. This one has extremely large storage space."
materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=100, MAT_GOLD=100)
max_tech_stored = 10
/obj/item/disk/tech_disk/debug
name = "\improper CentCom technology disk"
desc = "A debug item for research."
materials = list()
max_tech_stored = 0
/obj/item/disk/tech_disk/debug/Initialize()
. = ..()
var/list/techs = subtypesof(/datum/tech)
max_tech_stored = techs.len
for(var/V in techs)
var/datum/tech/T = new V()
tech_stored += T
T.level = 8
+22
View File
@@ -0,0 +1,22 @@
/obj/item/disk/tech_disk
name = "technology disk"
desc = "A disk for storing technology data for further research."
icon_state = "datadisk0"
materials = list(MAT_METAL=300, MAT_GLASS=100)
var/datum/techweb/stored_research
/obj/item/disk/tech_disk/Initialize()
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
stored_research = new /datum/techweb
/obj/item/disk/tech_disk/debug
name = "centcomm technology disk"
desc = "A debug item for research"
materials = list()
/obj/item/disk/tech_disk/debug/Initialize()
. = ..()
stored_research = new /datum/techweb/admin
+41 -201
View File
@@ -1,99 +1,65 @@
/obj/machinery/r_n_d/server
/obj/machinery/rnd/server
name = "\improper R&D Server"
desc = "A computer system running a deep neural network that processes arbitrary information to produce data useable in the development of new technologies. In layman's terms, it makes research points."
icon = 'icons/obj/machines/research.dmi'
icon_state = "server"
var/datum/research/files
var/datum/techweb/stored_research
var/heat_health = 100
var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
var/list/id_with_download = list() //List of R&D consoles with download from server access.
var/id_with_upload_string = "" //String versions for easy editing in map editor.
var/id_with_download_string = ""
//Code for point mining here.
var/working = TRUE //temperature should break it.
var/server_id = 0
var/base_mining_income = 2
var/heat_gen = 100
var/heating_power = 40000
var/delay = 10
var/delay = 5
var/temp_tolerance_low = 0
var/temp_tolerance_high = T20C
var/temp_penalty_coefficient = 0.5 //1 = -1 points per degree above high tolerance. 0.5 = -0.5 points per degree above high tolerance.
req_access = list(ACCESS_RD) //ONLY THE R&D CAN CHANGE SERVER SETTINGS.
/obj/machinery/r_n_d/server/Initialize()
/obj/machinery/rnd/server/Initialize()
. = ..()
SSresearch.servers |= src
stored_research = SSresearch.science_tech
var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/rdserver(null)
B.apply_default_parts(src)
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
/obj/machinery/rnd/server/Destroy()
SSresearch.servers -= src
return ..()
/obj/machinery/r_n_d/server/RefreshParts()
/obj/machinery/rnd/server/RefreshParts()
var/tot_rating = 0
for(var/obj/item/stock_parts/SP in src)
tot_rating += SP.rating
heat_gen /= max(1, tot_rating)
/obj/machinery/r_n_d/server/Initialize(mapload)
. = ..()
if(!files)
files = new /datum/research(src)
var/list/temp_list
if(!id_with_upload.len)
temp_list = list()
temp_list = splittext(id_with_upload_string, ";")
for(var/N in temp_list)
id_with_upload += text2num(N)
if(!id_with_download.len)
temp_list = list()
temp_list = splittext(id_with_download_string, ";")
for(var/N in temp_list)
id_with_download += text2num(N)
/obj/machinery/r_n_d/server/process()
var/datum/gas_mixture/environment = loc.return_air()
switch(environment.temperature)
if(0 to T0C)
heat_health = min(100, heat_health + 1)
if(T0C to (T20C + 20))
heat_health = Clamp(heat_health, 0, 100)
if((T20C + 20) to (T0C + 70))
heat_health = max(0, heat_health - 1)
if(heat_health <= 0)
/*griefProtection() This seems to get called twice before running any code that deletes/damages the server or it's files anwyay.
refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */
var/updateRD = 0
files.known_designs = list()
for(var/v in files.known_tech)
var/datum/tech/T = files.known_tech[v]
if(prob(1))
updateRD++
T.level--
if(updateRD)
files.RefreshResearch()
if(delay)
delay--
/obj/machinery/rnd/server/proc/refresh_working()
if(stat & EMPED)
working = FALSE
else
produce_heat(heat_gen)
delay = initial(delay)
working = TRUE
/obj/machinery/rnd/server/emp_act()
stat |= EMPED
addtimer(CALLBACK(src, .proc/unemp), 600)
refresh_working()
return ..()
/obj/machinery/r_n_d/server/emp_act(severity)
griefProtection()
..()
/obj/machinery/rnd/server/proc/unemp()
stat &= ~EMPED
refresh_working()
/obj/machinery/r_n_d/server/ex_act(severity, target)
griefProtection()
..()
/obj/machinery/rnd/server/proc/mine()
. = base_mining_income
var/penalty = max((get_env_temp() - temp_tolerance_low), 0) / temp_penalty_coefficient
. = max(. - penalty, 0)
//Backup files to centcom to help admins recover data after greifer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in GLOB.machines)
for(var/v in files.known_tech)
var/datum/tech/T = files.known_tech[v]
C.files.AddTech2Known(T)
for(var/v in files.known_designs)
var/datum/design/D = files.known_designs[v]
C.files.AddDesign2Known(D)
C.files.RefreshResearch()
/obj/machinery/rnd/server/proc/get_env_temp()
var/datum/gas_mixture/environment = loc.return_air()
return environment.temperature
/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
/obj/machinery/rnd/server/proc/produce_heat(heat_amt)
if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
var/turf/L = loc
if(istype(L))
@@ -114,30 +80,17 @@
env.merge(removed)
air_update_turf()
//called when the server is deconstructed.
/obj/machinery/r_n_d/server/on_deconstruction()
griefProtection()
..()
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
/obj/machinery/rnd/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
if (disabled)
return
if (shocked)
shock(user,50)
return
/obj/machinery/r_n_d/server/centcom
name = "CentCom Central R&D Database"
server_id = -1
/obj/machinery/r_n_d/server/centcom/Initialize()
. = ..()
fix_noid_research_servers()
/proc/fix_noid_research_servers()
var/list/no_id_servers = list()
var/list/server_ids = list()
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
for(var/obj/machinery/rnd/server/S in GLOB.machines)
switch(S.server_id)
if(-1)
continue
@@ -146,7 +99,7 @@
else
server_ids += S.server_id
for(var/obj/machinery/r_n_d/server/S in no_id_servers)
for(var/obj/machinery/rnd/server/S in no_id_servers)
var/num = 1
while(!S.server_id)
if(num in server_ids)
@@ -156,9 +109,6 @@
server_ids += num
no_id_servers -= S
/obj/machinery/r_n_d/server/centcom/process()
return PROCESS_KILL //don't need process()
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
@@ -166,7 +116,7 @@
icon_screen = "rdcomp"
icon_keyboard = "rd_key"
var/screen = 0
var/obj/machinery/r_n_d/server/temp_server
var/obj/machinery/rnd/server/temp_server
var/list/servers = list()
var/list/consoles = list()
var/badmin = 0
@@ -185,58 +135,6 @@
if(href_list["main"])
screen = 0
else if(href_list["access"] || href_list["data"] || href_list["transfer"])
temp_server = null
consoles = list()
servers = list()
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"]))
temp_server = S
break
if(href_list["access"])
screen = 1
for(var/obj/machinery/computer/rdconsole/C in GLOB.machines)
if(C.sync)
consoles += C
else if(href_list["data"])
screen = 2
else if(href_list["transfer"])
screen = 3
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(S == src)
continue
servers += S
else if(href_list["upload_toggle"])
var/num = text2num(href_list["upload_toggle"])
if(num in temp_server.id_with_upload)
temp_server.id_with_upload -= num
else
temp_server.id_with_upload += num
else if(href_list["download_toggle"])
var/num = text2num(href_list["download_toggle"])
if(num in temp_server.id_with_download)
temp_server.id_with_download -= num
else
temp_server.id_with_download += num
else if(href_list["reset_tech"])
var/choice = alert("Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel")
if(choice == "Continue" && usr.canUseTopic(src))
var/datum/tech/T = temp_server.files.known_tech[href_list["reset_tech"]]
if(T)
T.level = 1
temp_server.files.RefreshResearch()
else if(href_list["reset_design"])
var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? Data lost cannot be recovered.", "Continue", "Cancel")
if(choice == "Continue" && usr.canUseTopic(src))
var/datum/design/D = temp_server.files.known_designs[href_list["reset_design"]]
if(D)
temp_server.files.known_designs -= D.id
temp_server.files.RefreshResearch()
updateUsrDialog()
return
@@ -250,58 +148,12 @@
if(0) //Main Menu
dat += "Connected Servers:<BR><BR>"
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin)
continue
for(var/obj/machinery/rnd/server/S in GLOB.machines)
dat += "[S.name] || "
dat += "<A href='?src=[REF(src)];access=[S.server_id]'>Access Rights</A> | "
dat += "<A href='?src=[REF(src)];data=[S.server_id]'>Data Management</A>"
if(badmin)
dat += " | <A href='?src=[REF(src)];transfer=[S.server_id]'>Server-to-Server Transfer</A>"
dat += "<BR>"
if(1) //Access rights menu
dat += "[temp_server.name] Access Rights<BR><BR>"
dat += "Consoles with Upload Access<BR>"
for(var/obj/machinery/computer/rdconsole/C in consoles)
var/turf/console_turf = get_turf(C)
dat += "* <A href='?src=[REF(src)];upload_toggle=[C.id]'>[console_turf.loc]" //FYI, these are all numeric ids, eventually.
if(C.id in temp_server.id_with_upload)
dat += " (Remove)</A><BR>"
else
dat += " (Add)</A><BR>"
dat += "Consoles with Download Access<BR>"
for(var/obj/machinery/computer/rdconsole/C in consoles)
var/turf/console_turf = get_turf(C)
dat += "* <A href='?src=[REF(src)];download_toggle=[C.id]'>[console_turf.loc]"
if(C.id in temp_server.id_with_download)
dat += " (Remove)</A><BR>"
else
dat += " (Add)</A><BR>"
dat += "<HR><A href='?src=[REF(src)];main=1'>Main Menu</A>"
//Mining status here
if(2) //Data Management menu
dat += "[temp_server.name] Data ManagementP<BR><BR>"
dat += "Known Technologies<BR>"
for(var/v in temp_server.files.known_tech)
var/datum/tech/T = temp_server.files.known_tech[v]
if(T.level <= 0)
continue
dat += "* [T.name] "
dat += "<A href='?src=[REF(src)];reset_tech=[T.id]'>(Reset)</A><BR>" //FYI, these are all strings.
dat += "Known Designs<BR>"
for(var/v in temp_server.files.known_designs)
var/datum/design/D = temp_server.files.known_designs[v]
dat += "* [D.name] "
dat += "<A href='?src=[REF(src)];reset_design=[D.id]'>(Delete)</A><BR>"
dat += "<HR><A href='?src=[REF(src)];main=1'>Main Menu</A>"
if(3) //Server Data Transfer
dat += "[temp_server.name] Server to Server Transfer<BR><BR>"
dat += "Send Data to what server?<BR>"
for(var/obj/machinery/r_n_d/server/S in servers)
dat += "[S.name] <A href='?src=[REF(src)];send_to=[S.server_id]'>(Transfer)</A><BR>"
dat += "<HR><A href='?src=[REF(src)];main=1'>Main Menu</A>"
user << browse("<TITLE>R&D Server Control</TITLE><HR>[dat]", "window=server_control;size=575x400")
onclose(user, "server_control")
return
@@ -317,15 +169,3 @@
emagged = TRUE
to_chat(user, "<span class='notice'>You you disable the security protocols.</span>")
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
id_with_upload_string = "1;2"
id_with_download_string = "1;2"
server_id = 2
/obj/machinery/r_n_d/server/core
name = "Core R&D Server"
id_with_upload_string = "1"
id_with_download_string = "1"
server_id = 1
+1 -28
View File
@@ -82,39 +82,35 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
//Rating 1
/obj/item/stock_parts/capacitor
name = "capacitor"
desc = "A basic capacitor used in the construction of a variety of devices."
icon_state = "capacitor"
origin_tech = "powerstorage=1"
materials = list(MAT_METAL=50, MAT_GLASS=50)
/obj/item/stock_parts/scanning_module
name = "scanning module"
desc = "A compact, high resolution scanning module used in the construction of certain devices."
icon_state = "scan_module"
origin_tech = "magnets=1"
materials = list(MAT_METAL=50, MAT_GLASS=20)
/obj/item/stock_parts/manipulator
name = "micro-manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "micro_mani"
origin_tech = "materials=1;programming=1"
materials = list(MAT_METAL=30)
/obj/item/stock_parts/micro_laser
name = "micro-laser"
desc = "A tiny laser used in certain devices."
icon_state = "micro_laser"
origin_tech = "magnets=1"
materials = list(MAT_METAL=10, MAT_GLASS=20)
/obj/item/stock_parts/matter_bin
name = "matter bin"
desc = "A container designed to hold compressed matter awaiting reconstruction."
icon_state = "matter_bin"
origin_tech = "materials=1"
materials = list(MAT_METAL=80)
//Rating 2
@@ -123,7 +119,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "advanced capacitor"
desc = "An advanced capacitor used in the construction of a variety of devices."
icon_state = "adv_capacitor"
origin_tech = "powerstorage=3"
rating = 2
materials = list(MAT_METAL=50, MAT_GLASS=50)
@@ -131,7 +126,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "advanced scanning module"
desc = "A compact, high resolution scanning module used in the construction of certain devices."
icon_state = "adv_scan_module"
origin_tech = "magnets=3"
rating = 2
materials = list(MAT_METAL=50, MAT_GLASS=20)
@@ -139,7 +133,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "nano-manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "nano_mani"
origin_tech = "materials=3;programming=2"
rating = 2
materials = list(MAT_METAL=30)
@@ -147,7 +140,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "high-power micro-laser"
desc = "A tiny laser used in certain devices."
icon_state = "high_micro_laser"
origin_tech = "magnets=3"
rating = 2
materials = list(MAT_METAL=10, MAT_GLASS=20)
@@ -155,7 +147,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "advanced matter bin"
desc = "A container designed to hold compressed matter awaiting reconstruction."
icon_state = "advanced_matter_bin"
origin_tech = "materials=3"
rating = 2
materials = list(MAT_METAL=80)
@@ -165,7 +156,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "super capacitor"
desc = "A super-high capacity capacitor used in the construction of a variety of devices."
icon_state = "super_capacitor"
origin_tech = "powerstorage=4;engineering=4"
rating = 3
materials = list(MAT_METAL=50, MAT_GLASS=50)
@@ -173,7 +163,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "phasic scanning module"
desc = "A compact, high resolution phasic scanning module used in the construction of certain devices."
icon_state = "super_scan_module"
origin_tech = "magnets=4;engineering=4"
rating = 3
materials = list(MAT_METAL=50, MAT_GLASS=20)
@@ -181,7 +170,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "pico-manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "pico_mani"
origin_tech = "materials=4;programming=4;engineering=4"
rating = 3
materials = list(MAT_METAL=30)
@@ -189,7 +177,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "ultra-high-power micro-laser"
icon_state = "ultra_high_micro_laser"
desc = "A tiny laser used in certain devices."
origin_tech = "magnets=4;engineering=4"
rating = 3
materials = list(MAT_METAL=10, MAT_GLASS=20)
@@ -197,7 +184,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "super matter bin"
desc = "A container designed to hold compressed matter awaiting reconstruction."
icon_state = "super_matter_bin"
origin_tech = "materials=4;engineering=4"
rating = 3
materials = list(MAT_METAL=80)
@@ -207,7 +193,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "quadratic capacitor"
desc = "An capacity capacitor used in the construction of a variety of devices."
icon_state = "quadratic_capacitor"
origin_tech = "powerstorage=5;materials=4;engineering=4"
rating = 4
materials = list(MAT_METAL=50, MAT_GLASS=50)
@@ -215,7 +200,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "triphasic scanning module"
desc = "A compact, ultra resolution triphasic scanning module used in the construction of certain devices."
icon_state = "triphasic_scan_module"
origin_tech = "magnets=5;materials=4;engineering=4"
rating = 4
materials = list(MAT_METAL=50, MAT_GLASS=20)
@@ -223,7 +207,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "femto-manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "femto_mani"
origin_tech = "materials=6;programming=4;engineering=4"
rating = 4
materials = list(MAT_METAL=30)
@@ -231,7 +214,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "quad-ultra micro-laser"
icon_state = "quadultra_micro_laser"
desc = "A tiny laser used in certain devices."
origin_tech = "magnets=5;materials=4;engineering=4"
rating = 4
materials = list(MAT_METAL=10, MAT_GLASS=20)
@@ -239,7 +221,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "bluespace matter bin"
desc = "A container designed to hold compressed matter awaiting reconstruction."
icon_state = "bluespace_matter_bin"
origin_tech = "materials=6;programming=4;engineering=4"
rating = 4
materials = list(MAT_METAL=80)
@@ -249,49 +230,42 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
name = "subspace ansible"
icon_state = "subspace_ansible"
desc = "A compact module capable of sensing extradimensional activity."
origin_tech = "programming=2;magnets=2;materials=2;bluespace=1"
materials = list(MAT_METAL=30, MAT_GLASS=10)
/obj/item/stock_parts/subspace/filter
name = "hyperwave filter"
icon_state = "hyperwave_filter"
desc = "A tiny device capable of filtering and converting super-intense radiowaves."
origin_tech = "programming=2;magnets=2"
materials = list(MAT_METAL=30, MAT_GLASS=10)
/obj/item/stock_parts/subspace/amplifier
name = "subspace amplifier"
icon_state = "subspace_amplifier"
desc = "A compact micro-machine capable of amplifying weak subspace transmissions."
origin_tech = "programming=2;magnets=2;materials=2;bluespace=2"
materials = list(MAT_METAL=30, MAT_GLASS=10)
/obj/item/stock_parts/subspace/treatment
name = "subspace treatment disk"
icon_state = "treatment_disk"
desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves."
origin_tech = "programming=2;magnets=2;materials=2;bluespace=2"
materials = list(MAT_METAL=30, MAT_GLASS=10)
/obj/item/stock_parts/subspace/analyzer
name = "subspace wavelength analyzer"
icon_state = "wavelength_analyzer"
desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths."
origin_tech = "programming=2;magnets=2;materials=2;bluespace=2"
materials = list(MAT_METAL=30, MAT_GLASS=10)
/obj/item/stock_parts/subspace/crystal
name = "ansible crystal"
icon_state = "ansible_crystal"
desc = "A crystal made from pure glass used to transmit laser databursts to subspace."
origin_tech = "magnets=2;materials=2;bluespace=2;plasmatech=2"
materials = list(MAT_GLASS=50)
/obj/item/stock_parts/subspace/transmitter
name = "subspace transmitter"
icon_state = "subspace_transmitter"
desc = "A large piece of equipment used to open a window into the subspace dimension."
origin_tech = "magnets=2;materials=2;bluespace=2"
materials = list(MAT_METAL=50)
/obj/item/research//Makes testing much less of a pain -Sieve
@@ -299,4 +273,3 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
icon = 'icons/obj/stock_parts.dmi'
icon_state = "capacitor"
desc = "A debug item for research."
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8;abductor=8"
@@ -0,0 +1,178 @@
/proc/initialize_all_techweb_nodes(clearall = FALSE)
if(islist(SSresearch.techweb_nodes) && clearall)
QDEL_LIST(SSresearch.techweb_nodes)
if(islist(SSresearch.techweb_nodes_starting && clearall))
QDEL_LIST(SSresearch.techweb_nodes_starting)
var/list/returned = list()
for(var/path in subtypesof(/datum/techweb_node))
var/datum/techweb_node/TN = path
if(isnull(initial(TN.id)))
continue
TN = new path
if(returned[initial(TN.id)])
stack_trace("WARNING: Techweb node ID clash with ID [initial(TN.id)] detected!")
SSresearch.errored_datums[TN] = initial(TN.id)
continue
returned[initial(TN.id)] = TN
if(TN.starting_node)
SSresearch.techweb_nodes_starting[TN.id] = TN
SSresearch.techweb_nodes = returned
verify_techweb_nodes() //Verify all nodes have ids and such.
calculate_techweb_nodes()
calculate_techweb_boost_list()
verify_techweb_nodes() //Verify nodes and designs have been crosslinked properly.
/proc/initialize_all_techweb_designs(clearall = FALSE)
if(islist(SSresearch.techweb_designs) && clearall)
QDEL_LIST(SSresearch.techweb_designs)
var/list/returned = list()
for(var/path in subtypesof(/datum/design))
var/datum/design/DN = path
if(isnull(initial(DN.id)))
stack_trace("WARNING: Design with null ID detected. Build path: [initial(DN.build_path)]")
continue
else if(initial(DN.id) == DESIGN_ID_IGNORE)
continue
DN = new path
if(returned[initial(DN.id)])
stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected!")
SSresearch.errored_datums[DN] = initial(DN.id)
continue
returned[initial(DN.id)] = DN
SSresearch.techweb_designs = returned
verify_techweb_designs()
/proc/count_unique_techweb_nodes()
var/static/list/L = typesof(/datum/techweb_node)
return L.len
/proc/count_unique_techweb_designs()
var/static/list/L = typesof(/datum/design)
return L.len
/proc/get_techweb_node_by_id(id)
if(SSresearch.techweb_nodes[id])
return SSresearch.techweb_nodes[id]
/proc/get_techweb_design_by_id(id)
if(SSresearch.techweb_designs[id])
return SSresearch.techweb_designs[id]
/proc/research_node_id_error(id)
if(SSresearch.invalid_node_ids[id])
SSresearch.invalid_node_ids[id]++
else
SSresearch.invalid_node_ids[id] = 1
/proc/design_id_error(id)
if(SSresearch.invalid_design_ids[id])
SSresearch.invalid_design_ids[id]++
else
SSresearch.invalid_design_ids[id] = 1
/proc/node_boost_error(id, message)
SSresearch.invalid_node_boost[id] = message
/proc/verify_techweb_nodes()
for(var/n in SSresearch.techweb_nodes)
var/datum/techweb_node/N = SSresearch.techweb_nodes[n]
if(!istype(N))
stack_trace("WARNING: Invalid research node with ID [n] detected and removed.")
SSresearch.techweb_nodes -= n
research_node_id_error(n)
for(var/p in N.prereq_ids)
var/datum/techweb_node/P = SSresearch.techweb_nodes[p]
if(!istype(P))
stack_trace("WARNING: Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.")
N.prereq_ids -= p
research_node_id_error(p)
for(var/d in N.design_ids)
var/datum/design/D = SSresearch.techweb_designs[d]
if(!istype(D))
stack_trace("WARNING: Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.")
N.designs -= d
design_id_error(d)
for(var/p in N.prerequisites)
var/datum/techweb_node/P = N.prerequisites[p]
if(!istype(P))
stack_trace("WARNING: Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.")
N.prerequisites -= p
research_node_id_error(p)
for(var/u in N.unlocks)
var/datum/techweb_node/U = N.unlocks[u]
if(!istype(U))
stack_trace("WARNING: Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.")
N.unlocks -= u
research_node_id_error(u)
for(var/d in N.designs)
var/datum/design/D = N.designs[d]
if(!istype(D))
stack_trace("WARNING: Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.")
N.designs -= d
design_id_error(d)
for(var/p in N.boost_item_paths)
if(!ispath(p))
N.boost_item_paths -= p
node_boost_error(N.id, "[p] is not a valid path.")
var/num = N.boost_item_paths[p]
if(!isnum(num))
N.boost_item_paths -= p
node_boost_error(N.id, "[num] is not a valid number.")
CHECK_TICK
/proc/verify_techweb_designs()
for(var/d in SSresearch.techweb_designs)
var/datum/design/D = SSresearch.techweb_designs[d]
if(!istype(D))
stack_trace("WARNING: Invalid research design with ID [d] detected and removed.")
SSresearch.techweb_designs -= d
CHECK_TICK
/proc/calculate_techweb_nodes()
for(var/node_id in SSresearch.techweb_nodes)
var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id]
node.prerequisites = list()
node.unlocks = list()
node.designs = list()
for(var/i in node.prereq_ids)
node.prerequisites[i] = SSresearch.techweb_nodes[i]
for(var/i in node.design_ids)
node.designs[i] = SSresearch.techweb_designs[i]
if(node.hidden)
SSresearch.techweb_nodes_hidden[node.id] = node
CHECK_TICK
generate_techweb_unlock_linking()
/proc/generate_techweb_unlock_linking()
for(var/node_id in SSresearch.techweb_nodes) //Clear all unlock links to avoid duplication.
var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id]
node.unlocks = list()
for(var/node_id in SSresearch.techweb_nodes)
var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id]
for(var/prereq_id in node.prerequisites)
var/datum/techweb_node/prereq_node = node.prerequisites[prereq_id]
prereq_node.unlocks[node.id] = node
/proc/calculate_techweb_boost_list(clearall = FALSE)
if(clearall)
SSresearch.techweb_boost_items = list()
for(var/node_id in SSresearch.techweb_nodes)
var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id]
for(var/path in node.boost_item_paths)
if(!ispath(path))
continue
if(length(SSresearch.techweb_boost_items[path]))
SSresearch.techweb_boost_items[path] += list(node.id = node.boost_item_paths[path])
else
SSresearch.techweb_boost_items[path] = list(node.id = node.boost_item_paths[path])
CHECK_TICK
/proc/techweb_item_boost_check(obj/item/I) //Returns an associative list of techweb node datums with values of the boost it gives. var/list/returned = list()
if(SSresearch.techweb_boost_items[I.type])
return SSresearch.techweb_boost_items[I.type] //It should already be formatted in node datum = value.
/proc/techweb_item_point_check(obj/item/I)
if(SSresearch.techweb_point_items[I.type])
return SSresearch.techweb_point_items[I.type]
return 0
+273
View File
@@ -0,0 +1,273 @@
//Used \n[\s]*origin_tech[\s]*=[\s]*"[\S]+" to delete all origin techs.
//Or \n[\s]*origin_tech[\s]*=[\s]list\([A-Z_\s=0-9,]*\)
//Used \n[\s]*req_tech[\s]*=[\s]*list\(["a-z\s=0-9,]*\) to delete all req_techs.
//Techweb datums are meant to store unlocked research, being able to be stored on research consoles, servers, and disks. They are NOT global.
/datum/techweb
var/list/datum/techweb_node/researched_nodes = list() //Already unlocked and all designs are now available. Assoc list, id = datum
var/list/datum/techweb_node/visible_nodes = list() //Visible nodes, doesn't mean it can be researched. Assoc list, id = datum
var/list/datum/techweb_node/available_nodes = list() //Nodes that can immediately be researched, all reqs met. assoc list, id = datum
var/list/datum/design/researched_designs = list() //Designs that are available for use. Assoc list, id = datum
var/list/datum/techweb_node/boosted_nodes = list() //Already boosted nodes that can't be boosted again. node datum = path of boost object.
var/list/datum/techweb_node/hidden_nodes = list() //Hidden nodes. id = datum. Used for unhiding nodes when requirements are met by removing the entry of the node.
var/list/deconstructed_items = list() //items already deconstructed for a generic point boost
var/research_points = 0 //Available research points.
var/list/obj/machinery/computer/rdconsole/consoles_accessing = list()
var/id = "generic"
var/list/research_logs = list() //IC logs.
var/max_bomb_value = 0
/datum/techweb/New()
for(var/i in SSresearch.techweb_nodes_starting)
var/datum/techweb_node/DN = SSresearch.techweb_nodes_starting[i]
research_node(DN, TRUE, FALSE)
hidden_nodes = SSresearch.techweb_nodes_hidden
return ..()
/datum/techweb/admin
research_points = INFINITY //KEKKLES.
id = "ADMIN"
/datum/techweb/admin/New() //All unlocked.
. = ..()
for(var/i in SSresearch.techweb_nodes)
var/datum/techweb_node/TN = SSresearch.techweb_nodes[i]
research_node(TN, TRUE)
hidden_nodes = list()
/datum/techweb/science //Global science techweb for RND consoles.
id = "SCIENCE"
/datum/techweb/Destroy()
researched_nodes = null
researched_designs = null
available_nodes = null
visible_nodes = null
return ..()
/datum/techweb/proc/recalculate_nodes(recalculate_designs = FALSE)
var/list/datum/techweb_node/processing = list()
for(var/i in researched_nodes)
processing[i] = researched_nodes[i]
for(var/i in visible_nodes)
processing[i] = visible_nodes[i]
for(var/i in available_nodes)
processing[i] = available_nodes[i]
for(var/i in processing)
update_node_status(processing[i])
if(recalculate_designs) //Wipes custom added designs like from design disks or anything like that!
researched_designs = list()
for(var/i in processing)
var/datum/techweb_node/TN = processing[i]
update_node_status(TN, FALSE)
CHECK_TICK
for(var/v in consoles_accessing)
var/obj/machinery/computer/rdconsole/V = v
V.rescan_views()
V.updateUsrDialog()
/datum/techweb/proc/copy_research_to(datum/techweb/reciever, unlock_hidden = TRUE) //Adds any missing research to theirs.
for(var/i in researched_nodes)
CHECK_TICK
reciever.research_node_id(i, TRUE, FALSE)
for(var/i in researched_designs)
CHECK_TICK
reciever.add_design_by_id(i)
if(unlock_hidden)
for(var/i in reciever.hidden_nodes)
CHECK_TICK
if(!hidden_nodes[i])
reciever.hidden_nodes -= i //We can see it so let them see it too.
reciever.recalculate_nodes()
/datum/techweb/proc/copy()
var/datum/techweb/returned = new()
returned.researched_nodes = researched_nodes.Copy()
returned.visible_nodes = visible_nodes.Copy()
returned.available_nodes = available_nodes.Copy()
returned.researched_designs = researched_designs.Copy()
returned.hidden_nodes = hidden_nodes.Copy()
return returned
/datum/techweb/proc/get_visible_nodes() //The way this is set up is shit but whatever.
return visible_nodes - hidden_nodes
/datum/techweb/proc/get_available_nodes()
return available_nodes - hidden_nodes
/datum/techweb/proc/get_researched_nodes()
return researched_nodes - hidden_nodes
/datum/techweb/proc/add_design_by_id(id)
return add_design(get_techweb_design_by_id(id))
/datum/techweb/proc/add_design(datum/design/design)
if(!istype(design))
return FALSE
researched_designs[design.id] = design
return TRUE
/datum/techweb/proc/remove_design_by_id(id)
return remove_design(get_techweb_design_by_id(id))
/datum/techweb/proc/remove_design(datum/design/design)
if(!istype(design))
return FALSE
researched_designs -= design.id
return TRUE
/datum/techweb/proc/research_node_id(id, force, auto_update_points)
return research_node(get_techweb_node_by_id(id), force, auto_update_points)
/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE)
if(!istype(node))
return FALSE
update_node_status(node)
if(!force)
if(!available_nodes[node.id] || (auto_adjust_cost && (research_points < node.get_price(src))))
return FALSE
if(auto_adjust_cost)
research_points -= node.get_price(src)
researched_nodes[node.id] = node //Add to our researched list
for(var/i in node.unlocks)
visible_nodes[i] = node.unlocks[i]
update_node_status(node.unlocks[i])
for(var/i in node.designs)
add_design(node.designs[i])
update_node_status(node)
return TRUE
/datum/techweb/proc/unresearch_node_id(id)
return unresearch_node(get_techweb_node_by_id(id))
/datum/techweb/proc/unresearch_node(datum/techweb_node/node)
if(!istype(node))
return FALSE
researched_nodes -= node.id
recalculate_nodes(TRUE) //Fully rebuild the tree.
/datum/techweb/proc/boost_with_path(datum/techweb_node/N, itempath)
if(!istype(N)||!ispath(itempath))
return FALSE
var/boost = N.boost_item_paths[itempath]
if(!boosted_nodes[N])
boosted_nodes[N] = boost
if(N.autounlock_by_boost)
hidden_nodes -= N.id
return TRUE
/datum/techweb/proc/update_node_status(datum/techweb_node/node, autoupdate_consoles = TRUE)
var/researched = FALSE
var/available = FALSE
var/visible = FALSE
if(researched_nodes[node.id])
researched = TRUE
var/needed = node.prereq_ids.len
for(var/i in node.prereq_ids)
if(researched_nodes[i])
visible = TRUE
needed--
if(!needed)
available = TRUE
researched_nodes -= node.id
available_nodes -= node.id
visible_nodes -= node.id
if(hidden_nodes[node.id]) //Hidden.
return
if(researched)
researched_nodes[node.id] = node
for(var/i in node.designs)
add_design(node.designs[i])
else
if(available)
available_nodes[node.id] = node
else
if(visible)
visible_nodes[node.id] = node
if(autoupdate_consoles)
for(var/v in consoles_accessing)
var/obj/machinery/computer/rdconsole/V = v
V.rescan_views()
V.updateUsrDialog()
//Laggy procs to do specific checks, just in case. Don't use them if you can just use the vars that already store all this!
/datum/techweb/proc/designHasReqs(datum/design/D)
for(var/i in researched_nodes)
var/datum/techweb_node/N = researched_nodes[i]
for(var/I in N.designs)
if(D == N.designs[I])
return TRUE
return FALSE
/datum/techweb/proc/isDesignResearched(datum/design/D)
return isDesignResearchedID(D.id)
/datum/techweb/proc/isDesignResearchedID(id)
return researched_designs[id]
/datum/techweb/proc/isNodeResearched(datum/techweb_node/N)
return isNodeResearchedID(N.id)
/datum/techweb/proc/isNodeResearchedID(id)
return researched_nodes[id]
/datum/techweb/proc/isNodeVisible(datum/techweb_node/N)
return isNodeResearchedID(N.id)
/datum/techweb/proc/isNodeVisibleID(id)
return visible_nodes[id]
/datum/techweb/proc/isNodeAvailable(datum/techweb_node/N)
return isNodeAvailableID(N.id)
/datum/techweb/proc/isNodeAvailableID(id)
return available_nodes[id]
/datum/techweb/specialized
var/allowed_buildtypes = ALL
/datum/techweb/specialized/add_design(datum/design/D)
if(!(D.build_type & allowed_buildtypes))
return FALSE
return ..()
/datum/techweb/specialized/autounlocking
var/design_autounlock_buildtypes = NONE
var/design_autounlock_categories = list("initial") //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it.
var/node_autounlock_ids = list() //autounlock nodes of this type.
/datum/techweb/specialized/autounlocking/New()
..()
autounlock()
/datum/techweb/specialized/autounlocking/proc/autounlock()
for(var/id in node_autounlock_ids)
research_node_id(id, TRUE, FALSE)
for(var/id in SSresearch.techweb_designs)
var/datum/design/D = SSresearch.techweb_designs[id]
if(D.build_type & design_autounlock_buildtypes)
for(var/i in D.category)
if(i in design_autounlock_categories)
add_design(D)
break
/datum/techweb/specialized/autounlocking/autolathe
design_autounlock_buildtypes = AUTOLATHE
allowed_buildtypes = AUTOLATHE
/datum/techweb/specialized/autounlocking/limbgrower
design_autounlock_buildtypes = LIMBGROWER
allowed_buildtypes = LIMBGROWER
/datum/techweb/specialized/autounlocking/biogenerator
design_autounlock_buildtypes = BIOGENERATOR
allowed_buildtypes = BIOGENERATOR
/datum/techweb/specialized/autounlocking/smelter
design_autounlock_buildtypes = SMELTER
allowed_buildtypes = SMELTER
/datum/techweb/specialized/autounlocking/exofab
node_autounlock_ids = list("robotics", "mmi", "cyborg", "mecha_odysseus", "mech_gygax", "mech_durand", "mecha_phazon", "mecha", "mech_tools", "clown")
allowed_buildtypes = MECHFAB
@@ -0,0 +1,30 @@
//Techweb nodes are GLOBAL, there should only be one instance of them in the game. Persistant changes should never be made to them in-game.
/datum/techweb_node
var/id
var/display_name = "Errored Node"
var/description = "Why are you seeing this?"
var/hidden = FALSE //Whether it starts off hidden.
var/starting_node = FALSE //Whether it's available without any research.
var/list/prereq_ids = list()
var/list/design_ids = list()
var/list/datum/techweb_node/prerequisites = list() //Assoc list id = datum
var/list/datum/techweb_node/unlocks = list() //CALCULATED FROM OTHER NODE'S PREREQUISITES. Assoc list id = datum.
var/list/datum/design/designs = list() //Assoc list id = datum
var/list/boost_item_paths = list() //Associative list, path = point_value.
var/autounlock_by_boost = TRUE //boosting this will autounlock this node.
var/export_price = 0 //Cargo export price.
var/research_cost = 0 //Point cost to research.
var/actual_cost = 0
var/category = "Misc" //Category
/datum/techweb_node/New()
actual_cost = research_cost
/datum/techweb_node/proc/get_price(datum/techweb/host)
if(!host)
return actual_cost
var/discount = boost_item_paths[host.boosted_nodes[src]]
actual_cost = research_cost - discount
return actual_cost
+860
View File
@@ -0,0 +1,860 @@
//Current rate: 132500 research points in 90 minutes
//Current cargo price: 250000 points for fullmaxed R&D.
//Base Node
/datum/techweb_node/base
id = "base"
starting_node = TRUE
display_name = "Basic Research Technology"
description = "NT default research technologies."
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani",
"destructive_analyzer", "protolathe", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab",
"space_heater") //Default research tech, prevents bricking
/////////////////////////Biotech/////////////////////////
/datum/techweb_node/biotech
id = "biotech"
display_name = "Biological Technology"
description = "What makes us tick." //the MC, silly!
prereq_ids = list("base")
design_ids = list("mass_spectrometer", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "pandemic")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_biotech
id = "adv_biotech"
display_name = "Advanced Biotechnology"
description = "Advanced Biotechnology"
prereq_ids = list("biotech")
design_ids = list("piercesyringe", "adv_mass_spectrometer", "plasmarefiller", "limbgrower")
research_cost = 2500
export_price = 10000
/////////////////////////data theory tech/////////////////////////
/datum/techweb_node/datatheory //Computer science
id = "datatheory"
display_name = "Data Theory"
description = "Big Data, in space!"
prereq_ids = list("base")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_datatheory
id = "adv_datatheory"
display_name = "Advanced Data Theory"
description = "Better insight into programming and data."
prereq_ids = list("datatheory")
design_ids = list("icprinter", "icupgadv", "icupgclo")
research_cost = 2500
export_price = 10000
/////////////////////////engineering tech/////////////////////////
/datum/techweb_node/engineering
id = "engineering"
description = "Modern Engineering Technology."
display_name = "Industrial Engineering"
prereq_ids = list("base")
design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin",
"atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "weldingmask", "mesons", "thermomachine", "tesla_coil", "grounding_rod", "apc_control")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_engi
id = "adv_engi"
description = "Advanced Engineering research"
display_name = "Advanced Engineering"
prereq_ids = list("engineering", "emp_basic")
design_ids = list("engine_goggles", "diagnostic_hud", "magboots")
research_cost = 2500
export_price = 10000
/////////////////////////Bluespace tech/////////////////////////
/datum/techweb_node/bluespace_basic //Bluespace-memery
id = "bluespace_basic"
display_name = "Basic Bluespace Theory"
description = "Basic studies into the mysterious alternate dimension known as bluespace."
prereq_ids = list("base")
design_ids = list("beacon", "xenobioconsole")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_bluespace
id = "adv_bluespace"
display_name = "Advanced Bluespace Research"
description = "Deeper understanding of how the Bluespace dimension works"
prereq_ids = list("practical_bluespace", "high_efficiency")
design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console",
"teleconsole", "bag_holding", "bluespace_crystal", "wormholeprojector")
research_cost = 2500
export_price = 10000
/////////////////////////plasma tech/////////////////////////
/datum/techweb_node/basic_plasma
id = "basic_plasma"
display_name = "Basic Plasma Research"
description = "Research into the mysterious and dangerous substance, plasma."
prereq_ids = list("engineering")
design_ids = list("mech_generator")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_plasma
id = "adv_plasma"
display_name = "Advanced Plasma Research"
description = "Research on how to fully exploit the power of plasma."
prereq_ids = list("basic_plasma")
design_ids = list("mech_plasma_cutter")
research_cost = 2500
export_price = 10000
/////////////////////////robotics tech/////////////////////////
/datum/techweb_node/robotics
id = "robotics"
display_name = "Basic Robotics Research"
description = "Programmable machines that make our lives lazier."
prereq_ids = list("base")
design_ids = list("paicard", "drone_shell")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_robotics
id = "adv_robotics"
display_name = "Advanced Robotics Research"
description = "It can even do the dishes!"
prereq_ids = list("robotics")
design_ids = list("borg_upgrade_diamonddrill")
research_cost = 2500
export_price = 10000
/////////////////////////EMP tech/////////////////////////
/datum/techweb_node/emp_basic //EMP tech for some reason
id = "emp_basic"
display_name = "Electromagnetic Theory"
description = "Study into usage of frequencies in the electromagnetic spectrum."
prereq_ids = list("base")
design_ids = list("holosign", "inducer", "tray_goggles", "holopad")
research_cost = 2500
export_price = 10000
/datum/techweb_node/emp_adv
id = "emp_adv"
display_name = "Advanced Electromagnetic Theory"
prereq_ids = list("emp_basic")
design_ids = list("ultra_micro_laser")
research_cost = 2500
export_price = 10000
/datum/techweb_node/emp_super
id = "emp_super"
display_name = "Quantum Electromagnetic Technology" //bs
description = "Even better electromagnetic technology"
prereq_ids = list("emp_adv")
design_ids = list("quadultra_micro_laser")
research_cost = 2500
export_price = 10000
/////////////////////////Clown tech/////////////////////////
/datum/techweb_node/clown
id = "clown"
display_name = "Clown Technology"
description = "Honk?!"
prereq_ids = list("base")
design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm",
"honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone")
research_cost = 2500
export_price = 10000
////////////////////////Computer tech////////////////////////
/datum/techweb_node/comptech
id = "comptech"
display_name = "Computer Consoles"
description = "Computers and how they work."
prereq_ids = list("datatheory")
design_ids = list("cargo", "cargorequest", "stockexchange", "libraryconsole", "aifixer", "mining", "crewconsole", "comconsole", "idcardconsole", "operating", "seccamera")
research_cost = 2500
export_price = 10000
/datum/techweb_node/computer_hardware_basic //Modular computers are shitty and nearly useless so until someone makes them actually useful this can be easy to get.
id = "computer_hardware_basic"
display_name = "Computer Hardware"
description = "How computer hardware are made."
prereq_ids = list("comptech")
research_cost = 2500
export_price = 10000
design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired",
"portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced",
"bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small")
/datum/techweb_node/computer_board_gaming
id = "computer_board_gaming"
display_name = "Arcade Games"
description = "For the slackers on the station."
prereq_ids = list("comptech")
design_ids = list("arcade_battle", "arcade_orion", "slotmachine")
research_cost = 2500
export_price = 10000
/datum/techweb_node/comp_recordkeeping
id = "comp_recordkeeping"
display_name = "Computerized Recordkeeping"
description = "Organized record databases and how they're used."
prereq_ids = list("comptech")
design_ids = list("secdata", "med_data", "prisonmanage", "vendor", "automated_announcement")
research_cost = 2500
export_price = 10000
/datum/techweb_node/telecomms
id = "telecomms"
display_name = "Telecommunications Technology"
description = "Subspace transmission technology for near-instant communications devices."
prereq_ids = list("comptech", "bluespace_basic")
research_cost = 2500
export_price = 10000
design_ids = list("s-receiver", "s-bus", "s-broadcaster", "s-processor", "s-hub", "s-server", "s-relay", "comm_monitor", "comm_server",
"s-ansible", "s-filter", "s-amplifier", "ntnet_relay", "s-treatment", "s-analyzer", "s-crystal", "s-transmitter")
/datum/techweb_node/integrated_HUDs
id = "integrated_HUDs"
display_name = "Integrated HUDs"
description = "The usefulness of computerized records, projected straight onto your eyepiece!"
prereq_ids = list("comp_recordkeeping", "emp_basic")
design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles")
research_cost = 2500
export_price = 10000
/datum/techweb_node/NVGtech
id = "NVGtech"
display_name = "Night Vision Technology"
description = "Allows seeing in the dark without actual light!"
prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv")
design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons")
research_cost = 2500
export_price = 10000
////////////////////////AI & Cyborg tech////////////////////////
/datum/techweb_node/neural_programming
id = "neural_programming"
display_name = "Neural Programming"
description = "Study into networks of processing units that mimic our brains."
prereq_ids = list("biotech", "datatheory")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mmi
id = "mmi"
display_name = "Man Machine Interface"
description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs."
prereq_ids = list("biotech", "neural_programming")
design_ids = list("mmi")
research_cost = 2500
export_price = 10000
/datum/techweb_node/posibrain
id = "posibrain"
display_name = "Positronic Brain"
description = "Applied usage of neural technology allowing for autonomous AI units based on special metallic cubes with conductive and processing circuits."
prereq_ids = list("mmi", "neural_programming")
design_ids = list("mmi_posi")
research_cost = 2500
export_price = 10000
/datum/techweb_node/cyborg
id = "cyborg"
display_name = "Cyborg Construction"
description = "Sapient robots with preloaded tool modules and programmable laws."
prereq_ids = list("mmi", "robotics")
research_cost = 2500
export_price = 10000
design_ids = list("robocontrol", "sflash", "borg_suit", "borg_head", "borg_chest", "borg_r_arm", "borg_l_arm", "borg_r_leg", "borg_l_leg", "borgupload",
"cyborgrecharger", "borg_upgrade_restart", "borg_upgrade_rename")
/datum/techweb_node/cyborg_upg_util
id = "cyborg_upg_util"
display_name = "Cyborg Upgrades: Utility"
description = "Utility upgrades for cybogs."
prereq_ids = list("engineering", "cyborg")
design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair")
research_cost = 2500
export_price = 10000
/datum/techweb_node/cyborg_upg_med
id = "cyborg_upg_med"
display_name = "Cyborg Upgrades: Medical"
description = "Medical upgrades for cyborgs"
prereq_ids = list("adv_biotech", "cyborg")
design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser")
research_cost = 2500
export_price = 10000
/datum/techweb_node/cyborg_upg_combat
id = "cyborg_upg_combat"
display_name = "Cyborg Upgrades: Combat"
description = "Military grade upgrades for cyborgs."
prereq_ids = list("adv_robotics", "adv_engi")
design_ids = list("borg_upgrade_vtec", "borg_upgrade_disablercooler")
research_cost = 2500
export_price = 10000
/datum/techweb_node/ai
id = "ai"
display_name = "Artificial Intelligence"
description = "AI unit research."
prereq_ids = list("robotics", "neural_programming")
design_ids = list("aicore", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module",
"reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "paladin_module", "tyrant_module", "corporate_module",
"default_module", "borg_ai_control", "mecha_tracking_ai_control", "aiupload", "intellicard")
research_cost = 2500
export_price = 10000
////////////////////////Medical////////////////////////
/datum/techweb_node/cloning
id = "cloning"
display_name = "Genetic Engineering"
description = "We have the technology to make him."
prereq_ids = list("biotech")
design_ids = list("clonecontrol", "clonepod", "clonescanner", "scan_console")
research_cost = 2500
export_price = 10000
/datum/techweb_node/cryotech
id = "cryotech"
display_name = "Cryostasis Technology"
description = "Smart freezing of objects to preserve them!"
prereq_ids = list("adv_engi", "emp_basic", "biotech")
design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade")
research_cost = 2500
export_price = 10000
/datum/techweb_node/subdermal_implants
id = "subdermal_implants"
display_name = "Subdermal Implants"
description = "Electronic implants buried beneath the skin."
prereq_ids = list("biotech")
design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking")
research_cost = 2500
export_price = 10000
/datum/techweb_node/cyber_organs
id = "cyber_organs"
display_name = "Cybernetic Organs"
description = "We have the technology to rebuild him."
prereq_ids = list("adv_biotech", "cyborg")
design_ids = list("cybernetic_heart", "cybernetic_liver", "cybernetic_liver_u")
research_cost = 2500
export_price = 10000
/datum/techweb_node/cyber_implants
id = "cyber_implants"
display_name = "Cybernetic Implants"
description = "Electronic implants that improve humans."
prereq_ids = list("adv_biotech", "cyborg", "adv_datatheory")
design_ids = list("ci-nutriment", "ci-nutrimentplus", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_cyber_implants
id = "adv_cyber_implants"
display_name = "Advanced Cybernetic Implants"
description = "Upgraded and more powerful cybernetic implants."
prereq_ids = list("neural_programming", "cyber_implants")
design_ids = list("ci-toolset", "ci-surgery", "ci-reviver")
research_cost = 2500
export_price = 10000
/datum/techweb_node/combat_cyber_implants
id = "combat_cyber_implants"
display_name = "Combat Cybernetic Implants"
description = "Military grade combat implants to improve performance."
prereq_ids = list("adv_cyber_implants") //Needs way more reqs.
design_ids = list("ci-xray", "ci-thermals", "ci-antidrop", "ci-antistun", "ci-thrusters")
research_cost = 2500
export_price = 10000
////////////////////////generic biotech////////////////////////
/datum/techweb_node/bio_process
id = "bio_process"
display_name = "Biological Processing"
description = "From slimes to kitchens."
prereq_ids = list("biotech")
design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave")
research_cost = 2500
export_price = 10000
////////////////////////generic engineering////////////////////////
/datum/techweb_node/high_efficiency
id = "high_efficiency"
display_name = "High Efficiency Parts"
description = "High Efficiency Parts"
prereq_ids = list("engineering", "datatheory")
design_ids = list("pico_mani", "super_matter_bin")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_power
id = "adv_power"
display_name = "Advanced Power Manipulation"
description = "How to get more zap."
prereq_ids = list("engineering")
design_ids = list("smes", "super_cell", "hyper_cell", "super_capacitor", "superpacman", "mrspacman", "power_turbine", "power_turbine_console", "power_compressor")
research_cost = 2500
export_price = 10000
////////////////////////Tools////////////////////////
/datum/techweb_node/basic_mining
id = "basic_mining"
display_name = "Mining Technology"
description = "Better than Efficiency V."
prereq_ids = list("engineering")
design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_mining
id = "adv_mining"
display_name = "Advanced Mining Technology"
description = "Efficiency Level 127" //dumb mc references
prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma")
design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter", "plasmacutter_adv")
research_cost = 2500
export_price = 10000
/datum/techweb_node/practical_bluespace
id = "practical_bluespace"
display_name = "Applied Bluespace Research"
description = "Using bluespace to make things faster and better."
prereq_ids = list("bluespace_basic", "engineering")
design_ids = list("bs_rped","minerbag_holding", "telesci_gps", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning")
research_cost = 2500
export_price = 10000
/datum/techweb_node/janitor
id = "janitor"
display_name = "Advanced Sanitation Technology"
description = "Clean things better, faster, stronger, and harder!"
prereq_ids = list("adv_engi")
design_ids = list("advmop", "buffer", "blutrash", "light_replacer")
research_cost = 2500
export_price = 10000
/datum/techweb_node/botany
id = "botany"
display_name = "Botanical Engineering"
description = "Botanical tools"
prereq_ids = list("adv_engi", "biotech")
design_ids = list("diskplantgene", "portaseeder", "plantgenes", "flora_gun", "hydro_tray", "biogenerator", "seed_extractor")
research_cost = 2500
export_price = 10000
/datum/techweb_node/exp_tools
id = "exp_tools"
display_name = "Experimental Tools"
description = "Highly advanced construction tools."
design_ids = list("exwelder", "jawsoflife", "handdrill")
prereq_ids = list("adv_engi")
research_cost = 2500
export_price = 10000
/datum/techweb_node/exp_equipment
id = "exp_equipment"
display_name = "Experimental Flight Equipment"
description = "Highly advanced construction tools."
design_ids = list("flightshoes", "flightpack", "flightsuit")
prereq_ids = list("adv_engi")
research_cost = 2500
export_price = 10000
/datum/techweb_node/bluespace_power
id = "bluespace_power"
display_name = "Bluespace Power Technology"
description = "Even more powerful.. power!"
prereq_ids = list("adv_power", "adv_bluespace")
design_ids = list("bluespace_cell", "quadratic_capacitor")
research_cost = 2500
export_price = 10000
/////////////////////////weaponry tech/////////////////////////
/datum/techweb_node/weaponry
id = "weaponry"
display_name = "Weapon Development Technology"
description = "Our researchers have found new to weaponize just about everything now."
prereq_ids = list("engineering")
design_ids = list("pin_testing")
research_cost = 10000
export_price = 10000
/datum/techweb_node/adv_weaponry
id = "adv_weaponry"
display_name = "Advanced Weapon Development Technology"
description = "Our weapons are breaking the rules of reality by now."
prereq_ids = list("adv_engi", "weaponry")
design_ids = list("pin_loyalty")
research_cost = 10000
export_price = 10000
/datum/techweb_node/electric_weapons
id = "electronic_weapons"
display_name = "Electric Weapons"
description = "Weapons using electric technology"
prereq_ids = list("weaponry", "adv_power")
design_ids = list("stunrevolver", "stunshell", "tele_shield")
research_cost = 2500
export_price = 10000
/datum/techweb_node/radioactive_weapons
id = "radioactive_weapons"
display_name = "Radioactive Weaponry"
description = "Weapons using radioactive technology."
prereq_ids = list("adv_engi", "adv_weaponry")
design_ids = list("nuclear_gun", "decloner")
research_cost = 2500
export_price = 10000
/datum/techweb_node/medical_weapons
id = "medical_weapons"
display_name = "Medical Weaponry"
description = "Weapons using medical technology."
prereq_ids = list("adv_biotech", "adv_weaponry")
design_ids = list("rapidsyringe")
research_cost = 2500
export_price = 10000
/datum/techweb_node/beam_weapons
id = "beam_weapons"
display_name = "Beam Weaponry"
description = "Various basic beam weapons"
prereq_ids = list("adv_weaponry")
design_ids = list("beamrifle", "ioncarbine")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_beam_weapons
id = "adv_beam_weapons"
display_name = "Advanced Beam Weaponry"
description = "Various advanced beam weapons"
prereq_ids = list("beam_weapons")
design_ids = list("xray_laser")
research_cost = 2500
export_price = 10000
/datum/techweb_node/explosive_weapons
id = "explosive_weapons"
display_name = "Explosive & Pyrotechnical Weaponry"
description = "If the light stuff just won't do it."
prereq_ids = list("adv_weaponry")
design_ids = list("temp_gun", "large_Grenade", "pyro_Grenade", "adv_Grenade")
research_cost = 2500
export_price = 10000
/datum/techweb_node/ballistic_weapons
id = "ballistic_weapons"
display_name = "Ballistic Weaponry"
description = "This isn't research.. This is reverse-engineering!"
prereq_ids = list("weaponry")
design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic")
research_cost = 2500
export_price = 10000
/datum/techweb_node/tech_shell
id = "tech_shell"
display_name = "Technological Shells"
description = "They're more technological than regular shot."
prereq_ids = list("adv_weaponry")
design_ids = list("techshotshell")
research_cost = 2500
export_price = 10000
/datum/techweb_node/gravity_gun
id = "gravity_gun"
display_name = "One-point Bluespace-gravitational Manipulator"
description = "Fancy wording for gravity gun"
prereq_ids = list("adv_weaponry", "adv_bluespace")
design_ids = list("gravitygun")
research_cost = 2500
export_price = 10000
////////////////////////mech technology////////////////////////
/datum/techweb_node/mech
id = "mecha"
display_name = "Mechanical Exosuits"
description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human."
prereq_ids = list("robotics", "adv_engi")
design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "firefighter_chassis", "ripley_torso", "ripley_left_arm", "ripley_right_arm", "ripley_left_leg", "ripley_right_leg",
"ripley_main", "ripley_peri", "mech_hydraulic_clamp")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_mecha
id = "adv_mecha"
display_name = "Mechanical Exosuits"
description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human."
prereq_ids = list("adv_robotics", "mecha")
design_ids = list("mech_repair_droid")
research_cost = 2500
export_price = 10000
/datum/techweb_node/odysseus
id = "mecha_odysseus"
display_name = "EXOSUIT: Odysseus"
description = "Odysseus exosuit designs"
prereq_ids = list("mecha")
design_ids = list("odysseus_chassis", "odysseus_torso", "odysseus_head", "odysseus_left_arm", "odysseus_right_arm" ,"odysseus_left_leg", "odysseus_right_leg",
"odysseus_main", "odysseus_peri")
research_cost = 2500
export_price = 10000
/datum/techweb_node/gygax
id = "mech_gygax"
display_name = "EXOSUIT: Gygax"
description = "Gygax exosuit designs"
prereq_ids = list("adv_mecha", "weaponry")
design_ids = list("gygax_chassis", "gygax_torso", "gygax_head", "gygax_left_arm", "gygax_right_arm", "gygax_left_leg", "gygax_right_leg", "gygax_main",
"gygax_peri", "gygax_targ", "gygax_armor")
research_cost = 2500
export_price = 10000
/datum/techweb_node/durand
id = "mech_durand"
display_name = "EXOSUIT: Durand"
description = "Durand exosuit designs"
prereq_ids = list("adv_mecha", "adv_weaponry")
design_ids = list("durand_chassis", "durand_torso", "durand_head", "durand_left_arm", "durand_right_arm", "durand_left_leg", "durand_right_leg", "durand_main",
"durand_peri", "durand_targ", "durand_armor")
research_cost = 2500
export_price = 10000
/datum/techweb_node/phazon
id = "mecha_phazon"
display_name = "EXOSUIT: Phazon"
description = "Phazon exosuit designs"
prereq_ids = list("adv_mecha", "weaponry")
design_ids = list("phazon_chassis", "phazon_torso", "phazon_head", "phazon_left_arm", "phazon_right_arm", "phazon_left_leg", "phazon_right_leg", "phazon_main",
"phazon_peri", "phazon_targ", "phazon_armor")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_tools
id = "mech_tools"
display_name = "Basic Exosuit Equipment"
description = "Various tools fit for basic mech units"
prereq_ids = list("mecha", "engineering")
design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer")
research_cost = 2500
export_price = 10000
/datum/techweb_node/adv_mecha_tools
id = "adv_mecha_tools"
display_name = "Advanced Exosuit Equipment"
description = "Tools for high level mech suits"
prereq_ids = list("adv_mecha", "mech_tools", "adv_engi")
design_ids = list("mech_rcd")
research_cost = 2500
export_price = 10000
/datum/techweb_node/med_mech_tools
id = "med_mech_tools"
display_name = "Medical Exosuit Equipment"
description = "Tools for high level mech suits"
prereq_ids = list("mecha", "adv_biotech", "mech_tools")
design_ids = list("mech_sleeper", "mech_syringe_gun", "mech_medi_beam")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_modules
id = "adv_mecha_modules"
display_name = "Basic Exosuit Modules"
description = "An advanced piece of mech weaponry"
prereq_ids = list("adv_mecha", "adv_power")
design_ids = list("mech_energy_relay", "mech_ccw_armor", "mech_proj_armor", "mech_generator_nuclear")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_scattershot
id = "mecha_tools"
display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "adv_weaponry", "ballistic_weapons")
design_ids = list("mech_scattershot")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_carbine
id = "mech_carbine"
display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "adv_weaponry", "ballistic_weapons")
design_ids = list("mech_carbine")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_ion
id = "mmech_ion"
display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "adv_weaponry", "emp_adv")
design_ids = list("mech_ion")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_tesla
id = "mech_tesla"
display_name = "Exosuit Weapon (MKI Tesla Cannon)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "weaponry", "adv_power")
design_ids = list("mech_tesla")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_laser
id = "mech_laser"
display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)"
description = "A basic piece of mech weaponry"
prereq_ids = list("mecha", "beam_weapons")
design_ids = list("mech_laser")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_laser_heavy
id = "mech_laser_heavy"
display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "adv_weaponry", "adv_beam_weapons")
design_ids = list("mech_laser_heavy")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_grenade_launcher
id = "mech_grenade_launcher"
display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "explosive_weapons")
design_ids = list("mech_grenade_launcher")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_missile_rack
id = "mech_missile_rack"
display_name = "Exosuit Weapon (SRM-8 Missile Rack)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "explosive_weapons")
design_ids = list("mech_missile_rack")
research_cost = 2500
export_price = 10000
/datum/techweb_node/clusterbang_launcher
id = "clusterbang_launcher"
display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "weaponry")
design_ids = list("clusterbang_launcher")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_teleporter
id = "mech_teleporter"
display_name = "Exosuit Module (Teleporter Module)"
description = "An advanced piece of mech Equipment"
prereq_ids = list("mecha", "mech_tools", "adv_bluespace")
design_ids = list("mech_teleporter")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_wormhole_gen
id = "mech_wormhole_gen"
display_name = "Exosuit Module (Localized Wormhole Generator)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("mecha", "mech_tools", "adv_bluespace")
design_ids = list("mech_wormhole_gen")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_taser
id = "mech_taser"
display_name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)"
description = "A basic piece of mech weaponry"
prereq_ids = list("mecha", "adv_weaponry")
design_ids = list("mech_taser")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_lmg
id = "mech_lmg"
display_name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)"
description = "An advanced piece of mech weaponry"
prereq_ids = list("adv_mecha", "adv_weaponry", "ballistic_weapons")
design_ids = list("mech_lmg")
research_cost = 2500
export_price = 10000
/datum/techweb_node/mech_diamond_drill
id = "mech_diamond_drill"
display_name = "Exosuit Diamond Drill"
description = "A diamond drill fit for a large exosuit"
prereq_ids = list("mecha", "adv_mining")
design_ids = list("mech_diamond_drill")
research_cost = 2500
export_price = 10000
////////////////////////Alien technology////////////////////////
/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech
id = "alientech"
display_name = "Alien Technology"
description = "Things used by the greys."
prereq_ids = list("base")
boost_item_paths = list(/obj/item/gun/energy/alien = 0, /obj/item/scalpel/alien = 0, /obj/item/hemostat/alien = 0, /obj/item/retractor/alien = 0, /obj/item/circular_saw/alien = 0,
/obj/item/cautery/alien = 0, /obj/item/surgicaldrill/alien = 0, /obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0,
/obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0)
research_cost = 2500
export_price = 10000
hidden = TRUE
design_ids = list("alienalloy")
/datum/techweb_node/alien_bio
id = "alien_bio"
display_name = "Alien Biological Tools"
description = "Advanced biological tools."
prereq_ids = list("alientech", "biotech")
design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery")
boost_item_paths = list(/obj/item/gun/energy/alien = 0, /obj/item/scalpel/alien = 0, /obj/item/hemostat/alien = 0, /obj/item/retractor/alien = 0, /obj/item/circular_saw/alien = 0,
/obj/item/cautery/alien = 0, /obj/item/surgicaldrill/alien = 0, /obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0,
/obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0)
research_cost = 2500
export_price = 10000
hidden = TRUE
/datum/techweb_node/alien_engi
id = "alien_engi"
display_name = "Alien Engineering"
description = "Alien engineering tools"
prereq_ids = list("alientech", "adv_engi")
boost_item_paths = list(/obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0,
/obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0)
design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool")
research_cost = 2500
export_price = 10000
hidden = TRUE
/proc/total_techweb_points()
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.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
*/
@@ -11,7 +11,6 @@
throwforce = 0
throw_speed = 3
throw_range = 6
origin_tech = "biotech=3"
container_type = INJECTABLE_1
var/Uses = 1 // uses before it goes inert
var/qdel_timer = null // deletion timer, for delayed reactions
@@ -124,7 +123,6 @@
name = "slime potion"
desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances."
w_class = WEIGHT_CLASS_TINY
origin_tech = "biotech=4"
/obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user , proximity)
if (istype(target))
@@ -162,7 +160,6 @@
desc = "A miraculous chemical mix that grants human like intelligence to living beings."
icon = 'icons/obj/chemical.dmi'
icon_state = "potpink"
origin_tech = "biotech=6"
var/list/not_interested = list()
var/being_used = 0
var/sentience_type = SENTIENCE_ORGANIC
@@ -208,7 +205,6 @@
desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being."
icon = 'icons/obj/chemical.dmi'
icon_state = "potorange"
origin_tech = "biotech=6"
var/prompted = 0
var/animal_type = SENTIENCE_ORGANIC
@@ -327,7 +323,6 @@
desc = "A potent chemical mix that will remove the slowdown from any item."
icon = 'icons/obj/chemical.dmi'
icon_state = "potyellow"
origin_tech = "biotech=5"
/obj/item/slimepotion/speed/afterattack(obj/C, mob/user)
..()
@@ -360,7 +355,6 @@
desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses."
icon = 'icons/obj/chemical.dmi'
icon_state = "potblue"
origin_tech = "biotech=5"
var/uses = 3
/obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/C, mob/user)