Skip to content

Kiln 0.2.0-dev.22

Pre-release
Pre-release

Choose a tag to compare

@frostdev-ops frostdev-ops released this 10 Nov 21:31
92a3697

Kiln 0.2.0-dev.22

This build is about mods that did not load. Players reported that mods made for other frameworks were refused by the Library, were invisible in the launcher, or sat in a profile and never ran. It also adds a mod manager inside the game, takes a 48 GiB read out of the first start, and makes the launcher lighter.

Players and server owners

  • The Library takes mods the way they are shared. An EML mod with the id HoardersHelper was refused as "not a valid mod id"; such ids are the normal case. A mod for another framework now keeps its files as they are and gets a Library id made from its own id. ShroudForge packages with upper case in their id are accepted the same way.
  • 7z and rar. 7z archives are read directly. rar needs a tool already on your PC (unrar, 7-Zip, bsdtar or Windows' tar); without one the launcher says to extract first.
  • Packages shaped like the game folder (a mods folder with a loader DLL next to it) import as their mods. A bundled loader Kiln does not need is one note, not an error. A dinput8.dll or winmm.dll mod with its .ini and data files stays one mod with all its files.
  • Mods in the game folder are listed. The profile's Mods and Engines tabs show "In the game folder": every mod you extracted there, whether it loads with this profile, and why not. One button adds it to the profile, or switches that framework's drop-in folder on. Your files are never moved or deleted.
  • Drop-in switches for every framework. Profile settings have a switch for EML, ShroudForge, Greeneye, Flame, Shroudtopia, Enshwick and shroudlink next to Kiln's four. Every framework follows its switch the same way now.
  • A profile's mods load whichever loader runs. If EML's own dbghelp.dll (or another framework's own loader) is in the game folder, that loader runs the mods and never looks into Kiln's Library, so profile mods of that framework did not run at all. While such a loader is installed, the launcher now copies the profile's mods into the folder it reads, and removes its copies again when the loader is gone. A mod never runs twice. When a mod cannot load for this reason, kiln.log has a warning and the launcher's engine row says so.
  • shroudlink's in-game MODS tab. The launcher took shroudlink's client addon (its dinput8.dll) for a loader it does not need and left it out, so the tab never appeared. The addon is now added as a mod of its own; shroudlink's core is still not needed, because Kiln runs it.
  • SET mods load again with C# mods on. kiln-set mistook Kiln's own in-game mod list for SET's runtime and stood aside.
  • Under Proton without a DLL override, a framework's loader file in the game folder does not run. Kiln used to step aside for it anyway; it now checks that the file really is the loaded code and runs the mods itself.
  • The first start no longer reads all game data. With EML mods and no cache, kiln-eml read every game file (about 48 GiB on a full install) before the game started, with nothing on screen. Unchanged files are now recorded by their change stamp. A start that was closed half way continues. A small window shows progress when the step takes longer than two seconds, and the Play page shows the same.
  • Mod manager in the game. MODS in the game's main menu opens a full page listing the mods of every framework, their state and reasons, with search and a filter for mods that need attention.
  • Support report. Logs has "Save report": one zip with the logs, state files and a summary in plain sentences. Your user name, home folder, machine name, Steam ids, IP addresses and tokens are removed. Saves, worlds and mod contents are never read. kilnctl report does the same for a server.
  • Non-ASCII paths. With a Cyrillic, Chinese or accented Windows user name or game folder, kiln-quests crashed at boot, SET mods did not load and build regions were not saved. Fixed.
  • Native Windows dedicated servers: new items and recipes register again (GitHub issue #14, "near memory: nothing free within 2 GB").
  • Reinstall keeps your profile. After uninstalling and installing Kiln again, the profile you used is active again, and a dropped mod goes into it.
  • A lighter launcher. Next to a running game the launcher's backend used about 50 ms of CPU per second; it now uses 1 to 8. The first status check after a start took 1.2 s and takes 0.05 s. While the window is not focused, it checks every 30 s.
  • Steam Deck: the Downloads list shows .7z and .rar files too.

Mod authors

  • Mods of data only. entryAssembly in kiln.mod.json is optional: a folder with the manifest and content/*.json is a mod with nothing to run. It has its place in the load order and its packs apply. An empty entryAssembly is still refused, and a code project without one still fails the build (KILN001).
  • State words. A framework plugin that steps aside lists the profile's mods in its state file as own-loader (the framework's own loader runs Kiln's copy) or not-loaded (with a reason). schema/state-eml.schema.json describes eml.json, including phase: "running" with a progress object while the pre-start step runs.
  • kiln.progress, a core service: a small native window with a line of text and a bar for work before the game's window exists. It never takes focus and does nothing on a server or with KILN_UI_DISABLE=1.
  • kiln.ui v3 and v4: layout slots for full pages (font size, child flags, cursor and item queries, layers, keys), and the main-menu page (ui.menu_page).
  • Kiln's marker .kiln-library.json in a framework's folder marks a copy the launcher placed for that framework's own loader. Drop-in scans skip a marked folder when the profile lists the same mod.
  • Launcher commands: found_scan, found_add, report_save, report_summary, launch_prestart. profile_activate and profile_active return ownLoaders; engine_status returns ownLoader.
  • kiln/state/library-placements.json is the only proof that a placed copy is Kiln's. A marker shipped inside an archive grants nothing.

Breaking and behaviour changes

  • Drop-ins. With an active profile, a framework's own folder is read only when the profile's dropins is true or a list naming that framework. Before, Greeneye, Flame, Shroudtopia, shroudlink and Ember read their folder whenever the profile had no mod of that framework, and Enshwick's loader ran for every hand-installed folder. Profiles made before this build keep loading what they loaded: the launcher writes those kinds into the list. A profile.json written by hand without them stops loading those folders.
  • kiln-shroudforge hosts ShroudForge for the packages in its mods folder when ShroudForge drop-ins are on, not only for a profile's ShroudForge mod.
  • Play-once with another profile is refused for a framework whose own loader is installed when that profile's mods of the framework differ: the loader's folder is fixed for a start. The message says to activate the profile.
  • While the launcher window is not focused, it refreshes every 30 s. Events from the game still refresh at once.
  • Mods of other frameworks are listed in the Library under an id in lower case; the mod's own id is shown next to it.
  • eml.json can say phase: "running". With phase: "aside" its mods list is no longer empty.

Client checklist

Only a real client, a Steam Deck or a Windows PC can confirm these.

  • Windows with EML's dbghelp.dll in the game folder: add an EML mod through the launcher, activate, start. The mod runs once. kiln/state/eml.json lists it as own-loader, and mods/<id>/ holds Kiln's copy. Remove dbghelp.dll, activate again: the copy is gone and the mod still runs once.
  • Steam Deck or Linux with ShroudForge's dbghelp.dll and no DLL override: profile mods run (kiln.log says the folder's loader is not the loaded code).
  • The first start with EML mods on a real install takes seconds, not minutes. The progress window appears only when the step takes longer than two seconds, never takes focus, and is gone before the game's window.
  • MODS in the main menu opens the mod manager; leaving returns to the menu.
  • Drop a .7z, a .rar and a game-folder-shaped zip on the launcher: the result line and its Details view read well.
  • A profile's "In the game folder" list matches what is in the folder; both buttons work.
  • shroudlink in singleplayer: drop its singleplayer zip on the launcher, start, and the MODS tab opens and lists the mods.
  • A Windows user name with non-ASCII letters: kiln-quests starts, a SET mod loads, a build region survives a restart.
  • A native Windows dedicated server: a mod's new item registers (issue #14).
  • Save a support report and read summary.txt: nothing private is left in it.
  • Uninstall Kiln, install it again: the same profile is active and mods load.

Known limits

  • Nothing in this build was run on Windows, on a Steam Deck or in a real client. It was tested with unit tests, Wine host tests with stand-in loader DLLs, and dedicated-server labs under Wine. One lab run used a real ShroudForge loader build.
  • The copies for a framework's own loader are made when a profile is activated. If you install such a loader afterwards, activate the profile again.
  • shroudlink's and Ember's own loaders cannot read Kiln's layout: with one of them running, a profile's mods of that framework do not load, and the state file says so.
  • Enshwick's own loader may see a mod that was copied while it was already running only from the next start.
  • The header check that tells Wine's builtin DLL from a framework's loader assumes the loader leaves its own image header in memory.
  • exFAT and FAT game folders still read every game file at every start with EML mods; they now show progress.
  • The byte counts for the EML start are measured on a synthetic 55-file data set, not on a real 48 GiB install.
  • rar needs an external tool. A password-protected or split archive is refused with a message to extract it first.
  • Nexus Mods holds the Windows launcher, the server pack, the SDK and the runtime for review after its automated checks, as it did for dev.21. Until that review is done, get those files from frostdev.io or GitHub.
  • The limits listed for dev.21 still apply.