Skip to content

Releases: jbowensii/MoriaModCreator

Moria MOD Creator v2.10.0

06 Apr 00:37

Choose a tag to compare

What's New in v2.10.0

Critical Bug Fix: Secrets Build Data Loss

Mods built with "Secrets of Khazad-dum" enabled were missing all base game content. The secrets pak is a full replacement pak — its DataTables already contain all game + secrets rows (e.g., DT_Weapons has 167 rows: 158 game + 9 secrets). Previous versions incorrectly stripped game rows before building, producing mods with only the new secrets content.

Simplified Secrets Import Pipeline

The import pipeline has been completely rewritten for simplicity and speed:

  • Import: Extracts secrets pak → converts ALL 232 files to jsondata_full/ (complete data) → copies to jsondata/ → strips game rows for UI display
  • Build: Phase B copies jsondata_full/ files over game files in staging — instant, no extraction needed
  • Removed: game pak copying (~15GB), merged extraction, manifest filtering, cross-reference step
  • Import now completes in seconds instead of minutes

Other Changes

  • CategoryFlags.json bundled in exe (fixes object editor category flags)
  • retoc to-legacy crash handled gracefully (partial extraction continues)
  • DT_Ores.def updated with PinkOpal MaxStackSize
  • Per-file progress UI during secrets filtering step
  • Code review cleanup: removed dead imports, pylint scores 9.98-10.00/10
  • Both exe and installer code-signed (SSL.com eSigner, John B Owens II)

Important: After updating, run a fresh Import to populate the jsondata_full/ directory. Subsequent builds use this cached data instantly.

Acknowledgements

Thanks to ChaosGodstone for reporting import issues and providing logs that led to discovering the data loss bug.


Full Changelog: v2.9.0...v2.10.0

Moria MOD Creator v2.9.0

29 Mar 14:42

Choose a tag to compare

What's New in v2.9.0

Bug Fixes

  • Secrets import crash fixed — Phase B1 retoc to-legacy no longer aborts the entire build when it encounters the asset_conversion.rs:1056 panic. The build now checks for partial extraction results and falls back to per-file extraction using --filter, so one incompatible asset doesn't block the rest.
  • CategoryFlags.json bundled — Object editor category flags now load correctly in the packaged exe. The docs/templates/ directory was missing from the PyInstaller bundle.
  • DT_Ores.def updated — Added PinkOpal MaxStackSize=9999 change.

Technical Details

  • Phase B1 fallback: extracts pak manifest, then runs retoc to-legacy --filter <stem> individually for each asset. Assets that crash retoc are skipped with a debug log entry.
  • Both exe and installer are code-signed (SSL.com eSigner, John B Owens II).

Acknowledgements

Thanks to ChaosGodstone for reporting the import issues and providing detailed logs that made these fixes possible!


Full Changelog: v2.8.0...v2.9.0

v2.8.0 — Ores Category, Display Names, Edit Persistence & Build Fixes

25 Mar 11:33

Choose a tag to compare

What's New

New Features

  • Ores category — 41 game ores (Stone, Iron, Gold, PinkOpal, etc.) as definition-only mode in Change Secrets & Constructions tabs
  • Display name resolution in Secrets tab — ported from Constructions view, plus TobiModsAddons string table extraction (~300 additional in-game names)
  • Edit persistence via edits.json manifest — user edits now survive force refresh and cache overwrites across sessions
  • Items category expanded — shows ALL DT_Items entries without requiring a matching DT_ItemRecipes entry; right pane conditionally shows recipe/definition sections

Bug Fixes

  • Fixed GameplayTagContainer diff emitting Tags.Tags dot-path instead of Tags, causing UAssetGUI FName[] conversion failure on DT_Ores.json builds
  • Fixed Tags save handler to properly split comma-separated tag values into arrays
  • Fixed COLOR_CHECKBOX_MIXED double-wrapped tuple causing tri-state checkbox rendering issues in the definitions list
  • Updated DT_Ores.def with PinkOpal MaxStackSize change

Build Artifacts

  • MoriaMODCreator.exe — standalone signed executable
  • MoriaMODCreator_Setup_v2.8.0.exe — signed installer (includes all bundled utilities, definitions, and prebuilt mods)

