zenFix is a batch utility for inspecting and fixing broken or inconsistent data in Gothic .ZEN world files.
It helps with routine modding cleanup: scanning invalid item instances, preparing replacements, applying fixes, validating containers, and converting ZEN files between game versions.
- Python 3.11+ recommended (uses built-in
tomllib) - Dependencies:
pyfigletcolorama
Install dependencies:
pip install pyfiglet colorama- Run
python zenFix_main.py. - Put uncompiled
.ZENfiles intozenFix_Input(or change[directories].inputinconfig.toml). - Use the menu options to scan, generate replacements, and apply fixes.
- Collect outputs from
zenFix_Outputand generated fix/list files fromzenFix_Instances(or use your configured directories).
The tool auto-creates these folders on startup:
zenFix_Input? source ZEN fileszenFix_Output? processed and converted output fileszenFix_Instances? broken instance lists and replacement mapszenFix_Broken? auxiliary files for broken data workflowszenFix_Log? action logs
- About
- Shows project information and repository link.
- Validate Scripts
- Debug/helper action to confirm script path loading and how many valid item instances are currently available.
- Scan Broken Instances (single ZEN / all ZENs)
- Scans
oCItemblocks and writes broken instance names into*_instanceList.txtfiles in the configured instances directory.
- Scans
- Prompt Replacements (single list / all lists)
- Opens previously generated
*_instanceList.txt, asks for replacements, and writes*_instanceFix.txtmaps.
- Opens previously generated
- Fix Specific Instance (single ZEN / all ZENs)
- Applies one chosen replacement entry from fix maps.
- Fix All Blocks (single ZEN / all ZENs)
- Applies all replacements from available
*_instanceFix.txtfiles.
- Applies all replacements from available
- Batch Fix
- End-to-end flow: scans all ZENs, prompts replacements for all found broken instances, then applies fixes across files.
- Check Containers (single ZEN / all ZENs)
- Validates
contains=string:entries, cross-checks instances against loaded scripts, prompts fixes, and rewrites corrected files.
- Validates
- Check Chest Visuals
- Detects chest visual/lock mismatches and missing lock/key data that can make containers unopenable.
- Check oCMOB focusName
- Validates
focusName=string:values inoCMOBblocks against loaded script tokens and writes a report to the configured output directory. - Optional repeat-family check flags variants such as
MOBNAME_GRAVE*(e.g.MOBNAME_GRAVE,MOBNAME_GRAVE_01,MOBNAME_GRAVEA).
- Validates
- Check MOBNAME duplicates by configured prefixes (all ZENs)
- Scans all input ZENs for duplicated
focusNamevalues that start with configured prefixes fromconfig.toml([focus].name_prefixes). - Writes a consolidated report to
<output>/FocusNamePrefixDuplicatesReport.txt.
- Scans all input ZENs for duplicated
- Count zCVob Visual Usage
- Counts
zCVobvisual=string:usage whereshowVisual=1, with optional visual-name filtering, and writes a report to the configured output directory.
- Counts
- Convert ZEN between Gothic versions
- Uses GothicZEN to convert compiled ZEN files between Gothic versions.
The tool now uses a layered TOML configuration with defaults and optional feature toggles:
[paths]for external tools/scripts (scripts,gothiczen).[features]to enable/disable menu workflows (batch_fix,container_check,chest_validation, etc.).[focus]and[chests.visual_map]for rule lists and mappings.[directories],[validation],[history], and[logging]for runtime behavior.
chest_visual_map.json has been folded into [chests.visual_map] in config.toml.
Example:
[paths]
scripts = "D:/Gothic Scripts/.../Content/Items"
gothiczen = "D:/Gothic Tools/GothicZEN/GothicZEN.exe"
[focus]
name_prefixes = ["MOBNAME_GRAVE", "MOBNAME_CHEST"]
[chests]
validate_visuals = true
auto_fix_wrong_locked_visuals = false
[chests.visual_map]
CHESTBIG_OCCHESTLARGELOCKED.MDS = "CHESTBIG_OCCHESTLARGE.MDS"
[directories]
input = "zenFix_Input"
output = "zenFix_Output"
instances = "zenFix_Instances"
broken = "zenFix_Broken"
logs = "zenFix_Log"- Scan Broken Instances (all ZENs)
- Prompt Replacements (all lists)
- Fix All Blocks (all ZENs)
- Optional: run Check Containers and Check Chest Visuals
- Optional: run Count zCVob Visual Usage for visual audits
If you prefer one-click processing, use Batch Fix.