Launcher redesign: who's playing, a home for each kind of player, and a splash for RecompLauncher and the Deck #68

Open
opened 2026-11-14 18:50:51 +00:00 by gab9281 · 6 comments
Member

The launcher is built for the people who build it: channels, versions side by side and pull request builds are all on one screen, and a player who just wants to play sees all of it. This proposes starting with who is playing: each player has a name, an avatar and a kind (Kid, Normal, Advanced), the kind decides how much of the launcher they see, and each player's saves and settings live in their own folder, outside the game.

Every picture below is a mock (HTML, 960 × 600 like the launcher's window), not a build. The game's art (the save pictures) is replaced by grey boxes; in the launcher it would come from the player's own build, as LL#55's save pictures do. The avatars are the team's beans, shown as they are.

Every screen, in the order of the flow

Contents: For players · Three looks · For maintainers · Linked issues and pull requests


For players

The whole flow

Every screen and what leads where. Start on the left: The first start, Every start after, RecompLauncher or a Steam shortcut and The older launcher was here.

The flow board

0. The first start: your game, once

You point the launcher at your game files once. It shows where each thing will go before anything is written: the game files, the build, the versions, and your saves and settings. If the folder is on an SD card, it says so and offers internal storage. Portable keeps everything in one folder (for example on the SD card) instead of the standard places.

Linux Windows
Versions (one per choice, shared by every player; an own copy is <choice>-<player>) ~/Games/Longshot %USERPROFILE%\Games\Longshot
Saves and settings ~/.local/share/longshot %APPDATA%\Longshot
Portable <folder>/builds, <folder>/user the same

0a · First start: your game
0b · Unpacking, then the pictures
0e · An older update
0f · Portable, on the SD card

If the game files are already unpacked and correct, row 0 is skipped entirely.

1–3. Who's playing?

One tile per player. The first time you pick, the launcher asks whether to go straight to that player from then on. A new player gives a name, picks an avatar, then a kind. Create goes straight to their home; Reuse a save… lets them start from a copy of someone else's save instead of from nothing.

1 · Who's playing?
1b · Skip it next time?
2 · New player: who are you?
3 · New player: what kind?
3b · Reuse a save? (optional)
8 · Player menu

Avatars come from icon packs, and the picker shows five at a time. For now there is one small pack, so there is no pack selector. The mocks show it with a bean pack: five of the team's beans (the grappling-hook bean, the fairy bean, the teary elf bean, a red and a green bean), as suggested here. They are the team's own art, so they can ship with the launcher and are there from the first start. More packs can be added later, the game's icons among them (the hookshot, the bow, the ocarina, a Goron, Keaton's mask), cut on the player's PC like the save pictures. Once there is more than one pack, the picker gets a pack row and ◀ ▶ to page through five at a time.

4. A kid's home

One big Play button and their save. Grown-ups hold Edit for two seconds to change the kid's version or defaults.

4 · Kid home
4b · Edit (grown-ups)
9 · A kid's defaults

Placeholder pictures. Each grey box on a save card stands for that save's picture: the player standing where the save was made (here Kokiri Forest), taken from the game. They aren't in these screenshots because they are the game's own art, and nothing made from the game's files leaves the PC (CONTRIBUTING.md, the rule with no exceptions). In the launcher it is cut on the player's own PC from their own build, as LL#55's save previews are, and the card shows only its words when it isn't there.

5. A normal player's home

The last save you played, Play, and three choices titled with the real channel names, with plain words under each: Stable (I want a stable experience), Release candidate (I want new features), Nightly (I want the bleeding edge). Telemetry · this PC holds one choice for the whole PC: Always send crash reports and Send performance statistics, both off by default. With crash reports off, every crash shows its window with the log and nothing is sent unless you press Send.

5 · Normal home
5b · Normal home: Telemetry open
5d · Normal home, no save yet
5c · Normal home, offline
10 · A player's saves
14 · A save's details

Placeholder pictures. Each grey box on a save card stands for that save's picture: the player standing where the save was made (here Kokiri Forest), taken from the game. They aren't in these screenshots because they are the game's own art, and nothing made from the game's files leaves the PC (CONTRIBUTING.md, the rule with no exceptions). In the launcher it is cut on the player's own PC from their own build, as LL#55's save previews are, and the card shows only its words when it isn't there. On 14, the big grey box stands for LL#55's full save card: that picture, the hearts, rupees and magic, and the icons of every item, piece of equipment, medallion, song, upgrade and collectible the save holds. Those icons are the game's art too, cut the same way.

One build per choice, shared. Every player who picks a choice plays the same build (~/Games/Longshot/rc), each with their own saves and settings, so a second player on Release candidate builds nothing and waits for nothing. The box says who else plays it (shared with Flyingbean). Only a Kid's updates are automatic (before Play); a Normal player picks when to press Update, an Advanced player has Check for updates, and the splash never forces one. Updating a shared build updates it for everyone on it, a kid's automatic update included.

Own copy for Soupbean is a switch in the same box, off by default. On (5e), that player gets a build of their own (~/Games/Longshot/rc-soupbean, about 1 GB more when hard-linked), and only they update it. Off again, the copy is deleted and they are back on the shared build. Their saves don't move either way.

5e · Normal home: own copy

With no network, everything that needs none still works (Play, saves, players), and what doesn't (updates, building another choice) says why.

6–7. An advanced player's home

LL#59's home, per player: every version, pull request builds, the build settings. Where things go shows, for one build, its folder and its saves, with the full paths: a pull request build keeps saves of its own, seeded from yours and never written back.

6 · Advanced home
7 · Where things go, for a build

Placeholder pictures. The grey box on 6's save card is that save's picture, left out for the same reason as above: it is the game's own art.

15. Without the launcher's home: RecompLauncher and the Steam Deck

Started from RecompLauncher or a Steam shortcut, the launcher shows a splash that counts down and starts the game, with Options a button away: saves, game settings, and where things go. It is built for a controller.

15a · Splash
15 · Options: Saves
15b · Options: Game (Steam Deck)
15c · Options: Where things go, microSD

Placeholder pictures. The grey box on 15's save card is that save's picture, left out because it is the game's own art (see 5). The hookshot on the splash is the launcher's own logo.

The button hints follow the last thing you touched: a controller's letters (or a PlayStation pad's shapes), the keyboard's keys, or nothing with the mouse.

The splash's hints for a controller, a PlayStation pad, the keyboard and the mouse

The microSD hint shows only when the game's folder is detected on an SD card: internal storage plays faster (L#386).

Upgrading from the older launcher

If the game files are already there and correct, the first start is skipped: the launcher asks only who you are, then makes you an Advanced player with everything kept (your versions, your saves, your settings). It also looks for the older launcher's shortcuts (desktop and menu, .desktop files and .lnks) and moves the ones that start an older launcher, a missing build or a build's game straight to the trash, so only one up-to-date shortcut remains. Show lists what was moved.

2u · Welcome back: who are you?
6u · Advanced, everything kept

