You are viewing a potentially older version of this package. View all versions.
sighsorry-FineDining-1.0.2 icon

FineDining

Make food matter with real spoilage, freshness-based stats, Iceboxes, up to 9 food slots, Chef's Choice bonuses, Full Course rewards, Cooking skill perks, bonus outputs, auto-eject cooking, faster fermentation, and clear station hover hints.

Date uploaded a month ago
Version 1.0.2
Download link sighsorry-FineDining-1.0.2.zip
Downloads 46
Dependency string sighsorry-FineDining-1.0.2

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2351 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2351

README

FineDining

FineDining is a server-synchronized Valheim food overhaul focused on food storage, diet variety, and the Cooking skill.

Showcase

Spoilage and preservation

Food can spoil in containers, as loose drops, and when placed for display. Remaining time stays visible where the item is used.

Expired food normally becomes its configured rotten result. A group rule or exact override can instead keep the original prefab at minimum freshness. Cold biomes and the Icebox pause active spoilage timers.

Diet, Chef's Choice, and Full Course

Recent meals influence Chef's Choice. Natural food expiry or a food removed by Puke advances the list.

Tooltips show Chef, diminishing, and stale multipliers. Filling every unlocked food slot activates Full Course.

At higher Cooking levels, the most likely Chef multiplier moves toward the configured peak.

Cooking and station hints

Cooking skill can auto-eject finished food, while hover hints expose valid inputs and processing state for vanilla and modded stations.

Cover and depth speed fermentation. Compatible custom Fermenters receive the same clear hover information.

Production buildings and supported ValheimCuisine stations expose compact hover information.

Features

  • Configurable spoilage, freshness-scaled food stats, and an Icebox.
  • Six- or nine-slot diets with diminishing returns, Chef's Choice, and Full Course.
  • Cooking experience, production bonuses, auto-eject, faster fermentation, and station hints.

Spoilage

Ordinary food starts its spoilage clock when it first enters a player inventory. Untouched food in location loot and ordinary containers remains fresh until that first pickup. Placed food starts from its placement time.

An active clock uses Valheim's network world time. It continues in ordinary containers and unloaded zones while that clock is running, and it survives restarts without resetting. Time does not advance while the server is offline, while an empty dedicated server pauses world time, or while the item is preserved.

Spoilage pauses in:

  • An Icebox.
  • Biomes listed in No-Spoil Biomes; the default is Mountain, DeepNorth.
  • Water, for world items classified as Fish.

The default Spoilage.yml policy is:

version: 1
lifetimes:
  farmingHarvest: 72
  cookingStationInput: 24
  cookingStationOutput: 48
  unfermentedFood: 48
  fermentedFood: 72
  feastMaterial: 72, keep
  feastResult: 48, keep
  fish: 24
  otherEdible: 24
chefChoiceBlacklist: []
overrides: []

Group lifetime values use <hours>[, keep]. Valid hours are 0..720; a number alone uses the group's fixed rotten replacement, while keep preserves the original prefab and stack and permanently moves it to minimum freshness. 0 disables spoilage and cannot be combined with keep. Positive fractions are supported, with one second as the minimum internal lifetime. By default, feastMaterial and feastResult use keep. unfermentedFood covers Fermenter inputs whose conversion path eventually reaches directly edible food, including paths that continue through a CookingStation.

Exact prefab rules use this compact format:

overrides:
  - ModdedFood, 100
  - ModdedProduce, 72, FineDining_RottenProduce
  - PreservedIdentityFood, 72, keep
  - DecorativeFood, 0

The optional third value is either a replacement prefab or the reserved, case-insensitive keyword keep. With keep, the timer runs normally, but expiry preserves the original prefab and stack and records a permanent minimum-freshness state instead of creating a replacement. The item stays at the configured minimum freshness effect, displays Minimum freshness reached (Min in slots), and does not receive another timer after moves or restarts. Because its prefab identity is unchanged, other systems still recognize it as the original item. A 0 lifetime disables spoilage without applying this state.

