## About The Pull Request
-Log outcomes of random recipe init
* Whether recipe failed to load, and why
* Whether recipe failed to generate, and why
* Whether recipe regenerated due to conflicts, and how many attempts it
took
-Stop saving random recipe results to the persistence file
* They aren't randomized anyway
-Split recipe loading and recipe generation into separate procs
* It was kind of a mess
* This way, you can regenerate recipe without qdel'ing it and then
reinitializing
-Generate recipe if it failed to load
* We used to qdel it instead
-Consider recipe generation to be a failure if there aren't enough valid
ingredients or catalysts
* We used to only check whether possible ingredient list is empty
* Since the possible ingredient/catalyst lists don't change from round
to round, this could probably be made into a unit test in the future
-Reorganize random recipe conflict checks to make them more streamlined
* I had to do it in order to log regeneration outcomes
-Fix bugs which won't ever matter anyway
* optimal_ph_max no longer rolls above 14
* optimal_ph_max can no longer be below optimal_ph_min + 1 (we used to
check for CHEMICAL_MIN_PH + 1, which is just 1)
## Why It's Good For The Game
Logs help spot&diagnose issues which might not come up when testing
locally, like the issue where timestamps wouldn't update which was fixed
by #95895
## Changelog
🆑
fix: random recipes can no longer have upper pH bound above 14
/🆑
---------
Co-authored-by: l0 <-->
## About The Pull Request
Just the fix parts from #95892Fixes#95876
## Why It's Good For The Game
## Changelog
🆑
fix: metalgen and secret sauce should now generate properly
/🆑
---------
Co-authored-by: l0 <-->
## About The Pull Request
- `/datum/chemical_reaction/randomized` is now created along with the
main chemical reaction list and not loaded separately inside the
persistent subsystem. This ensures slightly faster init time and less
snowflake code for adding those chemical reactions later on
- Removed vars that are unused inside
`/datum/chemical_reaction/randomized` but keep those that could be
potentially changed for future recipes
- Merged procs and moves loading recipe data into `New()` making the
code clean and slightly faster
- Random reactions now retry 5 times to be re-added when collisions
happen before giving up
- Removed global lists `GLOB.food_reagents` and
`GLOB.medicine_reagents`. This significantly saves memory for global
lists and makes init faster because we no longer create and delete food
items to init the former list
- `/obj/item/paper/secretrecipe` now picks from all valid random recipes
by default making it robust
## Changelog
🆑
refactor: random recipes like metalgen & secret sause have been
refactored. Please report bugs on github
/🆑
## About The Pull Request
- Removed global list `fake_reagent_blacklist` in favour of
`abstract_type`. Saved memory
- Removed proc `get_chemical_reaction()` in favor of
`GLOB.chemical_reaction_list`. No proc overhead and faster access
- Remove unused proc `remove_chemical_reaction()`
- Removed proc `find_reagent()` in favour of
`GLOB.chemical_reagents_list`. No proc overhead and faster access
- Directly access name of reagents via `::` operator from typepaths
instead of looking up the datum in global chemical reagents list for
some operations. Faster variable access
- Removed unit test `reagent_id_typos`. The typepaths will error at
compile time because they aren't strings so there's no need for this
test
## Changelog
🆑
code: cleaned up code pertaining to reagent & reaction lookup
/🆑
## About The Pull Request
Splits the large ass persistence file into a bunch of smaller subfiles.
## Why It's Good For The Game
Better organization.
## Changelog
N/A