mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 18:02:57 +00:00
- Ports the Bluespace Light Replacer from TG -- Added to Applied Bluespace Research instead of Advanced Sanitation Technology - Makes the basic Light Replacer a default tech node
110 lines
4.3 KiB
Plaintext
110 lines
4.3 KiB
Plaintext
|
|
//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.
|
|
//USE SSRESEARCH PROCS TO OBTAIN REFERENCES. DO NOT REFERENCE OUTSIDE OF SSRESEARCH OR YOU WILL FUCK UP GC.
|
|
|
|
/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/experimental = FALSE //If the tech can be randomly granted by the BEPIS as a reward. Meant to be fully given in tech disks, not researched.
|
|
var/starting_node = FALSE //Whether it's available without any research.
|
|
var/list/prereq_ids = list()
|
|
var/list/design_ids = list()
|
|
var/list/unlock_ids = list() //CALCULATED FROM OTHER NODE'S PREREQUISITES. Assoc list id = TRUE.
|
|
var/list/boost_item_paths = list() //Associative list, path = list(point type = point_value).
|
|
var/autounlock_by_boost = TRUE //boosting this will autounlock this node.
|
|
var/list/research_costs = list() //Point cost to research. type = amount
|
|
var/category = "Misc" //Category
|
|
|
|
/datum/techweb_node/error_node
|
|
id = "ERROR"
|
|
display_name = "ERROR"
|
|
description = "This usually means something in the database has corrupted. If it doesn't go away automatically, inform Central Command for their techs to fix it ASAP(tm)"
|
|
|
|
/datum/techweb_node/proc/Initialize()
|
|
//Make lists associative for lookup
|
|
for(var/id in prereq_ids)
|
|
prereq_ids[id] = TRUE
|
|
for(var/id in design_ids)
|
|
design_ids[id] = TRUE
|
|
for(var/id in unlock_ids)
|
|
unlock_ids[id] = TRUE
|
|
|
|
/datum/techweb_node/Destroy()
|
|
SSresearch.techweb_nodes -= id
|
|
return ..()
|
|
|
|
/datum/techweb_node/serialize_list(list/options)
|
|
. = list()
|
|
VARSET_TO_LIST(., id)
|
|
VARSET_TO_LIST(., display_name)
|
|
VARSET_TO_LIST(., hidden)
|
|
VARSET_TO_LIST(., starting_node)
|
|
VARSET_TO_LIST(., assoc_list_strip_value(prereq_ids))
|
|
VARSET_TO_LIST(., assoc_list_strip_value(design_ids))
|
|
VARSET_TO_LIST(., assoc_list_strip_value(unlock_ids))
|
|
VARSET_TO_LIST(., boost_item_paths)
|
|
VARSET_TO_LIST(., autounlock_by_boost)
|
|
VARSET_TO_LIST(., research_costs)
|
|
VARSET_TO_LIST(., category)
|
|
|
|
/datum/techweb_node/deserialize_list(list/input, list/options)
|
|
if(!input["id"])
|
|
return
|
|
VARSET_FROM_LIST(input, id)
|
|
VARSET_FROM_LIST(input, display_name)
|
|
VARSET_FROM_LIST(input, hidden)
|
|
VARSET_FROM_LIST(input, starting_node)
|
|
VARSET_FROM_LIST(input, prereq_ids)
|
|
VARSET_FROM_LIST(input, design_ids)
|
|
VARSET_FROM_LIST(input, unlock_ids)
|
|
VARSET_FROM_LIST(input, boost_item_paths)
|
|
VARSET_FROM_LIST(input, autounlock_by_boost)
|
|
VARSET_FROM_LIST(input, research_costs)
|
|
VARSET_FROM_LIST(input, category)
|
|
Initialize()
|
|
return src
|
|
|
|
/datum/techweb_node/proc/on_design_deletion(datum/design/D)
|
|
prune_design_id(D.id)
|
|
|
|
/datum/techweb_node/proc/on_node_deletion(datum/techweb_node/TN)
|
|
prune_node_id(TN.id)
|
|
|
|
/datum/techweb_node/proc/prune_design_id(design_id)
|
|
design_ids -= design_id
|
|
|
|
/datum/techweb_node/proc/prune_node_id(node_id)
|
|
prereq_ids -= node_id
|
|
unlock_ids -= node_id
|
|
|
|
/datum/techweb_node/proc/price_display(datum/techweb/TN)
|
|
return techweb_point_display_generic(get_price(TN))
|
|
|
|
/datum/techweb_node/proc/get_price(datum/techweb/host)
|
|
if(host)
|
|
var/list/actual_costs = research_costs
|
|
if(host.boosted_nodes[id])
|
|
var/list/L = host.boosted_nodes[id]
|
|
for(var/i in L)
|
|
if(actual_costs[i])
|
|
actual_costs[i] -= L[i]
|
|
return actual_costs
|
|
else
|
|
return research_costs
|
|
|
|
//Base Nodes, everything starts from here.
|
|
|
|
/datum/techweb_node/base
|
|
id = "base"
|
|
starting_node = TRUE
|
|
display_name = "Basic Research Technology"
|
|
description = "NT default research technologies."
|
|
// Default research tech, prevents bricking
|
|
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "desttagger", "handlabel", "packagewrap",
|
|
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "bepis", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "paystand",
|
|
"space_heater", "beaker", "large_beaker", "xlarge_beaker", "bucket", "hypovial", "large_hypovial", "syringe", "pillbottle",
|
|
"sec_shellclip", "sec_beanbag", "sec_rshot", "sec_bshot", "sec_slug", "sec_islug", "sec_dart", "sec_38", "sec_38lethal",
|
|
"rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass", "salestagger", "light_replacer")
|