CookBook
A quality-of-life mod for Risk of Rain 2 that provides a structured, searchable, and expandable view of craftable items and their possible crafting paths.
CHANGELOG
Changelog
Dates are listed in MM/DD/YY format.
v1.2.10 — 1/7/26
Fixed
- Fixed drone list not updating after drone death.
- Drone tier is now properly factored into its itemweight calculation.
- Added many safety guards in state controller.
- Fixed Mathematical Value Drift in the planner that caused deep-crafting paths to be culled as inefficient.
- Fixed Signature Collisions by switching to a non-canceling additive hash.
Changed
- Simplified InventoryTracker to only hook oninventorychangeglobal rather than both local and global
- Reduced the complexity of the efficiency culling logic minorly. Tested with all items + quality mod + 5 depth, 650 ms -> 570 ms.
- Hardened crafting logic to protect deeper chains, now properly respects intermediate item surpluses.
- Craftable rebuilds gated to only occur if the dirtied drone index actually contributed to chains.
- Completely rewrote the backend of the crafting handler, now follows vanilla semantics 1:1.
Added
- Added a toggle to visually display the voided item you will receive if you crafting an item you already own the void version of
- added a toggle for debug mode to add some extra prints at the crafting execution stage so you can see how a craft chain looks step-by-step.
- Added a simple integration with cleanerchef to turn off hiding corrupted recipes if cleanerchef is enabled.
v1.2.9 — 1/2/26
Fixed
- Hardened Stage transition logic as it was throwing exceptions due to abort trying to fire on a null craftingcontroller (oops).
Added
- Added cool little indicators for the category selection button (yippee!).
v1.2.8 — 1/1/26
Changed
- Stage entry logic now checks for an existing craftingcontroller (ie a chef) rather than relying on stage transitions.
v1.2.7 — 1/1/26 🎉
Changed (many optimizations)
- Now uses a commutative hash to cheaply cull permutations EARLY.
- Added final pass in recipeprovider to validate and cull all recipes that are permutations of one another, as well as remove all malformed recipes (those that use uncraftable items).
- Moved the logic from IsChainEfficient into IsCausallyLinked to cull chains early.
- Implemented Dominance Culling to kill chains early if a better path exists based on item weighting.
- Updated inventorytracker hook to only fire on real inventory changes (no longer fires from using equipment or gaining/losing temp items).
- Figured out how to change the active equipment slot in a client-safe fashion, automatically happens before the craft is attempted (MUL-T included!).
Added
- Added support for controlling where equipment recipe rows go in the tiermanager sorting.
- Added support for controlling the sort order by index.
- Added support for repeatedly executing a craft chain N times via a text box next to the final craft button.
- Added protection against crafting illegal items (if you own a voided item, blocks using the non-voided version in chains). Toggleable in settings.
v1.2.6 — 12/31/25
Added
- Added sorting support to craftUI to sort based on item type (visual only to avoid recomputation).
v1.2.5 — 12/29/25
Fixed
- Added inter-client confirmation via networked commands so that non-modded users can still participate. It sends the objective in raw text via chat!
- Muted command audio to not play the annoying chat blip on send.
- Further optimized craftplanner backend.
v1.2.4 — 12/29/25
Changed
- Err... I may have accidentally been attempting to call a networked event from the client, which explains why crafting wasnt working on non-host clients in multiplayer... Fixed now!
- Finalized chat-based networking! invisible to the player, and completely avoids the messy ror2 netcode!
v1.2.3 — 12/28/25
Changed
- Added tint for ingredient sources to differentiate self sourced items from traded items. Cleaned up ingredient icon templating to eliminate runtime costs, just instantiation now.
v1.2.2 — 12/28/25
Added
- Multiplayer pooling support, please provide feedback on this. it relies on the SPEX npc to transfer items between allied players.
- Added Risk_Of_Options integration for configuring crafting depth, multiplayer pooling, and other relevant features. Please suggest any other configurable settings that are missing.
Changed
- Further optimized the craftexecutionhandler to now only handle iterating through the steps generated by the craftplanner. The craftplanner now properly adds drone scrap and/or trading steps.
- To provide more choice for the user , item trades and Drone Scrap paths are now shown in parallel rather than exclusively preferring a specific route type.
v1.2.1 — 12/28/25
Fixed
- Refactored the craftplanner backend filtering to be more lenient on potentially useful crafting chains (ex:4x drones -> 4x green scrap -> 2x regen scrap -> red scrap), while still culling wasteful chains before ui time.
Changed
- RecipeProvider now consolidates bulked recipes (recipes with more than 1 of an ingredient), allowing cheaper chain traversal as we dont need to iterate over all individual ingredients.
v1.2.0 — 12/27/25
Added
- Added Drone scrap support.
- Added Objectives to make Crafting State more clear to the user.
- Added a hotkey for aborting a craft. Currently set to holding left alt. Will be configurable eventually once I get around to it.
Fixed
- Replaced usage of massive int arrays with sparse dictionaries to greatly reduce memory usage. (11 GB game usage -> ~3.6 with identical inventory).
- No longer fully rebuilds paths on inventory change, preserves unchanged paths from previous snapshot.
- Reduced menu rendering time by nearly a factor of 4 in typical scenarios via sparse reads.
- Fixed the pathrow buttons consuming scroll actions (no one mentioned this somehow :sob:)
Changed
- Reduced pressure on garbage collection from reinitializing a bunch of arrays for calculating chain costs,. Now uses a "scratchpad" that just repeatedly gets cleared (no repeated initialization calls).
- Reworked path planning to take a lazy approach to reduce passive mem usage.
v1.1.0 — 12/18/25
Fixed
- Updated README to include visuals (Why doesn't Thunderstore allow edits?)
v1.0.0 — 12/18/25
Release
- First stable public release
- Core UI, crafting logic, and backend systems finalized
v0.7.2 — 12/17/25
Changed
- Combined pickup logic refactor completed
- Crafting control logic finalized and stabilized
v0.7.1 — 12/16/25
Changed
- Fully working version prior to backend refactor for combined pickup logic
v0.7.0 — 12/15/25
Added
- Completed automated crafting system
- Crafting automation now relies on user pickup events rather than fixed delays
Changed
- Removed naive time-based polling for inventory checks
v0.6.1 — 12/15/25
Changed
- Hardened autocrafting logic
- Craft chains now wait for the user to collect produced items before continuing
v0.6.0 — 12/15/25
Added
- Fully implemented backend for sending craft chains to
CraftingController - Crafting logic now obeys all internal network constraints
- Imitates local user actions for reliability
Compatibility
- Reliable in multiplayer scenarios
- No host-based dependency
v0.5.3 — 12/14/25
Changed
- Optimized menu rendering to avoid reattaching modified UI on repeat renders
- Prevented UI duplication during craft chain execution
Added
- Crafting chain support directly in the UI (visual polish pending)
v0.5.2 — 12/13/25
Changed
- Major backend overhaul of
CraftPlanner - Clean indexing-based planning logic
- Proper aborts on circular, recursive, or redundant recipe paths
Performance
- Cached all major UI references at template creation
- ~20% UI rendering performance improvement
v0.5.1 — 12/11/25
Added
- Proper dropdown event handling
- Isolated CookBook UI via its own canvas
Changed
- Reduced menu stutter
- Implemented simple time slicing for row rendering to eliminate menu-open hitching
v0.4.0 — 12/11/25
Added
- Initial implementation of dropdown menus
Changed
- Frontend UI refactor
v0.4.2 — 12/08/25
Changed
- Updated UI icon prefab
v0.4.1 — 12/08/25
Added
RecipeCountfield to recipe chains- Recipes producing different quantities are now treated as distinct entries
Changed
- Partial
CraftUIupdate - Planned migration toward RoR2-native prefab styling
v0.4.0 — 12/07/25
Added
- Seamless insertion of CookBook into vanilla crafting UI
- Dynamic resizing based on vanilla UI dimensions
- Recipe list populated directly from
CurrentCraftablesevents
Performance
- Cached each built row for fast, render-only searching
- No row recomputation or culling required
v0.3.3 — 12/04/25
Changed
- Hardened UI positioning against resolution scaling
- All layout derived from base UI dimensions
v0.3.2 — 12/04/25
Changed
- Reduced debug and print verbosity for proven systems
v0.3.1 — 12/07/25
Fixed
- Edge case where Chef UI could fail to detach on stage transitions
v0.3.0 — 12/04/25
Added
- Began prototyping UI layout and injection for custom features
Changed
- Cleaned up Chef NPC dialogue hooks
v0.2.4 — 12/03/25
Removed
- Several external dependencies
- Removed R2API entirely
- Removed all reflection usage
Changed
- General codebase cleanup
v0.2.3 — 12/03/25
Changed
- Refactored overall architecture
Pluginnow handles initialization only- Introduced
StateControllerto manage events and UI interaction
v0.2.2 — 12/03/25
Fixed
- Minor bugs in
TierManager
Changed
- Proper initialization of tier manager
- Reduced verbosity in state controller (logic proven stable)
v0.2.1 — 12/03/25
Changed
- Hardened
CraftPlannerlogic
v0.2.0 — 12/02/25
Added
- Inventory tracking logic
- Complete recipe provider
- Tier manager for clean sorting and UI organization
v0.1.0 — 12/01/25
Added
- Initial DFS-based dictionary generation
- Fast-read backend foundations