Files
Bubberstation/code/datums/components/temporary_description.dm
Jacquerel eb28d04f08 Watcher Nest Lavaland Ruin (#78790)
## About The Pull Request

Adds a small new lavaland ruin, the Watchers' Grave.


![image](https://github.com/tgstation/tgstation/assets/7483112/9c3fa6f0-3e7d-4540-8646-5229eb11445b)

![image](https://github.com/tgstation/tgstation/assets/7483112/93bc14f0-9a0c-40d3-bd30-cc79a0d85752)

You will need to figure out yourself how to find a way through the walls
surrounding it (it's not very hard).
This is mostly just atmospheric but also serves as a delivery vehicle
for a unique item; an orphaned Watcher egg.
(That's kind of it in terms of loot, unless you count a handful of
lavaland mob corpses and mushrooms).

You can either eat this (it's an egg), throw it at someone to spawn an
angry watcher, or keep hold of it for a while and see what happens.

<details>


![dreamseeker_cMNnZXjfgL](https://github.com/tgstation/tgstation/assets/7483112/841db8fc-19ac-431f-aa66-c9ec5fbedbc3)

That's right it's your very own baby watcher.
It orbits your head and shoots at lavaland creatures for unimpressive
damage. It won't ever intentionally shoot a player but they might walk
in front of it, as it doesn't hurt very much they will probably forgive
you.
If you die it will continue circling your corpse to guard it against
predation.
</details>

In creating this ruin I also added a new component called "corpse
description".
It provides some extra examine text to a corpse which is removed
permanently if the mob is revived.
There's a field you can varedit on corpse spawners (or make a subtype)
which will automatically apply it to spawned corpses.
You can use it for environmental storytelling. Or admins can use it to
make fun of how you died.

Also I fixed basic mobs runtiming when examined by ghosts.

## Why It's Good For The Game

More variety in map generation. It's cute.
Adds a tool that mappers might like.

## Changelog

🆑
add: Adds a new lavaland ruin where you can find a unique egg.
/🆑
2023-10-11 17:00:22 -06:00

45 lines
1.8 KiB
Plaintext

/**
* Adds examine text to something which is removed when receiving specified signals, by default the revive signal.
* The default settings are set up to be applied to a corpse to add some kind of immersive storytelling text which goes away upon revival.
*/
/datum/component/temporary_description
/// What do we display on examine?
var/description_text = ""
/// What do we display if examined by a clown? Usually only applied if this is put on a corpse, but go nuts.
var/naive_description = ""
/// When are we removed?
var/list/removal_signals
/datum/component/temporary_description/Initialize(
description_text = "There's something unusual about them.",
naive_description = "",
list/removal_signals = list(COMSIG_LIVING_REVIVE),
)
. = ..()
if (!isatom(parent))
return COMPONENT_INCOMPATIBLE
if (!description_text)
stack_trace("[type] applied to [parent] with empty description, which is pointless.")
src.description_text = description_text
src.naive_description = naive_description
if (length(removal_signals))
src.removal_signals = removal_signals
/datum/component/temporary_description/RegisterWithParent()
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined))
RegisterSignals(parent, removal_signals, PROC_REF(remove_component))
/datum/component/temporary_description/UnregisterFromParent()
UnregisterSignal(parent, removal_signals + COMSIG_ATOM_EXAMINE)
/datum/component/temporary_description/proc/on_examined(atom/corpse, mob/thing_inspector, list/examine_list)
SIGNAL_HANDLER
if (naive_description && HAS_MIND_TRAIT(thing_inspector, TRAIT_NAIVE))
examine_list += span_notice(naive_description)
return
examine_list += span_notice(description_text)
/datum/component/temporary_description/proc/remove_component()
SIGNAL_HANDLER
qdel(src) // It wouldn't be immersive if the circumstances of my grisly death remained after I was revived