Skip to content

Fix #393 dangling PAPGT entry after Rescan; fix #398 bundle ICU for Wine/Proton - #399

Merged
faisalkindi merged 2 commits into
masterfrom
fix-dangling-papgt-entry
Sep 2, 2026
Merged

Fix #393 dangling PAPGT entry after Rescan; fix #398 bundle ICU for Wine/Proton#399
faisalkindi merged 2 commits into
masterfrom
fix-dangling-papgt-entry

Conversation

@faisalkindi

Copy link
Copy Markdown
Owner

Two fixes, both from today's reports.

#393: game refuses to start after Rescan then Apply (delichandelarosse)

Rescan deleted leftover mod dir 0052 before hashing but never rebuilt meta/0.papgt, so the vanilla snapshot captured an index still listing 0052. The #383 rebuild then treated every snapshot entry as vanilla and restored 0052 on every apply ('[PAPGT] Missing directory 0052' x4), and the game showed 'There may be a problem with the game installation'.

  • rebuild: dangling entries in the mod range (0036+) are kept/restored only if their own flags say is_optional (2.0 language-pack placeholders); non-optional ones are dropped and never restored. Vanilla range < 0036 keeps the historical rule.
  • snapshot: new strip_dangling_entries() rebuilds the index after mod-dir removal and before hashing.
  • 5 tests incl. the exact poisoned-snapshot state.

#398: exe does not start under Proton (NonDScript)

Qt6Core.dll hard-imports icuuc.dll, a Windows system DLL Wine < 11.5 lacks. Bundle FaithLife-Community's ICU 72.1 (Unicode license, shipped) beside Qt6Core. Verified: all 20 Qt imports resolve, ucnv_open works standalone, built exe passes self_check, bundle contains PySide6/icu*.dll.

Full suite 3129 passed, 1 known machine-local failure. Canary on new game build 25050808: exit 0, every table decodes.

🤖 Generated with Claude Code

https://claude.ai/code/session_0171WFoHWQThdDZkKhrbnCGr

Rescan deleted leftover mod dirs before hashing but never rebuilt
meta/0.papgt, so the vanilla snapshot captured an index that still
listed the deleted dir (0052). The #383 rebuild then treated every
snapshot entry as vanilla and restored 0052 on each apply, giving
'[PAPGT] Missing directory 0052' four times and finally 'There may
be a problem with the game installation' at launch.

- rebuild: a dangling entry (no dir on disk) in the mod range (0036+)
  is kept or restored only when its own flags say is_optional -- the
  2.0 language-pack placeholders. Non-optional dangling entries are
  dropped and never restored from the snapshot. Vanilla range < 0036
  keeps the historical rule (a vanilla dir may legitimately be absent).
- snapshot: strip_dangling_entries() rebuilds the index right after
  mod-dir removal and before hashing, so the snapshot can no longer
  carry a leftover.
Qt6Core.dll hard-imports icuuc.dll, a Windows system component
(since Win10 1703) that Wine prefixes before 11.5 do not ship. Under
Proton the frozen exe died at startup:

  err:module:import_dll Library icuuc.dll (which is needed by
  ...\PySide6\Qt6Core.dll) not found

Bundle FaithLife-Community's ICU 72.1 build (Unicode license, text
shipped alongside; unversioned exports matching the Windows ABI)
next to Qt6Core.dll. Qt only uses ucnv_*, which needs no icudtl.dat;
all 20 imports resolve (pefile) and ucnv_open works standalone (232
converters). On real Windows the app-local copy takes precedence
with no behaviour change; self_check passes on the built exe.
@faisalkindi
faisalkindi merged commit 88349cb into master Sep 2, 2026
3 checks passed
@faisalkindi
faisalkindi deleted the fix-dangling-papgt-entry branch September 2, 2026 02:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant