mirror of
https://github.com/rehan-remade/universal-modder.git
synced 2026-11-05 01:37:40 +00:00
[PR #154] [MERGED] um: UTF-8 console output, nested-exe fingerprinting, ZenGin (Gothic 1/2) detection + playbook #167
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
rehan-remade/universal-modder#167
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/rehan-remade/universal-modder/pull/154
Author: @Alistair-Afton
Created: 10/8/2026
Status: ✅ Merged
Merged: 10/10/2026
Merged by: @rehan-remade
Base:
main← Head:um-windows-fixes-zengin📝 Commits (5)
620d3f5um: UTF-8 console output; fingerprint exes in subdirsaedd0f2scan: don't take deep tooling jars as the game's engineb805f9cscan + playbooks: detect ZenGin (Gothic 1/2), document the Union stack959f05dscan + zengin playbook: review fixes150f7a0Merge remote-tracking branch 'origin/main' into land/pr-154📊 Changes
9 files changed (+486 additions, -9 deletions)
View changed files
📝
.agents/skills/mod-any-game/SKILL.md(+1 -1)➕
.agents/skills/mod-any-game/references/engines/zengin.md(+125 -0)📝
.claude/skills/mod-any-game/SKILL.md(+1 -1)➕
.claude/skills/mod-any-game/references/engines/zengin.md(+125 -0)📝
skills/mod-any-game/SKILL.md(+1 -1)➕
skills/mod-any-game/references/engines/zengin.md(+125 -0)📝
tests/test_um.py(+81 -4)📝
um/cli.py(+6 -0)📝
um/scan.py(+21 -2)📄 Description
Summary
Three Windows-field fixes and one engine addition, all hit while modding real installs:
um/cli.py):kb showandwin pscrashed withUnicodeEncodeErroron cp1252 consoles whenever a note or window title hadnon-ASCII text.
main()now reconfigures stdout/stderr to UTF-8(
errors="replace"), soPYTHONUTF8=1is no longer needed as a workaround.um/scan.py): only top-level*.exefiles werefingerprinted, so games whose exe lives in
system/(Gothic),bin/, etc.scanned with an empty executables list and missed managed-exe detection.
Now takes the 12 shallowest exes, skipping redist/installer dirs.
um/scan.py): a dev workspace inside the install(e.g. a bundled Ghidra tree) put
*.jarfiles in the index and misdetected anative game as "Java [60%]". Only jars at root or one level down count now.
"unknown native engine". Adds the
system/gothic*.exe+data/*.vdfsignature, a
zenginengine entry, KNOWN routes for Gothic 1/2 (including therequired GOG 2.7 → 2.6.0.0-rev2 exe swap for Union/GD3D11), and a new
references/engines/zengin.mdplaybook covering the Union plugin SDK,GD3D11, ZenKit VDF/ZTEX/MDH extraction, engine coordinate conventions, and
the circulating source-tree caveat.
Verified on the real installs:
Gothic 2 Goldnow reportsZenGin (Gothic 1/2) [95%]with the Union route, andMight and Magic 6correctly reports a native engine instead of Java.
Test plan
uv run --with pytest pytest -q tests— 82 pass, incl. 4 new regressiontests (nested exe, redist skip, deep-jar rejection, cp1252 console)
um scanon real Gothic 2 Gold and MM6 installs (see above).agents/skillsand.claude/skillscopies ofzengin.mdkept in sync(tree-parity test passes)
Generated with Devin
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.