diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm index e4e0e32adff4..82f0902e2f8c 100644 --- a/code/game/gamemodes/cm_process.dm +++ b/code/game/gamemodes/cm_process.dm @@ -244,6 +244,34 @@ GLOBAL_VAR_INIT(next_admin_bioscan, 30 MINUTES) return num_marines +/datum/game_mode/proc/count_per_faction(list/z_levels = SSmapping.levels_by_any_trait(list(ZTRAIT_GROUND, ZTRAIT_RESERVED, ZTRAIT_MARINE_MAIN_SHIP))) + var/num_marines = 0 + var/num_WY = 0 + var/num_UPP = 0 + var/num_CLF = 0 + var/num_headcount = 0 + + for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list) + if(!(current_human.z && (current_human.z in z_levels) && !istype(current_human.loc, /turf/open/space))) + continue + if(current_human.faction in FACTION_LIST_WY || current_human.job == "Corporate Liaison") //The CL is assigned the USCM faction for gameplay purposes + num_WY++ + num_headcount++ + continue + if(current_human.faction == FACTION_UPP) + num_UPP++ + num_headcount++ + continue + if(current_human.faction == FACTION_CLF) + num_CLF++ + num_headcount++ + continue + if(current_human.faction == FACTION_MARINE) + num_marines++ + num_headcount++ + continue + num_headcount++ + return list("marine_headcount" = num_marines,"WY_headcount" = num_WY,"UPP_headcount" = num_UPP,"CLF_headcount" = num_CLF,"total_headcount" = num_headcount) /* #undef QUEEN_DEATH_COUNTDOWN diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm index 65dc2666070d..8935811f55bd 100644 --- a/code/game/gamemodes/colonialmarines/colonialmarines.dm +++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm @@ -354,6 +354,8 @@ ////////////////////////////////////////////////////////////////////// //Announces the end of the game with all relevant information stated// ////////////////////////////////////////////////////////////////////// +#define MAJORITY 0.5 // What percent do we consider a 'majority?' + /datum/game_mode/colonialmarines/declare_completion() announce_ending() var/musical_track @@ -372,7 +374,20 @@ round_statistics.current_map.total_marine_victories++ round_statistics.current_map.total_marine_majors++ if(MODE_INFESTATION_X_MINOR) - musical_track = pick('sound/theme/neutral_melancholy1.ogg','sound/theme/neutral_melancholy2.ogg') + var/list/living_player_list = count_humans_and_xenos(EvacuationAuthority.get_affected_zlevels()) + if(living_player_list[1] && !living_player_list[2]) // If Xeno Minor but Xenos are dead and Humans are alive, see which faction is the last standing + var/headcount = count_per_faction() + var/living = headcount["total_headcount"] + if ((headcount["WY_headcount"] / living) > MAJORITY) + musical_track = pick('sound/theme/LastManStanding_WY.ogg') + else if ((headcount["UPP_headcount"] / living) > MAJORITY) + musical_track = pick('sound/theme/LastManStanding_UPP.ogg') + else if ((headcount["CLF_headcount"] / living) > MAJORITY) + musical_track = pick('sound/theme/LastManStanding_CLF.ogg') + else if ((headcount["marine_headcount"] / living) > MAJORITY) + musical_track = pick('sound/theme/neutral_melancholy2.ogg') //This is the theme song for Colonial Marines the game, fitting + else + musical_track = pick('sound/theme/neutral_melancholy1.ogg') end_icon = "xeno_minor" if(round_statistics && round_statistics.current_map) round_statistics.current_map.total_xeno_victories++ @@ -581,3 +596,4 @@ #undef HIJACK_EXPLOSION_COUNT #undef MARINE_MAJOR_ROUND_END_DELAY +#undef MAJORITY diff --git a/sound/theme/lastmanstanding_clf.ogg b/sound/theme/lastmanstanding_clf.ogg new file mode 100644 index 000000000000..365af09116bb Binary files /dev/null and b/sound/theme/lastmanstanding_clf.ogg differ diff --git a/sound/theme/lastmanstanding_upp.ogg b/sound/theme/lastmanstanding_upp.ogg new file mode 100644 index 000000000000..d74812f73df1 Binary files /dev/null and b/sound/theme/lastmanstanding_upp.ogg differ diff --git a/sound/theme/lastmanstanding_wy.ogg b/sound/theme/lastmanstanding_wy.ogg new file mode 100644 index 000000000000..225914b416d1 Binary files /dev/null and b/sound/theme/lastmanstanding_wy.ogg differ