diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme
index d80130686488c65c26d2a7e77793d682e703c027..edeba0d40bc2e0829ff534fdbc8a7c83ee028bb6 100644
--- a/ColonialMarinesALPHA.dme
+++ b/ColonialMarinesALPHA.dme
@@ -349,8 +349,8 @@
 #include "code\datums\elements\_element.dm"
 #include "code\datums\elements\bloody_feet.dm"
 #include "code\datums\elements\drop_retrieval.dm"
-#include "code\datums\elements\suturing.dm"
 #include "code\datums\elements\poor_eyesight_correction.dm"
+#include "code\datums\elements\suturing.dm"
 #include "code\datums\elements\bullet_trait\damage_boost.dm"
 #include "code\datums\elements\bullet_trait\iff.dm"
 #include "code\datums\elements\bullet_trait\ignored_range.dm"
diff --git a/code/datums/statistics/entities/round_stats.dm b/code/datums/statistics/entities/round_stats.dm
index 34ff203997ecf9feffe61da9856250685c369b71..48c6a9bef69b960efbd156ddc3d5a029412fe979 100644
--- a/code/datums/statistics/entities/round_stats.dm
+++ b/code/datums/statistics/entities/round_stats.dm
@@ -343,7 +343,7 @@
 	var/stats = ""
 	stats += "[SSticker.mode.round_finished]\n"
 	stats += "Game mode: [game_mode]\n"
-	stats += "Map name: [current_map.name]\n"
+	stats += "Map name: [current_map.map_name]\n"
 	stats += "Round time: [duration2text(round_length)]\n"
 	stats += "End round player population: [end_round_player_population]\n"
 
diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm
index 59e6df7a555d911696bff5384f5ababb30a7e108..cea488317e6ceba011828519c977f0398f6142a1 100644
--- a/code/game/gamemodes/cm_process.dm
+++ b/code/game/gamemodes/cm_process.dm
@@ -1,3 +1,4 @@
+#define is_hive_living(hive) (!hive.hardcore || hive.living_xeno_queen)
 
 #define QUEEN_DEATH_COUNTDOWN 			 10 MINUTES //10 minutes. Can be changed into a variable if it needs to be manipulated later.
 
@@ -7,7 +8,8 @@
 #define MODE_INFESTATION_M_MINOR		"Marine Minor Victory"
 #define MODE_INFESTATION_DRAW_DEATH		"DRAW: Mutual Annihilation"
 
-#define MODE_INFECTION_ZOMBIE_WIN		"Major Zombie Victory"
+#define MODE_WISKEY_OUTPOST_X_MAJOR		"Xenomorph Defeated Marines"
+#define MODE_WISKEY_OUTPOST_M_MAJOR		"Marines Failed Defense"
 
 #define MODE_BATTLEFIELD_W_MAJOR		"Wey-Yu PMC Major Success"
 #define MODE_BATTLEFIELD_M_MAJOR		"Marine Major Success"
@@ -15,6 +17,12 @@
 #define MODE_BATTLEFIELD_M_MINOR		"Marine Minor Success"
 #define MODE_BATTLEFIELD_DRAW_STALEMATE "DRAW: Stalemate"
 #define MODE_BATTLEFIELD_DRAW_DEATH		"DRAW: My Friends Are Dead"
+#define MODE_INFECTION_HUMAN_WIN		"Major Human Victory"
+#define MODE_INFECTION_ZOMBIE_WIN		"Major Zombie Victory"
+
+#define MODE_XVX_WIN					"Has Won. Xeno War Ended"
+
+#define MODE_HUNTERGAMES_WIN			"Hunter Games Ended"
 
 #define MODE_GENERIC_DRAW_NUKE			"DRAW: Nuclear Explosion"
 