When the third override value is omitted, a classified item inherits its group's action while an unclassified force-include uses RottenMeat. By default, farming harvests become FineDining_RottenProduce; CookingStation inputs, CookingStation outputs, and Fish become RottenMeat; unfermented food, fermented food, and other edible food become FineDining_RottenFood; feast materials and feast results keep their original prefab.

FineDining_RottenProduce and FineDining_RottenFood cannot spoil again. Eating them applies Puke for five and ten seconds respectively.

Timers appear in inventory and container slots, item tooltips, loose ItemDrop hover text, and placed-food hover text. Merging timed stacks keeps the lower remaining lifetime; merging with a minimum-freshness keep stack applies that state to the resulting stack. Vanilla loose-item cleanup remains active.

Freshness

An edible item's own freshness scales its health, stamina, eitr, and health regeneration from x1.00 to the configured minimum, x0.75 by default. The scale is captured when the food is eaten.

Ingredient freshness is not inherited by recipes, CookingStation output, Fermenter output, or feast output. Food duration and consume status effects are unchanged.

Diet and Chef's Choice

Maximum Food Slots accepts 6 or 9 and defaults to 9. Slots unlock as the player learns directly edible Health/Stamina/Eitr foods:

Known foods  0-6  7-9  10-12  13-15  16-18  19-21  22+
Food slots     3    4      5      6      7      8      9

The six-slot and nine-slot stat scales default to x0.45 and x0.30. A complete current diet therefore totals about x0.90 of three equivalent vanilla foods before other effects.

  • The recent-food history tracks seven unique foods by default.
  • The fourth and later consumption receives the default x0.75 diminishing multiplier.
  • Chef's Choice contains seven foods with multipliers between x1.10 and x1.50 by default.
  • Higher Cooking skill favors higher food tiers and stronger Chef multipliers.
  • Recent Health/Stamina/Eitr proportions influence new Chef choices by 70% at the default setting.
  • A naturally expired food or a food actually removed by Puke advances Chef's Choice once from the oldest entry.
  • Full Course becomes available at six unlocked slots and defaults to x1.20 while every unlocked slot is filled.

Chef's Choice only uses consumables with positive health, stamina, or eitr. Exact exclusions belong in chefChoiceBlacklist in Spoilage.yml.

ResourceMap.yml defines Chef food tiers from lowest to highest. The server or single-player host creates, hot-reloads, and synchronizes it. Connected clients ignore their local copy, and invalid edits keep the last valid map.

Cooking and stations

Successfully eating a directly edible Health/Stamina/Eitr food grants 0.15 Cooking experience by default. Setting Cooking Experience per Food Eaten to 0 disables it.

At Cooking level 100:

  • Normal recipes and CookingStation outputs have a default 25% bonus-item chance, configurable from 0% to 25%.
  • Fermenter outputs use a separate default of 20%, also configurable from 0% to 25%.
  • Lower Cooking levels scale both chances linearly.

Production Bonus Excluded Output Prefabs disables the bonus for matching output items across recipes, CookingStations, and Fermenters.

CookingStation auto-eject is available only when the conversion has a separate burnt or coal stage. Its chance equals the inserting player's Cooking level, and the result is decided when the item is inserted.

Fermenters can run faster with cover and depth. Full cover and eight meters of depth each provide up to x2 speed by default, and the two multipliers combine. Prefabs listed in Fermenter Bonus Excluded Prefabs keep native timing and output; FineDining acceleration, output bonuses, and insertion/collection Cooking experience are disabled for them.

Hover hints show available inputs and processing time for CookingStations, Smelters, Windmills, and Fermenters. Icon scale and rows are client-side settings. Optional AzuCraftyBoxes integration includes nearby container contents, and optional ValheimCuisine integration adds Grimpy Box and Freydis information.

Icebox

FineDining_Icebox is found in the Hammer's Misc tab and always pauses spoilage inside it.

  • Size: eight columns and four rows by default; rows are configurable from 4 to 20.
  • Recipe: TrophySGolem:1,Obsidian:8,Crystal:16,Silver:32.
  • Map and minimap pins: enabled by default for Iceboxes owned by the local account.
  • Placement limit: two per Steam account by default, configured through the server-synchronized Icebox Default Placement Limit setting.

