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>