@@ -284,6 +292,26 @@ var/nextAdminBioscan = 30 MINUTES//30 minutes in
 		var/input = "Bioscan complete.\n\nSensors indicate [numXenosShipAres ? "[numXenosShipAres]":"no"] unknown lifeform signature[!numXenosShipAres || numXenosShipAres > 1 ? "s":""] present on the ship[numXenosShipAres&&RandomXenosShipLocation?", including one in [RandomXenosShipLocation],":""] and [numXenosPlanet ? "approximately [numXenosPlanet]":"no"] signature[!numXenosPlanet || numXenosPlanet > 1 ? "s":""] located elsewhere[numXenosPlanet&&RandomXenosPlanetLocation?", including one in [RandomXenosPlanetLocation]":""]."
 		marine_announcement(input, name, 'sound/AI/bioscan.ogg')
 
+/datum/game_mode/proc/get_xenos_hive(list/z_levels = SSmapping.levels_by_any_trait(list(ZTRAIT_GROUND, ZTRAIT_LOWORBIT, ZTRAIT_MARINE_MAIN_SHIP)))
+	var/list/list/hivenumbers = list()
+	var/datum/hive_status/HS
+	for(var/hivenumber in GLOB.hive_datum)
+		HS = GLOB.hive_datum[hivenumber]
+		hivenumbers += list(HS.name = list())
+
+	for(var/mob/M in GLOB.player_list)
+		if(M.z && (M.z in z_levels) && M.stat != DEAD && !istype(M.loc, /turf/open/space)) //If they have a z var, they are on a turf.
+			var/mob/living/carbon/Xenomorph/X = M
+			var/datum/hive_status/hive = GLOB.hive_datum[X.hivenumber]
+			if(!hive)
+				continue
+
+			if(istype(X) && is_hive_living(hive))
+				hivenumbers[hive.name].Add(X)
+
+
+	return hivenumbers
+
 /*
 Count up surviving humans and aliens.
 Can't be in a locker, in space, in the thunderdome, or distress.
@@ -345,19 +373,3 @@ Only checks living mobs with a client attached.
 				num_marines++
 
 	return num_marines
-
-
-/*
-#undef QUEEN_DEATH_COUNTDOWN
-#undef MODE_INFESTATION_X_MAJOR
-#undef MODE_INFESTATION_M_MAJOR
-#undef MODE_INFESTATION_X_MINOR
-#undef MODE_INFESTATION_M_MINOR
-#undef MODE_INFESTATION_DRAW_DEATH
-#undef MODE_BATTLEFIELD_W_MAJOR
-#undef MODE_BATTLEFIELD_M_MAJOR
-#undef MODE_BATTLEFIELD_W_MINOR
-#undef MODE_BATTLEFIELD_M_MINOR
-#undef MODE_BATTLEFIELD_DRAW_STALEMATE
-#undef MODE_BATTLEFIELD_DRAW_DEATH
-#undef MODE_GENERIC_DRAW_NUKE*/
diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm
index 94c4ced2281020a9532dd36f9929ed31a66a5a6b..41f7d974b96a37c3998847beb9c1df1262c57026 100644
--- a/code/game/gamemodes/colonialmarines/colonialmarines.dm
+++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm
@@ -6,6 +6,7 @@
 	monkey_amount = 5
 	flags_round_type = MODE_INFESTATION|MODE_FOG_ACTIVATED|MODE_NEW_SPAWN
 	var/round_status_flags
+	round_end_states = list(MODE_INFESTATION_X_MAJOR, MODE_INFESTATION_M_MAJOR, MODE_INFESTATION_X_MINOR, MODE_INFESTATION_M_MINOR, MODE_INFESTATION_DRAW_DEATH)
 
 	var/passive_increase_interval = 20 MINUTES
 	var/next_passive_increase = 0
@@ -324,6 +325,8 @@
 			musical_track = pick('sound/theme/nuclear_detonation1.ogg','sound/theme/nuclear_detonation2.ogg')
 			if(round_statistics && round_statistics.current_map)
 				round_statistics.current_map.total_draws += 1
