diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index d279cc02172..80fe93360e7 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -116,15 +116,18 @@
/datum/game_mode/blob/declare_completion()
if(stage >= 3)
+ feedback_set_details("round_end_result","loss - blob took over")
world << "The blob has taken over the station!"
world << "The entire station was eaten by the Blob"
check_quarantine()
else if(station_was_nuked)
+ feedback_set_details("round_end_result","halfwin - nuke")
world << "Partial Win: The station has been destroyed!"
world << "Directive 7-12 has been successfully carried out preventing the Blob from spreading."
else
+ feedback_set_details("round_end_result","win - blob eliminated")
world << "The staff has won!"
world << "The alien organism has been eradicated from the station"
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 72950da028a..199cb257a29 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -284,8 +284,12 @@
/datum/game_mode/cult/declare_completion()
if(!check_cult_victory())
+ feedback_set_details("round_end_result","win - cult win")
+ feedback_set("round_end_result",acolytes_survived)
world << "\red The cult wins! It has succeeded in serving its dark masters!"
else
+ feedback_set_details("round_end_result","loss - staff stopped the cult")
+ feedback_set("round_end_result",acolytes_survived)
world << "\red The staff managed to stop the cult!"
world << "\b Cultists escaped: [acolytes_survived]"
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index bb4c9775e91..2cad4558abf 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -168,9 +168,16 @@ var/global/datum/controller/gameticker/ticker
spawn(50)
if (mode.station_was_nuked)
+ feedback_set_details("end_proper","nuke")
world << "\blue Rebooting due to destruction of station in [restart_timeout/10] seconds"
else
+ feedback_set_details("end_proper","proper completion")
world << "\blue Restarting in [restart_timeout/10] seconds"
+
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
sleep(restart_timeout)
world.Reboot()
@@ -207,8 +214,4 @@ var/global/datum/controller/gameticker/ticker
if (findtext("[handler]","auto_declare_completion_"))
call(mode, handler)()
- feedback_set_details("round_end","[time2text(world.realtime)]")
- if(blackbox)
- blackbox.save_all_data_to_sql()
-
return 1
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 138cc4c3b64..c1657de76e2 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -36,6 +36,11 @@
if(malf_ai.len < 1)
world << "Uh oh, its malfunction and there is no AI! Please report this."
world << "Rebooting world in 5 seconds."
+
+ feedback_set_details("end_error","malf - no AI")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
sleep(50)
world.Reboot()
return
@@ -193,30 +198,37 @@
var/crew_evacuated = (emergency_shuttle.location==2)
if ( station_captured && station_was_nuked)
+ feedback_set_details("round_end_result","win - AI win - nuke")
world << "AI Victory"
world << "Everyone was killed by the self-destruct!"
else if ( station_captured && malf_dead && !station_was_nuked)
+ feedback_set_details("round_end_result","halfwin - AI killed, staff lost control")
world << "Neutral Victory"
world << "The AI has been killed! The staff has lose control over the station."
else if ( station_captured && !malf_dead && !station_was_nuked)
+ feedback_set_details("round_end_result","win - AI win - no explosion")
world << "AI Victory"
world << "The AI has chosen not to explode you all!"
else if (!station_captured && station_was_nuked)
+ feedback_set_details("round_end_result","halfwin - everyone killed by nuke")
world << "Neutral Victory"
world << "Everyone was killed by the nuclear blast!"
else if (!station_captured && malf_dead && !station_was_nuked)
+ feedback_set_details("round_end_result","loss - staff win")
world << "Human Victory"
world << "The AI has been killed! The staff is victorious."
else if (!station_captured && !malf_dead && !station_was_nuked && crew_evacuated)
+ feedback_set_details("round_end_result","halfwin - evacuated")
world << "Neutral Victory"
world << "The Corporation has lose [station_name()]! All survived personnel will be fired!"
else if (!station_captured && !malf_dead && !station_was_nuked && !crew_evacuated)
+ feedback_set_details("round_end_result","nalfwin - interrupted")
world << "Neutral Victory"
world << "Round was mysteriously interrupted!"
..()
diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm
index 88bbc7e125f..74e63797ee9 100644
--- a/code/game/gamemodes/meteor/meteor.dm
+++ b/code/game/gamemodes/meteor/meteor.dm
@@ -46,6 +46,9 @@
else
survivors[player.real_name] = "alive"
+ feedback_set_details("round_end_result","end - evacuation")
+ feedback_set("round_end_result",survivors.len)
+
if (survivors.len)
world << "\blue The following survived the meteor attack!"
for(var/survivor in survivors)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index dc33f5237d9..90b41eee68b 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -263,34 +263,42 @@
//herp //Used for tracking if the syndies got the shuttle off of the z-level
if (!disk_rescued && station_was_nuked && !herp)
+ feedback_set_details("round_end_result","win - syndicate nuke")
world << "Syndicate Victory!"
world << "[syndicate_name()] operatives have destroyed [station_name()]!"
else if (!disk_rescued && station_was_nuked && herp)
+ feedback_set_details("round_end_result","halfwin - syndicate nuke - did not evacuate in time")
world << "Total Annihilation"
world << "[syndicate_name()] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion. Next time, don't lose the disk!"
else if (!disk_rescued && !station_was_nuked && derp && !herp)
+ feedback_set_details("round_end_result","halfwin - blew wrong station")
world << "Neutral Victory"
world << "[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't lose the disk!"
else if (!disk_rescued && !station_was_nuked && derp && herp)
+ feedback_set_details("round_end_result","halfwin - blew wrong station - did not evacuate in time")
world << "[syndicate_name()] operatives have earned Darwin Award!"
world << "[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't lose the disk!"
else if ( disk_rescued )
+ feedback_set_details("round_end_result","loss - evacuation - disk secured")
world << "Crew Victory"
world << "The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!"
else if (!disk_rescued && is_operatives_are_dead())
+ feedback_set_details("round_end_result","loss - evacuation - disk not secured")
world << "Crew Victory"
world << "The Research Staff has stopped the [syndicate_name()] Operatives!"
else if (!disk_rescued && crew_evacuated)
+ feedback_set_details("round_end_result","halfwin - detonation averted")
world << "Neutral Victory"
world << "[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted. Next time, don't lose the disk!"
else if (!disk_rescued && !crew_evacuated)
+ feedback_set_details("round_end_result","halfwin - interrupted")
world << "Neutral Victory"
world << "Round was mysteriously interrupted!"
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 24606e71e83..26139859a8a 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -206,6 +206,11 @@
if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
world << "Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","nuke - unhandled ending")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
sleep(300)
log_game("Rebooting due to nuclear detonation")
world.Reboot()
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 1895255f1d1..7a66d22b822 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -303,8 +303,10 @@
//////////////////////////////////////////////////////////////////////
/datum/game_mode/revolution/declare_completion()
if(finished == 1)
+ feedback_set_details("round_end_result","win - heads killed")
world << "\red The heads of staff were killed or abandoned the station! The revolutionaries win!"
else if(finished == 2)
+ feedback_set_details("round_end_result","loss - rev heads killed")
world << "\red The heads of staff managed to stop the revolution!"
..()
return 1
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index ca48e48201d..3c15ee72bbd 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -198,6 +198,7 @@
/datum/game_mode/wizard/declare_completion()
if(finished)
+ feedback_set_details("round_end_result","loss - wizard killed")
world << "\red The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!"
..()
return 1
diff --git a/code/game/vote.dm b/code/game/vote.dm
index 222797c115b..7dbe6c6cce9 100644
--- a/code/game/vote.dm
+++ b/code/game/vote.dm
@@ -77,6 +77,11 @@
if(ticker)
world <<"\red World will reboot in 10 seconds"
+ feedback_set_details("end_error","mode vote - [winner]")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
sleep(100)
log_game("Rebooting due to mode vote")
world.Reboot()
@@ -93,6 +98,11 @@
world <<"\red World will reboot in 5 seconds"
+ feedback_set_details("end_error","restart vote")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
sleep(50)
log_game("Rebooting due to restart vote")
world.Reboot()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 2c503b58576..598f272f877 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -2133,9 +2133,14 @@
if(confirm == "Cancel")
return
if(confirm == "Yes")
- world << "\red Restarting world! \blue Initiated by [usr.client.stealth ? "Admin Candidate" : usr.key]!"
+ world << "\red Restarting world! \blue Initiated by [usr.client.stealth ? "Admin" : usr.key]!"
log_admin("[key_name(usr)] initiated a reboot.")
+ feedback_set_details("end_error","admin reboot - by [usr.key] [usr.client.stealth ? "(stealth)" : ""]")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
sleep(50)
world.Reboot()
@@ -2290,8 +2295,14 @@
set name="Immediate Reboot"
if( alert("Reboot server?",,"Yes","No") == "No")
return
- world << "\red Rebooting world! \blue Initiated by [usr.client.stealth ? "Admin Candidate" : usr.key]!"
+ world << "\red Rebooting world! \blue Initiated by [usr.client.stealth ? "Admin" : usr.key]!"
log_admin("[key_name(usr)] initiated an immediate reboot.")
+
+ feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.stealth ? "(stealth)" : ""]")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
world.Reboot()
/client/proc/deadchat()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm
index 238e63d1515..de242f455e2 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/death.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm
@@ -48,6 +48,11 @@
if (!cancel && !abandon_allowed)
world << "Everyone is dead! Resetting in 30 seconds!"
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn (300)
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm
index bd2f5cb2187..48b6e13c7a5 100644
--- a/code/modules/mob/living/carbon/alien/larva/death.dm
+++ b/code/modules/mob/living/carbon/alien/larva/death.dm
@@ -51,6 +51,11 @@
if (!cancel && !abandon_allowed)
world << "Everyone is dead! Resetting in 30 seconds!"
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn (300)
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index 289ef7e46ab..6f34b926c6f 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -24,6 +24,12 @@
break
if (!( cancel ))
world << "Everyone is dead! Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn( 300 )
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index dba4ba3ea50..fcc51e9f13d 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -64,6 +64,11 @@
if (!cancel && !abandon_allowed)
world << "Everyone is dead! Resetting in 30 seconds!"
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn (300)
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/carbon/metroid/death.dm b/code/modules/mob/living/carbon/metroid/death.dm
index 2eca45cabfb..813929cb0d1 100644
--- a/code/modules/mob/living/carbon/metroid/death.dm
+++ b/code/modules/mob/living/carbon/metroid/death.dm
@@ -43,6 +43,12 @@
break
if (!( cancel ))
world << "Everyone is dead! Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn( 300 )
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm
index f7690d7ba6e..0f984a3b4bd 100644
--- a/code/modules/mob/living/carbon/monkey/death.dm
+++ b/code/modules/mob/living/carbon/monkey/death.dm
@@ -32,6 +32,12 @@
break
if (!( cancel ))
world << "Everyone is dead! Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn( 300 )
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 3a8bfa4bdae..3671674633c 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -53,6 +53,12 @@
break
if (!( cancel ))
world << "Everyone is dead! Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn( 300 )
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index 90adfd82499..33da7afd092 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -19,6 +19,12 @@
break
if (!( cancel ))
world << "Everyone is dead! Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn( 300 )
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm
index 6974c0e9885..dec51853808 100644
--- a/code/modules/mob/living/silicon/robot/death.dm
+++ b/code/modules/mob/living/silicon/robot/death.dm
@@ -34,6 +34,12 @@
break
if (!( cancel ))
world << "Everyone is dead! Resetting in 30 seconds!"
+
+ feedback_set_details("end_error","no live players")
+ feedback_set_details("round_end","[time2text(world.realtime)]")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+
spawn( 300 )
log_game("Rebooting because of no live players")
world.Reboot()
diff --git a/code/unused/gamemodes/monkey.dm b/code/unused/gamemodes/monkey.dm
index 7454928c9e2..52d98fce20a 100644
--- a/code/unused/gamemodes/monkey.dm
+++ b/code/unused/gamemodes/monkey.dm
@@ -105,6 +105,7 @@
break
if (monkeywin)
+ feedback_set_details("round_end_result","win - monkey win")
world << "The monkeys have won! Humanity is doomed!"
for (var/mob/living/carbon/human/player in world)
if (player.client)
@@ -112,6 +113,7 @@
player.monkeyize()
sleep(200)
else
+ feedback_set_details("round_end_result","loss - crew win")
world << "The Research Staff has stopped the monkey invasion!"
..()
return 1
diff --git a/code/unused/gamemodes/ruby.dm b/code/unused/gamemodes/ruby.dm
index 8e6357c1b8d..b1e01953cd7 100644
--- a/code/unused/gamemodes/ruby.dm
+++ b/code/unused/gamemodes/ruby.dm
@@ -49,8 +49,10 @@
/datum/game_mode/ruby/declare_completion()
if(abominationwins)
+ feedback_set_details("round_end_result","win - abomination win")
world << "The Abomination has murdered the station and sacrificed himself to Cjopaze! (played by [winnerkey])"
else
+ feedback_set_details("round_end_result","loss - abomination killed")
world << "The Abomination has been stopped and Cjopaze's influence resisted! The station lives another day,"
if(killed.len > 0)
world << "Those who were sacrificed shall be remembered: "