diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 9d2cf451c62..8dd8db3fd06 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -135,6 +135,15 @@ /// Max length of a status line in the status display #define MAX_STATUS_LINE_LENGTH 40 +///Define for automated system arrival announcement +#define AUTO_ANNOUNCE_ARRIVAL "ARRIVAL" +///Define for automated system announcement when a head of staff arrives +#define AUTO_ANNOUNCE_NEWHEAD "NEWHEAD" +///Define for automated system announcement for when the arrival shuttle is broken +#define AUTO_ANNOUNCE_ARRIVALS_BROKEN "ARRIVALS_BROKEN" +///Define for automated system announcement for researched nodes +#define AUTO_ANNOUNCE_NODE "NODE" + /// Blank Status Display #define SD_BLANK 0 /// Shows the emergency shuttle timer diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index c68b450c2c2..699ae8aa72c 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -243,8 +243,16 @@ if(!(character.mind.assigned_role.job_flags & JOB_ANNOUNCE_ARRIVAL)) return - var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) - announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common + var/obj/machinery/announcement_system/announcer + var/list/available_machines = list() + for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) + if(announce.arrival_toggle) + available_machines += announce + break + if(!length(available_machines)) + return + announcer = pick(available_machines) + announcer.announce(AUTO_ANNOUNCE_ARRIVAL, character.real_name, rank, list()) //make the list empty to make it announce it in common ///Check if the turf pressure allows specialized equipment to work /proc/lavaland_equipment_pressure_check(turf/turf_to_check) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 1700abb0af1..c9e66c89c95 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -16,16 +16,26 @@ GLOBAL_LIST_EMPTY(announcement_systems) circuit = /obj/item/circuitboard/machine/announcement_system + ///The headset that we use for broadcasting var/obj/item/radio/headset/radio + ///The message that we send when someone is joining. var/arrival = "%PERSON has signed up as %RANK" - var/arrivalToggle = 1 + ///Whether the arrival message is sent + var/arrival_toggle = TRUE + ///The message that we send when a department head arrives. var/newhead = "%PERSON, %RANK, is the department head." - var/newheadToggle = 1 + ///Whether the newhead message is sent. + var/newhead_toggle = TRUE var/greenlight = "Light_Green" var/pinklight = "Light_Pink" var/errorlight = "Error_Red" + ///If true, researched nodes will be announced to the appropriate channels + var/announce_research_node = TRUE + /// The text that we send when announcing researched nodes. + var/node_message = "The '%NODE' techweb node has been researched" + /obj/machinery/announcement_system/Initialize(mapload) . = ..() GLOB.announcement_systems += src @@ -41,10 +51,10 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/update_overlays() . = ..() - if(arrivalToggle) + if(arrival_toggle) . += greenlight - if(newheadToggle) + if(newhead_toggle) . += pinklight if(machine_stat & BROKEN) @@ -78,18 +88,25 @@ GLOBAL_LIST_EMPTY(announcement_systems) str = replacetext(str, "%RANK", "[rank]") return str -/obj/machinery/announcement_system/proc/announce(message_type, user, rank, list/channels) +/obj/machinery/announcement_system/proc/announce(message_type, target, rank, list/channels) if(!is_operational) return var/message - if(message_type == "ARRIVAL" && arrivalToggle) - message = CompileText(arrival, user, rank) - else if(message_type == "NEWHEAD" && newheadToggle) - message = CompileText(newhead, user, rank) - else if(message_type == "ARRIVALS_BROKEN") - message = "The arrivals shuttle has been damaged. Docking for repairs..." + switch(message_type) + if(AUTO_ANNOUNCE_ARRIVAL) + if(!arrival_toggle) + message = CompileText(arrival, target, rank) + return + if(AUTO_ANNOUNCE_NEWHEAD) + if(!newhead_toggle) + message = CompileText(newhead, target, rank) + return + if(AUTO_ANNOUNCE_ARRIVALS_BROKEN) + message = "The arrivals shuttle has been damaged. Docking for repairs..." + if(AUTO_ANNOUNCE_NODE) + message = replacetext(node_message, "%NODE", target) broadcast(message, channels) @@ -118,9 +135,11 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/ui_data() var/list/data = list() data["arrival"] = arrival - data["arrivalToggle"] = arrivalToggle + data["arrivalToggle"] = arrival_toggle data["newhead"] = newhead - data["newheadToggle"] = newheadToggle + data["newheadToggle"] = newhead_toggle + data["node_message"] = node_message + data["node_toggle"] = announce_research_node return data /obj/machinery/announcement_system/ui_act(action, param) @@ -135,25 +154,28 @@ GLOBAL_LIST_EMPTY(announcement_systems) return switch(action) if("ArrivalText") - var/NewMessage = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) - if(!usr.can_perform_action(src, ALLOW_SILICON_REACH)) - return - if(NewMessage) - arrival = NewMessage - usr.log_message("updated the arrivals announcement to: [NewMessage]", LOG_GAME) + var/new_message = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) + if(new_message) + arrival = new_message + usr.log_message("updated the arrivals announcement to: [new_message]", LOG_GAME) if("NewheadText") - var/NewMessage = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) - if(!usr.can_perform_action(src, ALLOW_SILICON_REACH)) - return - if(NewMessage) - newhead = NewMessage - usr.log_message("updated the head announcement to: [NewMessage]", LOG_GAME) - if("NewheadToggle") - newheadToggle = !newheadToggle + var/new_message = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) + if(new_message) + newhead = new_message + usr.log_message("updated the head announcement to: [new_message]", LOG_GAME) + if("node_message") + var/new_message = trim(html_encode(param["new_text"]), MAX_MESSAGE_LEN) + if(new_message) + node_message = new_message + usr.log_message("updated the researched node announcement to: [node_message]", LOG_GAME) + if("newhead_toggle") + newhead_toggle = !newhead_toggle update_appearance() - if("ArrivalToggle") - arrivalToggle = !arrivalToggle + if("arrivalToggle") + arrival_toggle = !arrival_toggle update_appearance() + if("node_toggle") + announce_research_node = !announce_research_node add_fingerprint(usr) /obj/machinery/announcement_system/attack_robot(mob/living/silicon/user) @@ -173,6 +195,11 @@ GLOBAL_LIST_EMPTY(announcement_systems) arrival = pick("#!@%ERR-34%2 CANNOT LOCAT@# JO# F*LE!", "CRITICAL ERROR 99.", "ERR)#: DA#AB@#E NOT F(*ND!") newhead = pick("OV#RL()D: \[UNKNOWN??\] DET*#CT)D!", "ER)#R - B*@ TEXT F*O(ND!", "AAS.exe is not responding. NanoOS is searching for a solution to the problem.") + node_message = pick(list( + replacetext(/obj/machinery/announcement_system::node_message, "%NODE", /datum/techweb_node/mech_clown::display_name), + "R/NT1M3 A= ANNOUN-*#nt_SY!?EM.dm, LI%£ 86: N=0DE NULL!", + "BEPIS BEPIS BEPIS", + )) /obj/machinery/announcement_system/emp_act(severity) . = ..() diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 41950561571..9c3cde9f725 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -403,6 +403,29 @@ name = "R&D Console" greyscale_colors = CIRCUIT_COLOR_SCIENCE build_path = /obj/machinery/computer/rdconsole + var/silence_announcements = FALSE + +/obj/item/circuitboard/computer/rdconsole/examine(mob/user) + . = ..() + . += span_info("The board is configured to [silence_announcements ? "silence" : "announce"] researched nodes on radio.") + . += span_notice("The board mode can be changed with a [EXAMINE_HINT("multitool")].") + +/obj/item/circuitboard/computer/rdconsole/multitool_act(mob/living/user) + . = ..() + if(obj_flags & EMAGGED) + balloon_alert(user, "board mode is broken!") + return + silence_announcements = !silence_announcements + balloon_alert(user, "announcements [silence_announcements ? "enabled" : "disabled"]") + +/obj/item/circuitboard/computer/rdconsole/emag_act(mob/user, obj/item/card/emag/emag_card) + if (obj_flags & EMAGGED) + return FALSE + + obj_flags |= EMAGGED + silence_announcements = FALSE + to_chat(user, span_notice("You overload the node announcement chip, forcing every node to be announced on the common channel.")) + return TRUE /obj/item/circuitboard/computer/rdservercontrol name = "R&D Server Control" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index a4f4157c74f..41ff0c058ce 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -220,10 +220,20 @@ dna.species.pre_equip_species_outfit(equipping, src, visual_only) equip_outfit_and_loadout(equipping.get_outfit(consistent), player_client?.prefs, visual_only) -/datum/job/proc/announce_head(mob/living/carbon/human/H, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. - if(H && GLOB.announcement_systems.len) - //timer because these should come after the captain announcement - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1)) +/datum/job/proc/announce_head(mob/living/carbon/human/human, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. + if(!human) + return + var/obj/machinery/announcement_system/system + var/list/available_machines = list() + for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) + if(announce.newhead_toggle) + available_machines += announce + break + if(!length(available_machines)) + return + system = pick(available_machines) + //timer because these should come after the captain announcement + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(system, TYPE_PROC_REF(/obj/machinery/announcement_system, announce), AUTO_ANNOUNCE_NEWHEAD, human.real_name, human.job, channels), 1)) //If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 /datum/job/proc/player_old_enough(client/player) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 0420c732637..ac90479afc3 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -113,7 +113,7 @@ other types of metals and chemistry for reagents). * Args: * - stored_research - The techweb that's storing us. */ -/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research) +/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research, atom/research_source) return /obj/item/disk/design_disk/bepis @@ -134,9 +134,9 @@ other types of metals and chemistry for reagents). blueprints += new_entry ///Unhide and research our node so we show up in the R&D console. -/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research) +/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research, atom/research_source) stored_research.hidden_nodes -= bepis_node.id - stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE) + stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE, research_source = research_source) /** * Subtype of Bepis tech disk diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d4dde8732a0..517eb7c5b9e 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -123,7 +123,7 @@ Nothing else in the console has ID requirements. user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) if(istype(stored_research, /datum/techweb/science)) SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) - if(stored_research.research_node_id(id)) + if(stored_research.research_node_id(id, research_source = src)) say("Successfully researched [TN.display_name].") var/logname = "Unknown" if(HAS_AI_ACCESS(user)) @@ -161,6 +161,9 @@ Nothing else in the console has ID requirements. balloon_alert(user, "security protocols disabled") playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) obj_flags |= EMAGGED + var/obj/item/circuitboard/computer/rdconsole/board = circuit + if(!(board.obj_flags & EMAGGED)) + board.silence_announcements = TRUE locked = FALSE return TRUE @@ -362,7 +365,7 @@ Nothing else in the console has ID requirements. if(D) stored_research.add_design(D, TRUE) say("Uploading blueprints from disk.") - d_disk.on_upload(stored_research) + d_disk.on_upload(stored_research, src) return TRUE if (params["type"] == RND_TECH_DISK) if (QDELETED(t_disk)) diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index fd6ca7949b4..3da8fe4e1c9 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -361,10 +361,10 @@ return TRUE -/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id) - return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id) +/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id, atom/research_source) + return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id, research_source) -/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) +/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) if(!istype(node)) return FALSE update_node_status(node) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 23ad6fd213d..b6d3bd74d69 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -42,6 +42,12 @@ var/show_on_wiki = TRUE /// Hidden Mech nodes unlocked when mech fabricator emaged. var/illegal_mech_node = FALSE + /** + * If set, the researched node will be announced on these channels by an announcement system + * with 'announce_research_node' set to TRUE when researched by the station. + * Not every node has to be announced if you want, some are best kept a little "subtler", like Illegal Weapons. + */ + var/list/announce_channels /datum/techweb_node/error_node id = "ERROR" @@ -109,5 +115,25 @@ return techweb_point_display_generic(get_price(TN)) ///Proc called when the Station (Science techweb specific) researches a node. -/datum/techweb_node/proc/on_station_research() - SHOULD_CALL_PARENT(FALSE) +/datum/techweb_node/proc/on_station_research(atom/research_source) + SHOULD_CALL_PARENT(TRUE) + var/channels_to_use = announce_channels + if(istype(research_source, /obj/machinery/computer/rdconsole)) + var/obj/machinery/computer/rdconsole/console = research_source + var/obj/item/circuitboard/computer/rdconsole/board = console.circuit + if(board.silence_announcements) + return + if(board.obj_flags & EMAGGED) + channels_to_use = list(RADIO_CHANNEL_COMMON) + if(!length(channels_to_use) || starting_node) + return + var/obj/machinery/announcement_system/system + var/list/available_machines = list() + for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) + if(announce.announce_research_node) + available_machines += announce + break + if(!length(available_machines)) + return + system = pick(available_machines) + system.announce(AUTO_ANNOUNCE_NODE, display_name, channels = channels_to_use) diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm index 58e8dbfc68f..331b91bae61 100644 --- a/code/modules/research/techweb/nodes/alien_nodes.dm +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -30,6 +30,7 @@ hidden = TRUE /datum/techweb_node/alientech/on_station_research() + . = ..() SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE /datum/techweb_node/alien_engi @@ -59,6 +60,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) hidden = TRUE + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/alien_surgery id = TECHWEB_NODE_ALIEN_SURGERY @@ -99,3 +101,4 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS) hidden = TRUE + announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm index f1ec74b50f4..a61a6a6b094 100644 --- a/code/modules/research/techweb/nodes/atmos_nodes.dm +++ b/code/modules/research/techweb/nodes/atmos_nodes.dm @@ -48,6 +48,7 @@ /datum/experiment/ordnance/gaseous/bz, /datum/experiment/ordnance/gaseous/noblium, ) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/plasma_control id = TECHWEB_NODE_PLASMA_CONTROL @@ -63,6 +64,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/ordnance/gaseous/plasma) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/fusion id = TECHWEB_NODE_FUSION @@ -84,6 +86,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/exp_tools id = TECHWEB_NODE_EXP_TOOLS @@ -105,6 +108,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/bz = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/rcd_upgrade id = TECHWEB_NODE_RCD_UPGRADE @@ -122,3 +126,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm index baefd8c11d0..f477569aea5 100644 --- a/code/modules/research/techweb/nodes/bepis_nodes.dm +++ b/code/modules/research/techweb/nodes/bepis_nodes.dm @@ -1,3 +1,5 @@ +//Nodes that are found inside Bepis Disks. + /datum/techweb_node/light_apps id = TECHWEB_NODE_LIGHT_APPS display_name = "Illumination Applications" @@ -10,6 +12,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/extreme_office id = TECHWEB_NODE_EXTREME_OFFICE @@ -22,6 +25,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/spec_eng id = TECHWEB_NODE_SPEC_ENG @@ -34,6 +38,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/aus_security id = TECHWEB_NODE_AUS_SECURITY @@ -46,6 +51,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/interrogation id = TECHWEB_NODE_INTERROGATION @@ -58,6 +64,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/sticky_advanced id = TECHWEB_NODE_STICKY_ADVANCED @@ -70,6 +77,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/tackle_advanced id = TECHWEB_NODE_TACKLE_ADVANCED @@ -83,6 +91,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_experimental id = TECHWEB_NODE_MOD_EXPERIMENTAL @@ -97,6 +106,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/posisphere id = TECHWEB_NODE_POSITRONIC_SPHERE @@ -108,3 +118,4 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm index 7b553445a9c..25f9163ab48 100644 --- a/code/modules/research/techweb/nodes/biology_nodes.dm +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -14,6 +14,7 @@ "mod_reagent_scanner", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cytology id = TECHWEB_NODE_CYTOLOGY @@ -60,6 +61,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/people/mutant = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) // Botany root node /datum/techweb_node/botany_equip @@ -88,6 +90,7 @@ "portaseeder", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/selection id = TECHWEB_NODE_SELECTION @@ -101,3 +104,4 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/random/plants/wild) discount_experiments = list(/datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index 8a9d09807d6..eeeed268be5 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -44,6 +44,7 @@ "borg_upgrade_restart", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_service id = TECHWEB_NODE_BORG_SERVICES @@ -59,6 +60,7 @@ "borg_upgrade_service_cookbook", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_mining id = TECHWEB_NODE_BORG_MINING @@ -71,6 +73,7 @@ "borg_upgrade_diamonddrill", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_medical id = TECHWEB_NODE_BORG_MEDICAL @@ -87,6 +90,7 @@ "borg_upgrade_surgicalomnitool", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility id = TECHWEB_NODE_BORG_UTILITY @@ -105,6 +109,7 @@ "borg_upgrade_trashofholding", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility/New() . = ..() @@ -123,6 +128,7 @@ "borg_upgrade_inducer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) // Implants root node /datum/techweb_node/passive_implants @@ -144,6 +150,7 @@ "c38_trac", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_implants id = TECHWEB_NODE_CYBER_IMPLANTS @@ -157,6 +164,7 @@ "ci-herculean", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/New() ..() @@ -174,6 +182,7 @@ "ci-antistun", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/integrated_toolsets id = TECHWEB_NODE_INTERGRATED_TOOLSETS @@ -186,6 +195,7 @@ "ci-surgery", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs id = TECHWEB_NODE_CYBER_ORGANS @@ -202,6 +212,7 @@ "cybernetic_heart_tier2", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_upgraded id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED @@ -221,6 +232,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/people/augmented_organs) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_adv id = TECHWEB_NODE_CYBER_ORGANS_ADV @@ -236,3 +248,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm index 949b880d1f2..0d8572130fb 100644 --- a/code/modules/research/techweb/nodes/engi_nodes.dm +++ b/code/modules/research/techweb/nodes/engi_nodes.dm @@ -42,6 +42,7 @@ "super_cell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_adv id = TECHWEB_NODE_PARTS_ADV @@ -59,6 +60,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_bluespace @@ -78,6 +80,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/telecomms id = TECHWEB_NODE_TELECOMS @@ -167,6 +170,7 @@ "tray_goggles", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/holographics id = TECHWEB_NODE_HOLOGRAPHICS @@ -211,6 +215,7 @@ "ci-sechud", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/night_vision id = TECHWEB_NODE_NIGHT_VISION @@ -226,3 +231,4 @@ "security_hud_night", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm index b09957076d7..82d6484bf02 100644 --- a/code/modules/research/techweb/nodes/mech_nodes.dm +++ b/code/modules/research/techweb/nodes/mech_nodes.dm @@ -36,6 +36,7 @@ "mech_radio", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_clown id = TECHWEB_NODE_MECH_CLOWN @@ -60,6 +61,7 @@ "borg_transform_clown", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) //The dread upon security when they hear this... /datum/techweb_node/mech_medical id = TECHWEB_NODE_MECH_MEDICAL @@ -96,6 +98,7 @@ "clarke_peri", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mech_combat id = TECHWEB_NODE_MECH_COMBAT @@ -112,6 +115,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_assault id = TECHWEB_NODE_MECH_ASSAULT @@ -132,6 +136,7 @@ "durand_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_light id = TECHWEB_NODE_MECH_LIGHT @@ -152,6 +157,7 @@ "gygax_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy id = TECHWEB_NODE_MECH_HEAVY @@ -172,6 +178,7 @@ "savannah_ivanov_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_infiltrator id = TECHWEB_NODE_MECH_INFILTRATOR @@ -192,6 +199,7 @@ "phazon_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/justice id = "mecha_justice" @@ -222,6 +230,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_firearms id = TECHWEB_NODE_MECH_FIREARMS @@ -237,6 +246,7 @@ "mech_carbine_ammo", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy_arms id = TECHWEB_NODE_MECH_HEAVY_ARMS @@ -252,6 +262,7 @@ "mech_missile_rack_ammo", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_equip_bluespace id = TECHWEB_NODE_MECH_EQUIP_BLUESPACE @@ -264,3 +275,4 @@ "mech_wormhole_gen", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm index fababbc55e7..897a2edf18e 100644 --- a/code/modules/research/techweb/nodes/medbay_nodes.dm +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -60,6 +60,7 @@ "fluid_ducts", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/medbay_equip_adv id = TECHWEB_NODE_MEDBAY_EQUIP_ADV @@ -79,6 +80,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/reagent/haloperidol) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cryostasis id = TECHWEB_NODE_CRYOSTASIS @@ -94,3 +96,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/reagent/cryostylane = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm index d8a6539caa3..1bfa3a9284a 100644 --- a/code/modules/research/techweb/nodes/mining_nodes.dm +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -48,6 +48,7 @@ "mesons", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/low_pressure_excavation id = TECHWEB_NODE_LOW_PRESSURE_EXCAVATION @@ -67,6 +68,7 @@ "borg_upgrade_hypermod", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/plasma_mining id = TECHWEB_NODE_PLASMA_MINING @@ -78,6 +80,7 @@ "plasmacutter_adv", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bitrunning id = TECHWEB_NODE_BITRUNNING @@ -90,6 +93,7 @@ "netpod", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mining_adv id = TECHWEB_NODE_MINING_ADV @@ -102,3 +106,4 @@ "mech_diamond_drill", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) diff --git a/code/modules/research/techweb/nodes/modsuit_nodes.dm b/code/modules/research/techweb/nodes/modsuit_nodes.dm index 955389f61ae..cc31a1fc1ef 100644 --- a/code/modules/research/techweb/nodes/modsuit_nodes.dm +++ b/code/modules/research/techweb/nodes/modsuit_nodes.dm @@ -36,6 +36,7 @@ "mod_sign_radio", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mod_entertainment id = TECHWEB_NODE_MOD_ENTERTAINMENT @@ -49,6 +50,7 @@ "mod_waddle", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SERVICE) /datum/techweb_node/mod_medical id = TECHWEB_NODE_MOD_MEDICAL @@ -63,6 +65,7 @@ "mod_patienttransport", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi id = TECHWEB_NODE_MOD_ENGI @@ -77,6 +80,7 @@ "mod_mister_atmos", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_security id = TECHWEB_NODE_MOD_SECURITY @@ -95,6 +99,7 @@ "mod_criminalcapture", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_medical_adv id = TECHWEB_NODE_MOD_MEDICAL_ADV @@ -108,6 +113,7 @@ "mod_statusreadout", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi_adv id = TECHWEB_NODE_MOD_ENGI_ADV @@ -122,6 +128,7 @@ "mod_storage_expanded", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_engi_adv/New() if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module @@ -139,3 +146,4 @@ "mod_kinesis", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm index b70d9582681..f05199ab65e 100644 --- a/code/modules/research/techweb/nodes/research_nodes.dm +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -28,6 +28,7 @@ "bluespace_crystal", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/applied_bluespace id = TECHWEB_NODE_APPLIED_BLUESPACE @@ -49,6 +50,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL, RADIO_CHANNEL_SERVICE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bluespace_travel id = TECHWEB_NODE_BLUESPACE_TRAVEL @@ -67,6 +69,7 @@ "swapper", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_research id = TECHWEB_NODE_ANOMALY_RESEARCH @@ -79,6 +82,7 @@ "reactive_armour", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_shells id = TECHWEB_NODE_ANOMALY_SHELLS @@ -94,3 +98,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/anomalies = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/robo_nodes.dm b/code/modules/research/techweb/nodes/robo_nodes.dm index ff018e85b7c..9cfa3028961 100644 --- a/code/modules/research/techweb/nodes/robo_nodes.dm +++ b/code/modules/research/techweb/nodes/robo_nodes.dm @@ -51,6 +51,7 @@ "remove_module", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/ai/New() . = ..() @@ -95,3 +96,4 @@ "purge_module", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_COMMAND) diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm index 2d3dd63864f..97d2036207c 100644 --- a/code/modules/research/techweb/nodes/security_nodes.dm +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -39,6 +39,8 @@ "electropack", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) + /datum/techweb_node/riot_supression id = TECHWEB_NODE_RIOT_SUPRESSION @@ -55,6 +57,7 @@ "bola_energy", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/explosives id = TECHWEB_NODE_EXPLOSIVES @@ -68,6 +71,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) + announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/exotic_ammo id = TECHWEB_NODE_EXOTIC_AMMO @@ -81,6 +85,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/electric_weapons id = TECHWEB_NODE_ELECTRIC_WEAPONS @@ -94,6 +99,7 @@ "lasershell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/beam_weapons id = TECHWEB_NODE_BEAM_WEAPONS @@ -105,3 +111,4 @@ "nuclear_gun", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm index 3735dc41b3b..a2f6b030071 100644 --- a/code/modules/research/techweb/nodes/service_nodes.dm +++ b/code/modules/research/techweb/nodes/service_nodes.dm @@ -51,6 +51,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/consoles id = TECHWEB_NODE_CONSOLES @@ -78,6 +79,7 @@ "bounty_pad", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/gaming id = TECHWEB_NODE_GAMING @@ -145,6 +147,7 @@ "roastingstick", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) // Fishing root node /datum/techweb_node/fishing_equip diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm index 4be7a3256ac..7af1dacf1df 100644 --- a/code/modules/research/techweb/nodes/surgery_nodes.dm +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -20,6 +20,7 @@ "surgery_heal_burn_upgrade", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_adv id = TECHWEB_NODE_SURGERY_ADV @@ -37,6 +38,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/autopsy/human) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_exp id = TECHWEB_NODE_SURGERY_EXP @@ -67,6 +69,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/autopsy/nonhuman = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_tools id = TECHWEB_NODE_SURGERY_TOOLS @@ -80,3 +83,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index f5532e9e53f..407008b2844 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -6,10 +6,10 @@ organization = "Nanotrasen" should_generate_points = TRUE -/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) +/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) . = ..() if(.) - node.on_station_research() + node.on_station_research(research_source) /datum/techweb/oldstation id = "CHARLIE" diff --git a/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx b/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx index f08ee83fd4f..f88b2da67f4 100644 --- a/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx +++ b/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx @@ -9,16 +9,29 @@ const TOOLTIP_TEXT = ` %RANK with their job. `; +const TOOLTIP_NODE = ` + %NODE will be replaced with the researched node. +`; + type Data = { arrivalToggle: BooleanLike; arrival: string; newheadToggle: BooleanLike; newhead: string; + node_toggle: BooleanLike; + node_message: string; }; export const AutomatedAnnouncement = (props) => { const { act, data } = useBackend(); - const { arrivalToggle, arrival, newheadToggle, newhead } = data; + const { + arrivalToggle, + arrival, + newheadToggle, + newhead, + node_toggle, + node_message, + } = data; return ( @@ -90,6 +103,40 @@ export const AutomatedAnnouncement = (props) => { +
act('node_toggle')} + /> + } + > + + + } + > + + act('node_message', { + newText: value, + }) + } + /> + + +
);