+		else
+			log_game("Round end result - [round_finished]")
 	var/sound/S = sound(musical_track, channel = SOUND_CHANNEL_LOBBY)
 	S.status = SOUND_STREAM
 	sound_to(world, S)
@@ -348,15 +351,6 @@
 
 // for the toolbox
 /datum/game_mode/colonialmarines/end_round_message()
-	switch(round_finished)
-		if(MODE_INFESTATION_X_MAJOR)
-			return "Round has ended. Xeno Major Victory."
-		if(MODE_INFESTATION_M_MAJOR)
-			return "Round has ended. Marine Major Victory."
-		if(MODE_INFESTATION_X_MINOR)
-			return "Round has ended. Xeno Minor Victory."
-		if(MODE_INFESTATION_M_MINOR)
-			return "Round has ended. Marine Minor Victory."
-		if(MODE_INFESTATION_DRAW_DEATH)
-			return "Round has ended. Draw."
+	if(round_finished)
+		return "Round has ended. [round_finished]"
 	return "Round has ended in a strange way."
diff --git a/code/game/gamemodes/colonialmarines/huntergames.dm b/code/game/gamemodes/colonialmarines/huntergames.dm
index 523c049a4638575c9b91897a0cbc531de2a6d181..7ace51803a4e76fec784d425a106c07ee0caf215 100644
--- a/code/game/gamemodes/colonialmarines/huntergames.dm
+++ b/code/game/gamemodes/colonialmarines/huntergames.dm
@@ -105,6 +105,8 @@ var/waiting_for_drop_votes = 0
 	var/ticks_passed = 0
 	var/drops_disabled = 0
 
+	round_end_states = list(MODE_HUNTERGAMES_WIN)
+
 	votable = FALSE // borked
 
 /obj/effect/step_trigger/hell_hound_blocker/Trigger(mob/living/carbon/hellhound/H)
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
index 0d47b710a361d711ce370a8b2c5a9bf4c6898d75..0d4409d80ddd142756ac1129c42251e201909ab2 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
@@ -42,8 +42,8 @@
 
 	//var/mob/living/carbon/human/Commander //If there is no Commander, marines wont get any supplies
 	//No longer relevant to the game mode, since supply drops are getting changed.
+	round_end_states = list(MODE_WISKEY_OUTPOST_X_MAJOR, MODE_WISKEY_OUTPOST_M_MAJOR, MODE_INFESTATION_DRAW_DEATH)
 	var/checkwin_counter = 0
-	var/finished = 0
 	var/has_started_timer = 10 //This is a simple timer so we don't accidently check win conditions right in post-game
 	var/randomovertime = 0 //This is a simple timer so we can add some random time to the game mode.
 	var/spawn_next_wave = 12 MINUTES //Spawn first batch at ~12 minutes
@@ -109,7 +109,7 @@
 
 	CONFIG_SET(flag/remove_gun_restrictions, TRUE)
 	sleep(10)
-	to_world("<span class='round_header'>The current game mode is - WHISKEY OUTPOST!</span>")
+	to_world("<span class='round_header'>The current game mode is - [name]!</span>")
 	to_world(SPAN_ROUNDBODY("It is the year 2177 on the planet LV-624, five years before the arrival of the USS Almayer and the 2nd 'Falling Falcons' Battalion in the sector"))
 	to_world(SPAN_ROUNDBODY("The 3rd 'Dust Raiders' Battalion is charged with establishing a USCM prescence in the Tychon's Rift sector"))
 	to_world(SPAN_ROUNDBODY("[SSmapping.configs[GROUND_MAP].map_name], one of the Dust Raider bases being established in the sector, has come under attack from unrecognized alien forces"))
@@ -176,7 +176,7 @@
 	if(checkwin_counter >= 10) //Only check win conditions every 10 ticks.
 		if(xeno_wave == WO_MAX_WAVE && last_wave_time == 0)
 			last_wave_time = world.time
-		if(!finished && round_should_check_for_win && last_wave_time != 0)
+		if(!round_finished && round_should_check_for_win && last_wave_time != 0)
 			check_win()
 		checkwin_counter = 0
 	return 0