Placeholder pictures. The grey box on 6u's save card is that save's picture, the game's own art, left out for the reason given under 5.

Bonus: I want to help

For Normal players who want to test pull requests without being developers: saves of its own for each build, How did it go?, and Delete once it's merged. It waits for the gate below (For maintainers).

11 · Help test Longshot? (bonus)
12 · Helper's home (bonus)
13 · Add a pull request (bonus)

Placeholder pictures. The grey box on 12's save card is the save's picture, the game's own art (see 5).


Three looks, side by side

The same screens in three themes: Launcher (today's look), Menu (the in-game menu's look, so the launcher and the game feel like one thing) and Blossom (white and pink, there to show that a theme is only a file of colours). Only colours, fonts and a few edges change: every screen keeps its layout, words and buttons.

Launcher Menu Blossom
Light or dark dark dark, warm light
Page slate #14161A dark brown #16110B, a soft radial light near-white #FFF8FB, pink and peach glows
Boxes, rows #1C1F24, rounded 8–14 px #241C13, a bronze edge, square (2 px) white, a pink edge #F3CDDB, rounded
Title bar transparent the tab banner, tan #B08A58 white to pale pink
Primary, Play blue, green the gold selector #DE9828, a glow pink #E0679A, Play #D9508C, a soft shadow
Chosen row blue ring a gold bar on its left pink ring
Headings Inter Bold; labels in capitals Libertinus Serif; labels in orange Libertinus Serif in #B0396E
Body Inter Libertinus Sans Inter
What it costs nothing, it is today's a ResourceDictionary, after the colour-key refactor a ResourceDictionary of the same keys

The menu theme's colours are the menu's own, from Longshot's gpu/vk/vk_ui.h. Its font is Libertinus, the font the menu falls back to, never the game's own menu font: that one comes from the player's game files, and the launcher ships none of them.

Who's playing in the three themes
What kind of player in the three themes
Kid home in the three themes
Normal home in the three themes
Advanced home in the three themes
A player's saves in the three themes
Options in the three themes
Splash in the three themes

Placeholder pictures. The grey boxes are the save pictures, left out as everywhere above because they are the game's own art. The menu theme's font is Libertinus, not the game's menu font, for the same reason.


For maintainers