Use -1 for unlimited placement, 0 to deny placement, or a positive number for a maximum count. Exact Steam64 overrides are configured in the server-only Icebox.yml and take priority over the synchronized default.

Configuration

The main configuration file is BepInEx/config/sighsorry.FineDining.cfg.

Server configuration locking is enabled by default. Config descriptions identify every entry as server-synchronized or client-only.

Section Scope Contents
1 - General Server-synchronized Configuration lock, Cooking bonuses, and fermentation
2 - Client Client-only Station icon scale and row counts
3 - Diet Server-synchronized Food slots, stat scales, history, and diminishing returns
4 - Chef Choice Server-synchronized Choice count, multipliers, tier weighting, and food-type preference
5 - Spoilage Mixed Preservation, stale-food minimum, Icebox default limit, recipe, size, and local pins

Additional files are created under BepInEx/config/FineDining/:

File Purpose
Spoilage.yml Server-authoritative lifetimes, expiry results, overrides, and Chef blacklist
ResourceMap.yml Server-authoritative Chef food tiers
Icebox.yml Server-only per-Steam64 Icebox limit overrides
Spoilage.reference.yml Generated spoilage classification reference; not configuration
FoodTier.reference.yml Generated Chef tier and food-type reference; not configuration

Invalid YAML keeps the last valid policy. Files from older names are not read or migrated; the former Icebox.yml defaultLimit field is unsupported.

Admin commands

Command Action
fd:rerollchef Reroll the local player's Chef's Choice list
fd:clearrecent Clear the local player's recent-food history
fd:printstate Print the local player's FineDining diet state

Compatibility

  • InventorySlots 1.3.7 or newer: spoilage-aware stack merging.
  • AzuExtendedPlayerInventory: hidden-slot merge compatibility.
  • AzuCraftyBoxes: nearby-container station hints using its configured range.
  • ValheimCuisine: Grimpy Box and Freydis hover information.
  • Expand World Data: custom biome names in No-Spoil Biomes.
  • Feaster-style placed food: spoilage metadata and hover information.

FineDining performs spoilage work only for authoritative loaded inventories, containers, and world items. Unloaded progress is timestamp-based rather than continuously simulated, and dedicated servers do not require a local HUD.

CHANGELOG

Changelog

1.1.3

  • Fixed non-food CookingStation conversions, including Frost Foundry armor, weapons, shields, and unfinished casts, being automatically assigned spoilage timers and RottenMeat replacements.
  • Cooking inputs and outputs now require a conversion path to directly edible food. Raw food, dough, and intermediate ingredients across CookingStation/Fermenter chains remain supported, and exact prefab overrides remain authoritative.
  • Added regression checks for Deep North equipment exclusions, food-processing chains, unrelated branches, conversion cycles, case-insensitive matching, and rebuilding classification after food endpoints change.

1.1.2

  • Added independent, server-synchronized Full Course Enabled, Diminishing Returns Enabled, and Chef Choice Enabled settings, all enabled by default. Full Course changes apply to the current diet on the next food-stat update; Chef and diminishing changes apply to newly eaten foods while preserving already-eaten effects.
  • Disabling Chef's Choice hides its guidance and pauses list consumption, refills, expiry/Puke rotation, and admin rerolls. Saved selections and shared consumption history are retained for re-enabling.
  • Added client-only Show Recent Food Row and Show Chef Choice Row settings, both enabled by default. Hiding a row dismisses its hover without stopping food effects, history, Chef updates, or item/eaten-food tooltips. The Chef row moves up when the recent-food row is hidden.
  • Added regression checks for all eight gameplay-toggle combinations with both HUD rows hidden, retained food effects and Chef state, and conditional Cooking guidance.
  • Updated the packaged BepInEx dependency to 5.4.2351.

1.1.1

  • Fixed Icebox placement limits remaining inactive on dedicated servers and hosts when loading chunked saves or creating a new world. Quota initialization now runs after the common server world-loading step, covering old saves, chunked saves, and worlds without a save file.
  • Prevented failed loads and repeated initialization from replacing the accepted Icebox baseline. Existing boxes remain intact and count toward the limit; new placements retain the existing rejection and refund behavior.
  • Added regression checks for the Icebox initialization hook and the original client/server world-loading paths.