@@ -205,9 +205,9 @@
 	var/C = count_humans_and_xenos(SSmapping.levels_by_trait(ZTRAIT_GROUND))
 
 	if(C[1] == 0)
-		finished = 1 //Alien win
-	else if(world.time > last_wave_time + 15 MINUTES) // Around 1:12 hh:mm
-		finished = 2 //Marine win
+		round_finished = MODE_WISKEY_OUTPOST_X_MAJOR //Alien win
+	else if(world.time > last_wave_time + 15 MINUTES) //Last wave time + 15 minutes over for give some time to xeno push
+		round_finished = MODE_WISKEY_OUTPOST_M_MAJOR //Marine win
 
 /datum/game_mode/whiskey_outpost/proc/disablejoining()
 	for(var/i in RoleAuthority.roles_by_name)
@@ -243,10 +243,7 @@
 //Checks if the round is over//
 ///////////////////////////////
 /datum/game_mode/whiskey_outpost/check_finished()
-	if(finished != 0)
-		return 1
-
-	return 0
+	if(round_finished) return 1
 
 //////////////////////////////////////////////////////////////////////
 //Announces the end of the game with all relevant information stated//
@@ -254,44 +251,47 @@
 /datum/game_mode/whiskey_outpost/declare_completion()
 	if(round_statistics)
 		round_statistics.track_round_end()
-	if(finished == 1)
-		log_game("Round end result - xenos won")
-		to_world("<span class='round_header'>The Xenos have succesfully defended their hive from colonization.</span>")
-		to_world(SPAN_ROUNDBODY("Well done, you've secured LV-624 for the hive!"))
-		to_world(SPAN_ROUNDBODY("It will be another five years before the USCM returns to the Tychon's Rift sector, with the arrival of the 2nd 'Falling Falcons' Battalion and the USS Almayer."))
-		to_world(SPAN_ROUNDBODY("The xenomorph hive on LV-624 remains unthreatened until then.."))
-		world << sound('sound/misc/Game_Over_Man.ogg')
-		if(round_statistics)
-			round_statistics.round_result = MODE_INFESTATION_X_MAJOR
-			if(round_statistics.current_map)
-				round_statistics.current_map.total_xeno_victories += 1
-				round_statistics.current_map.total_xeno_majors += 1
-
-	else if(finished == 2)
-		log_game("Round end result - marines won")
-		to_world("<span class='round_header'>Against the onslaught, the marines have survived.</span>")
-		to_world(SPAN_ROUNDBODY("The signal rings out to the USS Alistoun, and Dust Raiders stationed elsewhere in Tychon's Rift begin to converge on LV-624."))
-		to_world(SPAN_ROUNDBODY("Eventually, the Dust Raiders secure LV-624 and the entire Tychon's Rift sector in 2182, pacifiying it and establishing peace in the sector for decades to come."))
-		to_world(SPAN_ROUNDBODY("The USS Almayer and the 2nd 'Falling Falcons' Battalion are never sent to the sector and are spared their fate in 2186."))
-		world << sound('sound/misc/hell_march.ogg')
-		if(round_statistics)
-			round_statistics.round_result = MODE_INFESTATION_M_MAJOR
-			if(round_statistics.current_map)
-				round_statistics.current_map.total_marine_victories += 1
-				round_statistics.current_map.total_marine_majors += 1
-
-	else
-		log_game("Round end result - no winners")
-		to_world("<span class='round_header'>NOBODY WON!</span>")
-		to_world(SPAN_ROUNDBODY("How? Don't ask me..."))
-		world << 'sound/misc/sadtrombone.ogg'
-		if(round_statistics)
-			round_statistics.round_result = MODE_INFESTATION_DRAW_DEATH
+	switch(round_finished)
+		if(MODE_WISKEY_OUTPOST_X_MAJOR)
+			log_game("Round end result - xenos won")
+			to_world("<span class='round_header'>The Xenos have succesfully defended their hive from colonization.</span>")
+			to_world(SPAN_ROUNDBODY("Well done, you've secured LV-624 for the hive!"))
+			to_world(SPAN_ROUNDBODY("It will be another five years before the USCM returns to the Tychon's Rift sector, with the arrival of the 2nd 'Falling Falcons' Battalion and the USS Almayer."))
+			to_world(SPAN_ROUNDBODY("The xenomorph hive on LV-624 remains unthreatened until then.."))
+			world << sound('sound/misc/Game_Over_Man.ogg')
+			if(round_statistics)
+				if(round_statistics.current_map)
+					round_statistics.current_map.total_xeno_victories += 1
+					round_statistics.current_map.total_xeno_majors += 1
+
+		if(MODE_WISKEY_OUTPOST_M_MAJOR)
+			log_game("Round end result - marines won")
+			to_world("<span class='round_header'>Against the onslaught, the marines have survived.</span>")
+			to_world(SPAN_ROUNDBODY("The signal rings out to the USS Alistoun, and Dust Raiders stationed elsewhere in Tychon's Rift begin to converge on LV-624."))
+			to_world(SPAN_ROUNDBODY("Eventually, the Dust Raiders secure LV-624 and the entire Tychon's Rift sector in 2182, pacifiying it and establishing peace in the sector for decades to come."))
+			to_world(SPAN_ROUNDBODY("The USS Almayer and the 2nd 'Falling Falcons' Battalion are never sent to the sector and are spared their fate in 2186."))
+			world << sound('sound/misc/hell_march.ogg')
+			if(round_statistics)
+				if(round_statistics.current_map)
+					round_statistics.current_map.total_marine_victories += 1
+					round_statistics.current_map.total_marine_majors += 1
+
+		if(MODE_INFESTATION_DRAW_DEATH)
+			log_game("Round end result - no winners")
+			to_world("<span class='round_header'>NOBODY WON!</span>")
+			to_world(SPAN_ROUNDBODY("How? Don't ask me..."))
+			world << 'sound/misc/sadtrombone.ogg'
+			if(round_statistics)
+				if(round_statistics.current_map)
+					round_statistics.current_map.total_draws += 1
+		else
+			log_game("Round end result - [round_finished]")
 
 	if(round_statistics)
 		round_statistics.game_mode = name
 		round_statistics.round_length = world.time
 		round_statistics.end_round_player_population = GLOB.clients.len
