* Changing z-level after being cleaned no longer makes the bubbles re-appear (#71201)
* Fixes plants showing up as errors when made into cells when their icon isn't in the same file as the other plants (#71247)
Basically, any cell made from a plant that didn't have its icon located
at the same place as all the other plant icons would turn into an error
(with the proper battery overlay though) when turned into a botanical
cell.
This fixes that, which means that it'll be one less thing to think about
when `harvest.dmi` gets eventually split into multiple files.
* Fixes the arms and legs not being printable from the Limb Grower (#71143)
Basically, https://github.com/tgstation/tgstation/pull/70422 broke the
limb grower's ability to grow limbs, because it was still, for instance,
trying to spawn a `/obj/item/bodypart/r_leg` for right legs, instead of
a `/obj/item/bodypart/leg/right`, because it uses the `id` variable of
the design associated with the limb/organ being grown.
As such, I simply updated the `id` variable of the different arms and
legs, and now they all work as expected again, instead of throwing a
runtime!
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.