* refactor: Attack chain, initial setup.
* migrate curtain to make dreamchecker happy
* update thurible
* don't call attacked_by separately for legacy attack chain
* remove duplicate proc
* condense similar code, put allowances for legacy code in new procs
* update docs, include diagram source
* add comment on how to update diagram
* fix admonition
* mindflayer updates
* remove commented out code
* clarify all steps
* after_attack should be overridable
* whoops
* retrofit recent changes
* duh, can't restrict this yet because of tool_acts
* i hate ore bags with the fire of a thousand suns
* return correct value for object attack logic
* Various cleanups.
We don't want to attempt to pull stuff out of `/obj/item/attackby`,
because those pieces are part of the related objects' migrations, not
`/obj/item` itself. Attempting to do this causes knockon effects where
things expected to call e.g. `/obj/item/storage/attackby` in the call
chain were not ferried over to the new item interaction code, because
the related objects hadn't actually been migrated over yet.
I've used refactoring /obj/vehicle as the example for migrating
`attackby` methods instead.
* simplify some argument names
* fuck it
* make it do the thing
* Rename CI module call
* Prove that CI works
* improve test output
* aaand fix it again
* fix curtain tool interactions
* fix compile error
* fix compile error
* Better docs, introduce migration plan tool.
* Many botany QoL changes.
* Give observers a plant analyzer.
* Hooks should be executable.
* Completely new botany mutation mechanics.
* Minor fixes, changed vendor contents.
* Add charcoal to NutriMax extended inventory.
* Lint.
* Reset somatoray beam effects in a few more places.
* Mapped in seed sorting trays and mutrient.
* Slimmed down the seed sorting tray.
* Update unsorted seeds with analyzer, ghost-analyzer, and HUD support.
* Make english_list null-safe (and slightly faster).
* Fixed a mutation focus bug, added plant anayzer attackby to unsorted seeds.
* Made self-sufficient trays display their nutrient as Earthsblood.
* Improved descriptions and on-use texts.
* Added 5 dropers and 3 seed sorting trays to NutriMax.
* Mark stuff as notices, special case for duplicate doping.
* New way to get kudzu, QoL changes.
* Yield somatoray adds a message to the yield stat.
* Unsorted seeds produce a message when you try to put them in a tray or
machine.
* Potassium iodide and pentetic acid will now neutralize the tray's
mutagen.
* Using a plant bag on a seed extractor will now process plants into
seeds if there are no seeds in it.
* Bonk.
* Don't try to extract no seeds.
* Butterfingers.
* Bonk more.
* Add seed sorting trays to perma.
* Upgraded Seed Extractor GUI.
* Do not drop that which you do not extract.
* Don't bug out when removing the last seed.
* You want a tgui rebuild? Have a tgui rebuild.
* Drop trait-adding threshold by 10.
Before:
Needs modified mutation level >50.
With the x2 from 9+ seeds, this happens at base mutation level 25.
With maximum mutation level of 35 (L4Z+mutagen+somatoray), chance was
20%.
Required either L4Z (yield set to 1), or a somatoray (external help) for
any chance.
After:
Needs modified mutation level >40.
With the x2 from 9+ seeds, this happens at base mutation level 20.
With maximum mutation level of 35 (L4Z+mutagen+somatoray), chance is
30%.
Can get 10% chance with mutation level 25 (Mut+mutagen).
* Renamed mutagen level -> mutagen tank
* Left-align seed extractor, more efficient icon sending.
* New sprite thanks to McRamon.
* tgui rebuild
---------
Co-authored-by: FunnyMan3595 (Charlie Nolan) <funnyman@google.com>