feat(launcher): the Longshot Launcher, ported from Hookshot's launcher and renamed #12
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
needs measurements
question
testing wanted
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!12
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/Longshot:feat/launcher"
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?
Longshot has no launcher yet, so players would still get the 2.x Builder. This brings over Hookshot's 3.0 launcher and renames it to Longshot, so that the next release can ship it.
What comes over
I looked at three Hookshot launcher trees. The most complete one is
feat/hookshot-launcher(~/Projects/Hookshot-launcher-base, with the core, the Avalonia app, the screens from the mockup and the core tests). The other two are related changes that are not ported here: the clickable HTML mockup is a design document, and the 2.x Builder's "hand over to the launcher" change (Hookshot #2722) belongs to the Builder.launcher/Coreandlauncher/App: the launcher (.NET 10, Avalonia 12.1.6, pinned with lock files).tests/launcher_coreandtests/test_launcher_core.py: the core's checks (no game, no network, no window), run bytests/run_all.py.docs/launcher-upgrade.mdandtests/fixtures/launcher: the 2.x hand-over contract. Only the launcher's side is in Longshot, and no Longshot 2.x Builder writes a hand-over. The reader (LegacyImport) finds nothing and stays quiet. I kept it so a hand-over can be added later without touching the launcher. Removing it is easy if you'd rather not have it.source-regressions.yml): sets up .NET 10 beside .NET 8, compiles the launcher with warnings as errors, and runs the core tests.What was renamed
LongshotLauncher(.exe),LongshotLauncher.slnx,LongshotLauncher.Core.%LOCALAPPDATA%\LongshotLauncherand~/.local/share/longshot/launcher, builds in~/Games/Longshot, and Longshot's save and data paths asscripts/oot_saves.pyalready has them.LONGSHOT_LAUNCHER_HOME,_OFFLINE,_PARTS,_REDUCED_MOTION, plus the game'sLONGSHOT_*.longshot.desktop,Longshot.lnk, and the AppImage nameLongshot.AppImage.main:assets/longshot.pngfor the window and the title bar, andbuilder/setup/longshot.icoas the Windows program's icon. No placeholder was needed.Two other changes came with the move:
tests/test_update_tracks.pyhas nonightly-<count>-<commit>names.Tests
python -I -B tests/test_launcher_core.py --dotnet ~/.dotnet/dotnet: 453 checks passed.dotnet build launcher/LongshotLauncher.slnx -c Release -p:RestoreLockedMode=true: no warnings, no errors (Linux, .NET SDK 10.0.404).python -I -B tests/run_all.py: 457 passed, 2 failed, 70 skipped. The two failures are this PC's, not the change's:test_bake_portability.pyneeds thezstandardmodule andtest_builder_log_read_only.pyneeds Tk, and neither is installed here. The skips are GPU, Vulkan-header and Windows-only checks.Not tested: the Windows build and a real build of the game through the launcher (no game run).
Screenshots
Linux, drawn headless with Avalonia's Skia renderer and a temporary home:
Nothing built yet:
Two builds, with an update offered:
HumanBean referenced this pull request2026-11-12 22:37:15 +00:00
Closing: the launcher now lives in its own repository, released apart from Longshot. Its pull request is MagicBeanDev/LongshotLauncher#1 (the port, the clean break at v3.0.0, the Hookshot save importer, its CI and releases). Longshot's side, the game's release process, is #13.
Closing: the launcher moves to its own repository, MagicBeanDev/LongshotLauncher, where it comes in as one PR (launcher releases and updates are separate from Longshot's). The code stays on this branch until then.
Pull request closed