+		round_statistics.round_result = round_finished
 
 		round_statistics.log_round_statistics()
 
@@ -725,3 +725,9 @@
 
 /datum/game_mode/whiskey_outpost/announce_bioscans(var/delta = 2)
 	return // No bioscans needed in WO
+
+// for the toolbox
+/datum/game_mode/whiskey_outpost/end_round_message()
+	if(round_finished)
+		return "Wiskey Outpost Round has ended. [round_finished]"
+	return "Wiskey Outpost Round has ended. No one has won"
\ No newline at end of file
diff --git a/code/game/gamemodes/colonialmarines/xenovsxeno.dm b/code/game/gamemodes/colonialmarines/xenovsxeno.dm
index 4b12f267a01cd9468b73a07dd9b2329c603142fe..79cde26ac8b9356fd652c9d4e569c877592bb88d 100644
--- a/code/game/gamemodes/colonialmarines/xenovsxeno.dm
+++ b/code/game/gamemodes/colonialmarines/xenovsxeno.dm
@@ -1,5 +1,3 @@
-#define is_hive_living(hive) (!hive.hardcore || hive.living_xeno_queen)
-
 /datum/game_mode/xenovs
 	name = "Hive Wars"
 	config_tag = "Hive Wars"
@@ -21,6 +19,9 @@
 
 	var/round_time_larva_interval = 0
 	var/round_time_sd = 0
+
+	round_end_states = list(MODE_XVX_WIN)
+
 	votable = FALSE // broken
 
 /* Pre-pre-startup */
