[MIRROR] Flesh Spiders Regenerate + QoL [MDB IGNORE] (#24276)

* Flesh Spiders Regenerate + QoL (#78704)

## About The Pull Request

Replaces the Healing Touch component on Changeling-spawned Flesh Spiders
with the Regenerator component, as the comment helpfully suggests.
Flesh Spiders can no longer touch themselves to heal, instead they
automatically begin regenerating their health if they go four seconds
without taking damage. It takes 6 seconds to fully regenerate, so 10
seconds to fully heal from the edge of death (less if you're not that
injured).

![image](https://github.com/tgstation/tgstation/assets/7483112/37faca55-35fe-48dc-a3ed-03f4b79860bd)

Also I changed the sprite for flesh spider eggs to a different one we
already had rather than regular spider eggs tinted red, just because I
felt like it.
Would be cool to give the spiders their own sprite some time, but that's
for another PR.

![image](https://github.com/tgstation/tgstation/assets/7483112/8ec286c4-46dc-4aec-aa98-cb4e4e432690)
_Additionally_ the flavour text for flesh spiders was kind of messed up
by being shoved into the objectives box and claiming that it was a
directive from a spider queen you don't have, so I gave them their own
slightly different antag datum to compensate.
It also actually mentions how you heal yourself, which previously was
down to trial and error or codediving.

In the course of doing this I decided to just... move flesh spiders to
their own type path. It _sort of_ made sense for them to be part of the
giant spider typepath, but they keep being modified by changes targetted
at "balancing the Giant Spiders antagonist" which this mob isn't related
to and doesn't have any reason to follow. The fact that a mob has
similar stats to another one isn't automatically a reason to share a
typepath, and now that I have looked a little at this mob I'm sort of
interested in branching it further away from "it's a spider mob but
spawned a different way" in the future.

Finally, this spider egg cluster and the midwife one would prompt ghosts
with a radial menu with a single option on it... that's a bit pointless,
so we'll bypass that menu if there is only one possible outcome.

## Why It's Good For The Game

Currently Flesh Spiders heal by clicking on themselves and standing
still for two seconds, restoring 50% of their HP. This means they can
fully regenerate over 4 seconds unless you stun them, and with 90 HP
you're not _that_ likely to kill one during the channel time.
This just feels like an odd way for the creature to operate,
regenerating instead gives it a hit-and-run strategy and adds more use
to their webs (maybe we should give them meatier or bloody webs at some
point? Might be cool).
Also clicking yourself to heal is just unintuitive and I suspect several
players just didn't realise they could do it in the first place.

## Changelog

🆑
balance: Flesh Spiders heal automatically over time if they go a short
time without taking damage, instead of healing large chunks by clicking
themselves and waiting two seconds.
qol: Spider egg clusters which only hatch into one kind of spider don't
ask you to select that one type from a radial menu with one option on
it.
qol: As a Flesh Spider, the game now tells you how you can heal
yourself.
/🆑

* Flesh Spiders Regenerate + QoL

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
This commit is contained in:
SkyratBot
2023-10-11 18:08:55 +02:00
committed by GitHub
parent e8454d8a10
commit ac45950aae
7 changed files with 123 additions and 64 deletions
@@ -41,8 +41,9 @@
color = rgb(148, 0, 211)
/obj/structure/spider/eggcluster/bloody
icon = 'icons/mob/simple/meteor_heart.dmi'
icon_state = "eggs"
name = "bloody egg cluster"
color = rgb(255, 0, 0)
/obj/structure/spider/eggcluster/midwife
name = "midwife egg cluster"
@@ -72,6 +73,8 @@
var/cluster_type = /obj/structure/spider/eggcluster
/// Physical structure housing the spawner
var/obj/structure/spider/eggcluster/egg
/// Which antag datum do we grant?
var/granted_datum = /datum/antagonist/spider
/// The types of spiders that the spawner can produce
var/list/potentialspawns = list(
/mob/living/basic/spider/growing/spiderling/nurse,
@@ -124,10 +127,11 @@
/obj/effect/mob_spawn/ghost_role/spider/special(mob/living/basic/spider/spawned_mob, mob/mob_possessor)
. = ..()
spawned_mob.directive = directive
if (isspider(spawned_mob))
spawned_mob.directive = directive
egg.spawner = null
QDEL_NULL(egg)
var/datum/antagonist/spider/spider_antag = new(directive)
var/datum/antagonist/spider/spider_antag = new granted_datum(directive)
spawned_mob.mind.add_antag_datum(spider_antag)
/obj/effect/mob_spawn/ghost_role/spider/enriched
@@ -144,15 +148,18 @@
/obj/effect/mob_spawn/ghost_role/spider/bloody
name = "bloody egg cluster"
color = rgb(255, 0, 0)
you_are_text = "You are a bloody spider."
icon = 'icons/mob/simple/meteor_heart.dmi'
icon_state = "eggs"
you_are_text = "You are a flesh spider."
flavour_text = "An abomination of nature set upon the station by changelings. Your only goal is to kill, terrorize, and survive."
directive = "You are the spawn of a vicious changeling. You have no ambitions except to wreak havoc and ensure your own survival. You are aggressive to all living beings outside of your species, including changelings."
faction = list()
directive = null
cluster_type = /obj/structure/spider/eggcluster/bloody
potentialspawns = list(
/mob/living/basic/spider/giant/hunter/flesh,
/mob/living/basic/flesh_spider,
)
flash_window = TRUE
granted_datum = /datum/antagonist/spider/flesh
/obj/effect/mob_spawn/ghost_role/spider/midwife
name = "midwife egg cluster"
@@ -175,6 +182,14 @@
* * newname - If set, renames the mob to this name
*/
/obj/effect/mob_spawn/ghost_role/spider/create(mob/user, newname)
var/chosen_spider = length(potentialspawns) > 1 ? get_radial_choice(user) : potentialspawns[1]
if(QDELETED(src) || QDELETED(user) || isnull(chosen_spider))
return FALSE
mob_type = chosen_spider
return ..()
/// Pick a spider type from a radial menu
/obj/effect/mob_spawn/ghost_role/spider/proc/get_radial_choice(mob/user)
var/list/spider_list = list()
var/list/display_spiders = list()
for(var/choice in potentialspawns)
@@ -196,9 +211,6 @@
display_spiders[initial(spider.name)] = option
sort_list(display_spiders)
var/chosen_spider = show_radial_menu(user, egg, display_spiders, radius = 38)
chosen_spider = spider_list[chosen_spider]
if(QDELETED(src) || QDELETED(user) || !chosen_spider)
return FALSE
mob_type = chosen_spider
return ..()
return spider_list[chosen_spider]