From cc84139e39fa3ae41ab9fbc88ce99b5145067385 Mon Sep 17 00:00:00 2001 From: Hopekz Date: Mon, 18 Sep 2023 19:10:51 -0500 Subject: [PATCH] New facehugger strain: Watcher (#3726) Super easy to understand: The watcher loses the ability to hide in exchange for letting them see further. I don't have a sprite for this at the moment and probably won't for this PR so I have made them stand out by making them more orange because I think marines being able to see if a hugger is a Watcher might be important. ![image](https://github.com/cmss13-devs/cmss13/assets/24533979/583b12f7-fef3-4da7-a989-14661cf98f5f) Currently they see 2 extra tiles like the runner but in testmerging I think it may change to 3 tiles (view range 10 instead of view range 9) unless I hit the perfect sweet spot already. **EDIT: This number is now 3** **the way I see it watcher is designed for 2 main playstyles:** 1: Backlining to try to get someone not paying attention or busy (right behind marine frontline like medics doing medic stuff or someone resupplying/playing with inventory) or deep in the backline to try to find someone vulnerable. 2: Hanging around the xeno side frontline with increased situational awareness to be exactly where you need to be for xeno assisted caps. For example as a watcher during the TM I have an easier time watching a warrior fling someone and capitalizing a hug off a fling because I don't have to go out until the fling happens etc update: ------ The activation of the view range now works similar to the runner; it is toggle-able ![dreamseeker_tyE3nVA9V0](https://github.com/cmss13-devs/cmss13/assets/24533979/b232b076-8f0b-4a83-abbc-fe4c84a72d21) Fixed exploit that allowed watchers to hide despite not having the ability. Update 2: -------- The watcher now does not take weeds over time. Essentially implemented this: ![Discord_9s19Vo2olV](https://github.com/cmss13-devs/cmss13/assets/24533979/0f2d3121-2c3d-4751-b8e9-263df9a9a697) **Why:** The damage over time is meant so that the hugger cannot hide under some unweeded item the whole round to hug some random unsuspecting marine. The watcher cannot hide and is meant to be a backlining caste. This allows the watcher to stalk people outside of weeds and wait for the perfect opportunity to hug when their target is distracted or busy. Update 3: -------- Added my codersprite to the watcher. These were created by me so hopefully a spriter or my spriter replaces these with a better one if they suck. ![dreamseeker_O6I1iXuo21](https://github.com/cmss13-devs/cmss13/assets/24533979/55ddf0cb-a23a-448a-9afa-d8d987fa3d03) :cl: Hopek add: New facehugger strain: Watcher. The Watcher loses their ability to hide in exchange to see further and the ability to no longer take damage outside of weeds. /:cl: --------- Co-authored-by: ihatethisengine <115417687+ihatethisengine@users.noreply.github.com> --- code/__DEFINES/mobs.dm | 4 ++ .../carbon/xenomorph/castes/Facehugger.dm | 38 ++++++++++++++++-- icons/mob/xenos/facehugger.dmi | Bin 6962 -> 13481 bytes 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index c0886ab871f9..1bd030313a43 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -310,6 +310,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 ac03389994c9..4e5cce0c6c30 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 d44903adf941d1d6d59222e5a42a0fbbfed3b544..2d8665899331021df69fa679271a0bf683e50f88 100644 GIT binary patch literal 13481 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 X;wZ3ku#u|x00000NkvXXu0mjfrWott literal 6962 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 Ef;vuZssI20