@@ -167,27 +168,6 @@
 				check_win()
 			round_checkwin = 0
 
-
-/datum/game_mode/xenovs/proc/get_xenos_hive(list/z_levels = SSmapping.levels_by_any_trait(list(ZTRAIT_GROUND, ZTRAIT_LOWORBIT, ZTRAIT_MARINE_MAIN_SHIP)))
-	var/list/list/hivenumbers = list()
-	var/datum/hive_status/HS
-	for(var/hivenumber in GLOB.hive_datum)
-		HS = GLOB.hive_datum[hivenumber]
-		hivenumbers += list(HS.name = list())
-
-	for(var/mob/M in GLOB.player_list)
-		if(M.z && (M.z in z_levels) && M.stat != DEAD && !istype(M.loc, /turf/open/space)) //If they have a z var, they are on a turf.
-			var/mob/living/carbon/Xenomorph/X = M
-			var/datum/hive_status/hive = GLOB.hive_datum[X.hivenumber]
-			if(!hive)
-				continue
-
-			if(istype(X) && is_hive_living(hive))
-				hivenumbers[hive.name].Add(X)
-
-
-	return hivenumbers
-
 ///////////////////////////
 //Checks to see who won///
 //////////////////////////
@@ -212,7 +192,7 @@
 	if(!living_hives)
 		round_finished = "No one has won."
 	else if (living_hives == 1)
-		round_finished = "The [last_living_hive] has won."
+		round_finished = "The [last_living_hive] [MODE_XVX_WIN]"
 
 
 ///////////////////////////////
@@ -256,5 +236,5 @@
 // for the toolbox
 /datum/game_mode/xenovs/end_round_message()
 	if(round_finished)
-		return "Hive Wars Round has ended. [round_finished]"
+		return "[round_finished]"
 	return "Hive Wars Round has ended. No one has won"
diff --git a/code/game/gamemodes/extended/extended_clash.dm b/code/game/gamemodes/extended/extended_clash.dm
index ac949f96c729cbc085470eb6af73cfadd0b75fad..c4e8cca52fbc6b4654db86f2b1639e85e9386d04 100644
--- a/code/game/gamemodes/extended/extended_clash.dm
+++ b/code/game/gamemodes/extended/extended_clash.dm
@@ -3,6 +3,7 @@
 	config_tag = "Faction Clash"
 	flags_round_type = MODE_THUNDERSTORM|MODE_FACTION_CLASH
 	toggleable_flags = MODE_NO_SNIPER_SENTRY|MODE_NO_ATTACK_DEAD|MODE_NO_STRIPDRAG_ENEMY|MODE_STRONG_DEFIBS|MODE_BLOOD_OPTIMIZATION|MODE_NO_COMBAT_CAS
+	round_end_states = list(MODE_BATTLEFIELD_W_MAJOR, MODE_BATTLEFIELD_M_MAJOR, MODE_BATTLEFIELD_W_MINOR, MODE_BATTLEFIELD_M_MINOR, MODE_BATTLEFIELD_DRAW_STALEMATE, MODE_BATTLEFIELD_DRAW_DEATH)
 
 /datum/game_mode/extended/faction_clash/get_roles_list()
 	return ROLES_FACTION_CLASH
diff --git a/code/game/gamemodes/extended/infection.dm b/code/game/gamemodes/extended/infection.dm
index 935f9a28000e34b86cce1ca67c1d3ab217df55c0..20c1915c1cfb81681e991c2e80b990028fb60a94 100644
--- a/code/game/gamemodes/extended/infection.dm
+++ b/code/game/gamemodes/extended/infection.dm
@@ -5,6 +5,7 @@
 	required_players = 0 //otherwise... no zambies
 	latejoin_larva_drop = 0
 	flags_round_type = MODE_INFECTION //Apparently without this, the game mode checker ignores this as a potential legit game mode.
