diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 673bb4fc6d81..3c95567e7ef1 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -309,6 +309,10 @@ // Queen strain flags #define QUEEN_NORMAL "Normal" +// Facehugger strain flags +#define FACEHUGGER_NORMAL "Normal" +#define FACEHUGGER_WATCHER "Watcher" + // Drone strain flags #define DRONE_NORMAL "Normal" #define DRONE_HEALER "Healer" diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm index d82e43db2aaf..491c12754026 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm @@ -67,13 +67,13 @@ PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM /mob/living/carbon/xenomorph/facehugger/Life(delta_time) + if(stat != DEAD && !lying && !(mutation_type == FACEHUGGER_WATCHER) && !(locate(/obj/effect/alien/weeds) in get_turf(src))) + adjustBruteLoss(1) + return ..() if(!client && !aghosted && away_timer > XENO_FACEHUGGER_LEAVE_TIMER) // Become a npc once again new /obj/item/clothing/mask/facehugger(loc, hivenumber) qdel(src) - return - if(stat != DEAD && !lying && !(locate(/obj/effect/alien/weeds) in get_turf(src))) - adjustBruteLoss(1) return ..() /mob/living/carbon/xenomorph/facehugger/update_icons(is_pouncing) @@ -217,3 +217,35 @@ . += "Lifetime Hugs: [total_facehugs] / [next_facehug_goal]" else . += "Lifetime Hugs: [total_facehugs]" + + +/datum/xeno_mutator/watcher + name = "STRAIN: Facehugger - Watcher" + description = "You lose your ability to hide in exchange to see further and the ability to no longer take damage outside of weeds. This enables you to stalk your host from a distance and wait for the perfect oppertunity to strike." + flavor_description = "No need to hide when you can see the danger." + individual_only = TRUE + caste_whitelist = list(XENO_CASTE_FACEHUGGER) + mutator_actions_to_remove = list( + /datum/action/xeno_action/onclick/xenohide, + ) + mutator_actions_to_add = list( + /datum/action/xeno_action/onclick/toggle_long_range/runner, + ) + + cost = 1 + + keystone = TRUE + +/datum/xeno_mutator/watcher/apply_mutator(datum/mutator_set/individual_mutators/mutator_set) + . = ..() + if(!.) + return + + var/mob/living/carbon/xenomorph/facehugger/facehugger = mutator_set.xeno + + facehugger.viewsize = 10 + facehugger.layer = MOB_LAYER + + facehugger.mutation_type = FACEHUGGER_WATCHER + mutator_update_actions(facehugger) + mutator_set.recalculate_actions(description, flavor_description) diff --git a/icons/mob/xenos/facehugger.dmi b/icons/mob/xenos/facehugger.dmi index d44903adf941..2d8665899331 100644 Binary files a/icons/mob/xenos/facehugger.dmi and b/icons/mob/xenos/facehugger.dmi differ