feat(builder): a UI overhaul — the launcher page, and one design for every page #1759
Open
isaiahbenj94-star wants to merge 8 commits from
isaiahbenj94-star/feat/launcher-hero-page into main
pull from: isaiahbenj94-star/feat/launcher-hero-page
merge into: MagicBeanDev:main
MagicBeanDev:main
MagicBeanDev:github/pr/2893
MagicBeanDev:github/pr/2890
MagicBeanDev:github/pr/2887
MagicBeanDev:github/pr/2878
MagicBeanDev:github/pr/2875
MagicBeanDev:github/pr/2874
MagicBeanDev:github/pr/2873
MagicBeanDev:github/pr/2871
MagicBeanDev:github/pr/2756
MagicBeanDev:github/pr/2897
MagicBeanDev:github/pr/2896
MagicBeanDev:github/pr/2718
MagicBeanDev:github/pr/2842
MagicBeanDev:github/pr/2691
MagicBeanDev:github/pr/2895
MagicBeanDev:github/pr/2743
MagicBeanDev:github/pr/2765
MagicBeanDev:github/pr/2708
MagicBeanDev:github/pr/2732
MagicBeanDev:github/pr/2755
MagicBeanDev:github/pr/2817
MagicBeanDev:github/pr/2876
MagicBeanDev:release-please--branches--main
MagicBeanDev:release-please--branches--main--release-notes
MagicBeanDev:github/pr/2778
MagicBeanDev:github/pr/2888
MagicBeanDev:github/pr/2866
MagicBeanDev:github/pr/2877
MagicBeanDev:github/pr/2800
MagicBeanDev:github/pr/2829
MagicBeanDev:github/pr/2850
MagicBeanDev:github/pr/2889
MagicBeanDev:github/pr/2882
MagicBeanDev:github/pr/2860
MagicBeanDev:github/pr/2849
MagicBeanDev:github/pr/2886
MagicBeanDev:github/pr/2794
MagicBeanDev:github/pr/2840
MagicBeanDev:github/pr/2830
MagicBeanDev:github/pr/2834
MagicBeanDev:github/pr/2719
MagicBeanDev:github/pr/2742
MagicBeanDev:github/pr/2741
MagicBeanDev:github/pr/2820
MagicBeanDev:github/pr/2771
MagicBeanDev:github/pr/2859
MagicBeanDev:github/pr/2858
MagicBeanDev:github/pr/2823
MagicBeanDev:github/pr/2757
MagicBeanDev:github/pr/2769
MagicBeanDev:github/pr/2844
MagicBeanDev:github/pr/2843
MagicBeanDev:github/pr/2673
MagicBeanDev:github/pr/2855
MagicBeanDev:github/pr/2739
MagicBeanDev:github/pr/2807
MagicBeanDev:github/pr/2851
MagicBeanDev:github/pr/2789
MagicBeanDev:github/pr/2814
MagicBeanDev:github/pr/2818
MagicBeanDev:github/pr/2774
MagicBeanDev:github/pr/2772
MagicBeanDev:github/pr/2750
MagicBeanDev:github/pr/2786
MagicBeanDev:github/pr/2785
MagicBeanDev:github/pr/2782
MagicBeanDev:github/pr/2779
MagicBeanDev:github/pr/2775
MagicBeanDev:github/pr/2706
MagicBeanDev:github/pr/2766
MagicBeanDev:github/pr/2747
MagicBeanDev:github/pr/2759
MagicBeanDev:github/pr/2745
MagicBeanDev:github/pr/2740
MagicBeanDev:github/pr/2733
MagicBeanDev:github/pr/2725
MagicBeanDev:github/pr/2727
MagicBeanDev:github/pr/2728
MagicBeanDev:github/pr/2729
MagicBeanDev:github/pr/2721
MagicBeanDev:github/pr/2722
MagicBeanDev:github/pr/2715
MagicBeanDev:github/pr/2714
MagicBeanDev:github/pr/2707
MagicBeanDev:github/pr/2703
MagicBeanDev:github/pr/2705
MagicBeanDev:github/pr/2697
MagicBeanDev:github/pr/2679
MagicBeanDev:github/pr/2676
MagicBeanDev:github/pr/2669
MagicBeanDev:docs/what-hookshot-connects-to
MagicBeanDev:fix/hdr-encode-test
MagicBeanDev:fix/main-tests
MagicBeanDev:fix/play-cache-files
MagicBeanDev:perf/game-barrier-order
MagicBeanDev:feat/heap-lazy
MagicBeanDev:feat/texture-detail
MagicBeanDev:perf/astc-opaque-bc1
MagicBeanDev:fix/fs-dir-lock
MagicBeanDev:fix/framegen-native-kept
MagicBeanDev:fix/update-no-downgrade
MagicBeanDev:port/k10-gcn-f16-mirrors
MagicBeanDev:fix/framegen-mult-cap
MagicBeanDev:chore/release-as-2.1.1
MagicBeanDev:perf/pcache-load-switch
MagicBeanDev:fix/prepare-progress-log
MagicBeanDev:fix/update-closes-stale-game
MagicBeanDev:fix/hdr-scaled-sampled
MagicBeanDev:perf/first-start-preset
MagicBeanDev:perf/zero-upload
MagicBeanDev:fix/vcore-escape-2s
MagicBeanDev:test/fake-gh-atomic
MagicBeanDev:perf/batch-idle-flush
MagicBeanDev:test/finish-stub-a
MagicBeanDev:chore/record-2.1.0
MagicBeanDev:fix/main-red-tests
MagicBeanDev:fix/test-display-startup-driver-cache
MagicBeanDev:feat/mesh-shader-mode
MagicBeanDev:fix/menu-probes-at-startup
MagicBeanDev:fix/fps-counter-classic
MagicBeanDev:fix/test-log-batch-flake
MagicBeanDev:fix/narrow-screen-hud
MagicBeanDev:ci/prereleases
MagicBeanDev:release/v2.0.15
MagicBeanDev:hotfix/v2.0.15
MagicBeanDev:fix/present-ahead-replay
MagicBeanDev:release/v2.0.13
MagicBeanDev:fix/bracket-paths-2013
MagicBeanDev:fix/hdr-overlays-2013
MagicBeanDev:fix/fps-counter-scale-2013
MagicBeanDev:fix/stick-seen-at-rest
MagicBeanDev:hotfix/menu-fits-screen
MagicBeanDev:fix/f1-always-opens-menu
MagicBeanDev:fix/ini-keep-lines
MagicBeanDev:claude/cranky-pike-7cf247
MagicBeanDev:perf/texture-answer-flat
MagicBeanDev:fix/stamp-test-modules
MagicBeanDev:fix/appimage-fonts
MagicBeanDev:fix/display-awake
MagicBeanDev:release/v2.0.12
MagicBeanDev:fix/discord-windows
MagicBeanDev:rc/v2.0.12-tests
MagicBeanDev:fix/dlss-keep-feature
MagicBeanDev:rc/v2.0.12
MagicBeanDev:button-icons
No reviewers
Labels
Clear labels
accessibility
Barrier affecting people with disabilities
autorelease: pending
autorelease: tagged
bug
Something isn't working
dependencies
Pull requests that update a dependency file
documentation
Improvements or additions to documentation
duplicate
This issue or pull request already exists
enhancement
New feature or request
github_actions
Pull requests that update GitHub Actions code
good first issue
Good for newcomers
help wanted
Extra attention is needed
invalid
This doesn't seem right
question
Further information is requested
testing wanted
wontfix
This will not be worked on
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
Milestone
Clear milestone
No items
No milestone
Assignees
Clear assignees
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!1759
Loading…
Reference in a new issue
No description provided.
Delete branch "isaiahbenj94-star/feat/launcher-hero-page"
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?
Why
The community drew a mockup of what the game folder's launcher should look like (green hookshot rail, hero with a Play disc,
"Build & Update", the version chain, and a status line that says what just happened). This PR builds that page for both
launcher implementations — the Qt builder (Windows) and the Tk builder in the Linux AppImage — and gives the rest of the Qt
builder the launcher's frame too, so the whole window reads as one design.
(On the Linux side, main already took the Tk builder to its own dark Slate theme — dark cards, Inter, Play's green. This PR
now sits on top of that: it keeps main's theme for the form and progress pages, and adds the mockup launcher page to it. The
branch includes a merge of main.)
What changes
--launch <game folder>) in both builders: green rail with the hookshot and the game's version, thehero, the Play disc over it, "Build & Update" with the version chain over a scrim, and the "Hookshot: …" strip along the
foot with the mockup's sentences.
The hero picture is the player's own file, never ours:
<game folder>/hookshot_hero.pngwhen the folder has one, agenerated dusk-green gradient otherwise. No game art ships in the builder (CONTRIBUTING, "the rule with no exceptions").
each page's action row — Build/Play, Show log/Cancel, Open/Play, Back/Repair. The chrome stands down for the launch page,
which draws its own pair inside, and the body takes the whole width back for it.
tests/test_builder_launch_hero.py, text-based like the other builder tests): the hero is read from thegame folder only; no hero art ships anywhere under
builder/; both builders draw the mockup's words; the Qt pages share thechrome; the preview fakes folder names, not game data.
Screenshots
The launcher page as the mockup draws it (Qt offscreen previews; the chain shows the preview's made-up tags):
With the player's own hero picture (a generated placeholder — no game data):
The rest of the Qt builder, same frame (offscreen previews):
The Linux (Tk) launcher, live under Xwayland with the AppImage's own Python, both states:
Tests
python -I -B tests/test_builder_launch_hero.py— new, passes.python -I -B tests/run_all.py builder— the existing builder checks (jobs, scaling, status lines...) still pass; theirgreps still match.
Play, Update, the version chain and a
hookshot_hero.pngfrom the folder all behave.Can you fix the screenshot links
I've withdrawn my approval for now, sorry for the back and forth. The page itself still looks good to me. The issue is the screenshots:
docs/launcher/*.png, so merging this would put five PNGs in the repo permanently just to illustrate the PR. They aren't referenced by any docs page.docs/launcher/up_to_date.png), which GitHub doesn't resolve in a PR description, so they show up broken.Could you drag the images into the PR description instead (GitHub hosts them then) and drop the
docs/launcher/files from the commit? I'll re-approve once that's done.Heads-up: this conflicts with main now (a lot landed today). Could you merge main into the branch (or rebase) and resolve the conflicts? Thanks!
Screenshots posted, and code cleaned!
Thanks for adding the screenshots to the description, they render now. The PNGs are still in the PR though, so I can't re-approve yet.
The PR's files still list nine PNGs:
docs/launcher/:hero_image.png,linux_tk_up_to_date.png,linux_tk_update_available.png,up_to_date.png,update_available.pngdocs/overhaul/:qt_build_page.png,qt_files_page.png,qt_problem_page.png,qt_ready_page.pngThe latest commit only modified the
docs/launcher/ones and removed two fromdocs/overhaul/; the files are still there, and they live in the earlier commits' history too. Nothing links to them now that the description uses GitHub-hosted images, so they only add weight to the repo. Please delete all nine (docs/launcher/*.pnganddocs/overhaul/*.png). Because history would still hold them if merged as separate commits, either squash the branch, or rebuild it without the screenshot commits (5ad96253,e701e369and the overhaul commit70db3016add them) so no commit adds a PNG. If this gets squash-merged, deleting the files in a final commit is enough.The code changes since my approval look fine: the Tk rail now lays the logo over the gradient with
subsampleand falls back to the flattened copy on an older Tk, and the Qt launch page takes the full body width back while the chrome is hidden. No new issues there. The nits from my first review (corrupt hero PNG in Tk, hero only zoomed up) are unchanged and still non-blocking.No CI checks have been reported on this branch; the PR is mergeable. Once the PNGs are out I'll approve.
The nine screenshots are still in the PR: five in
docs/launcher/*.pngand four indocs/overhaul/*.png, added by5ad96253,e701e369and70db3016. Screenshots belong in the description, which you've already done, not in the repo. Please rebuild the branch without those commits, or squash it, so no commit adds a PNG.Other points:
tk.PhotoImage(file=picture)still has no try/except. A corrupt or renamedhookshot_hero.pngraises TclError and takes the launcher page down. Falling back to the gradient would fix it.dotnet publishin windows-builder.yml), and no workflow builds the Qt builder. So "one design for every page" doesn't reach Windows players; it only reaches Linux and the Qt port. Whether the WPF builder should follow is a maintainer call.This now conflicts with main in
builder/linux/hookshot_builder.py. Could you merge main into the branch (or rebase) when you get a chance? I'll take another look once it's up to date.