Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core: Overhauling the Archipelago Launcher #4507

Open
aXu-AP opened this issue Jan 17, 2025 · 9 comments
Open

Core: Overhauling the Archipelago Launcher #4507

aXu-AP opened this issue Jan 17, 2025 · 9 comments

Comments

@aXu-AP
Copy link

aXu-AP commented Jan 17, 2025

What feature would you like to see?

The launcher is, after the website, the first thing the users see of the software. That's why the launcher is important to be easily readable, hype and help users to get into game.
There's a few problems in the current launcher.

  • It's a brick wall (both in looks and usability). Everything is at your fingertips, but finding the right things take time due to lack of organization/hierarchies.
  • It doesn't really guide the users through the process. The users are expected to read a few manuals or have a friend to help them.
  • Running an AP game requires you to hop through multitude of programs. My taskbar is rarely as busy as when starting a rando: the launcher, the server (if hosting locally), a text editor for yamls, a file explorer for managing everything, a client, an emulator/game...

To solve these problems here's a total reimagination of the ui of the launcher, including some new features:

Image
The launcher would be split into 3 main "pages": Setup, Host and Join.
The Setup page is used for creating and organizing yaml files. The list shows yaml files currently in Players folder. The add button gives options to pick from a template, import a yaml file (will be imported into Players folder), select from the user's previous yamls or install an APWorld. Selecting a game allows to edit options in the bottom part of the app much like on the website (but also for APWorlds). Right-clicking a game opens a menu with options to duplicate the settings, open game page on the site or disable the game (moves the yaml into Players/Disabled).

Pressing Generate seed button creates the seed and opens automatically the next page:

Image
The Host page allows for organizing generated seeds in output folder. The listing shows also the games that are in the rando, and tells what patches need to be sent to the players (you could drag'n'drop the files from the listing). There's a button to run the server with the selected seed. The server optionally could be run in the launcher window (by hiding the console window and relaying outputs into the launcher). Additionally, there's a button to open a room in archipelago.gg.

Then there's the last page:

Image

The Join page replaces the client list in the launcher. Clients can be favorited so they get shown in a nice chunky grid (I hope we'll get more icons for games at some point, even if generic ones to avoid licensing problems). There's also an option to open the full list of clients. On this page you can also access the Oot and Lttp adjusters (and any other future utilities for specific games).
I'm not sure if the clients support command line arguments for this, but it would be nice if you could enter connection info before launching the client. It's no deal breaker by any means if this isn't feasible.

Note: all the images here are non-functional mockups.

@PoryGone
Copy link
Collaborator

Is this something you intend to actually work on (do you have a background with Kivy development?), or is this just an idea that you're tossing into the soup?

@aXu-AP
Copy link
Author

aXu-AP commented Jan 17, 2025

I don't have experience in Kivy, but I do have lenghty history of hobbyist game dev and am quick learner. I wanted to gather opinions first, and then try my hand implementing this bit by bit or, if this isn't seen as good approach for the official launcher, make it a standalone app with more familiar frameworks for me (altough options page will be harder/need to pull webworlds regularly from this repo).

@PoryGone
Copy link
Collaborator

I'll provide what insight I can:

  1. This design assumes away a very significant amount of complexity. Even just having a local Kivy app for generating YAMLs is an extremely complex task (hence why it doesn't exist properly yet), let alone having it work into a smooth UI flow like pictured here. There are a few similar cases I see in this design.
  2. Making Kivy look well-styled is not impossible, but it is quite a pain, and most people who have tried have quit very quickly.
  3. You will be told that making a standalone app is a complete waste of your time. It has happened before. Someone made a functional C++-based desktop app for generating player yamls, but since it wasn't possible to incorporate it into the actual AP codebase, the dev who did it just gave up on it after an initial release.

Realistically, the Launcher is the way that it is not due to any lack of ideas for making it better, but rather from a lack of people with the unique combination of time, desire, and ability to do so.

@nicholassaylor
Copy link
Contributor

You might be interested in looking at #3934 as it looks to completely overhaul the launcher and make it more visually appealing.

@PoryGone
Copy link
Collaborator

Tbh I'd forgotten that Silvris has gotten even that far, lol

@ReverM
Copy link
Contributor

ReverM commented Jan 18, 2025

Tbh I'd forgotten that Silvris has gotten even that far, lol

Yeah Silvris is a Kivy wizard

@aXu-AP
Copy link
Author

aXu-AP commented Jan 18, 2025

Thanks for insights, I appreciate it!

  1. it wasn't possible to incorporate it into the actual AP codebase, the dev who did it just gave up on it after an initial release.

Yeah the only way I'd see standalone be working is to include AP as a git submodule, make a way to retrieve relevant info from there and regularly pull upstream changes. It'd be a fiddly process and makes the app way heavier than it should, altough not impossible.

You might be interested in looking at #3934

Yes I saw it and actually tried to mimic the dark green look for this. I probably should wait for that to be merged and start learning KivyMD then...

  1. Even just having a local Kivy app for generating YAMLs is an extremely complex task
  2. Making Kivy look well-styled is not impossible, but it is quite a pain

Interesting! I'll try to look into what challenges there are. I hope that the aforementioned KivyMD pr gets merged since that seems to be better suited for creating something like this.

@Silvris
Copy link
Collaborator

Silvris commented Jan 21, 2025

I'm personally not a fan of this design. In most cases, if I am opening the launcher, I am doing so with a specific purpose in mind. I want to play a game, so I want to get to that game's client as quickly as possible. If I want to generate then host a game, I'm pressing two buttons max. I think the launcher should be simple, and get people to their goal as efficiently as possible.

That being said, I think this would hold some merit as a GUI-component for Generate, as that section of the local generation experience could use some refinement (as well as a quick host-game button on resolution).

As an aside:

Even just having a local Kivy app for generating YAMLs is an extremely complex task

I actually have it made, however it is also waiting on #3934 for both general cleanup and because base Kivy lacks the control needed to effectively handle option groups.

@aXu-AP
Copy link
Author

aXu-AP commented Jan 21, 2025

I appreciate the feedback. Ironically, I feel that this design would be faster to use for me at least. The current launcher's problem is that everything has the same weight (except Ahit and Mc clients, and Discord) and thus scanning the list for correct option takes time and effort. I've been helping my friends to get into AP and you'd be surprised how much time it takes them to find correct options in the launcher and understand how the system works.

Ideally the launcher remembers which tab was opened last time and opens it directly, removing that one crucial click in most scenarios. If you are doing the same thing you were doing last time, this launcher requires the user to press just one button. The current launcher, altough can launch another piece of AP via one button, requires an extra step or two in that app to actually start (for example, choose seed to host or connect the client).

Users tend to use same functions repeatedly, for example not all users host at all, so their launcher should be on join page most of the time (unless they are editing yaml). For similiar reason the option to favorite games is a must. Out of 20-odd clients I have in the launcher, I use only a few.

Also I want to remind that while I feel that this launcher would be usually as fast to use as current version, that wasn't the ultimate goal with my design. My goals are making things less confusing for new users, having a nice looking piece of software and lessen the amount of window hopping one needs to do (especially when generating, hosting and playing).

Especially important for me is the new user experience, a lot of people don't bother reading guides. They just download the app and expect it to make sense or guide them through. Of course, AP is quite specialized piece of software and setting up clients most likely need some explanation (at least for emulated games).

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

No branches or pull requests

5 participants