You are viewing a potentially older version of this package. View all versions.
expDARE-Crucible-0.3.28 icon

Crucible

Meadworks shared library: product registration, server authority, the shared interface kit, localization and logging. Adds no gameplay. Required on all peers.

Date uploaded 3 days ago
Version 0.3.28
Download link expDARE-Crucible-0.3.28.zip
Downloads 20
Dependency string expDARE-Crucible-0.3.28

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
ValheimModding-Jotunn-2.30.2 icon
ValheimModding-Jotunn

Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.

Preferred version: 2.30.2

README

Crucible

The shared library every Meadworks mod needs. It adds no gameplay on its own.

Version 0.3.28, with Crucible.UI 0.3.20. Changes are in CHANGELOG.md.

Features

  • One shared install that every Meadworks product uses: product registration, shared settings conventions, server authority and permission checks, localization and logging.
  • Crucible.UI, the shared Meadworks interface kit, adapted from PackPanel by Gerald Glasgow, used by every Meadworks window, with gamepad navigation.
  • Panel look settings: Timber or Brown style, border width and roughness, night shading, and an option to dress the game's own wooden panels in the same look.
  • Logging control for the whole suite: quiet by default (errors and warnings only), per-product levels, repeated lines written once and counted, and an optional console filter for all installed mods.
  • Achievement guard: quality-of-life actions never mix marked and clean items in one stack. Products whose cheats create items say on their own page whether those items are marked. An optional past-stat resync copies stats the game counted while achievements were not tracked, never for characters that used cheats.
  • A shared experience multiplier for Meadworks custom skills (not the game's own skills).
  • The meadworks console command lists installed Meadworks products, their versions and the session's authority state.
  • Notices: MeadWorks top-left and center messages stack in a Timber or Brown panel. The newest card is on top. The same notice again becomes one card: item amounts add, and a notice with no amount shows how many times it repeated. A notice with an item icon shows that icon. Cards past Maximum Visible, and cards that do not fit, wait, and their timers wait with them. The stack stays off the compass, the status-effect row and the hotbar. It hides while the inventory, the map, the pause menu, or a MeadWorks window is open, and the timers wait then too. Unlock and biome banners stay on the game's banners. Other mods' UI is left alone. Stacked Notices off uses the game's own message for those top-left and center notices. Local settings, section Notices: Stacked Notices (on by default), Position (TopLeft by default; also TopRight, BottomLeft or BottomRight), Duration (4 seconds, from 1 to 30; the next notice uses it) and Maximum Visible (5, from 1 to 8). The other notice settings apply at once. A mod that registers its own notice provider replaces this stack.

Requirements

  • BepInExPack Valheim 5.4.2351
  • Jotunn 2.30.2

Installation

  • Mod manager (recommended): you normally do not install Crucible by hand. Installing any Meadworks product with r2modman, Gale or the Thunderstore Mod Manager installs Crucible and its dependencies for you.
  • Manual: install BepInExPack Valheim and Jotunn, then copy the plugins/Crucible folder from this package into BepInEx/plugins/. Install Crucible once; Meadworks products never ship their own copy.
  • In multiplayer, install Crucible on the server and on every client (see Multiplayer).

Configuration

  • Accepted own-value edits through the shared settings menus save by default, even when a configuration file has automatic saving disabled. Only the edited value is saved against the existing disk configuration; unrelated keys and personal preferences remain intact. Remote server overlays are kept separate from local saved values, and server-owned edits retain their authority and synchronization rules. Saving failures are reported.
  • Crucible's settings live in BepInEx/config/com.meadworks.crucible.cfg; the interface kit's look settings live in BepInEx/config/com.meadworks.crucible.ui.cfg. Edit them in game with Almanac or any ConfigurationManager.
  • Server-synced settings (such as the skill experience multiplier) use the server's values in multiplayer and show as read-only to non-admin players.
  • Notice stack settings are local to this player. The server does not override them. They apply without a restart. Duration applies to the next notice. Position, Stacked Notices and Maximum Visible apply at once.
  • Crucible has no cheats of its own. It provides the shared gate that every product's cheats go through: in single player you decide; in multiplayer cheats stay locked unless the server allows them.

Multiplayer

  • Required on all peers: install it on the server and on every client, same major.minor version.
  • Joining a server without Meadworks: Crucible waits for the server's reply (10 seconds by default, setting VanillaServerTimeoutSeconds), then treats it as a vanilla server; required Meadworks products turn off for that session and cheats stay locked.
  • A joining MeadWorks client is not dropped while the server is still sending that peer's first data. The server waits until the send queue drops to 64 KB, then allows 60 seconds for the MeadWorks answer, and never waits longer than 5 minutes from the greeting. A peer that never answers is still refused. This wait is separate from VanillaServerTimeoutSeconds.
  • A required mod is still checked against the server's peer class. A client that marks that mod server-only is refused when the major.minor does not match, and admitted when it does.
  • Server admins can set Network.AdmissionMode to AllowVanilla. It takes effect only when every installed mod allows players without Meadworks; otherwise the server stays Strict and its log names each mod that blocks it.

Compatibility

  • AchievementSync (LiveriaDevs): when it is installed, Crucible's past-stat resync turns off and leaves that job to AchievementSync.
  • Every Meadworks product steps aside when the mod it replaces is installed; each product's page lists those mods.

Notes

  • Gamepad: provides the controller navigation used by every Meadworks window.
  • Languages: English, Spanish, Simplified Chinese, Russian, French, German and Korean (non-English text is machine-assisted).
  • Inspired by / replaces (behavior reimplemented, no code reused): AchievementSync (LiveriaDevs), achievement guard.
  • Listed under Thunderstore's AI Generated category; tested in-game.
  • Source: Corresponding Source for this exact version, free of charge: https://github.com/ExtraPotions/Meadworks/tree/main/meadworks-crucible

Changelog

See the Changelog tab (CHANGELOG.md).

Credits and license

The shared interface kit and the build-menu folder, selection and drag code adapt PackPanel, ValheimModLibs and OpenKeep 3.0.0 by Gerald Glasgow (GPL-3.0-or-later); the notices are in THIRD_PARTY_NOTICES/.

Original code: GPL-3.0-or-later (Copyright (C) 2026 expDARE; see LICENSE-CODE.md and licenses/GPL-3.0.txt). Original documentation/artwork: CC BY-NC-SA 4.0 (see LICENSE-ASSETS.md). Complete terms are included in licenses/. External dependencies retain their terms.

Author: expDARE.

CHANGELOG

Changelog

Unreleased

  • Verify a saved setting with a targeted native-compatible readback instead of parsing every setting a second time. Initial disk parsing, unrelated saved values, forced flush, conflict detection and atomic publication remain unchanged.

  • Reuse request-router snapshots while membership is unchanged, avoiding per-frame copies of completed request history. Reentrant requests and session changes retain their existing dispatch and recovery behavior.

  • Crucible 0.3.31 always requires MeadWorks clients. The retired AllowVanilla setting is hidden; existing config values remain intact, with one startup diagnostic explaining that Strict applies.

  • Crucible 0.3.31 adds Debug-only timings for settings edits, including staging, parsing, saving, forced flush, conflict checks and readback.

  • Added prepared native TestBridge scenarios for Wildblood 0.5.7 boss abandonment, exact offering refunds, multiplayer contention, group deaths and reload identities. Native execution remains pending.

0.3.30 (2026-10-22)

  • Crucible 0.3.30; Crucible.UI stays at 0.3.21.
  • Setting help now resolves the owner of MeadWorks settings bound through embedded sync libraries. Mantle's Trinket Preset help fills in the three preset names instead of showing {0}, {1} and {2}. This text lookup leaves edit permissions, synchronization and saved values unchanged.

0.3.29 (2026-10-21)

  • Crucible 0.3.29, including Crucible.UI 0.3.21.
  • Korean text wraps at spaces. TextMesh Pro was breaking before every Hangul syllable, so a notice split words such as "요청하는". Chinese still breaks per character. English line breaks stay as they are. The same Hangul rule covers every wrapping label the kit draws.

0.3.28 (2026-10-21)

  • Thunderstore republish of the release 8 build; no code changes.
  • Includes Crucible.UI 0.3.20 (unchanged).

0.3.27 (2026-10-21)

  • Includes Crucible.UI 0.3.20.
  • The MeadWorks notice stack sits below the game's unlock and notice cards. A notice wraps to two lines and the card grows with the text. "..." is used only when a third line would be needed.
  • Notice cards measure the wrapped text in the game font. Chinese, Korean, and any other script get a second line when the message needs it, instead of a one-line card that cuts the rest off. A notice still stops at two lines, and "..." is used only when a third line would be needed.

0.3.26 (2026-10-21)

  • Includes Crucible.UI 0.3.19.

  • A required mod's version check uses the server's peer class. A joining client that marks that mod server-only in its answer is still refused when the major.minor does not match, and still admitted when it does. Strict admission, the Crucible hello, and the Jotunn mod-list check are unchanged. A slow join still waits on a busy send queue, then 60 seconds, and never longer than 5 minutes.

  • The vanilla refusal and welcome notices now include German, Russian, Chinese, and Korean on the same literal line as English, Spanish, and French. A vanilla client still has no Meadworks localization tokens. The server sends one center message.

  • A notice stack taller than the open gap between the compass and the hotbar shows only the cards that fit, and the rest wait with their timers held. The stack stays off the hotbar. A card wider than the screen shrinks to the side margins.

  • A slow join is no longer dropped while its first data is still queued. The server waits until that peer's send queue drops to 64 KB, then allows 60 seconds for the Meadworks answer, and never waits longer than 5 minutes from the greeting. A peer that never answers is still refused. One warning is written when the wait passes the old 30 second limit. The check that a client sent Jotunn's mod list or Crucible's hello before it spawns is unchanged.

  • Crucible.UI: MeadWorks TopLeft and Center notices stack in a Timber or Brown panel (newest on top, repeats collapsed with a count, overflow queued, each card fading on its own timer). The stack stays off the compass, the status-effect row and the hotbar, and it hides while a player window is open. Unlock and biome banners, the game's own messages, and other mods' UI are unchanged. Local settings, section Notices: Stacked Notices, Position, Duration and Maximum Visible. A mod that registers IKitNoticeProvider still owns presentation.

0.3.25 (2026-10-20)

  • Includes Crucible.UI 0.3.18.
  • Crucible.UI: faster inventory and crafting window. The screen layout no longer moves the crafting panel and the character header every frame. The inventory screen's animator puts their x back after every move, so the layout's x was never drawn and both panels, with every row and frame under them, were rebuilt each frame. An axis found back where it was is now left to the game until the inventory closes; the other axis is still placed. What is drawn is unchanged, apart from an occasional one-frame 24-unit jump at 1920x1080, which no longer happens.
  • Test bridge: the FPS bench's dirty tracker also records transform writes on the inventory screen's panels with their callers, and where the crafting panel and header are when the canvases render.

0.3.24 (2026-10-20)

  • Includes Crucible.UI 0.3.17.
  • Crucible.UI: faster inventory. The game-panel theme's Image.OnEnable hook checks its cached wood-sprite list before the native-menu ownership checks, which walk the hierarchy; an image that is switched on (an equipped marker, a HUD panel) no longer costs about 0.5 ms. Which panels are themed is unchanged.
  • Crucible.UI: the native-menu styling no longer reads the main menu's and pause menu's host fields every frame (twelve reflected reads plus a dictionary refill). It finds them in its 0.2 s refresh and, at most once a frame, when an image is switched on in a native menu. The open MeadWorks menu (F8 or Esc > MeadWorks) builds its product list fingerprint every 0.25 s instead of every frame (a few KB of garbage per frame); switching to a product's page still redraws at once. No visible change.
  • Test bridge: -FpsBenchPhases (PlayerLoop phase timer), -FpsBenchDirty <s> (UI rebuild tracker window) and -FpsBenchTimingGame (game methods timed inclusive of mod patches) for the FPS bench.

0.3.23 (2026-10-20)

  • Includes Crucible.UI 0.3.16.
  • Crucible.UI: the pause menu's MeadWorks entry now has the same wood button face and font as Continue, Save, Settings, Log out and Quit. The copied entry drops the inert parts of the native look it was copied with and carries its own.
  • Crucible.UI: closing the pause menu (Esc, Continue, the pad's B) also closes the MeadWorks menu left open over it. A window opened from the MeadWorks menu still stays open when the menu hides the pause menu for it.
  • Crucible.UI: option lists in MeadWorks menus (the choice dialog for list and flag settings, file actions, filters) show 10 options at once instead of 8; longer lists still scroll.
  • Crucible.UI: native settings toggle switches sit on the check box the game draws. Fullscreen, VSync and the other wide-box toggles no longer hide their switch behind the label.
  • Crucible.UI: a top-left message without an icon ("Stacked 3 items", "You can't do that") starts at its plate's left edge. It no longer keeps an empty icon column on its left, which read as right-aligned text. Messages with an icon keep the shared icon and text columns.
  • Crucible.UI: native menu switches and button faces write colors, sizes and positions only when they change. A disabled switch no longer changes color twice per refresh, and the shared fit helper no longer dirties an image when its scale is unchanged.

0.3.22 (2026-10-19)

  • Includes Crucible.UI 0.3.15.

Simpler in-game settings: setting tiers

  • Crucible reads each MeadWorks product's embedded <AssemblyName>.settings-tiers.json (also for products bound through Charter) and exposes the tier of every setting: Essential, Advanced or File-only (SettingTiers, SettingTierTable, SettingTierRules). Keys are Section/Key; * wildcards cover generated per-item rows, an exact key wins and the longest wildcard wins next. A product without the resource keeps every setting Advanced.
  • Crucible and Crucible.UI ship their own tiers. Crucible.UI's menu key, Styled Panels, Panel Theme, Screen Layout and Map Frames are Essential, so they appear on the Crucible page of the MeadWorks menu (F8). Logging, step-aside, schema and HUD layout records are File-only. No config key, default or authority changed.
  • StepAsideRegistry.Reports and MeadworksStepAside.Reports() list whole-product and per-module step-asides with product and source names, for Almanac's Compatibility list.

Styling leaves other mods' UI alone

  • Crucible.UI: Timber and Brown restyle only Valheim's own panels and MeadWorks windows. Panels other mods make with the game's wood art (Jotunn panels, any third-party UI) keep their own look, even under the game's canvases. The ownership rule is KitThemeRules.UiOwner, read at runtime by KitUiOwnership.
  • TestBridge: the Jotunn coexistence check now fails if the Jotunn panel's art changes under Timber or Brown.

Notice layout

  • Crucible.UI: while MeadWorks styling is on, achievement popups sit just under the compass. Popups that arrive together line up side by side; when the row is full, the rest wait in arrival order and show as places free up, so none is dropped or drawn over another. Their timers and unlock sound start when they appear.
  • Crucible.UI: the top-left message and the unlock cards ("New item", recipe, piece) start below the hotbar and share one left edge, icon column and text column.
  • Turning styling off puts every notice back where the game places it.

Parity gaps

  • Crucible.UI: the shared text editor can color its text (KitAlmanacMultiline.Highlight, drawn over the field's own text so caret, selection and wrapping are unchanged) and take one owner button through a new KitAlmanacTextEditor.Open overload with KitTextEditorOptions. The existing overloads are unchanged.
  • Crucible.UI: new KitAlmanacTable, a multi-column row editor beside KitAlmanacList; only Apply submits.
  • TestBridge: Kindle Virtual Workbench fixture (kindle.virtual-begin, -open, -off, -cleanup).

Batch 4B weather events

  • Add a cloud kit glyph, drawn like the snowflake, bolt and moon.
  • Add the shared read capability meadworks.weather.events.detail 1.0: the weather event with an open kind number and a name token. meadworks.weather.events 1.0 is unchanged.

0.3.21 - batch 4E gameplay fixes (2026-10-19)

  • Add admin-owned "Players may use" switches for cheat settings (default: admins only) and the shared check other mods use to honor them.
  • Settings audit: more shared settings apply live and report their owner.
  • Crucible.UI 0.3.14: native menu and tooltip appearance updates already in the workspace (achievements, feedback, variant and related native surfaces).

0.3.20 - current-build preview refresh

Release stamps and dependency floors for the tested current UI/settings work. This is an intermediate build; expanded 4D and queued 4E are not completed. Exact checks and known limits ship in installer build evidence.

0.3.19 (2026-10-18)

  • Add typed notice and dialog services with owned providers and native fallback, preserving callbacks and validation.
  • Add durable owned HUD layouts and an editor with drag, resize, nudge, undo, guarded attachments and automatic reset; preserve product visibility and background opacity.
  • Support live setting dependency descriptions and native key-conflict diagnostics through Almanac, plus shared structured tooltip content.
  • Apply the existing button look and reading font consistently, register HUD side plates centrally, and style native confirmation/text-entry hosts reversibly.
  • Migrate existing product confirmations and local feedback through the typed services; keep native absence behavior, fresh action validation and one-shot callbacks.
  • Expanded 4D qualification is pending. These shared services are independently implemented using existing MeadWorks art and native fonts.

0.3.18 (2026-10-18)

  • Coordinate selection between added crafting tabs sharing the native row, preventing overlapping mod panels.
  • Use the shared framed hover-tip presentation for mod controls, including pointer and gamepad focus.

0.3.17 (2026-10-17)

  • Save accepted own-value setting edits by default, including when automatic saving was disabled. Validate the saved value and report write failures.
  • Save only the edited setting against the existing disk configuration, preserving unrelated saved keys and keeping remote server values separate from local preferences.

0.3.16 (2026-10-15)

  • First release on Thunderstore.