diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index e3c1588a746..7cec56e7983 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes GLOBAL_LIST_EMPTY(rcd_list) //list of Rapid Construction Devices. +GLOBAL_LIST_EMPTY(intercoms_list) //list of wallmounted intercom radios. GLOBAL_LIST_EMPTY(apcs_list) //list of all Area Power Controller machines, separate from machines for powernet speeeeeeed. GLOBAL_LIST_EMPTY(tracked_implants) //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... GLOBAL_LIST_EMPTY(tracked_chem_implants) //list of implants the prisoner console can track and send inject commands too diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 131562f9fd2..24093aa8717 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -22,6 +22,11 @@ if(!current_area) return RegisterSignal(current_area, COMSIG_AREA_POWER_CHANGE, .proc/AreaPowerCheck) + GLOB.intercoms_list += src + +/obj/item/radio/intercom/Destroy() + . = ..() + GLOB.intercoms_list -= src /obj/item/radio/intercom/examine(mob/user) . = ..() diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index ffad6956f2c..c2d1f6811d5 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -581,6 +581,36 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) desc = "[initial(desc)] It has [uses] use\s remaining." UpdateButtonIcon() +/// HIGH IMPACT HONKING +/datum/ai_module/destructive/megahonk + name = "Percussive Intercomm Interference" + description = "Emit a debilitatingly percussive auditory blast through the station intercoms. Does not overpower hearing protection. Two uses per purchase." + cost = 20 + power_type = /datum/action/innate/ai/honk + unlock_text = "You upload a sinister sound file into every intercom..." + unlock_sound = 'sound/items/airhorn.ogg' + +/datum/action/innate/ai/honk + name = "Percussive Intercomm Interference" + desc = "Rock the station's intercom system with an obnoxious HONK!" + button_icon_state = "intercom" + uses = 2 + +/datum/action/innate/ai/honk/Activate() + to_chat(owner, span_clown("The intercom system plays your prepared file as commanded.")) + for(var/obj/item/radio/intercom/found_intercom in GLOB.intercoms_list) + if(!found_intercom.is_on() || !found_intercom.get_listening() || found_intercom.wires.is_cut(WIRE_RX)) //Only operating intercoms play the honk + continue + found_intercom.audible_message(message = "[found_intercom] crackles for a split second.", hearing_distance = 3) + playsound(found_intercom, 'sound/items/airhorn.ogg', 100, TRUE) + for(var/mob/living/carbon/honk_victim in ohearers(6, found_intercom)) + var/turf/victim_turf = get_turf(honk_victim) + if(isspaceturf(victim_turf) && !victim_turf.Adjacent(found_intercom)) //Prevents getting honked in space + continue + if(honk_victim.soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 30, deafen_pwr = 60)) //Ear protection will prevent these effects + honk_victim.Jitter(60) + to_chat(honk_victim, span_clown("HOOOOONK!")) + /// Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting. /datum/ai_module/utility/place_cyborg_transformer name = "Robotic Factory (Removes Shunting)" diff --git a/icons/mob/actions/actions_AI.dmi b/icons/mob/actions/actions_AI.dmi index 43336e0a0f3..b85f056dfa0 100644 Binary files a/icons/mob/actions/actions_AI.dmi and b/icons/mob/actions/actions_AI.dmi differ