diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 993032567dd..0311f57b636 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -94,6 +94,7 @@ #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. #define ui_alien_health "EAST-1:28,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. #define ui_alienplasmadisplay "EAST-1:28,CENTER-2:15" +#define ui_alien_queen_finder "EAST-1:28,CENTER-3:13" // AI diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 7313091df06..753117c99f6 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -21,13 +21,20 @@ if(T) T.fire(A) - /obj/screen/alien/plasma_display icon = 'icons/mob/screen_gen.dmi' icon_state = "power_display2" name = "plasma stored" screen_loc = ui_alienplasmadisplay + +/obj/screen/alien/alien_queen_finder + icon = 'icons/mob/screen_alien.dmi' + icon_state = "queen_finder" + name = "queen sense" + desc = "Allows you to sense the general direction of your Queen." + screen_loc = ui_alienplasmadisplay + /datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner) ..() @@ -109,6 +116,9 @@ alien_plasma_display = new /obj/screen/alien/plasma_display() infodisplay += alien_plasma_display + if(!istype(mymob, /mob/living/carbon/alien/humanoid/royal/queen)) + alien_queen_finder = new /obj/screen/alien/alien_queen_finder + infodisplay += alien_queen_finder zone_select = new /obj/screen/zone_sel/alien() zone_select.update_icon(mymob) diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 0f50940e103..9594fe08e61 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -13,7 +13,8 @@ nightvisionicon = new /obj/screen/alien/nightvision() nightvisionicon.screen_loc = ui_alien_nightvision infodisplay += nightvisionicon - + alien_queen_finder = new /obj/screen/alien/alien_queen_finder() + infodisplay += alien_queen_finder pull_icon = new /obj/screen/pull() pull_icon.icon = 'icons/mob/screen_alien.dmi' pull_icon.update_icon(mymob) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index dd949f2c4b6..4edbc1f9730 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -19,6 +19,7 @@ var/obj/screen/blobpwrdisplay var/obj/screen/alien_plasma_display + var/obj/screen/alien_queen_finder var/obj/screen/devil/soul_counter/devilsouldisplay @@ -96,6 +97,7 @@ lingstingdisplay = null blobpwrdisplay = null alien_plasma_display = null + alien_queen_finder = null deity_power_display = null deity_follower_display = null nightvisionicon = null diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 31896a81da8..8e078e4ed7c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -36,7 +36,7 @@ if(!isturf(user.loc)) user << "You can't evolve here!" return 0 - if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal)) + if(!get_alien_type(/mob/living/carbon/alien/humanoid/royal)) var/mob/living/carbon/alien/humanoid/royal/praetorian/new_xeno = new (user.loc) user.alien_evolve(new_xeno) return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm index 100ab9b9618..8da5304ff77 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm @@ -38,7 +38,7 @@ if(node.recent_queen_death) user << "You are still too burdened with guilt to evolve into a queen." return 0 - if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal/queen)) + if(!get_alien_type(/mob/living/carbon/alien/humanoid/royal/queen)) var/mob/living/carbon/alien/humanoid/royal/queen/new_xeno = new (user.loc) user.alien_evolve(new_xeno) if(new_xeno.client.prefs.unlock_content) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 3d75a53d8d8..b7fe9f9fd2f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -162,15 +162,15 @@ A.loc = new_xeno ..() -//For alien evolution/promotion procs. Checks for -proc/alien_type_present(var/alienpath) +//For alien evolution/promotion/queen finder procs. Checks for an active alien of that type +proc/get_alien_type(var/alienpath) for(var/mob/living/carbon/alien/humanoid/A in living_mob_list) if(!istype(A, alienpath)) continue if(!A.key || A.stat == DEAD) //Only living aliens with a ckey are valid. continue - return 1 - return 0 + return A + return FALSE /mob/living/carbon/alien/humanoid/check_breath(datum/gas_mixture/breath) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 29d990db260..18ea3b69678 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -78,7 +78,7 @@ /obj/effect/proc_holder/alien/royal/queen/promote/fire(mob/living/carbon/alien/user) var/obj/item/queenpromote/prom - if(alien_type_present(/mob/living/carbon/alien/humanoid/royal/praetorian/)) + if(get_alien_type(/mob/living/carbon/alien/humanoid/royal/praetorian/)) user << "You already have a Praetorian!" return 0 else @@ -106,7 +106,7 @@ if(!isalienadult(M) || istype(M, /mob/living/carbon/alien/humanoid/royal)) user << "You may only use this with your adult, non-royal children!" return - if(alien_type_present(/mob/living/carbon/alien/humanoid/royal/praetorian/)) + if(get_alien_type(/mob/living/carbon/alien/humanoid/royal/praetorian/)) user << "You already have a Praetorian!" return diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index aca51f6cb36..91bddef2cde 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -1,3 +1,6 @@ +/mob/living/carbon/alien/Life() + findQueen() + return..() /mob/living/carbon/alien/check_breath(datum/gas_mixture/breath) if(status_flags & GODMODE) diff --git a/code/modules/mob/living/carbon/alien/screen.dm b/code/modules/mob/living/carbon/alien/screen.dm index bcc24157cd4..58f10ab1222 100644 --- a/code/modules/mob/living/carbon/alien/screen.dm +++ b/code/modules/mob/living/carbon/alien/screen.dm @@ -4,4 +4,31 @@ hud_used.alien_plasma_display.maptext = "