diff --git a/code/__DEFINES/preferences_defines.dm b/code/__DEFINES/preferences_defines.dm
index 54ff7d5142b..22b06dec3cb 100644
--- a/code/__DEFINES/preferences_defines.dm
+++ b/code/__DEFINES/preferences_defines.dm
@@ -83,8 +83,9 @@
// toggles_3 variables. These MUST be prefixed with PREFTOGGLE_3
#define PREFTOGGLE_3_COGBAR_ANIMATIONS (1<<0) // 1
+#define PREFTOGGLE_3_DARK_FLASH (1<<1) // 2
-#define TOGGLES_3_TOTAL 1 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined.
+#define TOGGLES_3_TOTAL 3 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined.
#define TOGGLES_3_DEFAULT (PREFTOGGLE_3_COGBAR_ANIMATIONS)
diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm
index ccf7d3528f5..4ab44ce1b49 100644
--- a/code/_onclick/hud/fullscreen.dm
+++ b/code/_onclick/hud/fullscreen.dm
@@ -125,9 +125,17 @@
icon = 'icons/mob/screen_gen.dmi'
screen_loc = "WEST,SOUTH to EAST,NORTH"
icon_state = "flash"
+ var/dark_type = /atom/movable/screen/fullscreen/stretch/flash/dark
+
+/atom/movable/screen/fullscreen/stretch/flash/dark
+ icon_state = "flash_dark"
/atom/movable/screen/fullscreen/stretch/flash/noise
icon_state = "noise"
+ dark_type = /atom/movable/screen/fullscreen/stretch/flash/noise/dark
+
+/atom/movable/screen/fullscreen/stretch/flash/noise/dark
+ icon_state = "noise_dark"
/atom/movable/screen/fullscreen/stretch/high
icon = 'icons/mob/screen_gen.dmi'
diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm
index ea05103d6f3..1642a093403 100644
--- a/code/modules/client/preference/link_processing.dm
+++ b/code/modules/client/preference/link_processing.dm
@@ -1065,6 +1065,9 @@
var/atom/movable/screen/plane_master/cogbar/PM = locate(/atom/movable/screen/plane_master/cogbar) in parent.screen
PM.backdrop(parent.mob)
+ if("dark_flash")
+ toggles3 ^= PREFTOGGLE_3_DARK_FLASH
+
if("be_special")
var/r = href_list["role"]
if(r in GLOB.special_roles)
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 4c7189c9be2..19f0b2c6e3a 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -487,6 +487,7 @@ GLOBAL_LIST_INIT(special_role_times, list(
dat += " - TGUI Input - Large Buttons: [(toggles2 & PREFTOGGLE_2_LARGE_INPUT_BUTTONS) ? "Yes" : "No"]
"
dat += " - TGUI Input - Swap Buttons: [(toggles2 & PREFTOGGLE_2_SWAP_INPUT_BUTTONS) ? "Yes" : "No"]
"
dat += " - TGUI Say Theme: [(toggles2 & PREFTOGGLE_2_ENABLE_TGUI_SAY_LIGHT_MODE) ? "Light" : "Dark"]
"
+ dat += "Dark flash: [(toggles3 & PREFTOGGLE_3_DARK_FLASH) ? "Yes" : "No"]
"
dat += ""
if(TAB_ANTAG) // Antagonist's Preferences (and maps)
diff --git a/code/modules/mob/living/carbon/carbon_procs.dm b/code/modules/mob/living/carbon/carbon_procs.dm
index acb50711528..98980017b18 100644
--- a/code/modules/mob/living/carbon/carbon_procs.dm
+++ b/code/modules/mob/living/carbon/carbon_procs.dm
@@ -402,7 +402,7 @@
if((E?.status & ORGAN_DEAD) || E?.is_broken() || !.)
return FALSE
-/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash)
+/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, flash_type = /atom/movable/screen/fullscreen/stretch/flash)
//Parent proc checks if a mob can_be_flashed()
. = ..()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 574f54113c0..ab2dd4fa319 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -856,10 +856,13 @@
return TRUE
//called when the mob receives a bright flash
-/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash)
+/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, flash_type = /atom/movable/screen/fullscreen/stretch/flash)
SIGNAL_HANDLER
if(can_be_flashed(intensity, override_blindness_check))
- overlay_fullscreen("flash", type)
+ var/atom/movable/screen/fullscreen/stretch/flash/flash = flash_type
+ if(client && client.prefs.toggles3 & PREFTOGGLE_3_DARK_FLASH)
+ flash_type = flash.dark_type
+ overlay_fullscreen("flash", flash_type)
addtimer(CALLBACK(src, PROC_REF(clear_fullscreen), "flash", 25), 25)
return 1
diff --git a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
index 816d167dfcb..e1fe28f53a2 100644
--- a/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/maint_drone.dm
@@ -396,7 +396,7 @@
..()
update_headlamp(TRUE, 0, FALSE)
-/mob/living/silicon/robot/drone/flash_eyes(intensity = 1, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash/noise)
+/mob/living/silicon/robot/drone/flash_eyes(intensity = 1, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, laser_pointer = FALSE, flash_type = /atom/movable/screen/fullscreen/stretch/flash/noise)
if(affect_silicon)
return ..()
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index c55c3778426..530000b5b91 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -55,7 +55,7 @@
sleep(3)
step_away(src, user, 15)
-/mob/living/silicon/robot/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash/noise)
+/mob/living/silicon/robot/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, flash_type = /atom/movable/screen/fullscreen/stretch/flash/noise)
if(!affect_silicon || !can_be_flashed())
return
Confused(intensity * 4 SECONDS)
diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm
index 55b67a49a40..6a067da1c52 100644
--- a/code/modules/mob/living/silicon/silicon_mob.dm
+++ b/code/modules/mob/living/silicon/silicon_mob.dm
@@ -466,7 +466,7 @@
/mob/living/silicon/get_access()
return IGNORE_ACCESS //silicons always have access
-/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, type = /atom/movable/screen/fullscreen/stretch/flash/noise)
+/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, laser_pointer = FALSE, flash_type = /atom/movable/screen/fullscreen/stretch/flash/noise)
if(affect_silicon)
return ..()
diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi
index 140ceb8e5d0..662f1a5b5c2 100644
Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