Both artifacts are code-signed by John B Owens II via SSL.com eSigner.

v2.7.1

15 Mar 23:25

Choose a tag to compare

Changes since v2.7.0

Secrets Build Pipeline — Fixed Import Index Crash

  • Phase B rewritten: Instead of merging secrets rows into game JSON (which dropped the Imports array and caused Bad import index fatal errors in-game), Phase B now extracts RtoMSecretsOfKhazaddum_NoFatStacks_P via retoc + UAssetGUI and overwrites game files in staging with the complete secrets JSON — preserving correct Import indices
  • Import pipeline: SecretsOfKhazadDum_Localization_P and TobiModsAddons_P are now skipped during retoc/UAssetGUI processing on secrets import — only RtoMSecretsOfKhazaddum_NoFatStacks_P is processed
  • Build output: When secrets are enabled, 4 passthrough files are copied as-is into the final mod:
    • SecretsOfKhazadDum_Localization_P.pak (localization text)
    • TobiModsAddons_P.pak / .ucas / .utoc (addon assets)

Signed Artifacts

  • MoriaMODCreator.exe — code-signed standalone executable
  • MoriaMODCreator_Setup_v2.7.1.exe — code-signed installer

Moria MOD Creator v2.7.0

15 Mar 18:37

Choose a tag to compare

What's New in v2.7.0

Bug Fixes

  • UAssetGUI NameMap crash — TextPropertyData TableId and Value FNames now synced to NameMap, fixing "dummy FName" crash on DT_Armor with Secrets overlay
  • Secrets merge NameMapmerge_secrets_rows now merges the secrets NameMap into the game file during Phase B
  • Material duplication — Recipe materials and definition repair cost no longer share the same list, preventing data corruption on save
  • Cache staleness_json_row_cache invalidated after every save so subsequent reads get fresh data
  • .def diff completeness — Tags (GameplayTags), TextPropertyData Value (string table keys), and new array elements are now properly detected and written to .def files

Improvements

  • VirtualScrollList rewrite — Row frames placed directly on canvas, eliminating blank space during scrolling. Rows 44px with font size 14 for readability.
  • FilterableComboBox — Replaced FocusOut close with click-outside handler, dropdowns no longer close prematurely in scrollable forms. Increased dropdown height to prevent last-item cutoff.
  • Prefix persistence — Secrets and Constructions prefix restored on app startup from current_prefix.ini
  • Cache performance_refresh_cache skips file copies when cache is already up-to-date (mtime check)
  • Form clearing — Right pane fully cleared when switching categories, preventing stale material/field carryover
  • Secrets .def output — All secrets build .def files now go to Definitions/Secrets/ directory

New Features

  • New Secrets directory — Object Editor (Create/Edit Secret) now reads/writes to New Secrets/jsondata/ instead of modifying Secrets Source originals
  • Raw JSON output — Each Object Editor save writes the individual row as {row_name}.json to New Secrets/Raw JSON/
  • Secrets import copy — Import pipeline copies jsondata to New Secrets after conversion
  • Repair Cost editing — Separate "+ Add Repair Material" button and row tracking for definition repair costs (weapons, armor, tools)
  • Build instrumentation — Detailed logging across all secrets build phases for crash diagnosis

Signed

  • Both MoriaMODCreator.exe and installer are code-signed (CN=John B Owens II)

🤖 Generated with Claude Code

Moria MOD Creator v2.5.0

14 Mar 14:34

Choose a tag to compare

Moria MOD Creator v2.5.0

Release covering all changes from v1.5 through v2.5.0.

Object Editor (New — Advanced Tab)

A full Create/Edit Secret tab for creating and editing DataTable objects directly in the Secrets Source JSON files.

Two-Pane Layout

  • Left pane: Browsable list of mod-only items per category (buildings, weapons, armor, tools, items, flora, loot) with type-to-filter search
  • Right pane: Structured forms matching the Secrets tab layout with labeled fields, dropdowns, checkboxes, and material rows
  • Base-game rows are automatically filtered out so only user-added objects appear

