diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm
index ddac25ee83..ddfb679932 100644
--- a/code/controllers/subsystems/transcore_vr.dm
+++ b/code/controllers/subsystems/transcore_vr.dm
@@ -56,7 +56,7 @@ SUBSYSTEM_DEF(transcore)
implants -= imp
continue
- //In a human
+ //In a human
BITSET(H.hud_updateflag, BACKUP_HUD)
if(H == imp.imp_in && H.mind && H.stat < DEAD)
@@ -93,6 +93,7 @@ SUBSYSTEM_DEF(transcore)
else
if(curr_MR.dead_state != MR_DEAD) //First time switching to dead
notify(name)
+ curr_MR.last_notification = world.time
curr_MR.dead_state = MR_DEAD
if(MC_TICK_CHECK)
@@ -158,9 +159,12 @@ SUBSYSTEM_DEF(transcore)
return 1
// Send a past-due notification to the medical radio channel.
-/datum/controller/subsystem/transcore/proc/notify(var/name)
+/datum/controller/subsystem/transcore/proc/notify(var/name, var/repeated = FALSE)
ASSERT(name)
- global_announcer.autosay("[name] is past-due for a mind backup. This will be the only notification.", "TransCore Oversight", "Medical")
+ if(repeated)
+ global_announcer.autosay("This is a repeat notification that [name] is past-due for a mind backup.", "TransCore Oversight", "Medical")
+ else
+ global_announcer.autosay("[name] is past-due for a mind backup.", "TransCore Oversight", "Medical")
// Called from mind_record to add itself to the transcore.
/datum/controller/subsystem/transcore/proc/add_backup(var/datum/transhuman/mind_record/MR)
diff --git a/code/modules/mob/dead/observer/observer_vr.dm b/code/modules/mob/dead/observer/observer_vr.dm
index 97280c78b9..a0079cbee4 100644
--- a/code/modules/mob/dead/observer/observer_vr.dm
+++ b/code/modules/mob/dead/observer/observer_vr.dm
@@ -56,3 +56,23 @@
mind.active = TRUE
SC.catch_mob(src) //This will result in us being deleted so...
+
+/mob/observer/dead/verb/backup_ping()
+ set category = "Ghost"
+ set name = "Notify Transcore"
+ set desc = "If your past-due backup notification was missed or ignored, you can use this to send a new one."
+
+ var/record_found = FALSE
+ for(var/datum/transhuman/mind_record/record in SStranscore.backed_up)
+ if(record.ckey == ckey)
+ record_found = TRUE
+ if(!(record.dead_state == MR_DEAD))
+ to_chat(src, "Your backup is not past-due yet.")
+ else if((world.time - record.last_notification) < 10 MINUTES)
+ to_chat(src, "Too little time has passed since your last notification.")
+ else
+ SStranscore.notify(record.mindname, TRUE)
+ to_chat(src, "New notification has been sent.")
+
+ if(!record_found)
+ to_chat(src, "No mind record found!")
\ No newline at end of file
diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm
index 834b067e9d..134d2be87d 100644
--- a/code/modules/resleeving/infocore_records.dm
+++ b/code/modules/resleeving/infocore_records.dm
@@ -14,6 +14,7 @@
//0: Normal, 1: Might be dead, 2: Definitely dead, show on console
var/dead_state = 0
var/last_update = 0
+ var/last_notification
//Backend
var/ckey = ""