Files
Bubberstation/code/datums/components
gamer 0fa8e00135 Splattercasting Infinite Blood Fix (#92645)
## About The Pull Request

One line change, max(variable,0) means if the variable is negative then
it is 0 instead

cooldown_remaining can be negative, whether its due to how
spell.next_use_time and world.time is measured, or due to something
else. This makes sure no blood spell will ever give you free blood back,
touch spells are still broken, this PR doesn't change that, they simply
do not interact with splattercasting period as of now, which is not
intended. Sanguine spells not interacting IS intended.

## Why It's Good For The Game

No infinite time stop (via this method, anyway)

## Changelog

🆑
fix: Splattercasting touch spells no longer give infinite blood
/🆑
2025-09-07 10:01:28 +02:00
..
2025-09-03 04:39:43 -07:00
2025-09-07 09:24:34 +02:00
2024-10-09 02:03:50 +02:00
2025-05-12 20:37:17 -07:00
2025-09-07 09:24:34 +02:00
2025-04-05 22:27:05 +02:00
2024-08-21 17:07:02 +12:00
2025-02-22 13:24:53 +00:00
2025-01-22 20:50:07 -07:00
2025-01-28 03:12:59 +01:00
2025-07-11 07:21:02 +00:00
2025-08-11 21:37:00 +02:00
2025-05-08 07:26:01 +02:00

Datum Component System (DCS)

Concept

Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward its arguments with a SendSignal() call. Now every component that want's to can also know about this happening.

HackMD page for an introduction to the system as a whole.

See/Define signals and their arguments in __DEFINES\components.dm