Per-Category Structured Forms

  • Buildings: Construction Recipe (placement, materials, unlocks, sandbox) + Construction Definition (actor, icon, tags)
  • Weapons: Item Recipe + Weapon Definition (damage, speed, durability, armor pen, stamina/energy cost, repair cost)
  • Armor: Item Recipe + Armor Definition (damage reduction, protection, repair cost)
  • Tools: Item Recipe + Tool Definition (durability, carve hits, mining rate, stamina/energy cost, repair cost)
  • Items: Item Recipe + generic Item Definition (portability, stack size, trade value)
  • Flora: Flora Definition only (growth timing, drop amounts, farming properties)
  • Loot: Loot Definition only (drop chance, quantity range, required tags)

New Object Creation

  • Template dropdown: Construction, Recipe, or Both
  • Construction: Renders blank recipe + definition forms with game-accurate defaults
  • Recipe: Blank item recipe form for weapons, armor, tools
  • Both: Shared Row Name field linked between construction recipe and definition sections
  • On save, rows are injected into Secrets Source JSON files (Architecture, Constructions, Recipes)

Editing and Management

  • Click any item to view/edit its properties in structured forms
  • Save writes edited values back to JSON with type conversion (int, float, bool, string)
  • Delete with confirmation (type DELETE to confirm)
  • Display names resolved from string table JSON files

Search and Replace

  • Search bar added to Mod Builder, Secrets, Constructions, and Object Editor right panes
  • Three modes: Search by Property names, Values, or Both via dropdown
  • Substring replacement: Replace matches within values (not full-value overwrite)
  • Replace All: Batch replace across all visible fields
  • Shared logic centralized in shared_utils.py

Create DEF Improvements

GameplayTagContainer Support

  • Comparison algorithm now detects GameplayTagContainerPropertyData changes (previously silently skipped)
  • Properly handles individual tag additions and removals within containers like ExcludeItems and AllowedItems
  • Set-based comparison: reports each added/removed tag individually

Full .def Syntax

  • <delete> elements for tag removals from containers
  • <change> elements for value modifications and tag additions
  • <change> with <add_property> for adding new properties
  • Handles SetPropertyData alongside ArrayPropertyData
  • Generic fallback for unhandled property types

Category Detection Fix

  • Category now derived from DataTable filename (e.g., DT_Storage -> Storage) instead of parent directory path (which was always "Items")
  • Complete mapping for 20+ DataTable names plus prefix fallbacks (GE_* -> Buffs, Curve_* -> Buffs, Properties_* -> Ores)

Build Manager Enhancements

  • <delete> handling widened to work on all GameplayTagContainer properties (not just hardcoded ExcludeItems/AllowedItems)
  • Runtime detection of GameplayTagContainers via $type, StructType, and inner Value markers
  • _is_gameplay_tag_container() method replaces hardcoded property name checks

UI Improvements

  • Batch rendering: 8 cards at a time with font caching for Mod Builder performance
  • Original Value field: Non-editable field showing the original value in Mod Builder change cards
  • Material rows: Lazy frame packing — empty materials section takes no space, expands on first "+ Add Material" click
  • Button ordering: Create/Edit Secret positioned between Secrets and Constructions tabs

Code Quality

  • Dead code removal: ~500 lines of unused methods removed across buildings_view, constructions_view, and object_editor_view
  • Removed unused imports: 7 unused imports cleaned up
  • Narrowed exception handling: Bare except catches replaced with specific exception types
  • Pylint score: 9.84/10 on object_editor_view, 9.97/10 on other modules
  • Comments overhaul: Redundant comments stripped, replaced with workflow-focused documentation
  • Application documentation: New docs/APPLICATION.md — comprehensive 16-section technical reference

Test Suite

  • 275 tests across 6 test files, all passing
  • 64 new tests added in test_main_window.py: definition XML parsing, original value lookup, search/replace semantics, version validation

Credits

  • Created by John B Owens II
  • Create DEF functionality by Sqitey
  • Co-Authored-By: Claude Opus 4.6

Full Changelog: v1.5...v2.5.0

Moria MOD Creator v1.5

11 Mar 00:24

Choose a tag to compare

Moria MOD Creator v1.5

