Skip to content

Convert Pathfinder extensions to GDL + portrait support#23544

Closed
halgari wants to merge 9 commits into
halgari/games-to-gdl-1from
halgari/pathfinder-to-gdl
Closed

Convert Pathfinder extensions to GDL + portrait support#23544
halgari wants to merge 9 commits into
halgari/games-to-gdl-1from
halgari/pathfinder-to-gdl

Conversation

@halgari

@halgari halgari commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Converts the Pathfinder: Kingmaker and Pathfinder: Wrath of the Righteous game extensions to the Game Description Language (GDL), and adds portrait support to both.

What's here

  • Convert Pathfinder: Kingmaker to GDL — declarative extension definition replacing the imperative JS.
  • Convert Pathfinder: Wrath of the Righteous to GDL — same treatment.
  • Portrait mod type + installers — adds a dedicated portrait mod type and the installers that route portrait mods to the correct game directories.
  • Full portrait coverage + voice routing — completes portrait handling and wires up voice routing for both Pathfinder titles.
  • Bumps the game-description-language submodule for setup.requireFiles.
  • Design + implementation-plan docs for the conversion.

Dependency

Depends on #23536 (Convert X Rebirth to the Game Description Language).

This branch is stacked on top of halgari/games-to-gdl-1, so the PR is based on that branch and the diff shows only the Pathfinder-specific changes. Once #23536 merges to master, this PR should be retargeted to master.

Testing

  • pnpm build passes (build, lint, typecheck across all projects).
  • App launches and loads the converted Pathfinder extensions.

halgari added 9 commits June 17, 2026 18:37
Replace the imperative index.js with a declarative game.yaml. Drop the
modtype-umm dependency, registry probe, Bluebird, and platform guards.
UMM presence is checked via the new setup.requireFiles block, which prompts
the user to the Unity Mod Manager page when the loader is absent.
Replace the imperative index.ts with a declarative game.yaml. Drop the
modtype-umm/ummAddGame integration, move version detection to a declarative
discovery.version (Version.info) block, and add the setup.requireFiles UMM
prompt. WotR no longer auto-downloads UMM (accepted regression).
Records the GDL submodule at the setup.requireFiles feature commit, which the
two Pathfinder game extensions depend on. Also commits the lockfile change for
the @vortex/extension-test-mocks devDependency the converted games added.
Character portraits deploy to the user's LocalLow Owlcat profile, not the
game's Mods folder. A portrait folder is recognised by the Small + Medium +
Fulllength PNG trio. Two installers route them: portrait-collection strips a
top-level Portraits/ wrapper for multi-portrait packs, and portrait takes a
single portrait folder. UMM code mods (.dll) and in-game asset-bundle
replacements are excluded so they keep their existing deployment.

Also enable corpus testing (tests.corpus: nexus), now that the extensions have
installer rules worth exercising. Verified against the live Nexus corpus: 85
of 247 Kingmaker mods and 106 of 235 WotR mods route to the portrait types,
with zero failures and the excluded shapes correctly left to default.
Reintroduce src/hooks.ts with two install hooks:

- installPortrait deploys every portrait folder (the Small/Medium/Fulllength
  PNG trio) as Portraits/<name>/ under the user's LocalLow profile. One hook
  covers single-folder, multi-portrait Portraits/ wrappers, and loose-at-root
  archives (synthesising a folder name) at any nesting depth, replacing the
  earlier declarative portrait installers.
- installVoice flattens Wwise .bnk soundbanks into the game's audio folder via
  a new voice mod type. Packs bundling multiple variants of the same bank deploy
  to Mods/ unchanged, since an installer cannot pick a variant.

Verified against the live Nexus corpus with zero failures: Kingmaker routes 95
portrait and 15 voice mods, WotR 120 and 10. UMM code mods and asset-bundle
replacements stay excluded. Hooks are unit-tested for every shape.
@halgari

halgari commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

Closing this PR but keeping the branch: we're repurposing halgari/pathfinder-to-gdl to convert as many game extensions to GDL as cleanly map over, not just Pathfinder. Work continues on the same branch (9 games converted so far, plus GDL discovery support).

@halgari halgari closed this Jun 22, 2026
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