+	round_end_states = list(MODE_INFESTATION_X_MAJOR, MODE_INFESTATION_M_MAJOR, MODE_INFESTATION_X_MINOR, MODE_INFESTATION_M_MINOR, MODE_INFESTATION_DRAW_DEATH)
 	votable = FALSE // infection borked
 
 /datum/game_mode/infection/announce()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index da0fda03c672b6a2dc05d332922d52a6bd04cc8b..dee49a3d50e8d15d6f347c66e1459a26e5497187 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -20,6 +20,7 @@ var/global/cas_tracking_id_increment = 0	//this var used to assign unique tracki
 	var/config_tag = null
 	var/votable = 1
 	var/probability = 0
+	var/list/round_end_states = list(MODE_INFESTATION_DRAW_DEATH)
 	var/list/datum/mind/modePlayer = new
 	var/required_players = 0
 	var/required_players_secret = 0 //Minimum number of players for that game mode to be chose in Secret
@@ -102,7 +103,7 @@ var/global/cas_tracking_id_increment = 0	//this var used to assign unique tracki
 
 
 /datum/game_mode/proc/check_finished() //to be called by ticker
-	if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_FINISHED || EvacuationAuthority.dest_status == NUKE_EXPLOSION_GROUND_FINISHED )
+	if(EvacuationAuthority.dest_status == NUKE_EXPLOSION_FINISHED || EvacuationAuthority.dest_status == NUKE_EXPLOSION_GROUND_FINISHED || round_finished)
 		return TRUE
 
 /datum/game_mode/proc/cleanup()	//This is called when the round has ended but not the game, if any cleanup would be necessary in that case.
diff --git a/code/modules/admin/tabs/round_tab.dm b/code/modules/admin/tabs/round_tab.dm
index 33291eb0669a735e72ee437fea194ed802fc1b9b..44abc866915a69cf4a82533c4951a08a84bb74de 100644
--- a/code/modules/admin/tabs/round_tab.dm
+++ b/code/modules/admin/tabs/round_tab.dm
@@ -122,14 +122,46 @@
 	if(!check_rights(R_SERVER) || !SSticker.mode)
 		return
 
-	if(alert("Are you sure you want to end the round?",,"Yes","No") != "Yes")
-		return
 	// trying to end the round before it even starts. bruh
 	if(!SSticker.mode)
 		return
 
-	SSticker.mode.round_finished = MODE_INFESTATION_DRAW_DEATH
-	message_staff("[key_name(usr)] has made the round end early.")
+	if(alert("Are you sure you want to end the round?", "End Round", "Yes", "No") != "Yes")
+		return
+
+	var/winstate = tgui_input_list(usr, "What do you want the round end state to be?", "End Round", list("Custom", "Admin Intervention") + SSticker.mode.round_end_states) //Make list and custom ending, because we can!
+	if(!winstate)
+		return
+
+	if(winstate == "Custom")
+		winstate = input(usr, "Please enter a custom round end state.", "End Round Cause") as null|text
+		if(!winstate)
+			return
+
+	if(winstate == MODE_XVX_WIN)
+		var/list/living_player_list = SSticker.mode.get_xenos_hive()
+
+		var/last_living_hive
+		var/list/living_hives
+
+		for(var/H in living_player_list)
+			living_hives += H
+			last_living_hive = H
+
+		if(living_hives.len == 1)
+			winstate = "The [last_living_hive] [winstate]"
+
+		if(living_hives.len > 1)
+			var/winner_hive = tgui_input_list(usr, "What is hive you belive win this is game?", "Choice hive (WINNER)", list("No one") + living_hives)
+			winstate = "The [winner_hive] [winstate]"
+
+		if(winstate == MODE_XVX_WIN)
+			return
+
+	SSticker.mode.round_finished = winstate
+
+	log_admin("[key_name(usr)] has made the round end early - [winstate].")
+	message_staff("[key_name(usr)] has made the round end early - [winstate].")
 	for(var/client/C in GLOB.admins)
 		to_chat(C, {"
 		<hr>