Repository navigation
Conversation
…lder Add the desktop Flutter builder (Linux and Windows) with BLoC state, a game launcher with profiles, version pinning, gamescope options and a launcher rebuild action. Port the open builder fixes into the shared engine: damaged-file notes and stop, UTF-8 cache stamps, scoped cleanup, comma-safe linker options, repository-relative updates, CPU-aware shader prep, the AppImage PPA retry and profiles. Add game-free tests for each.
|
@dazemc Hey! This is great work. We are having discussions of replacing the builder UI with a 'launcher', with a cross-platform tool, similar to this. Please join the Discord and join the conversation! |
|
Thanks for linking the existing fixes. I maintain #2096, #2250, #2367 and #2406; there is useful overlap in the shared engine. A few integration points from
Could we coordinate the launcher direction with #2373 in the Discord discussion, while keeping engine fixes independently reviewable? I also have the requested workarea/scroll fallback and live release-label checks locally; I'll hold separate UI publication while that direction is being agreed. |
|
Hey, because of the launcher work in #2373, which will replace this UI completely and will use Avalonia (agreed to in Discord), I am going to close this. Thank you again for your contribution! |
Why
Hookshot has two builder GUIs — Tk on Linux, WPF on Windows — with duplicated build, update, launcher and save logic. They drift: a fix or a profile lands in one and the other keeps its old behaviour. This PR adds one desktop Flutter builder for both systems, built on
flutter_blocand the existing Slate look, and ports the open builder fixes into the shared engine so the same behaviour is tested without a game.The game never leaves the PC: every build, run and test below used the local dump only; no game file or anything made from it is in this branch.
What the Flutter builder does
@@parsers.nx2/profiles.py; the game validatesHOOKSHOT_PROFILEagainstprofiles.txt;scripts/oot_saves.pyfills a new profile's save folder.hookshot-launchpasses the saved profile.gamemoderun, and extra arguments (the Steam-style-W 3840 -H 2160 -r 164 -f --hdr-enabled --force-grab-cursor --rt -- %command%is covered). Already inside gamescope: started directly.hookshot_damaged_files.txtis written beside the game and both old/new note names are cleared on a clean check.Ported into the shared engine
-Xlinker(comma-safe build paths).Benefits over the split codebases
@@parsersScreenshots
Linux, from this branch:
Windows 11 26H2 in a VM,
flutter build windows --debugfrom this branch:Testing
Linux (CachyOS, RX 7900-class, real 25.6 GB dump):
5a3c9e1f0b7d24680000000000000002selected;hookshot_log.txtsaysaccount: profile 5a3c9e1f0b7d24680000000000000002.gamescope -- /home/.../hookshotobserved; game precompiled 10,956 programs / 15,330 pipelines.Windows 11 26H2 VM:
flutter build windows --debugsucceeds (Visual Studio Build Tools 17.14, Windows SDK 10.0.26100).python.exe(%LOCALAPPDATA%\Programs\Python\Python312), profiles load, and free space reads correctly; gamescope is absent as intended.Checks:
python -I -B tests/run_all.py: 368 passed, 10 skipped, 1 failed —tests/test_updater_asset_digest.pycannot resolve .NET 8 reference packs in this environment (pre-existing).dart analyze lib test: clean.flutter test: 40 passed.flutter build linux --debugandflutter build windows --debug: succeed.Follow-ups (not this PR)
nx2engine/toolchain and the built game; the header now labels the builder (Builder 1.0.0) and tools separately, but the release/update pipeline still uses one tag.tar.exefallback) and Shader prepare time #2218 (shader preparation time on slow AMD drivers).Closes #2237, #2246, #2142, #2257, #2242, #2129, #1388, #2287 (launcher rebuild), #1958, #1414, #2275, #1759, #2160, #2159, #2150, #2141, #2201, #2254, #2253, #2250, #2137, #2096, and #2045 item 3. #1002, #1700 and #2005 are the damage evidence this warning path is for.