Files
Bubberstation/code/datums/components
tralezab af33a5fb06 Fish update just dropped. New fish, aquarium type, two traits and a research node. (#83508)
## About The Pull Request

### New fish

#### anxious zipzap
An incredibly anxiety-ridden and electroreceptive fish. Worried about
the walls of its tank closing in constantly. Both literally and as a
general metaphorical unease about life's direction.

It produces electricity, and HATES being with any other fish. One other
zipzap is allowed at most.


![image](https://github.com/tgstation/tgstation/assets/40974010/6a1a31f3-1c84-4b5e-b8ca-652c5007813a)

#### monocloning jumpercable
A surprisingly useful if nasty looking creation from the syndicate fish
labs. Drop one in a tank, and watch it self-feed and multiply. Generates
more and more power as a growing swarm!

A far better option for power generation than the zipzap, but it's a
syndicate fish. Get an emag or get very lucky!


![image](https://github.com/tgstation/tgstation/assets/40974010/7f4aaf32-919c-40d9-890f-72ea9f91ac3c)

Working spacebase example


![image](https://github.com/tgstation/tgstation/assets/40974010/8eeaaf18-c0ab-48a5-8ada-e0eb7f118dd9)


### Aquarium type

Bioelectricity Generator! It boosts the power of electroreceptive fish
to very dangerous levels! But, uh, you put a tesla coil, and voila! Free
power! ...Free power if you keep the fish fed! More fish, more power!


![image](https://github.com/tgstation/tgstation/assets/40974010/e6abcd5b-93df-4ffc-ac6a-78585fd4a6c6)

You can convert an aquarium into a bioelectricity generator by
researching the new node, "Marine Utility", from bio processing. Then
you build the biogen upgrade kit and apply it to an already existing
aquarium.

### Fish Traits

#### Electrogenesis

Trait turns the fish into a shock weapon while it's alive, and every
time it feeds, it releases a weak tesla bolt to anyone close to the
tank.

#### Anxiety

anxious fish die when any other fish are in the tank. Please keep them
alone :[

## Why It's Good For The Game

Fish are great, but fish don't have anything to give back to the
station, right? Well, there's some small stuff, but I wanted to add a
bit of functionality towards being able to benefit from having fish.

The anxiety trait with the zipzap gives spessmen a bit of a challenge.
You can settle for one fish generating power per tank and do a
multi-tank generation setup, or you can do some crossbreeding to make a
fish WITH electroreceptive but WITHOUT anxiety. Neat!

## Changelog
🆑
add: New fish, the anxious zipzap
add: New syndicate fish, the monocloning jumpercable
add: New aquarium, the bioelectricity generator
fix: Mixotrophic fish now properly lack food requirements
/🆑
2024-05-31 15:26:03 +12:00
..
2023-10-16 16:14:31 +02:00
2024-04-16 17:48:03 -06:00
2024-04-09 03:21:51 -05:00
2023-10-11 16:58:29 -06:00
2024-05-16 19:54:00 -07:00
2024-02-11 03:17:55 +01:00
2024-02-29 04:24:10 +00:00
2023-12-04 14:42:43 -08:00
2024-05-16 19:54:00 -07:00
2024-04-20 01:39:50 -06:00
2024-04-16 17:48:03 -06:00
2024-05-16 19:54:00 -07:00
2024-05-16 19:54:00 -07:00
2023-10-21 23:36:48 +00:00
2023-10-08 03:04:35 +01:00
2023-12-04 14:42:43 -08:00
2024-03-29 22:26:35 -06:00
2023-10-05 13:20:16 -06:00
2024-04-16 17:48:03 -06:00
2024-03-27 16:49:46 -06:00
2023-10-16 16:14:31 +02:00
2024-03-21 20:30:56 -06:00
2024-03-16 12:06:02 +00:00
2023-12-09 13:31:50 +01:00
2024-05-16 19:54:00 -07: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 it's 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