diff --git a/aurorastation.dme b/aurorastation.dme
index 464f51edf56..2a3e6094f47 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -2229,7 +2229,6 @@
#include "code\modules\events\carp_migration.dm"
#include "code\modules\events\ccia_general_notice.dm"
#include "code\modules\events\comet_expulsion.dm"
-#include "code\modules\events\comms_blackout.dm"
#include "code\modules\events\communications_blackout.dm"
#include "code\modules\events\electrical_storm.dm"
#include "code\modules\events\event.dm"
diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm
index c3d5630a84a..a9c9bb09858 100644
--- a/code/game/machinery/telecomms/machines/processor.dm
+++ b/code/game/machinery/telecomms/machines/processor.dm
@@ -30,10 +30,14 @@
if(!process_mode)
// Data scrambling increased from 35-65 to MAXIMUM GIBBERISH
signal.data["compression"] = 100
+
// Processor set to UNCOMPRESS
else if (signal.data["compression"])
+ // Ion storm? Blow out any intelligibility.
+ if(ion_storm)
+ signal.data["compression"] = 100
// Taken any damage? Start gently scrambling things.
- if(integrity < 100)
+ else if(integrity < 100)
signal.data["compression"] = rand(0, round((100-integrity)))
// Uncompress signal to complete clarity
else signal.data["compression"] = 0
diff --git a/code/game/machinery/telecomms/telecommunications.dm b/code/game/machinery/telecomms/telecommunications.dm
index fc9cf340606..5c87475921d 100644
--- a/code/game/machinery/telecomms/telecommunications.dm
+++ b/code/game/machinery/telecomms/telecommunications.dm
@@ -61,6 +61,9 @@
/// Overmap ranges in terms of map tile distance, used by receivers, relays, and broadcasters (and AIOs)
var/overmap_range = 0
+ /// Is this device currently scrambling all comms? Used for random events.
+ var/ion_storm = FALSE
+
///Looping sounds for any servers
// var/datum/looping_sound/server/soundloop
@@ -170,21 +173,20 @@
else
STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF)
-/obj/machinery/telecomms/emp_act(severity)
- . = ..()
+/**
+ * Previous implementation was to run EMP proc then restore, but was very buggy. This is a rudimentary alternate implementation, just flags processors to crap out.
+ */
+/obj/machinery/telecomms/proc/ion_storm()
+ var/duration = 270 + rand(1,60)
+ ion_storm = TRUE
+ addtimer(CALLBACK(src, PROC_REF(post_ion_storm_act)), duration SECONDS)
- if(stat & EMPED || !prob(100/severity))
- return
+/obj/machinery/telecomms/proc/post_ion_storm_act()
+ ion_storm = FALSE
- stat |= EMPED
- addtimer(CALLBACK(src, PROC_REF(post_emp_act)), (300 SECONDS) / severity)
-
-/obj/machinery/telecomms/proc/emp_damage()
+/obj/machinery/telecomms/proc/ion_storm_damage()
integrity = between(0, integrity - (rand(5,15)), 100)
-/obj/machinery/telecomms/proc/post_emp_act()
- stat &= ~EMPED
- toggle_power(POWER_USE_IDLE)
/obj/machinery/telecomms/proc/check_heat()
// Checks heat from the environment and applies any integrity damage
diff --git a/code/modules/events/comms_blackout.dm b/code/modules/events/comms_blackout.dm
deleted file mode 100644
index d2e4ed3a712..00000000000
--- a/code/modules/events/comms_blackout.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/proc/communications_blackout(var/silent = 1)
-
- if(!silent)
- command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/AI/ionospheric.ogg')
- else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms
- for(var/mob/living/silicon/ai/A in GLOB.player_list)
- to_chat(A, "
")
- to_chat(A, SPAN_WARNING("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT"))
- to_chat(A, "
")
- for(var/obj/machinery/telecomms/T in SSmachinery.all_telecomms)
- T.emp_act(EMP_HEAVY)
diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm
index 9882da902d5..10f2552bda9 100644
--- a/code/modules/events/communications_blackout.dm
+++ b/code/modules/events/communications_blackout.dm
@@ -12,25 +12,28 @@
"Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \
"Ionospheri:% MCayj^j<.3-BZZZZZZT", \
"#4nd%;f4y6,>%-BZZZZZZZT")
-
+ var/found_ai = FALSE
for(var/mob/living/silicon/ai/A in GLOB.player_list) //AIs are always aware of communication blackouts.
+ found_ai = TRUE
if(A.z in affecting_z)
to_chat(A, "
")
to_chat(A, SPAN_WARNING("[alert]"))
to_chat(A, "
")
- if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
+ // If there's no AI, just make the announcement.
+ if(!found_ai)
+ command_announcement.Announce(alert, zlevels = affecting_z)
+ // If there is an AI, then give them a chance to announce or not announce the blackout.
+ else if(prob(30))
command_announcement.Announce(alert, zlevels = affecting_z)
- return
return 1
-
/datum/event/communications_blackout/start()
..()
- for(var/obj/machinery/telecomms/T in SSmachinery.all_telecomms)
+ for(var/obj/machinery/telecomms/processor/T in SSmachinery.all_telecomms)
if(T.z in affecting_z)
- T.emp_act(EMP_HEAVY)
+ T.ion_storm()
// 10% chance for a given machine to take damage: slight delays in transmission time or slight message garbling until repaired.
if(damage_machinery && prob(10))
- T.emp_damage()
+ T.ion_storm_damage()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 382fa99327d..25c7b924ebb 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -289,10 +289,6 @@ GLOBAL_LIST_INIT(severity_to_string, list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Comms Blackout", /datum/event/communications_blackout,
50),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Comms Blackout - Damage", /datum/event/communications_blackout/damage_machinery,
- 50, list(ASSIGNMENT_ENGINEER = 25),
- pop_needed = 6),
-
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Comms Blackout - Damage", /datum/event/communications_blackout/damage_machinery,
100, list(ASSIGNMENT_ENGINEER = 25),
pop_needed = 6),
diff --git a/html/changelogs/Batrachophreno-Tcomms.yml b/html/changelogs/Batrachophreno-Tcomms.yml
new file mode 100644
index 00000000000..976e8796fae
--- /dev/null
+++ b/html/changelogs/Batrachophreno-Tcomms.yml
@@ -0,0 +1,60 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# - (fixes bugs)
+# wip
+# - (work in progress)
+# qol
+# - (quality of life)
+# soundadd
+# - (adds a sound)
+# sounddel
+# - (removes a sound)
+# rscadd
+# - (adds a feature)
+# rscdel
+# - (removes a feature)
+# imageadd
+# - (adds an image or sprite)
+# imagedel
+# - (removes an image or sprite)
+# spellcheck
+# - (fixes spelling or grammar)
+# experiment
+# - (experimental change)
+# balance
+# - (balance changes)
+# code_imp
+# - (misc internal code change)
+# refactor
+# - (refactors code)
+# config
+# - (makes a change to the config files)
+# admin
+# - (makes changes to administrator tools)
+# server
+# - (miscellaneous changes to server)
+#################################
+
+# Your name.
+author: Batrachophrenoboocosmomachia
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
+# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - qol: "Made it so when no AI is being played, Communications Blackouts will always announce their presence. If AI is being played, the existing 30% chance of firing silently remains in place."
+ - bugfix: "Refactor of Communications Blackout event to flag tcomm processors to scramble signals due to previous implementation (mass faux-EMP) seeming too unstable."
+ - bugfix: "Removed duplicate Communications Blackout event entry from container, removed deprecated event file."