Your openmw.cfg
Optional. Read first; everything dream-ini does not import stays as it was.
Tool active
Import Morrowind.ini into openmw.cfg: a command line, a desktop and handheld GUI, and a Rust and Luau library.
Morrowind.ini is where a Morrowind install keeps what the engine reads at startup: the load
order, the archives, and hundreds of values for weather, water, moons, fonts and the level-up
screen. OpenMW reads none of it. It reads openmw.cfg.
dream-ini moves one into the other. Point it at your Morrowind.ini, and at your openmw.cfg if
you have one, and it writes the cfg OpenMW needs: every archive and content file found in your
Data Files, the content in the order Morrowind.exe would load it, and the INI’s settings as
fallback= lines. Everything in your cfg that it does not import stays exactly as it was,
comments included.
The command line, the GUI and the library all run the same importer: Morrowind.ini and an optional openmw.cfg in, an openmw.cfg out.
The load order, the archives, the weather, the fonts: the settings Morrowind.exe reads at startup.
Finds every archive and content file in your Data Files, orders the content as Morrowind.exe does, and rewrites only the keys it imports.
content=, fallback-archive=, fallback= and data= lines, written into your existing cfg with its comments kept.
Optional. Read first; everything dream-ini does not import stays as it was.
A command line, a desktop and handheld GUI, and the importer as a Rust crate and a Luau module.
It is a reimplementation of OpenMW’s mwiniimporter, in Rust, with a GUI that works with a mouse,
a keyboard or a controller, on the desktop and on handhelds. Where it behaves differently from the
C++ tool, it is on purpose, and written down.
dream-ini --ini "Morrowind/Morrowind.ini" --cfg ~/.config/openmw/openmw.cfg --game-files --in-place
Run it with no arguments and you get the same import as a window:
@dream/ini.Program · 1.0.1
dream-ini, or dream-ini.exe on Windows. From a terminal, dream-ini --help lists what it can do.Then the documentation takes it from there.
cargo install dream-ini
Cargo builds the program from source and puts dream-ini on your PATH.
Give the tool this page's address, or the manifest directly. It finds the release for its channel, checks compatibility and dependencies, downloads from any listed source and refuses bytes whose SHA-256 does not match.
On Linux and Windows, dream-ini install-launcher adds Dream INI to your application menu, with
its icon.
Unzip the archive anywhere and run dream-ini. With no arguments the desktop builds open the
GUI; with --ini they import from the command line. The Android build is the command line only.
On muOS, copy dream-ini-Portmaster-ARM64.muxapp to the ARCHIVE folder on your SD card and
install it from the Archive Manager. It appears in Applications as Dream INI.
Start here walks through a first import.
Built on l3i 1.1.0.
@dream/ini module is unchanged.Check it yourself: sha256sum dream-ini-Windows-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-macOS-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-macOS-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Linux-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Android-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Portmaster-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Portmaster-ARM64.muxapp must print the digest above.
First stable release: the Luau API is an l3i extension providing @dream/ini, a large import takes milliseconds instead of a fifth of a second, and the Rust and Luau APIs are under semver.
luau feature (lua still works) makes the crate an l3i extension, luau::IniExtension, providing the module @dream/ini. lua::create_module and lua::register are gone with mlua.luau feature needs l3i’s toolchain: clang, lld and cross-language thin LTO.parseIni accepts a Luau buffer, and an unknown option’s error names the function and lists the known keys.@dream/ini function has a Luau type, part of the plan’s generated definitions; the definitions check and the strict script build behind the test-only luau-analysis feature.data= directories are resolved once per import: the benchmark install imports in 4.9 ms instead of 206 ms.dataDirs and every multimap argument are walked in place through l3i’s table option reader and array visitor, one element on the stack at a time and nothing pinned, and the game and encoding options are inspected without a copy. A dataDirs element that is not a string is reported as ini.importMaps.dataDirs[2]: expected a string, got number, and a dataDirs that is not a table as ini.importMaps.dataDirs: expected an array of strings, got string.resources= no longer adds a data= line for resources/vfs, one more on every import.importMaps, and import_maps in Rust, write encoding= as a path import does, so the Luau encoding option is no longer ignored.Compose dream_ini::luau::IniExtension into the host’s l3i RuntimePlan. A host that still wants
the dreamIni global adds RuntimePolicy::compat_global("@dream/ini", "dreamIni"). Scripts that
pass numbers in multimaps must pass strings. Embedding Luau has the setup.
Check it yourself: sha256sum dream-ini-Windows-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-macOS-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-macOS-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Linux-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Android-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Portmaster-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Portmaster-ARM64.muxapp must print the digest above.
The Lua API runs on Luau with camelCase names, and dream-ini is MIT OR Apache-2.0.
mlua 0.12, with standalone-lua building a vendored Luau, and every Lua name is camelCase: importPaths, gameFiles, dataDirs. Unknown options are errors.Check it yourself: sha256sum dream-ini-Windows-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-macOS-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-macOS-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Linux-X64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Android-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Portmaster-ARM64.zip must print the digest above.
Check it yourself: sha256sum dream-ini-Portmaster-ARM64.muxapp must print the digest above.