[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:
committed by
kevinz000
parent
b5600cb91c
commit
cc0b768c72
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
*/
|
||||
Reference in New Issue
Block a user