Create DEF Tab (New)

A new Create DEF tab under Advanced mode enables automatic generation of .def definition files from IoStore mods.

IoStore Extraction Pipeline

  • Automatic extraction: Detects .ucas/.utoc IoStore mod files and runs the full conversion pipeline (retoc to-legacy → UAssetGUI tojson)
  • Persistent output: Extraction outputs are saved to retoc/ and jsondata/ subdirectories inside the Modded Files Folder (not a temp directory), so results persist for inspection
  • Global file resolution: Automatically copies the game's global.ucas/global.utoc for retoc name resolution

Comparison & DEF Generation

  • JSON diff comparison: Compares modded JSON against vanilla game JSON to identify changes
  • Automatic .def creation: Generates properly formatted .def XML files with correct <change>, <add_property>, and CDATA structures
  • Smart category detection: Uses the last path component (e.g., "Effects" from Moria\Content\Items\Effects\DT_ItemTint.json) for category assignment
  • Batch save: "Save All .def Files" writes definitions to the Definitions directory and generates a prebuilt .ini file

UI

  • Larger fonts: Log and Preview textboxes use doubled font size (22pt) for readability
  • Detailed logging: Full path logging for all save operations

New Mod Content

  • More Wardrobe Colors: Added 5 definition files for the "More Wardrobe Colors" mod (Effects category) and prebuilt .ini file
    • DT_ItemTint: EnabledState, Icon, RequiredMaterials, TintColor, TintName

Docs Cleanup

  • Removed legacy directory: Deleted docs/Ready Made Mods/ (replaced by docs/prebuilt modfiles/)
  • Updated installer zips: All 7 installer zip bundles regenerated with current content

Build Pipeline Fix

  • Dynamic installer version: build_release.py now reads the installer version from about_dialog.py instead of using a hardcoded value

Credits

  • Create DEF functionality by Sqitey — added to the About dialog credits
  • Co-Authored-By: Claude Opus 4.6

Full Changelog: v1.1...v1.5

Moria MOD Creator v1.2

10 Mar 14:36

Choose a tag to compare

Moria MOD Creator v1.2

Performance Improvements

  • Fast form display: Clicking items in the left pane now loads the right pane form significantly faster. Form rendering is deferred so the list highlight updates immediately, and the form is hidden during widget reconstruction to eliminate intermediate repaints.
  • JSON row caching: Game data JSON files are parsed once and cached in memory. Subsequent item clicks do a simple dict lookup instead of re-reading large files from disk. Cache is automatically invalidated on refresh.

Virtual Scroll List

  • Fixed blank list display: Resolved a Python 3.14 + CustomTkinter incompatibility where height and width arguments passed to .place() caused a ValueError. Widget dimensions are now set at construction time.
  • Full viewport coverage: The secrets/constructions list now fills the available height instead of showing only 5 items.
  • Eliminated white bar: Background color of the viewport frame now syncs with the canvas to match the current theme.

Import Pipeline Fixes

  • GitHub ZIP cleanup: The upfront cleanup phase now removes ALL ZIP files from Secrets Source, including the GitHub ZIP. Previously the GitHub ZIP was skipped, causing stale data on re-import.
  • Consistent ZIP cleanup: Both the combined import dialog and the Advanced path use the same cleanup logic.

UI Improvements

  • Blank prefix on startup: The "Change Secrets" and "Change Constructions" text fields now start empty until the user explicitly selects a prefix, instead of auto-loading the last used value.
  • Always-fresh cache on tab switch: Clicking category tabs (Buildings, Weapons, Armor, etc.) in both Advanced Secrets and Advanced Constructions now always refreshes the cache from source files.
  • DLC content support: Added DLC brew buff duration and book buff definition files (community contribution by Letimineur).

Code Quality

  • Pylint score: 9.97/10 (up from 9.77)
  • All 211 tests passing
  • Removed unused imports and overly broad exception handling
  • Updated in-code documentation for accuracy

Moria MOD Creator v1.1

19 Feb 23:09

Choose a tag to compare

What's New in v1.1

