diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 07bc22ee71d..c25771b8904 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -132,10 +132,12 @@ SUBSYSTEM_DEF(research) var/datum/techweb_node/TN = techweb_nodes[id] TN.Initialize() techweb_nodes = returned - verify_techweb_nodes() //Verify all nodes have ids and such. + if (!verify_techweb_nodes()) //Verify all nodes have ids and such. + stack_trace("Invalid techweb nodes detected") calculate_techweb_nodes() calculate_techweb_boost_list() - verify_techweb_nodes() //Verify nodes and designs have been crosslinked properly. + if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly. + CRASH("Invalid techweb nodes detected") /datum/controller/subsystem/research/proc/initialize_all_techweb_designs(clearall = FALSE) if(islist(techweb_designs) && clearall) @@ -157,45 +159,59 @@ SUBSYSTEM_DEF(research) techweb_designs = returned verify_techweb_designs() + /datum/controller/subsystem/research/proc/verify_techweb_nodes() + . = TRUE for(var/n in techweb_nodes) var/datum/techweb_node/N = techweb_nodes[n] if(!istype(N)) WARNING("Invalid research node with ID [n] detected and removed.") techweb_nodes -= n research_node_id_error(n) + . = FALSE for(var/p in N.prereq_ids) var/datum/techweb_node/P = techweb_nodes[p] if(!istype(P)) 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) + . = FALSE for(var/d in N.design_ids) var/datum/design/D = techweb_designs[d] if(!istype(D)) WARNING("Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.") N.design_ids -= d design_id_error(d) + . = FALSE for(var/u in N.unlock_ids) var/datum/techweb_node/U = techweb_nodes[u] if(!istype(U)) WARNING("Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.") N.unlock_ids -= u research_node_id_error(u) + . = FALSE for(var/p in N.boost_item_paths) if(!ispath(p)) N.boost_item_paths -= p + WARNING("[p] is not a valid path.") node_boost_error(N.id, "[p] is not a valid path.") + . = FALSE var/list/points = N.boost_item_paths[p] if(islist(points)) for(var/i in points) if(!isnum(points[i])) + WARNING("[points[i]] is not a valid number.") node_boost_error(N.id, "[points[i]] is not a valid number.") + . = FALSE else if(!point_types[i]) + WARNING("[i] is not a valid point type.") node_boost_error(N.id, "[i] is not a valid point type.") + . = FALSE else if(!isnull(points)) N.boost_item_paths -= p node_boost_error(N.id, "No valid list.") + WARNING("No valid list.") + . = FALSE CHECK_TICK /datum/controller/subsystem/research/proc/verify_techweb_designs() diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 1e65e57b71b..d672dc012f6 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -586,7 +586,7 @@ id = "surgery_exp_dissection" surgery = /datum/surgery/advanced/experimental_dissection/exp -/datum/design/surgery/experimental_dissection/exp +/datum/design/surgery/experimental_dissection/ext name = "Extraterrestrial Dissection" id = "surgery_ext_dissection" surgery = /datum/surgery/advanced/experimental_dissection/alien @@ -719,5 +719,3 @@ id = "surgery_zombie" surgery = /datum/surgery/advanced/necrotic_revival research_icon_state = "surgery_head" - - diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index f3ce5bcfe34..91c56d4d328 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -97,7 +97,7 @@ design_ids = list("surgery_lobotomy", "surgery_heal_brute_upgrade_femto","surgery_heal_burn_upgrade_femto","surgery_heal_combo", "surgery_revival","surgery_adv_dissection") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) export_price = 4000 - + /datum/techweb_node/exp_surgery id = "exp_surgery" display_name = "Experimental Surgery"