Skip to content

Commit

Permalink
New facehugger strain: Watcher (#3726)
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Hopekz and ihatethisengine authored Sep 19, 2023
1 parent 7124311 commit cc84139
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
4 changes: 4 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
38 changes: 35 additions & 3 deletions code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Binary file modified icons/mob/xenos/facehugger.dmi
Binary file not shown.

0 comments on commit cc84139

Please sign in to comment.