1.1.0

  • Added the server-synchronized, live Spoilage Mode setting. FollowYaml is the default and preserves existing rules; Off stops new timers and expiry processing, hides spoilage UI, and removes freshness penalties from food eaten while Off; StatDecreaseOnly follows YAML lifetimes and exclusions but keeps expired items at minimum freshness instead of replacing them.
  • Mode changes preserve saved spoilage data. Off does not freeze world time, so existing running deadlines can expire when re-enabled. Already-eaten food effects, rotten replacements, and permanent minimum-freshness markers are not reset by switching modes.
  • Preserved inherited timers and permanent minimum-freshness markers when placing and recovering tracked food, including while spoilage is Off. The generated spoilage reference continues to describe the underlying YAML rules independently of the selected mode.
  • Added regression checks for mode defaults, YAML rule handling, Off UI and freshness suppression, and inherited spoilage state.
  • Reorganized related README screenshots into two-column groups and replaced static images with smaller WebP previews linked to their full-resolution originals. Animated GIFs remain unchanged.

1.0.10

  • Changed the default Maximum Food Slots from 9 to 4 for newly created configurations. Existing local and server configuration values remain unchanged, and the supported range stays at 3 through 9.
  • Fixed cooking-station input hints briefly reusing a cached available or unavailable state after the fire or free-slot condition changed. Transient availability is now checked on every hover update without caching an empty result.
  • Restored configured Icebox dimensions when Container.Load exits with an exception, while preserving the original load error for Harmony and other mods.
  • Centralized freshness lifetime composition across vanilla and optional inventory integrations, and reused FineDining's shared config directory for Icebox policy loading without changing data keys or file locations.

1.0.8

  • Fixed repeated Unity errors when station hint cards cloned Valheim 1.0 inventory elements containing TouchRaycastPadding. Inherited root behaviours are now disabled without breaking their required Image component relationship.

1.0.7

  • Updated FineDining for Valheim 1.0.7, including the changed crafting, food, HUD, fermenter, and inventory contracts used by its Harmony patches and runtime integrations.
  • Removed the hard Jotunn dependency. FineDining now registers its generated rotten foods, Icebox, icons, and effects itself; Jotunn remains an optional compatibility integration when another installed mod uses it.
  • Updated the bundled ServerSync compatibility build for Valheim 1.0.7 while preserving configuration locking, version checks, and synchronization identifiers.
  • Fixed Cooking bonus-output patch detection for Valheim 1.0.7. Per-item bonuses once again apply to single and batch crafting while retaining the guarded vanilla fallback if the target method changes again.
  • Added a Deep North tier and its confirmed food ingredients to the default ResourceMap.yml. Existing server and single-player maps remain unchanged and must merge the new section manually to adopt it.
  • Updated AzuExtendedPlayerInventory compatibility validation for 2.4.10 and retained safe spoilage metadata recovery without adding a hard dependency.
  • Tightened lifecycle cleanup, private game-member access, item provenance handling, and hot-path UI/station work while preserving saved food data, network ownership checks, and external configuration formats.

1.0.6

  • Cooking skill descriptions now appear to the left of the skills panel, aligned with the hovered row. Long descriptions scale and stay within the screen bounds, with mouse and gamepad support.
  • Preserved existing Cooking descriptions and conditional FineDining tips, and added tooltip cleanup when skill rows are reused or the inventory UI is destroyed. SecondaryAttacks is not required.
  • Reduced repeated HUD number formatting and station input-list construction while preserving live UI updates and the existing station cache timing.
  • Icebox recipe changes no longer trigger an unrelated scene-wide storage-size refresh. Storage row changes retain the existing resize handling.
  • Simplified active-food effect updates and moved Chef collection refresh state alongside its reconciliation logic without changing saved food data or selection order.
  • Added Cooking tooltip layout regression checks and support for automatically deploying the merged Debug DLL with DeployToGame=true.

1.0.5

  • Added default spoilage overrides: Raspberry, Mushroom, and Blueberries now use 96, keep, retaining their original items at minimum freshness after 96 hours. Honey now uses 0, disabling spoilage.
  • Existing Spoilage.yml files are not overwritten; add these overrides manually to adopt the new defaults in an existing profile or server.