Bug Fixes

  • Fixed novice mode builds for all users — Prebuilt mod INI files previously contained hard-coded absolute paths from the developer's machine, causing "No valid definition files in selected mods" for every other user. Paths are now stored relative to the definitions directory and resolved against each user's actual AppData location.

  • Fixed UAssetGUI crash on add_property definitions — The NameMap synchronization now registers property names, struct types, array types, and map key/value types as FNames. Previously, definitions that added new properties (e.g. DropRate in ore definitions) would crash UAssetGUI with "Attempt to retrieve index of dummy FName".

  • Fixed encoding issues on non-English Windows — All subprocess calls now use explicit encoding='utf-8' with errors='replace', preventing crashes on systems with Cyrillic (CP866), Japanese (CP932), Chinese (CP936), or other non-UTF-8 console code pages.

Improvements

  • Added debug logging to novice build flow for easier diagnostics — logs which INI files are selected, how paths are resolved, and where definitions are looked up.
  • Replaced non-ASCII characters in log messages to prevent mojibake when viewing logs with non-UTF-8 text editors.

Files Changed

  • 17 files across production code, build scripts, and tests

Full Changelog: v1.0...v1.1

Moria MOD Creator v1.0

19 Feb 02:03

Choose a tag to compare

Moria MOD Creator v1.0

Constructions Tab

New dedicated tab for editing base game construction recipes, mirroring the existing Secrets tab functionality.

Features

  • Full construction editing: Browse, search, and modify all base game building recipes
  • Category sub-tabs: Buildings, Items, Weapons, Tools, Armor, Flora, Loot
  • Cached game data: Scans and caches game JSON files for fast browsing
  • Definition management: Create, edit, and build .def files for construction modifications

Filterable Dropdowns

All dropdown fields across both Constructions and Secrets tabs now support type-to-filter.

Features

  • Partial match filtering: Type any part of an option name to narrow the list
  • Case-insensitive search: Filters from the first character typed
  • Scrollable popup: Handles large option lists (100+ materials) with a scrollable dropdown
  • Keyboard navigation: Up/Down arrows to move, Enter to select, Escape to close
  • Arrow button toggle: Click the dropdown arrow to show all options
  • Drop-in replacement: Uses the same variable/values API as CTkComboBox

Free Building Helper

New utility to generate .def files that set all construction material costs to zero.

Output

  • Free Building.def: 1,295 material entries across 812 base game recipes
  • Free Building Secrets.def: 297 material entries across 179 Secrets-only recipes
  • Output location: %AppData%/MoriaMODCreator/Definitions/Building/

Usage

python helpers/freebuildinghelper.py

Installer Improvements

Expanded installer to ship constructions and secrets data alongside existing bundles.

Changes

  • 7 zip bundles: Added changeconstructions.zip and changesecrets.zip to the installer
  • changeconstructions: Ships prefix directories with .ini files and .def definitions
  • changesecrets: Ships both Axbeard Secrets and Mereaks Secrets prefix data
  • New AppData directories: Installer creates cache/constructions, cache/game, cache/secrets, and changeconstructions
  • Inno Setup path: Build script now finds Inno Setup in user-local install path

AppData Cleanup Tool Updates

Enhanced the cleanup utility with new targets for the expanded directory structure.

New Cleanup Targets

  • Cache directories: cache/constructions, cache/game, cache/secrets (~200 MB of cached JSON)
  • Change set intermediates: JSON build files in changeconstructions/ and changesecrets/ (preserves .def files)
  • New Objects build cache: New Objects/Build/ intermediates
  • Refactored: Extracted scan, summary, and execution into separate functions (pylint 10.00/10)

Novice Mode Improvements

  • Prebuilt mod list now includes 16 INI files (up from 14)
  • Updated Definitions bundle with 107 definition files including new Free Building .def files

Code Quality

  • New FilterableComboBox widget: src/ui/filterable_combobox.py
  • New constructions_view.py: Full constructions editing UI (~7,000 lines)
  • Removed unused imports and dead code from main_window.py
  • All modified files pass pylint with scores 9.55+

Files Changed

  • 17 files changed: 8,221 insertions, 209 deletions
  • 4 new files, 2 new installer zip bundles

Full Changelog: v0.9...v1.0