NalmDevelops-CraftTodo icon

CraftTodo

NEVER GET SIDETRACKED. Pick a recipe or building, set a count, and an always-on panel tracks every ingredient until it's done.

CHANGELOG

Changelog

0.8.4 (2026-10-03)

Changed

  • Fewer settings. Controller.Chord (the gamepad chord is always LB+RB), Notifications.TodoComplete (the "to-do complete" notice is always on, and still follows the game's silent mode) and Debug.DumpUi are gone. The panel key (Hotkeys.TogglePanel) and Controller.Enabled stay. Old entries in an existing config file are ignored.
  • The README is shorter and has no technical detail. It says that gamepad support and every language except English are not playtested yet.

0.8.3 (2026-10-03)

Changed

  • Shorter README and package description. The mod itself is unchanged.

0.8.2 (2026-10-03)

Changed

  • Take from chests puts the items down close around you, on ground you can reach. Before, every item was dropped at the one spot in front of you. The game only keeps the first drop there and throws the rest aside, which could be several steps away, or on the far side of a fence, a wall or a chest. Now each stack gets its own place within a couple of steps, in front of you first, and a place is used only if:
    • it is ground you can walk to (no water, no big height step);
    • nothing solid or already lying there is within reach of the item, with a little room to spare, so nothing is wedged against a building or a chest;
    • there is a clear line to it from where you stand, so nothing ends up on the other side of an obstacle.
  • Stacks stay whole: a stack of 8 planks lands as one pile of 8, not as 8 separate planks.
  • When there is no free ground left around you, the rest stays in the chests and a notification says so ("No room around you for the rest. Move to an open spot."), in all 11 languages. Step to a more open place, or pick the pile up, and click again.

0.8.1 (2026-10-02)

Fixed

  • A group ingredient no longer swaps its variant as you move around. An ingredient that several items satisfy (any river fish, any cabbage seed) showed the variant you have most of, and that count includes the storage of the area you stand in. So walking between areas could change the row's icon to another variant on every refresh. The variant shown now stays while it still covers what the row needs (or nothing does and it still has some), and only changes to one that does cover it. The log notes each change (Tree: '<path>' now shows ...); if a row still changes by itself, include those lines in your report.
  • Take from chests no longer takes bodies. The game destroys a dropped body after a while, which would have lost one that a recipe needed. Bodies are now left in the chest, like fuel and tech points.
  • LB + RB while the gamepad is on the panel leaves it, as B does. Before, the RB half of the chord marked the focused row "Have it elsewhere" by accident.
  • Pressing F8 during a cutscene no longer logs "Panel shown" while the panel is still hidden; the log now says it will show when the cutscene is over.

Changed

  • The gamepad in the recipe picker no longer rebuilds its list of recipes on every frame, only when the list is built or filtered, so browsing a long list with the stick doesn't make the game stutter.
  • The check for a language change is cheaper (it compared a freshly built string every frame).

0.8.0 (2026-10-02)

Added

  • "Have it elsewhere". The counts only see your inventory and the storage in your current area, so stock in another area, or one you plan to bring later, showed as missing and its recipe stayed expanded. Right-click an ingredient's icon (on the gamepad: RB with the row in focus) to mark it as taken care of, and again to undo:
    • A marked ingredient reads as complete, says "Have it elsewhere", and isn't expanded into its own recipe, so what it would need drops out of the tree.
    • Take from chests leaves it alone.
    • The mark is for the ingredient wherever it appears in the tree, belongs to the to-do of that save, and is forgotten when the to-do is cleared, finished or replaced.
    • The gamepad hint shows "Have elsewhere" or "Need it" depending on the row.
  • A notification when the to-do is complete, in the game's own style: "To-do complete: Bed x3". The panel clears itself when the target is reached, which is easy to miss in the middle of crafting. It follows the game's silent mode, and Notifications.TodoComplete (on by default) turns it off.
  • The new texts are translated into all 11 languages.

0.7.0 (2026-10-02)

Added

  • The panel hides itself during cutscenes and comes back when they end, at the same moments the game hides its own HUD: while the black bars of a story scene are up, and during the full cinematic scenes. Tracking carries on, F8 still works as before, and an open recipe picker is closed when a cutscene starts. The log notes when a cutscene starts and ends (Cutscene started (letterbox) / Cutscene over).

Changed

  • Every save has its own to-do. Until now there was one to-do for the whole game, so loading another save showed the first save's list and its progress. Now the to-do, its progress and the rows you collapsed or switched are kept per save slot, in a section of the settings file named after the slot (Todo.Steam_1, ...). The panel's position and its rolled-up state stay shared.
    • The to-do you had before updating moves to the first save you load afterwards.
    • Starting a new game gives it an empty to-do, even if it reuses the slot of a save you deleted.
    • If the game doesn't report a slot name, the mod falls back to one shared to-do, as before.

0.6.0 (2026-10-02)

Added

  • Gamepad support for the panel and the recipe picker:
    • Panel: press LB + RB together to put the focus on it (a gold frame marks where it is, and the buttons are listed along the bottom of the screen). The D-pad or left stick moves between the rows and buttons, A expands or collapses a row, ◀ ▶ switch the recipe of a row that has several, X is Take from chests, Y opens the picker and B leaves. The game gets no input while the focus is on the panel, so your character stays put.
    • Picker: opens with the focus already on it when you used the gamepad. The D-pad or stick walk the recipes, and the one in focus is the one selected. LB / RB jump between workbenches, hold LT / RT to lower or raise the count, A adds and B closes.
    • The hints show the game's own button icons, or letters when the game has none for a button.
    • The panel only takes the focus while no game window is open. If you reach for a mouse or keyboard, the focus goes back to the game.
    • The button names are read from the game's own button bindings at start-up, so a remapped or differently laid out gamepad works the same. The log has a Gamepad: line saying how many buttons it could tell apart.
  • Two settings, in a new Controller group: Controller.Enabled turns gamepad support off, and Controller.Chord changes the buttons that put the focus on the panel (LB+RB by default; empty turns the chord off).
  • The new hints are translated into all 11 languages.

0.5.1 (2026-10-02)

Added

  • A row in the tree shows "N on the ground" when some of its item lies within a few steps of you, which is where Take from chests puts it. The have/need counts only cover your inventory and storage, so a dropped item would otherwise look like it had vanished.
  • A hotkey to hide and show the panel: F8 by default, set with Hotkeys.TogglePanel in the settings file (None turns it off). The panel stays hidden until you press it again, including after loading another save or changing the language. Tracking carries on while it is hidden.

Changed

  • Take from chests now drops the items on the ground at your feet instead of putting them into your inventory, so a big order doesn't fill your slots:
    • They land where the game puts an item you drop yourself: just in front of you, on reachable ground.
    • Items lying within a few steps of you count as already taken. The panel counts only inventory and storage, so a dropped item leaves its count until you pick it up, and without this a second click would empty more chests onto the ground.
    • Fuel can't be dropped by the game, so it is left out. Anything the game refuses to drop goes back into its chest.
    • One click takes out at most 100 items, as the game drops most items one by one. Click again for the rest.
    • The game's own inventory calls are used, as before, and the log reports an error if an item's count doesn't add up.

0.5.0 (2026-10-02)

Added

  • A Take from chests button under the ingredient tree. It moves what the tree still needs from the storages in your current area into your inventory, so you can craft without opening each chest:
    • It takes, for every item in the tree, what the storages hold and your inventory doesn't, up to the amount needed. An item that appears in several rows is counted once, with the needs added up.
    • Rows you've collapsed aren't included: the button only moves what the panel shows.
    • The button appears only while something can be taken.
    • It uses the game's own inventory calls, so the game's inventory screens and notifications react as to any move. When your inventory is full, what doesn't fit goes back into the chest and the game shows its "inventory is full" message.
  • Game buttons can grow to fit a long translated label.

Fixed

  • Barricades and towers can be added to the to-do. They were left out as "fight buildings" since 0.3.0, so there was no way to plan their materials:
    • Both kinds are listed, each under its own builder: the ones you build ahead of a fight in the barracks, and the ones you place during a fight at the command post.
    • The barracks versions have no name of their own in the game, so they take the name of their in-fight twin ("Barricade I", "Archer Tower II", ...).
    • Only unlocked ones that need materials are listed, and a limit is respected, as for any other building. Placing one counts as progress.

0.4.1 (2026-10-02)

Added

  • An ingredient in the tree gets a small extra line, "3 of 8 in inventory", whenever part of its stock is in the storage of your current area. The item cell's count has always added the two together, so you couldn't tell how much you carry and how much you'd have to fetch. The line is hidden when everything is in your inventory.

0.4.0 (2026-10-02)

Added

  • The mod's own text follows the game's language: German, French, Spanish, Brazilian Portuguese, Polish, Russian, Turkish, Japanese, Korean and Simplified Chinese. Item, recipe, workbench and building names already did; the window titles, buttons, search hint and status lines ("Enough", "Missing 3", "Craft x4 at ...") did not and were always English.
    • Any other language, such as a community language pack, shows English.
    • The translations haven't been reviewed by native speakers. Corrections are welcome: all the text is in Strings.cs.
  • Changing the language in the game's settings rebuilds the panel and the picker in the new language, with no restart.
  • dotnet build -p:NoDeploy=true builds without copying the DLL into the game folder.
  • A start-up compatibility check. The log now has one line, Compatibility check: 4/4 hooks installed, 23/23 game fields found (game ..., Assembly-CSharp ...), and one line per problem saying what stops working. After a game update it shows at once whether the mod's hooks and the game internals it reads by name still match, which makes bug reports actionable.
  • Each Harmony hook is installed on its own. If a game update breaks one, the mod still loads with the rest: before, one broken hook stopped the whole mod from loading.

Changed

  • Section headers in the picker ("Buildings: ...", "Town buildings") are translated along with the rest.

Fixed

  • Buildings that are already built no longer clutter the picker. Only what can still be done is listed:
    • A building with a placement limit disappears once the limit is reached. This is the game's own check, the same count its build menu shows as "1/1".
    • A repair or construction (bridge, ladder, blockage, door, ...) disappears once the object it works on is gone from the world. Town buildings already worked this way.
    • Buildings without a limit stay listed, because the game lets you place them again (chests, benches, trees, ...).
    • A to-do you're already tracking still works after its building is built.
  • The log's one-time diagnostics show the new reasons ("limit reached", "its object is gone") and the limit next to each listed limited building.

0.3.2 (2026-09-30)

Added

  • The panel and the rolled-up bar dock to screen edges. Dropped within 8 px of an edge, or rolled up that close to one, they go flush against it:
    • Near the bottom, ▲ turns into ▼ and the panel rolls down into a bar on the bottom edge. That bar's arrow points up, and the panel unrolls upwards and grows upwards as its tree gets longer.
    • Near the top, the bar goes up to the top edge, not onto the panel's inset header.
    • Left and right docking keeps the panel against that edge when the resolution changes.
  • A long ingredient tree shows it scrolls. The game's edge fades appear on the side with more rows, and a slim scrollbar can be dragged. The mouse wheel scrolls it too.
  • First public release packaging: a README, and release zips for manual/Nexus installs and for Thunderstore.

Changed

  • Debug.DumpUi is now off by default, so players don't get a UI dump file on every load. An existing config keeps its value.

Fixed

  • A long tree was cut off mid-row with no sign there was more, so collapsing rows was the only way to see the rest. It now scrolls, with the hints above.
  • The tree's height limit now depends on where the panel is. It uses the room from the panel's spot down to the bottom of the screen (at least half the screen, pushing the panel up if needed). It used to be a fixed 60% of the screen.

0.3.1 (2026-09-29)

Added

  • The empty panel can be rolled up. A ▲ on its header ribbon, where the X sits while tracking, shrinks it to a small ribbon reading [+] To-Do ▼:
    • + opens the picker directly.
    • ▼ unrolls the empty panel.
    • The ribbon can be dragged. It sits on the panel's own header, lined up with the end nearer the screen edge, so the ▼ lands where the ▲ was.
  • Rolling up works only while nothing is tracked:
    • Picking a recipe shows the full panel.
    • When the to-do is finished or cleared, the panel rolls back up.
    • The choice is saved as Panel.Collapsed.

Changed

  • The empty panel's header shows the game's right-side ornament in place of the hidden X, as the game's own windows without a close button do.
  • The panel's saved position is where it should be, not where it was last pushed: a panel moved up by a tall tree moves back down when the tree shrinks.

0.3.0 (2026-09-29)

Added

  • Buildings in the picker, after the workbench sections:
    • Buildings: <builder's desk>: build-mode blueprints placed from a builder's desk. Only unlocked ones that need materials are listed. Fight barricades and towers, test buildings and the remove tool are left out.
    • Town buildings: shown only while an empty site for them still exists, so built ones drop off the list.
    • Plot repairs and constructions (bridge, ladder, morgue door, ...): crafts that make no item. They're named after what they fix and use a building icon.
  • Progress for buildings: a build-mode building counts when it's placed; town buildings and repairs count when they finish. The panel says "Built" instead of "Crafted" for these.
  • The log lists every building, repair and construction the mod added.

Changed

  • The picker title is now "Add to-do", and the search hint mentions buildings.
  • Cells without an item icon fall back to the craft's own icon, then the target object's or workbench's i_b_* icon.

Fixed

  • Town buildings were hidden as "utility repairs" in 0.2.0.

0.2.0 (2026-09-29)

Added

  • A game-styled UI replaces the IMGUI overlay:
    • uGUI under the game's UI root, using the game's own window frame, header ribbon, close button, fonts, text styles, buttons, arrow sprites and pooled item cells (icons, have/need counts, quality stars, tooltips).
    • It follows the game's integer pixel scale.
  • The ingredient tree: craftable ingredients expand into their own recipes, with the amount still missing, how many crafts that takes and where to craft them.
    • ◀ ▶ switch between recipes when several make the same item.
    • Collapsed nodes and recipe choices persist.
  • The picker is laid out like the game's craft window:
    • workbench sections with recipe icons;
    • search by recipe, workbench or ingredient;
    • a detail pane with ingredients and have/need counts;
    • a −/+ count that repeats while held (Shift steps by 10);
    • double-click, Enter or Add to confirm; Esc to close.
  • The panel can be dragged by its header, and its position is saved. The header's X clears the to-do.
  • Debug option Debug.DumpUi writes BepInEx/CraftTodo_ui_dump.txt.
  • One-time log diagnostics explain which crafts were hidden and why.

Changed

  • Duplicates were removed from the recipe list: 277 entries became 131.
    • Hidden: autopsy skin/bone inserts, grave part add/remove, garden planting, fuel refills, fake_* and test_* crafts, and crafts with no result.
    • Identical recipes, like Blockage clearing in every location, are merged.
    • Recipes that share a name but use different ingredients (Firewood, Bronze Ingot, Seed Oil, ...) stay separate.

Removed

  • The Window.Scale setting: the UI now follows the game's pixel scale.
  • The mouse-over-UI patch: uGUI blocks world clicks on its own.

Fixed

  • The first 0.2.0 build lost most of the panel's width to its frame margins. Names disappeared and rows were clipped.
  • Picker sections overlapped when it first opened.
  • Esc or Enter could reach the game right after the picker closed.

0.1.0 (2026-09-28)

Added

  • The first version, drawn as an IMGUI overlay:
    • an Add button that opens a text list of recipes;
    • pick a recipe and a count;
    • a list of the ingredients still needed.
  • Progress counts each finished craft through the game's craft output. The to-do clears when the target is reached, or when it's closed.
  • Game keys are blocked while typing in the picker.