diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index d12e4c1c6c5a..e3a35d0c4744 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -183,6 +183,9 @@ /// For how long the buff lasts #define XENO_HIJACK_EVILUTION_TIME (3 MINUTES) +/// If this is marine to xeno ratio during hijack, xenos see marines on tacmap +#define HIJACK_RATIO_FOR_TACMAP 0.8 + /// Xenos need to have their number to marines ratio lower than this to get larvae from pylons #define ENDGAME_LARVA_CAP_MULTIPLIER 0.5 diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index a808e7e3fd85..f3b141c0d9f8 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -691,6 +691,11 @@ SUBSYSTEM_DEF(minimaps) if(faction == FACTION_NEUTRAL && isobserver(user)) faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + if(is_xeno && xeno.hive.see_humans_on_tacmap && targeted_ztrait != ZTRAIT_MARINE_MAIN_SHIP) + allowed_flags |= MINIMAP_FLAG_USCM|MINIMAP_FLAG_PMC|MINIMAP_FLAG_UPP|MINIMAP_FLAG_CLF + targeted_ztrait = ZTRAIT_MARINE_MAIN_SHIP + map_holder = null + new_current_map = get_unannounced_tacmap_data_png(faction) old_map = get_tacmap_data_png(faction) current_svg = get_tacmap_data_svg(faction) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 5890a44f4168..af0da452d13e 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -75,14 +75,22 @@ // Finding the last guy for anti-delay. if(SSticker.mode && SSticker.mode.is_in_endgame && SSticker.current_state != GAME_STATE_FINISHED && is_mainship_level(z)) var/mob/last_living_human + var/shipside_humans_count = 0 + var/datum/hive_status/main_hive = GLOB.hive_datum[XENO_HIVE_NORMAL] + var/see_humans_on_tacmap = main_hive.see_humans_on_tacmap for(var/mob/living/carbon/human/cur_human as anything in GLOB.alive_human_list) if(!is_mainship_level(cur_human.z)) continue - if(last_living_human) + shipside_humans_count++ + if(last_living_human && see_humans_on_tacmap) last_living_human = null break last_living_human = cur_human - if(last_living_human && (GLOB.last_qm_callout + 2 MINUTES) < world.time) + + if(!see_humans_on_tacmap && shipside_humans_count < (main_hive.get_real_total_xeno_count() * HIJACK_RATIO_FOR_TACMAP)) + xeno_announcement("There is only a handful of tallhosts left, they are now visible on our hive mind map.", XENO_HIVE_NORMAL, SPAN_ANNOUNCEMENT_HEADER_BLUE("[QUEEN_MOTHER_ANNOUNCE]")) + main_hive.see_humans_on_tacmap = TRUE + if(last_living_human && shipside_humans_count <= 1 && (GLOB.last_qm_callout + 2 MINUTES) < world.time) GLOB.last_qm_callout = world.time // Tell the xenos where the human is. xeno_announcement("I sense the last tallhost hiding in [get_area(last_living_human)].", XENO_HIVE_NORMAL, SPAN_ANNOUNCEMENT_HEADER_BLUE("[QUEEN_MOTHER_ANNOUNCE]")) diff --git a/code/modules/mob/living/carbon/xenomorph/hive_status.dm b/code/modules/mob/living/carbon/xenomorph/hive_status.dm index fb863c78eb58..7cc5850e3701 100644 --- a/code/modules/mob/living/carbon/xenomorph/hive_status.dm +++ b/code/modules/mob/living/carbon/xenomorph/hive_status.dm @@ -71,6 +71,8 @@ /// If hit limit of larva from pylons var/hit_larva_pylon_limit = FALSE + var/see_humans_on_tacmap = FALSE + var/list/hive_inherant_traits // Cultist Info