Checked against the launcher as it is (main at 01f2797, and LL#59's branch): Avalonia 12.1.6 with the Fluent theme, .NET 10, one fixed 960 × 600 window with its own title bar, about 50 brushes in App/App.axaml, its own icon set (c:Icon), 12 language catalogs. Most of the redesign is panels shown or hidden by the player's kind; the new code is mostly in Core/.

How each piece would be built

Piece How Already there
Per-player saves and settings The game's --user <folder>, passed by MakeGameCommand.StartInfo(..., user, own: true) on every platform SaveEnvironment.PullRequestUser; LL#55's player folders
Kid, Normal, Advanced Which panels the home shows, from the player's kind; no new control —
Avatar tiles A Border with a LinearGradientBrush and the item picture (the initial when missing), five at a time; the ring is an outer Border. Pictures from icon packs: a folder avatars/<pack>/ with a manifest (name, pictures in order, cut from the game or shipped); a player stores pack/picture. One pack for now, so no selector; the mocks show the bean pack (assets/branding's beans) Gradients and BoxShadows
The first start (0a, 0b, 0e, 0f) FilesStepView / GameFiles with the places in LauncherSettings (Portable, GameFolder, BuildFolder, VersionsFolder, SavesFolder), each row's drive from Disk.IsSdCard; game files hard-linked from one unpack (FileLinks); LL#55's extract_save_icons.py writes game/pictures/ GameFiles, FilesStepView, FileLinks
Dialogs (1b, 3b) An overlay in the window, as LL#59's picker LL#59's picker
The player menu A title-bar Button with a Flyout The TitleBar grid
The kid's hold-to-unlock A Button whose PointerPressed starts a 2 s timer PointerReleased cancels; held Enter or A with a controller Motion.cs, the focus ring
Last played save, Details (14) LL#55's compact card on the home, its full card on a page LL#55
Extract this save, From a file… New: a .longshot-save zip of a slot's files and a small manifest Core/Saves.cs copying and backups
Telemetry ticks Two CheckBoxes, one choice for this PC, written to every game folder longshot_crash.ini (LL#46), send=1 in longshot_perf.ini (L#206)
The three choices, one folder per channel The channels; BuildRegistry.FolderOf / LauncherSettings.FolderFor UpdatePolicy, LL#57
Shared builds, Own copy (5e) BuildRegistry records which players use a build; FolderFor(channel) is shared, FolderFor(channel, player) the own copy, built from the same release and hard-linked (FileLinks); the kid's automatic update and Update act on the folder that player plays; switching off deletes the copy once no player uses it BuildRegistry, FolderFor, FileLinks (LL#58)
Where things go, for a build (7) FolderFor and PullRequestUser(n) shown with full paths; Copy a save in…, Fresh copy of mine through Saves.SeedPullRequest LL#59
Offline (5c) One Network state in MainViewModel, set by Fetcher / CdnFetcher errors, re-checked every 60 s; each network-only action's IsEnabled bound to it, with the reason The fetchers
Splash and Options (--splash, --options <folder>) The launcher started for one game folder in a window of its own, as --crash <folder> is; one player, This PC; controller focus everywhere LL#46's --crash (Core/CommandLine.cs), CheckReleasesAsync, the focus ring
Hints that follow the input One InputMode (Pad, PlayStation, Keyboard, Mouse) set by tunnelling KeyDown / PointerMoved / PointerPressed and the polled gamepad; a HintKey control picks the glyph from one table The splash's gamepad
microSD hint and move (15b, 15c, 0a) Disk.IsSdCard(folder): the mount in /proc/self/mountinfo, /sys/class/block/<dev>/device/type = SD (Linux, SteamOS); IOCTL_STORAGE_QUERY_PROPERTY bus type SD (Windows); no hint when unsure. MoveBuild(from, to) copies, checks, updates BuildRegistry, then deletes, rolling back on failure Disk.DriveName, BuildRegistry
--player <name> and a shortcut per player An argument in Program; a shortcut that opens that player's splash, using the path packages give (LL#54) Shortcuts.cs, WindowsShortcuts.cs
Upgrade (2u → 6u) Skip row 0 when the game files check out; create one Advanced player whose --user is today's LongshotUser, so nothing moves GameFiles, SaveEnvironment.LongshotUser
Older shortcuts replaced (2u, every self-update) Shortcuts.FindOld(launcherPath, registry): the .desktop files and .lnks in the known places, read (Exec; IShellLink on Windows), kept when they start this launcher, sent to the trash when they start an older one, a missing build or a build's game; WriteLinux / WindowsShortcuts write the one kept Shortcuts.LinuxPaths, LauncherMenuPaths, WindowsShortcuts.DesktopLink / StartLink, Installer.InstallPlaces.StartMenuLink, LauncherService.LauncherPath
Themes A second ResourceDictionary with the same keys, merged in App before the window opens; the next start only (live switching would turn 289 StaticResources into DynamicResources) The ~50 brushes
Every new text {c:T '...'} in the 12 catalogs Core/Lang/*.json

What the mocks show that the launcher hasn't got

  • Play on the chosen save needs the game. Neither the game nor the launcher can start on a slot today; the game opens its own file select. It takes a game switch (say --slot <n>) that puts the cursor on that slot, or loads it (L#229 asks for it). Until then the launcher shows the chosen slot and the game still asks.
  • Icons. The mocks use emoji as stand-ins; Avalonia draws colour emoji only through the system's fallback font, which differs from PC to PC. They become c:Icon kinds.
  • A game icon pack (item pictures as avatars) would be the game's own art: cut on the player's PC from their own build, as LL#55's save art is, with the player's initial when they aren't there. The bean pack the mocks show is the team's art and can ship.

What has to come first

Each step stands alone and can be reviewed alone:

  1. Fix LL#53 (Play on Windows), merge LL#57 (folders kept) and LL#58 + L#360 (hard links).
  2. Players: LL#55's core, per-player --user, today's saves become the first player's (copied and backed up first).
  3. Who's playing?, the kinds, skip next time, the player menu, the upgrade path and the shortcut scan.
  4. The last played save, Details, Extract / From a file.
  5. The Telemetry section, once L#141 / LL#46 and L#206 are merged.
  6. The colour-key refactor, then the menu theme as an option.
  7. The splash and Options (--splash, --options <folder>), then RecompLauncher starting it (a recomplauncher.json change, L#354's file).
  8. The Helper, once L#353, the pull request key and a maintainer's gate (L#378, reopened) are there.
  9. L#264's retakes (2–3 images) and new guide pages after steps 3, 4 and 7.

Decisions needed

  1. How locked is Kid? The mock holds a button for 2 seconds. A code would stop older kids too, and is one more thing to forget. And can a kid change their own kind, or only from another player's home?
  2. The standard saves folder on Windows: %APPDATA%\Longshot (today's), Documents\Longshot or Saved Games\Longshot? Documents is where people look, and where OneDrive syncs.
  3. Example saves (5d). A player with no save sees an example one. A save is made by the game, so an example save shipped with the launcher may count as something made from the game: it may need to be made on the player's PC, or left out.
  4. Named slots. L#259 says the game has one manual save per user profile, while LL#55 shows six slots per player: check what the game does before promising names.
  5. What RecompLauncher starts, and who updates that folder: the splash's Update, or RecompLauncher (which reads only GitHub releases, L#74)?
  6. The splash's cost: one more program start before every game. Go straight to the game next time is there for those who mind.
  7. Translations: a few dozen new texts in every catalog. Keeping the labels' strings as they are in the menu theme (recolour only) avoids doubling that.

Where the mocks are

The HTML mocks (clickable with ?proto, themes with ?theme=menu|blossom, input with ?input=pad|ps|kb|mouse), the flow boards (an HTML board with zoom, full screen and a step-by-step gallery) and a FigCraft file with the clickable prototype are in a launcher-redesign folder, with a README going screen by screen and related-work.md, the list the last section is drawn from. They can go up as a branch if that helps review. The pictures here are placeholder renders: no game art, no game files.


Linked issues and pull requests

As of 2026-11-14 08:05 UTC, from every issue and pull request of both repositories. L is MagicBeanDev/Longshot, LL is MagicBeanDev/LongshotLauncher.

Fixed or answered by this

Item How
L#229 Idea: multi profile support Players, each with their own saves, picked before the game (1, 4). Starting straight on a slot still needs a game switch
L#259 Idea: Multiple User Profiles / Save Directory Switching The same, for shared PCs; its --profile is --player, with a shortcut per player
L#224 Idea: Do not rename install folder One folder per channel, kept across updates (with LL#57)
L#337 Idea: install a pull request's build from the Longshot Launcher The Helper (11–13) is its version for Normal players
L#386 Deck: the same install on microSD holds ~15-20% fewer fps The SD check on the first start (0a, 0f), the hint and the move (15b, 15c)
L#351 Install: No space left on device Sizes before building another choice, with LL#58 / L#360's hard links
L#74 RecompLauncher can only install from GitHub releases Partly: the splash and Options reach RecompLauncher players; who updates their folder is open
LL#56, L#276 offline install Partly: offline is written down screen by screen (5c); the installer itself is theirs
L#81 crash reports sent from the game to a bot (with consent) The consent: one Always send crash reports for this PC
L#374, L#375, L#379, L#380, L#381 (closed ideas) How did it go, saves of its own, Building now, move to nightly once merged, tell the PR you test: all in the Helper
L#376 the picker puts first what matches the tester's hardware (closed) The Helper's Add a pull request (13) can put it first

Built on

Item What the redesign takes from it
LL#55 feat(saves): add player profiles and progress previews Stable player folders and the save card used everywhere; its Player drop-down becomes the avatar screen
LL#59 feat(home): build a pull request's version to help test it The Advanced home (6), the Helper's rows and picker, saves per build (7)
LL#57 fix(update): an update stays in its build's folder, named after its channel The stable, rc, nightly folders
LL#58 + L#360 hard-linked game files Switching choices and adding PR builds stops costing a full game each
LL#46 + L#141 the crash window Always send crash reports is its tick; --crash <folder> is the model for --splash
L#206 opt-in performance statistics Send performance statistics, off by default
L#353 ci(pr-builds): build pull requests and publish them signed The builds the Helper installs
L#264 docs(guides): illustrate installation, settings and save transfer Its Graphics menu capture is the menu theme's reference; 2–3 of its images need retaking
LL#54 LONGSHOT_LAUNCHER_EXE The path per-player shortcuts use under a package
LL#47 launcher language selection and translations (merged) Every new text goes through {c:T}
LL#43, LL#26, LL#31, LL#14, LL#38, LL#48, LL#52, L#20, L#277, L#321, L#168 (merged) One save folder, slots and transfers, Saves on the home, the channel default, Check for updates, plain-word problems, imports, safe copies, tidy game folders, the website's channel names

Considered, and what to watch

Item Why it matters here
LL#53 Windows: Play is disabled (bin\longshot.exe) Every Play depends on it: fix first
L#378 sign PR builds only for the ones a maintainer let through (closed) The Helper widens who sees PR builds: reopen before I want to help ships
L#270, L#213 who may be tested without a label The same trust rule the Helper's list should follow
LL#42 + L#251 Send report, the website's inbox A second report path: the same one consent should cover it
L#75, L#44 local crash records Local only: fine under any setting
L#294 Imported Saves: Scarecrow Song Saves moved between players or shared as files can carry this kind of state
L#61 save and resume when restarting The mechanism Play this save would need
L#355 isolated save playtests for co-op Another place deciding where saves go: one rule for players, Helper and co-op
LL#61 build tools download as soon as the update check answers Shortens the first start
L#230, L#390 game language after build, separate text and voice languages A kid's language would be per player; the game fixes it at build time today
L#225, L#227 Steam Deck profile and defaults The machine's settings, not the player's; shown on 15b
L#139 colour filter for colour-blind players A per-player setting; the launcher's own themes aren't covered by it
L#134, L#207, L#42 mods, randomizers Not in the redesign: an Advanced page when it comes
LL#49, LL#50 NFC page, frame generation runtime Advanced-only pages: each new page needs a kind
L#354 DLSS and FSR 4 options for RecompLauncher The splash's Options give them to RecompLauncher players
The launcher is built for the people who build it: channels, versions side by side and pull request builds are all on one screen, and a player who just wants to play sees all of it. This proposes starting with **who is playing**: each player has a name, an avatar and a **kind** (Kid, Normal, Advanced), the kind decides how much of the launcher they see, and each player's saves and settings live in their own folder, outside the game. Every picture below is a mock (HTML, 960 × 600 like the launcher's window), not a build. The game's art (the save pictures) is replaced by grey boxes; in the launcher it would come from the player's own build, as [LL#55](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/55)'s save pictures do. The avatars are the team's beans, shown as they are. ![Every screen, in the order of the flow](https://git.magicbean.dev/attachments/3ce500da-f81f-46de-92db-7f94c4e482eb) **Contents:** [For players](#for-players) · [Three looks](#three-looks-side-by-side) · [For maintainers](#for-maintainers) · [Linked issues and pull requests](#linked-issues-and-pull-requests) --- # For players ## The whole flow Every screen and what leads where. Start on the left: *The first start*, *Every start after*, *RecompLauncher or a Steam shortcut* and *The older launcher was here*. ![The flow board](https://git.magicbean.dev/attachments/21b5d804-dadb-47eb-b26c-741f2f39968f) ## 0. The first start: your game, once You point the launcher at your game files once. It shows where each thing will go before anything is written: the game files, the build, the versions, and your saves and settings. If the folder is on an SD card, it says so and offers internal storage. **Portable** keeps everything in one folder (for example on the SD card) instead of the standard places. | | Linux | Windows | |---|---|---| | Versions (one per choice, shared by every player; an own copy is `<choice>-<player>`) | `~/Games/Longshot` | `%USERPROFILE%\Games\Longshot` | | Saves and settings | `~/.local/share/longshot` | `%APPDATA%\Longshot` | | Portable | `<folder>/builds`, `<folder>/user` | the same | ![0a · First start: your game](https://git.magicbean.dev/attachments/9e517bf6-c3e0-46ad-a04b-67f68e7a0bdb) ![0b · Unpacking, then the pictures](https://git.magicbean.dev/attachments/1c1f8eed-9b1d-4203-9206-9f54204c2ff5) ![0e · An older update](https://git.magicbean.dev/attachments/cbc5aef8-9815-4ba1-abc1-48642f584fbe) ![0f · Portable, on the SD card](https://git.magicbean.dev/attachments/a5677ed6-957e-4569-9441-bdc45656ef8f) If the game files are already unpacked and correct, row 0 is skipped entirely. ## 1–3. Who's playing? One tile per player. The first time you pick, the launcher asks whether to go straight to that player from then on. A new player gives a name, picks an avatar, then a kind. **Create** goes straight to their home; **Reuse a save…** lets them start from a copy of someone else's save instead of from nothing. ![1 · Who's playing?](https://git.magicbean.dev/attachments/bc972fdb-c6f3-488b-8502-47e5808b2644) ![1b · Skip it next time?](https://git.magicbean.dev/attachments/8e06df8f-91b7-4638-b0c1-fd982bc6a435) ![2 · New player: who are you?](https://git.magicbean.dev/attachments/01d600d6-990b-4721-9da2-a702c739a52b) ![3 · New player: what kind?](https://git.magicbean.dev/attachments/e22bca59-996d-4a2d-a379-75a2b7a1124d) ![3b · Reuse a save? (optional)](https://git.magicbean.dev/attachments/b2538bbb-a42e-4807-a98e-18e67f198e63) ![8 · Player menu](https://git.magicbean.dev/attachments/1f10e74f-81d2-49e8-9ee7-de8a949be546) **Avatars come from icon packs**, and the picker shows **five at a time**. For now there is one small pack, so there is **no pack selector**. The mocks show it with a **bean pack**: five of the team's beans (the grappling-hook bean, the fairy bean, the teary elf bean, a red and a green bean), [as suggested here](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/issues/68#issuecomment-20682). They are the team's own art, so they can ship with the launcher and are there from the first start. More packs can be added later, the game's icons among them (the hookshot, the bow, the ocarina, a Goron, Keaton's mask), cut on the player's PC like the save pictures. Once there is more than one pack, the picker gets a pack row and ◀ ▶ to page through five at a time. ## 4. A kid's home One big Play button and their save. Grown-ups hold **Edit** for two seconds to change the kid's version or defaults. ![4 · Kid home](https://git.magicbean.dev/attachments/35b837ca-d6d5-4647-9627-517351235bc0) ![4b · Edit (grown-ups)](https://git.magicbean.dev/attachments/215b6e19-5221-45c7-a37e-8e91f47326f8) ![9 · A kid's defaults](https://git.magicbean.dev/attachments/b4ac73c4-dad3-4a99-ab0c-7c60ffebf0b0) > **Placeholder pictures.** Each grey box on a save card stands for **that save's picture**: the player standing where the save was made (here Kokiri Forest), taken from the game. They aren't in these screenshots because they are the game's own art, and nothing made from the game's files leaves the PC ([CONTRIBUTING.md](https://git.magicbean.dev/MagicBeanDev/Longshot/src/branch/main/CONTRIBUTING.md), the rule with no exceptions). In the launcher it is cut on the player's own PC from their own build, as [LL#55](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/55)'s save previews are, and the card shows only its words when it isn't there. ## 5. A normal player's home The last save you played, Play, and three choices titled with the real channel names, with plain words under each: **Stable** (*I want a stable experience*), **Release candidate** (*I want new features*), **Nightly** (*I want the bleeding edge*). **Telemetry · this PC** holds one choice for the whole PC: *Always send crash reports* and *Send performance statistics*, both off by default. With crash reports off, every crash shows its window with the log and nothing is sent unless you press Send. ![5 · Normal home](https://git.magicbean.dev/attachments/2383ce94-abf8-4e2e-9592-2702e64c7c93) ![5b · Normal home: Telemetry open](https://git.magicbean.dev/attachments/87720f64-9ba7-4ee0-83b2-876143099049) ![5d · Normal home, no save yet](https://git.magicbean.dev/attachments/30d22498-25c0-4af4-883e-9d3f3204d8c0) ![5c · Normal home, offline](https://git.magicbean.dev/attachments/67fc0976-fd51-4035-bab8-e72a37dfd6d2) ![10 · A player's saves](https://git.magicbean.dev/attachments/a3c1c992-7232-400c-9149-341bec56d7e5) ![14 · A save's details](https://git.magicbean.dev/attachments/79574088-e52a-40a8-ab6c-de41795cf789) > **Placeholder pictures.** Each grey box on a save card stands for **that save's picture**: the player standing where the save was made (here Kokiri Forest), taken from the game. They aren't in these screenshots because they are the game's own art, and nothing made from the game's files leaves the PC ([CONTRIBUTING.md](https://git.magicbean.dev/MagicBeanDev/Longshot/src/branch/main/CONTRIBUTING.md), the rule with no exceptions). In the launcher it is cut on the player's own PC from their own build, as [LL#55](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/55)'s save previews are, and the card shows only its words when it isn't there. On 14, the big grey box stands for LL#55's **full save card**: that picture, the hearts, rupees and magic, and the icons of every item, piece of equipment, medallion, song, upgrade and collectible the save holds. Those icons are the game's art too, cut the same way. **One build per choice, shared.** Every player who picks a choice plays the same build (`~/Games/Longshot/rc`), each with their own saves and settings, so a second player on *Release candidate* builds nothing and waits for nothing. The box says who else plays it (*shared with Flyingbean*). Only a **Kid's** updates are automatic (before Play); a Normal player picks when to press *Update*, an Advanced player has *Check for updates*, and the splash never forces one. Updating a shared build updates it for everyone on it, a kid's automatic update included. **Own copy for Soupbean** is a switch in the same box, off by default. On (5e), that player gets a build of their own (`~/Games/Longshot/rc-soupbean`, about 1 GB more when hard-linked), and only they update it. Off again, the copy is deleted and they are back on the shared build. Their saves don't move either way. ![5e · Normal home: own copy](https://git.magicbean.dev/attachments/47509ace-9cf7-41b9-a6da-67f81a3c623d) With no network, everything that needs none still works (Play, saves, players), and what doesn't (updates, building another choice) says why. ## 6–7. An advanced player's home [LL#59](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/59)'s home, per player: every version, pull request builds, the build settings. **Where things go** shows, for one build, its folder and its saves, with the full paths: a pull request build keeps saves of its own, seeded from yours and never written back. ![6 · Advanced home](https://git.magicbean.dev/attachments/ef4e4568-9c0e-48c6-ae06-7fac5ce1f652) ![7 · Where things go, for a build](https://git.magicbean.dev/attachments/ca218a6d-02a9-4597-97e3-26316e9ef37e) > **Placeholder pictures.** The grey box on 6's save card is that save's picture, left out for the same reason as above: it is the game's own art. ## 15. Without the launcher's home: RecompLauncher and the Steam Deck Started from RecompLauncher or a Steam shortcut, the launcher shows a **splash** that counts down and starts the game, with **Options** a button away: saves, game settings, and where things go. It is built for a controller. ![15a · Splash](https://git.magicbean.dev/attachments/9129190d-119e-4faa-b379-4591aff8e486) ![15 · Options: Saves](https://git.magicbean.dev/attachments/0158f742-bad1-4f3f-b89f-44d69fc84c55) ![15b · Options: Game (Steam Deck)](https://git.magicbean.dev/attachments/b7f886ca-a880-4dda-b11b-2da6f6f2b7ef) ![15c · Options: Where things go, microSD](https://git.magicbean.dev/attachments/8929a66e-dfae-4cf5-90ea-a27fa37d86cd) > **Placeholder pictures.** The grey box on 15's save card is that save's picture, left out because it is the game's own art (see 5). The hookshot on the splash is the launcher's own logo. The button hints follow the last thing you touched: a controller's letters (or a PlayStation pad's shapes), the keyboard's keys, or nothing with the mouse. ![The splash's hints for a controller, a PlayStation pad, the keyboard and the mouse](https://git.magicbean.dev/attachments/81b63f80-74b6-4f51-956f-6cc79b008f39) The microSD hint shows only when the game's folder is detected on an SD card: internal storage plays faster ([L#386](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/386)). ## Upgrading from the older launcher If the game files are already there and correct, the first start is skipped: the launcher asks only who you are, then makes you an **Advanced** player with everything kept (your versions, your saves, your settings). It also looks for the older launcher's shortcuts (desktop and menu, `.desktop` files and `.lnk`s) and moves the ones that start an older launcher, a missing build or a build's game straight to the trash, so **only one up-to-date shortcut remains**. **Show** lists what was moved. ![2u · Welcome back: who are you?](https://git.magicbean.dev/attachments/c3a48c29-9724-4683-97c8-18434195c96e) ![6u · Advanced, everything kept](https://git.magicbean.dev/attachments/0ef3dad0-8ff5-4a89-a3f9-f83511f378c9) > **Placeholder pictures.** The grey box on 6u's save card is that save's picture, the game's own art, left out for the reason given under 5. ## Bonus: I want to help For Normal players who want to test pull requests without being developers: saves of its own for each build, *How did it go?*, and *Delete* once it's merged. It waits for the gate below ([For maintainers](#what-has-to-come-first)). ![11 · Help test Longshot? (bonus)](https://git.magicbean.dev/attachments/a88728e6-3f46-4cb9-ad91-ef3c6aa42986) ![12 · Helper's home (bonus)](https://git.magicbean.dev/attachments/4808430a-112e-498d-a56c-621f4a19629d) ![13 · Add a pull request (bonus)](https://git.magicbean.dev/attachments/ed43a426-c323-4e7d-8230-3789fc4aaffa) > **Placeholder pictures.** The grey box on 12's save card is the save's picture, the game's own art (see 5). --- # Three looks, side by side The same screens in three themes: **Launcher** (today's look), **Menu** (the in-game menu's look, so the launcher and the game feel like one thing) and **Blossom** (white and pink, there to show that a theme is only a file of colours). Only colours, fonts and a few edges change: every screen keeps its layout, words and buttons. | | Launcher | Menu | Blossom | |---|---|---|---| | Light or dark | dark | dark, warm | light | | Page | slate `#14161A` | dark brown `#16110B`, a soft radial light | near-white `#FFF8FB`, pink and peach glows | | Boxes, rows | `#1C1F24`, rounded 8–14 px | `#241C13`, a bronze edge, square (2 px) | white, a pink edge `#F3CDDB`, rounded | | Title bar | transparent | the tab banner, tan `#B08A58` | white to pale pink | | Primary, Play | blue, green | the gold selector `#DE9828`, a glow | pink `#E0679A`, Play `#D9508C`, a soft shadow | | Chosen row | blue ring | a gold bar on its left | pink ring | | Headings | Inter Bold; labels in capitals | Libertinus Serif; labels in orange | Libertinus Serif in `#B0396E` | | Body | Inter | Libertinus Sans | Inter | | What it costs | nothing, it is today's | a `ResourceDictionary`, after the colour-key refactor | a `ResourceDictionary` of the same keys | The menu theme's colours are the menu's own, from Longshot's `gpu/vk/vk_ui.h`. Its font is Libertinus, the font the menu falls back to, never the game's own menu font: that one comes from the player's game files, and the launcher ships none of them. ![Who's playing in the three themes](https://git.magicbean.dev/attachments/96e99169-de35-4f95-978f-d3487fdba0f1) ![What kind of player in the three themes](https://git.magicbean.dev/attachments/c93d4cea-e3c1-4947-85dc-609702ff6616) ![Kid home in the three themes](https://git.magicbean.dev/attachments/a2fe07b3-4f5f-4096-9b73-2e96def91448) ![Normal home in the three themes](https://git.magicbean.dev/attachments/97325c52-dd57-493a-8141-26f49e5ac1db) ![Advanced home in the three themes](https://git.magicbean.dev/attachments/dce40390-915f-4de4-b884-7dd5ab5075fc) ![A player's saves in the three themes](https://git.magicbean.dev/attachments/f9172aad-caad-439b-9c36-55e8f5275079) ![Options in the three themes](https://git.magicbean.dev/attachments/8c6a9adc-7487-4b7c-8782-514b359055f6) ![Splash in the three themes](https://git.magicbean.dev/attachments/79123789-9dd6-4b85-b2a9-c27ece671d78) > **Placeholder pictures.** The grey boxes are the save pictures, left out as everywhere above because they are the game's own art. The menu theme's font is Libertinus, not the game's menu font, for the same reason. --- # For maintainers Checked against the launcher as it is (`main` at `01f2797`, and LL#59's branch): Avalonia 12.1.6 with the Fluent theme, .NET 10, one fixed 960 × 600 window with its own title bar, about 50 brushes in `App/App.axaml`, its own icon set (`c:Icon`), 12 language catalogs. Most of the redesign is panels shown or hidden by the player's kind; the new code is mostly in `Core/`. ## How each piece would be built | Piece | How | Already there | |---|---|---| | Per-player saves and settings | The game's `--user <folder>`, passed by `MakeGameCommand.StartInfo(..., user, own: true)` on every platform | `SaveEnvironment.PullRequestUser`; LL#55's player folders | | Kid, Normal, Advanced | Which panels the home shows, from the player's kind; no new control | — | | Avatar tiles | A `Border` with a `LinearGradientBrush` and the item picture (the initial when missing), five at a time; the ring is an outer `Border`. Pictures from icon packs: a folder `avatars/<pack>/` with a manifest (name, pictures in order, cut from the game or shipped); a player stores `pack/picture`. One pack for now, so no selector; the mocks show the bean pack (`assets/branding`'s beans) | Gradients and `BoxShadows` | | The first start (0a, 0b, 0e, 0f) | `FilesStepView` / `GameFiles` with the places in `LauncherSettings` (`Portable`, `GameFolder`, `BuildFolder`, `VersionsFolder`, `SavesFolder`), each row's drive from `Disk.IsSdCard`; game files hard-linked from one unpack (`FileLinks`); LL#55's `extract_save_icons.py` writes `game/pictures/` | `GameFiles`, `FilesStepView`, `FileLinks` | | Dialogs (1b, 3b) | An overlay in the window, as LL#59's picker | LL#59's picker | | The player menu | A title-bar `Button` with a `Flyout` | The `TitleBar` grid | | The kid's hold-to-unlock | A `Button` whose `PointerPressed` starts a 2 s timer `PointerReleased` cancels; held Enter or A with a controller | `Motion.cs`, the focus ring | | Last played save, Details (14) | LL#55's compact card on the home, its full card on a page | LL#55 | | Extract this save, From a file… | New: a `.longshot-save` zip of a slot's files and a small manifest | `Core/Saves.cs` copying and backups | | Telemetry ticks | Two `CheckBox`es, **one choice for this PC**, written to every game folder | `longshot_crash.ini` (LL#46), `send=1` in `longshot_perf.ini` (L#206) | | The three choices, one folder per channel | The channels; `BuildRegistry.FolderOf` / `LauncherSettings.FolderFor` | `UpdatePolicy`, LL#57 | | Shared builds, *Own copy* (5e) | `BuildRegistry` records which players use a build; `FolderFor(channel)` is shared, `FolderFor(channel, player)` the own copy, built from the same release and hard-linked (`FileLinks`); the kid's automatic update and *Update* act on the folder that player plays; switching off deletes the copy once no player uses it | `BuildRegistry`, `FolderFor`, `FileLinks` (LL#58) | | Where things go, for a build (7) | `FolderFor` and `PullRequestUser(n)` shown with full paths; *Copy a save in…*, *Fresh copy of mine* through `Saves.SeedPullRequest` | LL#59 | | Offline (5c) | One `Network` state in `MainViewModel`, set by `Fetcher` / `CdnFetcher` errors, re-checked every 60 s; each network-only action's `IsEnabled` bound to it, with the reason | The fetchers | | Splash and Options (`--splash`, `--options <folder>`) | The launcher started for one game folder in a window of its own, as `--crash <folder>` is; one player, *This PC*; controller focus everywhere | LL#46's `--crash` (`Core/CommandLine.cs`), `CheckReleasesAsync`, the focus ring | | Hints that follow the input | One `InputMode` (Pad, PlayStation, Keyboard, Mouse) set by tunnelling `KeyDown` / `PointerMoved` / `PointerPressed` and the polled gamepad; a `HintKey` control picks the glyph from one table | The splash's gamepad | | microSD hint and move (15b, 15c, 0a) | `Disk.IsSdCard(folder)`: the mount in `/proc/self/mountinfo`, `/sys/class/block/<dev>/device/type` = `SD` (Linux, SteamOS); `IOCTL_STORAGE_QUERY_PROPERTY` bus type SD (Windows); no hint when unsure. `MoveBuild(from, to)` copies, checks, updates `BuildRegistry`, then deletes, rolling back on failure | `Disk.DriveName`, `BuildRegistry` | | `--player <name>` and a shortcut per player | An argument in `Program`; a shortcut that opens that player's splash, using the path packages give (LL#54) | `Shortcuts.cs`, `WindowsShortcuts.cs` | | Upgrade (2u → 6u) | Skip row 0 when the game files check out; create one Advanced player whose `--user` is today's `LongshotUser`, so nothing moves | `GameFiles`, `SaveEnvironment.LongshotUser` | | Older shortcuts replaced (2u, every self-update) | `Shortcuts.FindOld(launcherPath, registry)`: the `.desktop` files and `.lnk`s in the known places, read (`Exec`; `IShellLink` on Windows), kept when they start this launcher, sent to the trash when they start an older one, a missing build or a build's game; `WriteLinux` / `WindowsShortcuts` write the one kept | `Shortcuts.LinuxPaths`, `LauncherMenuPaths`, `WindowsShortcuts.DesktopLink` / `StartLink`, `Installer.InstallPlaces.StartMenuLink`, `LauncherService.LauncherPath` | | Themes | A second `ResourceDictionary` with the same keys, merged in `App` before the window opens; the next start only (live switching would turn 289 `StaticResource`s into `DynamicResource`s) | The ~50 brushes | | Every new text | `{c:T '...'}` in the 12 catalogs | `Core/Lang/*.json` | ## What the mocks show that the launcher hasn't got - **Play on the chosen save needs the game.** Neither the game nor the launcher can start on a slot today; the game opens its own file select. It takes a game switch (say `--slot <n>`) that puts the cursor on that slot, or loads it ([L#229](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/229) asks for it). Until then the launcher shows the chosen slot and the game still asks. - **Icons.** The mocks use emoji as stand-ins; Avalonia draws colour emoji only through the system's fallback font, which differs from PC to PC. They become `c:Icon` kinds. - **A game icon pack** (item pictures as avatars) would be the game's own art: cut on the player's PC from their own build, as LL#55's save art is, with the player's initial when they aren't there. The bean pack the mocks show is the team's art and can ship. ## What has to come first Each step stands alone and can be reviewed alone: 1. Fix [LL#53](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/issues/53) (Play on Windows), merge [LL#57](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/57) (folders kept) and [LL#58](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/58) + [L#360](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/360) (hard links). 2. Players: [LL#55](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/55)'s core, per-player `--user`, today's saves become the first player's (copied and backed up first). 3. *Who's playing?*, the kinds, *skip next time*, the player menu, the upgrade path and the shortcut scan. 4. The last played save, Details, Extract / From a file. 5. The Telemetry section, once [L#141](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/141) / [LL#46](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/46) and [L#206](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/206) are merged. 6. The colour-key refactor, then the menu theme as an option. 7. The splash and Options (`--splash`, `--options <folder>`), then RecompLauncher starting it (a `recomplauncher.json` change, [L#354](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/354)'s file). 8. The Helper, once [L#353](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/353), the pull request key and a maintainer's gate ([L#378](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/378), reopened) are there. 9. [L#264](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/264)'s retakes (2–3 images) and new guide pages after steps 3, 4 and 7. ## Decisions needed 1. **How locked is Kid?** The mock holds a button for 2 seconds. A code would stop older kids too, and is one more thing to forget. And can a kid change their own kind, or only from another player's home? 2. **The standard saves folder on Windows**: `%APPDATA%\Longshot` (today's), `Documents\Longshot` or `Saved Games\Longshot`? Documents is where people look, and where OneDrive syncs. 3. **Example saves (5d).** A player with no save sees an example one. A save is made by the game, so an example save shipped with the launcher may count as something made from the game: it may need to be made on the player's PC, or left out. 4. **Named slots.** [L#259](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/259) says the game has one manual save per user profile, while LL#55 shows six slots per player: check what the game does before promising names. 5. **What RecompLauncher starts**, and who updates that folder: the splash's *Update*, or RecompLauncher (which reads only GitHub releases, [L#74](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/74))? 6. **The splash's cost**: one more program start before every game. *Go straight to the game next time* is there for those who mind. 7. **Translations**: a few dozen new texts in every catalog. Keeping the labels' strings as they are in the menu theme (recolour only) avoids doubling that. ## Where the mocks are The HTML mocks (clickable with `?proto`, themes with `?theme=menu|blossom`, input with `?input=pad|ps|kb|mouse`), the flow boards (an HTML board with zoom, full screen and a step-by-step gallery) and a FigCraft file with the clickable prototype are in a `launcher-redesign` folder, with a README going screen by screen and `related-work.md`, the list the last section is drawn from. They can go up as a branch if that helps review. The pictures here are placeholder renders: no game art, no game files. --- # Linked issues and pull requests As of 2026-11-14 08:05 UTC, from every issue and pull request of both repositories. **L** is MagicBeanDev/Longshot, **LL** is MagicBeanDev/LongshotLauncher. ## Fixed or answered by this | Item | How | |---|---| | [L#229](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/229) Idea: multi profile support | Players, each with their own saves, picked before the game (1, 4). Starting straight on a slot still needs a game switch | | [L#259](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/259) Idea: Multiple User Profiles / Save Directory Switching | The same, for shared PCs; its `--profile` is `--player`, with a shortcut per player | | [L#224](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/224) Idea: Do not rename install folder | One folder per channel, kept across updates (with LL#57) | | [L#337](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/337) Idea: install a pull request's build from the Longshot Launcher | The Helper (11–13) is its version for Normal players | | [L#386](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/386) Deck: the same install on microSD holds ~15-20% fewer fps | The SD check on the first start (0a, 0f), the hint and the move (15b, 15c) | | [L#351](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/351) Install: No space left on device | Sizes before building another choice, with LL#58 / L#360's hard links | | [L#74](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/74) RecompLauncher can only install from GitHub releases | Partly: the splash and Options reach RecompLauncher players; who updates their folder is open | | [LL#56](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/issues/56), [L#276](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/276) offline install | Partly: offline is written down screen by screen (5c); the installer itself is theirs | | [L#81](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/81) crash reports sent from the game to a bot (with consent) | The consent: one *Always send crash reports* for this PC | | [L#374](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/374), [L#375](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/375), [L#379](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/379), [L#380](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/380), [L#381](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/381) (closed ideas) | How did it go, saves of its own, *Building now*, move to nightly once merged, tell the PR you test: all in the Helper | | [L#376](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/376) the picker puts first what matches the tester's hardware (closed) | The Helper's *Add a pull request* (13) can put it first | ## Built on | Item | What the redesign takes from it | |---|---| | [LL#55](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/55) feat(saves): add player profiles and progress previews | Stable player folders and the save card used everywhere; its *Player* drop-down becomes the avatar screen | | [LL#59](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/59) feat(home): build a pull request's version to help test it | The Advanced home (6), the Helper's rows and picker, saves per build (7) | | [LL#57](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/57) fix(update): an update stays in its build's folder, named after its channel | The `stable`, `rc`, `nightly` folders | | [LL#58](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/58) + [L#360](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/360) hard-linked game files | Switching choices and adding PR builds stops costing a full game each | | [LL#46](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/46) + [L#141](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/141) the crash window | *Always send crash reports* is its tick; `--crash <folder>` is the model for `--splash` | | [L#206](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/206) opt-in performance statistics | *Send performance statistics*, off by default | | [L#353](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/353) ci(pr-builds): build pull requests and publish them signed | The builds the Helper installs | | [L#264](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/264) docs(guides): illustrate installation, settings and save transfer | Its Graphics menu capture is the menu theme's reference; 2–3 of its images need retaking | | [LL#54](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/54) LONGSHOT_LAUNCHER_EXE | The path per-player shortcuts use under a package | | [LL#47](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/47) launcher language selection and translations (merged) | Every new text goes through `{c:T}` | | [LL#43](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/43), [LL#26](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/26), [LL#31](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/31), [LL#14](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/14), [LL#38](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/38), [LL#48](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/48), [LL#52](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/52), [L#20](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/20), [L#277](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/277), [L#321](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/321), [L#168](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/168) (merged) | One save folder, slots and transfers, Saves on the home, the channel default, *Check for updates*, plain-word problems, imports, safe copies, tidy game folders, the website's channel names | ## Considered, and what to watch | Item | Why it matters here | |---|---| | [LL#53](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/issues/53) Windows: Play is disabled (`bin\longshot.exe`) | Every Play depends on it: fix first | | [L#378](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/378) sign PR builds only for the ones a maintainer let through (closed) | The Helper widens who sees PR builds: reopen before *I want to help* ships | | [L#270](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/270), [L#213](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/213) who may be tested without a label | The same trust rule the Helper's list should follow | | [LL#42](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/42) + [L#251](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/251) Send report, the website's inbox | A second report path: the same one consent should cover it | | [L#75](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/75), [L#44](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/44) local crash records | Local only: fine under any setting | | [L#294](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/294) Imported Saves: Scarecrow Song | Saves moved between players or shared as files can carry this kind of state | | [L#61](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/61) save and resume when restarting | The mechanism *Play this save* would need | | [L#355](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/355) isolated save playtests for co-op | Another place deciding where saves go: one rule for players, Helper and co-op | | [LL#61](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/61) build tools download as soon as the update check answers | Shortens the first start | | [L#230](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/230), [L#390](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/390) game language after build, separate text and voice languages | A kid's language would be per player; the game fixes it at build time today | | [L#225](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/225), [L#227](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/227) Steam Deck profile and defaults | The machine's settings, not the player's; shown on 15b | | [L#139](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/139) colour filter for colour-blind players | A per-player setting; the launcher's own themes aren't covered by it | | [L#134](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/134), [L#207](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/207), [L#42](https://git.magicbean.dev/MagicBeanDev/Longshot/issues/42) mods, randomizers | Not in the redesign: an Advanced page when it comes | | [LL#49](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/49), [LL#50](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/50) NFC page, frame generation runtime | Advanced-only pages: each new page needs a kind | | [L#354](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/354) DLSS and FSR 4 options for RecompLauncher | The splash's Options give them to RecompLauncher players |

Hello, i just want to add a request, it would be good if it is possible to disable auto updates, sometimes i want to stick with a build until i wanna update to a new one i choose. I would really apreciate it if auto updates are disabled

Hello, i just want to add a request, it would be good if it is possible to disable auto updates, sometimes i want to stick with a build until i wanna update to a new one i choose. I would really apreciate it if auto updates are disabled
Member

idea: making the circle icon in the profile pic a little bean? similar to our discord emojis

idea: making the circle icon in the profile pic a little bean? similar to our discord emojis

I converted this to a little demo web ui from the zip sent on the discord earlier today. https://7db.pw/launcher-preview/

Good work! I think it's clean and simple enough for the normal end user and the advanced mode looks good too!

I converted this to a little demo web ui from the zip sent on the discord earlier today. https://7db.pw/launcher-preview/ Good work! I think it's clean and simple enough for the normal end user and the advanced mode looks good too!
Contributor

We've adapted #55's player/save work toward this design and tested it together with the current #57 and #59. The current-player header opens Who's playing?, Home keeps a compact save preview beside the version controls, and the complete earned inventory and transfer tools live on Saves. The existing profile catalog and --user routing remain underneath.

The compact card now includes Skulltulas opposite rupees and the three stones inside the six medallions, following the game's arrangement. Profiles offer the five upstream bean pictures proposed here, copied unchanged with their provenance, plus an optional personal square image or initial. A custom image is copied with its player so its original file can be moved; cancellation and failed edits preserve the current profile.

  • Updated standalone #55, head 4f07866: focused player/save contribution, screenshots and its own checks; maintainer edits remain enabled.
  • Combined source, head 3c76361: #55 plus Victor's #57 at 926a070 and gab9281's #59 at f5a070e, on accepted main 3eeaf02. The profile UI, compact rewards and avatar work are separate commits for review or reuse.

Final combined checks: 1,220 Windows / 1,247 Linux core, 494 / 493 rendered UI, clean locked Release builds and 28 Linux release tests. The earlier measured integration updated an isolated nightly 148 to 153 in place, preserving protected profiles/saves/settings, then loaded Early -> Upgraded -> Early correctly. The final standalone contribution also loaded the upgraded profile and accepted movement. Current source contracts pass against game main 6c9edff; native runs used nightly 153. Detailed measurements and limits are on #55.

This is a working starting point for the team to continue shaping. Kid/Normal/Advanced policies, per-player settings, avatar packs, direct slot launch and PR-build save isolation remain future design work. It does not implement the whole mockup or ask for #59's unfinished dependencies to merge; no PR build was installed and its trust gates are unchanged.

The layouts and framework are available for the team to adapt as the design develops. Game files, saves and extracted assets have stayed local.

We've adapted #55's player/save work toward this design and tested it together with the current #57 and #59. The current-player header opens **Who's playing?**, Home keeps a compact save preview beside the version controls, and the complete earned inventory and transfer tools live on Saves. The existing profile catalog and `--user` routing remain underneath. The compact card now includes Skulltulas opposite rupees and the three stones inside the six medallions, following the game's arrangement. Profiles offer the five upstream bean pictures proposed here, copied unchanged with their provenance, plus an optional personal square image or initial. A custom image is copied with its player so its original file can be moved; cancellation and failed edits preserve the current profile. - [Updated standalone #55](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/55), head `4f07866`: focused player/save contribution, screenshots and its own checks; maintainer edits remain enabled. - [Combined source](https://git.magicbean.dev/Anarkkie/LongshotLauncher/src/branch/feat/combined-player-launcher), head `3c76361`: #55 plus Victor's #57 at `926a070` and gab9281's #59 at `f5a070e`, on accepted main `3eeaf02`. The profile UI, compact rewards and avatar work are separate commits for review or reuse. Final combined checks: **1,220 Windows / 1,247 Linux core**, **494 / 493 rendered UI**, clean locked Release builds and 28 Linux release tests. The earlier measured integration updated an isolated nightly 148 to 153 in place, preserving protected profiles/saves/settings, then loaded Early -> Upgraded -> Early correctly. The final standalone contribution also loaded the upgraded profile and accepted movement. Current source contracts pass against game main `6c9edff`; native runs used nightly 153. Detailed measurements and limits are on #55. This is a working starting point for the team to continue shaping. Kid/Normal/Advanced policies, per-player settings, avatar packs, direct slot launch and PR-build save isolation remain future design work. It does not implement the whole mockup or ask for #59's unfinished dependencies to merge; no PR build was installed and its trust gates are unchanged. The layouts and framework are available for the team to adapt as the design develops. Game files, saves and extracted assets have stayed local.
Member

Just a suggestion, some link back to our websites / about page with similar information found on https://longshot.magicbean.dev/about/

Just a suggestion, some link back to our websites / about page with similar information found on https://longshot.magicbean.dev/about/
Collaborator

From philia on Discord:

Discord clarification: the request is for users to add their own text and images; no bundled assets or presets are wanted. The target UI/location and intended use of the custom text/images still need clarification.

From [philia on Discord](https://discord.com/channels/1569849200047427645/1570913578918215730/1570913578918215730): Discord clarification: the request is for users to add their own text and images; no bundled assets or presets are wanted. The target UI/location and intended use of the custom text/images still need clarification.
Sign in to join this conversation.
No milestone
No project
No assignees
6 participants
Notifications
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/LongshotLauncher#68
No description provided.