1.0.4

  • Maximum Food Slots now accepts every value from 3 through 9. Replaced the separate six- and nine-slot scales with one Food Stat Scale, defaulting to 0.9; each food uses 3 * scale / unlocked slots, keeping a full diet's base strength consistent throughout progression.
  • Full Course now works at every unlocked slot count from 3 through 9 when all slots are filled with eligible foods. Default settings provide 90% of a comparable vanilla diet before Full Course and 108% with it.
  • Replaced eaten-food name tooltips with a fixed, localized Net effect summary (종합 효과 in Korean) and a white arrow from the hovered icon. The total excludes slot scaling and vanilla time decay; a second line shows non-neutral Full Course, Chef, freshness, and diminishing multipliers. Consumed factors are saved, while Full Course updates with the current diet.
  • Increased every default spoilage lifetime by 24 hours. Groups and exact overrides now accept 0, keep to disable spoilage without removing the chosen expiry action.
  • Added regression coverage for all supported slot counts, saved effect breakdowns, hover formatting, and disabled keep rules.

Existing Spoilage.yml files and assigned timers are not overwritten. Foods eaten before this update show their combined net effect only; eating them again records the detailed breakdown. The old per-slot-profile scale settings are not migrated.

1.0.3

  • Preserved EpicMMOSystem and other mods' maximum Health, Stamina, and Eitr bonuses by routing final food totals through Valheim's standard calculation. FineDining continues scaling only each food's own stat and health-regeneration contributions.

1.0.2

  • Added keep expiry actions for spoilage groups and exact prefab overrides, preserving the original prefab and stack while permanently setting expired items to minimum freshness. Feast materials and feast results now use keep in the default policy.
  • Added localized minimum-freshness countdown and endpoint indicators for keep items across inventory and container slots, item tooltips, loose drops, and placed-food hover text, including distinct cold-preservation wording. Kept items persist across moves, placement, recovery, and restarts.
  • Improved stack compatibility so the minimum-freshness state propagates through vanilla inventory and world stacking, InventorySlots, and AzuExtendedPlayerInventory recovery paths.
  • Existing numeric lifetime and override syntax remains valid. Existing Spoilage.yml files are not overwritten, so upgraded servers must set feastMaterial: 72, keep and feastResult: 48, keep manually to adopt the new defaults.

1.0.1

  • Added progression-aware Chef's Choice: higher Cooking favors higher ResourceMap tiers and stronger multipliers, while recent Health, Stamina, and Eitr food ratios influence future choices.
  • Added editable ResourceMap.yml, generated FoodTier.reference.yml and Spoilage.reference.yml, a Chef blacklist, and admin commands for rerolling choices, clearing recent history, and printing state.
  • Reworked diet progression with configurable six- or nine-slot limits, known-food slot unlocks, balanced per-slot stat scaling, and the Full Course bonus from six filled slots.
  • Chef's Choice now advances when active food expires or Puke removes food; Puke removal order can be newest, oldest, or random.
  • Added Cooking experience from eating, separate Cooking and Fermenter bonus-output chances, CookingStation auto-eject for overcookable foods, and bonus feedback effects.
  • Added cover- and depth-based fermentation speed, accurate hover timing, and per-prefab exclusions that retain native timing, rewards, and experience.
  • Improved spoilage with first-pickup timer activation, persisted clocks for already-timed stored food, water preservation for world Fish, unfermented Fermenter-input classification, safer stack merging and replacement, and revised 24-72 hour defaults.
  • Migrated generated rotten foods and the Icebox to Jotunn for reliable registration across restarts; expanded Icebox recipes, storage rows, synchronized placement limits, per-Steam overrides, and owner map pins.
  • Expanded station hover information and compatibility for vanilla and modded stations, AzuCraftyBoxes, ValheimCuisine, InventorySlots, and AzuExtendedPlayerInventory.
  • Reorganized configuration into five sections and renamed YAML/reference files. Jotunn 2.29.2 is now required, and legacy config or YAML names are intentionally not migrated.

1.0.0

  • Initial release.