Giter VIP home page Giter VIP logo

slippi-launcher's Introduction

Project Slippi

Mission

The focus of this project is around the sport of Super Smash Bros Melee. There are a variety of actors involved in the sport, these include the competitor, streamer, caster, fan, spectator, and more. We are trying to create features for these people to enhance their experience when doing anything Melee related.

The primary means of doing this introduced by this project is by creating a data-rich replay infrastructure. Replay files have the potential to expand the competitive Melee experience in many ways including:

  1. Generating complex stats far beyond what is currently possible with video analysis tools
  2. Archiving a much larger percentage of tournament matches (all setups can be recording setups)
  3. Enabling new methods of streaming
  4. Enhancing streams and commentary discussion with detailed information about the games

More Information

Support Development: https://www.patreon.com/fizzi36

Release Blog Post: https://medium.com/project-slippi/project-public-release-4080c81d7205

Release Demo Video: https://www.youtube.com/watch?v=1OYS5JSZepQ

Discord Server: https://discord.gg/XpHZex6

.slp Parsing Libraries

Javascript [Official]

slp-parser-js: https://github.com/project-slippi/slp-parser-js

Python [Community]

py-slippi: https://github.com/hohav/py-slippi

Rust [Community]

peppi: https://github.com/hohav/peppi

How to Contribute

If you're interested in making Melee better than it already is, you should consider contributing!

Follow these steps to contribute:

  1. Fork the repository you're interested in contributing to (see Project Structure section below for the breakdown of the project)
  2. Checkout your fork
  3. Make changes
  4. Commit and push your changes
  5. Submit a pull request into the upstream project
  6. I will review the pull request and decide if it's worth merging. Please note that there's no guarantee what you work on will get merged into the main branch. That said, you can increase your chances by talking about it in the discord!

Project Structure

The project is composed of many different parts and projects that work together. This section will detail what those parts are, where they are, and how they can be contributed to.

ASM Gecko Codes (Assembly)

There are two main distributed codes: Slippi Recording and Slippi Playback.

The recording code will write data out of the game through Port B of the console. In order to do anything with this data, something must receive it. In the current case, the system receiving it is Dolphin, this will be addressed later.

The playback code requests and reads data from Port B of the console. It will request data it needs in order to play back a replay. Once again something must respond to these requests with the correct data and Dolphin currently serves that purpose.

The codes can be found at https://github.com/project-slippi/slippi-ssbm-asm. They can be compiled using the gecko tool in this project: https://github.com/JLaferri/gecko. See project readme for more info.

Faster Melee (C++)

All the code to make Dolphin support the assembly codes were built on top of Faster Melee. This code can be found at https://github.com/project-slippi/Ishiiruka/tree/slippi. Make sure to use the slippi branch. For info about how to build Dolphin, look here: https://github.com/dolphin-emu/dolphin/wiki.

To find the Slippi-specific stuff in the codebase, search for "Slippi".

Replay File

Dolphin currently serves the purpose of receiving data from the game and writing a replay file. To understand the structure and format of the replay file, please read the spec here: https://github.com/project-slippi/slippi-wiki/blob/master/SPEC.md

Slippi Launcher (TypeScript/React/Material-UI)

The desktop application is maintained in the repo found here: https://github.com/project-slippi/slippi-launcher.

This application is the one stop shop for Slippi users. Acts as a Netplay Launcher, Dolphin Auto Updater, Replay Viewer and Analyzer, and more.

.slp Tools Library (Javascript)

Replay files are read and stats are computed by a separate library that can be found here: https://github.com/project-slippi/slippi-js. This was split out from the desktop app in order to allow people to read replays and display stats in their own applications.

Nintendont (C)

We have also created a custom build of Nintendont which emulates a Slippi hardware device in a similar way to Dolphin. It is still currently a WIP but it can be found here: https://github.com/project-slippi/Nintendont/tree/slippi

slippi-launcher's People

Contributors

b3nd3r-ssbm avatar boulajp avatar cnkeats avatar dependabot[bot] avatar jlaferri avatar jmlee337 avatar jwsharpe avatar kethku avatar l-french avatar liamjen avatar maxtretikov avatar n0namedguy avatar nikhiljha avatar nikhilnarayana avatar octopirate1 avatar pavethem avatar pdeblois avatar pnivlek avatar randypaquette13 avatar rapito avatar rodneymcquain avatar ryanmcgrath avatar seant4 avatar sjmcleaver avatar skbrown333 avatar tec27 avatar vinceau avatar vmaggioli avatar willthornton avatar zaderrr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

slippi-launcher's Issues

stderr maxBuffer length exceeded

When watching a replay on Linux, this error comes up with the text:
"An error has occurred
stderr maxBuffer length exceeded"

Once this happens, the Dolphin instance exits.

This is using the AppImage distribution of slippi-desktop-app on Linux. This does still happen with the current version, and if required, I can try building with debugging enabled if possible to help debugging.

Some notes about this error:

  • I can skip around the replay without problem.
  • I can pause and the replay will not crash.
  • It seems that this error is caused after a certain amount of time of the replay being played (After a few tests this seems to be around 1 min and 2 sec)

Question: Unable to use semantic-react-ui's Dropdown component in this project

I'm trying to use semantic-react-ui's Dropdown menu component to create a file filter in this project. The initial component renders fine, but the menu is invisible when clicked.

The relevant HTML is added to the document but the element is invisible: could this be conflicting with a style configuration I don't know about? (The button is clicked in this example)

image

And here is a working example with the exact same code outside the project:

https://codesandbox.io/s/semantic-ui-example-w6jro?file=/example.js

Launcher v3

TODO Status

  • Migrate to ERB
  • Improve security using ContextBridge and turning off nodeIntegration
  • Replay DB #178
  • Relay 2.0

Background

We achieved a lot with the release of Launcher v2. We rewrote everything in Typescript, cleaned up the codebase, added Dolphin auto-installing for Netplay and Playback Dolphin for a unified experience, and rewrote the entire UI with a consistent theme and traditional app layout.

However, there are still some outstanding issues. For example:

  • Being dependent on the unmaintained electron-webpack has proved to be a pain point when wanting to upgrade to newer Electron versions.
  • Security is quite poor with nodeIntegration enabled everywhere, and not following Electron security best practices

Goals with version 3

With that in mind, we may want to rethink the app once again and aim towards these goals, in-priority order.

New template

ERB is a popular boilerplate which uses Typescript and React, and is built upon Electron 13. In addition, it supports contextBridge out of the box. It does not yet support Typescript inside of the preload.js but we might be able to solve that ourselves. This template has over 18k stars and appears to be well maintained. This could allow us better flexibility and maintainability in the future.

Security first

We should aim to put security first and follow best practices for security in Electron apps. This includes using contextBridge for exposing node functionality, enabling Content Security Policies (CSP), disabling nodeIntegration etc. We should no longer use any node-specific packages inside of the renderer process, and rely only on contextBridge.

File indexer

Update: We probably don't actually need to do this. We can achieve close enough behaviour by doing the following:

  • Add a button to re-index in the settings
  • Re-index on Replay Browser page load
  • Re-index on notification from Dolphin that a file is done writing to (WIP: Dolphin does not have this ability to communicate with the launcher just yet)

This is actually a prerequisite for the next goal, replay database. We want an efficient way to track a bunch of folders for changes, and update our replay database with the SLP file data. This indexing process can be potentially quite resource intensive and so we need a way to enable/disable the file indexing (and database updating) during games (check for Dolphin.exe running). Using Axosoft/nsfw (which seems like it would be faster than chokidar) inside of a node worker may be a good start.

Replay database

We didn't get around to adding this feature with version 2. With version 3 it would be nice to have finally add a replay database containing the game start block and metadata block, in a relational database. We can then add custom filters for finding games based off character or stage, player names, etc. We might potentially want to also expose endpoints for 3rd party applications to query the database.

Relay 2.0

We currently have the ability to expose live Slippi game data over a local server for 3rd party applications to tap into, also called the Console Relay. With Relay 2.0 we should be able to expose this data via WebRTC to allow applications over the web to be able to receive the game data feed. We may want to create some sort of permissioned system to allow websites to request access to the live game data, with some sort of prompt that shows up in the launcher. Using WebRTC will allow us to reduce the load on the Electron main thread since we don't have to actively maintain a websocket server.

replay grouping

Add an option to group contiguous replays based on the player names. Ideally we would have some form of multi replay stats support when this gets implemented

Update node-sass dependency to 4.12.0 or 4.13.0

I have node 12 installed in my machine, and I am not able to build. This happens because when using node 12 the it is not possible to install/build node-sass 4.10.0.

node-sass needs to be upgrade to at least 4.12.x Keep in mind node 12 is the latest LTS version.

check for dolphin updates in the background

Users have to wait about 2 seconds every time they launch the app just for both Dolphins to be checked for updates, but updates are not very frequent. We should move the update check to the background and give users a notification telling them that there is an update available. Updates should happen on click of the notification or when the app is next launched.

Missing multiselect functionality in the rewrite

One of the features that hasn't been ported over in refactor/rewrite is the ability to multiselect replay files to play/delete. We should add back in the ability to multiselect files by clicking on them (i.e. without an explicit checkbox like in the current desktop app). A similar toolbar at the bottom with play all, clear, delete should show up when files are selected.

improve stats page

Adding L-Cancels to the stats page was not easy and showed that the stats page was in need of a refactor. Code design should be discussed with Vince and I.

Add a Replay API

Are there any plans for a Slippi Desktop API? If not I'd take a crack at it.

Goal

Something similar to the ballchasing.com API for Rocket League, specifically the /replays endpoint. Would allow users to query their replays for specific data.

  • Would make it much easier for other people to generate stats or build other tools off of Slippi, and is much more user-friendly than the existing method of parsing one replay at a time (using a slp parsing library.)
  • Possibly faster(?)

Developer Mode does not work even with gecko code enabled

With Desktop App v1.6.8, Developer mode no longer works in replays, even if the gecko code is enabled. This prevents users from pausing, turning the camera, showing hitboxes, etc. and is a regression from v1.6.7.

This has been brought up in the Discord a few times, but I am opening an issue to help track that it still needs to be fixed.

ability to modify simple Dolphin settings

Commonly updated settings should be updatable via the Launcher's dolphin settings page. These should not be editable when Dolphin is open because it wouldn't know the changes were made and overwrite them on close. This issue does not cover gecko codes (#177).

Bug: App crashes when renaming a file and returning to replay browser

Repro steps:

  1. Go to browse replays in a root folder that has replays in it
  2. Browse in file explorer to the replays currently loaded
  3. Rename one of the files
  4. Click back in desktop app
  5. Go back into browse replays, the app should crash with errors that it can't read from a file with the old name

feat: multiple root replay directories

Some people might want to store replays in multiple folders across multiple drives.

  • Netplay Replay Folder must always exist and be a valid path.
  • Ability to add and delete additional replay folders
  • Replays folders must show up in the replays tab

Launcher sends invalid ubjson message

When the user hasn't yet selected whether a Console connection "is realtime" yet or not, the value is null. So when it gets serialized into ubjson and sent to console, the ubjson looks like this: (just a partial look)

0x69, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x4e

That last 0x4e (N) is a ubjson "Null operation" and has no value. So the whole message becomes invalid to parse.

Basically, the app should default "isRealtime" to false, rather than leaving it null when unchosen.
https://github.com/project-slippi/slippi-desktop-app/blob/a8e783cab96cf51831850c092b848c323005e854/app/domain/ConsoleCommunication.js#L74

Add support for hiding or deleting "Unknown" time replays

Lots of users are getting confused when they open up their replay browser and just see a bunch of Unknown time replays that aren't recent. While we have fixed the issue on the asm side, the browser will still be heavily populated with these replays for many users.

I'm leaving the issue kinda vague cause I want to see what people can come up with. Hiding or just straight up deletion is fine, but they should be optional. Maybe do both?

feat: add support for opening other ISOs easily

Right now people have to launch a configure dolphin or update their ISO to use UnclePunch Training Mode or 20XX. A way to launch dolphin from the home page without starting an ISO would suffice. A possibly more cohesive option would be to let the user add a Training ISO and have a way to start that specific ISO.

Problems with desktop file and xdg-open on Linux

The path to the AppImage file in the Exec field of the desktop file is wrapped in quotes, which causes errors such as the following when using xdg-open:
which: no Slippi-Launcher-1.4.4-x86_64.AppImage" in (./"/home/haystack/source)

This makes it so you cannot open .slp files from the Slippi site in your browser because the URL handling is done by xdg as well. Opening opening a .slp file from a file browser will also most likely be broken by this although it may depend on your file browser.

If I manually remove the quotes in the Exec field of the desktop file, then it works fine and the slippi:// URLs are handled properly and I can open the files directly with xdg-open as well.

The spec seems to imply that it should be fine to double quote the path, so I'm not entirely sure why it doesn't work. Could possibly be an upstream bug in xdg-utils.

Arguments may be quoted in whole. If an argument contains a reserved character the argument must be quoted. The rules for quoting of arguments is also applicable to the executable name or path of the executable program as provided.

For debugging purposes, here's the generated desktop file (~/.local/share/applications/appimagekit-slippi-desktop-app.desktop):

[Desktop Entry]
Name=Slippi Launcher
Comment=Slippi Desktop App for browsing and playing replays.
Exec=/home/haystack/source/Slippi-Launcher-1.4.4-x86_64.AppImage %U
Terminal=false
Type=Application
Icon=appimagekit-slippi-desktop-app
StartupWMClass=Slippi Launcher
X-AppImage-Version=1.4.4
MimeType=x-scheme-handler/slippi;
Categories=Development;
X-AppImage-BuildId=1K1bOeuJzPhoG9WcseHboZyGhZK
X-Desktop-File-Install-Version=0.24
X-AppImage-Comment=Generated by /tmp/.mount_SlippipSpjHL/AppRun
TryExec=/home/haystack/source/Slippi-Launcher-1.4.4-x86_64.AppImage

Add support for inferring time based on the filename

The number of replays with Unknown time has been increasing recently and it might be worth just inferring the time from the file name if the metadata is empty since most users are probably not going to rename the files. If the time can't be inferred then it will stay as Unknown.

Time format for replay names is %Y%m%dT%H%M%S on Dolphin.
For Nintendont, check this: https://github.com/project-slippi/Nintendont/blob/slippi/kernel/SlippiFileWriter.c#L83-L87 (we write the MAC address in addition to the timestamp)

Rewrite it entirely

The desktop app is long overdue for a rewrite. This issue is just so we can keep track of the overall work to be done. Work is being done in https://github.com/project-slippi/slippi-desktop-app/tree/refactor/rewrite and rewrite/* branches. Always make a branch off of refactor/rewrite with the name rewrite/<feature name>.

The rewrite is now open to outside contributions. However I suggest you discuss code design with me and Vince before implementing something so you don't waste time on something we don't like.

Deferred for now

  • Gecko code disabling (Nikki)
  • Replay caching (#126)
  • Global Stats (#125)
  • Replay grouping
  • Friends list
    • Should be able to add friends manually or from the replay browser.
    • Should let you invite friends to play some games (no chat though).
    • Will likely require Fizzi supervision.
  • Visualizer
  • Show patch notes after an update (#132)
  • Multiple top level folders (#131)
  • Install GCC Adapter drivers on install of desktop app or with the click of a button
    • I don't want this merged in until after the first release of the new desktop app. The issue is that i have no clue if antivirus software programs will complain about what it is doing.
    • To do this all you need to do is run the simple installer found here: https://github.com/project-slippi/libwdi/releases/tag/slippi-v1

Done

  • Logging in with slippi.gg credentials
  • Big Medium play button
  • Downloading the latest netplay dolphin
  • Launching netplay Dolphin
  • Replay browser (#117)
  • Game Profile (#115)
  • Download latest playback dolphin (#120)
  • Auto update dolphin by comparing version with release (#120)
  • DolphinManager (#121)
    • manages all instances of dolphin (netplay, playback, spectate, config) and launches them from the main thread
  • Download dolphin on main thread (#124)
  • News feed (#129)
  • Dolphin Settings page (#130)
  • Console/Broadcasting (rewrite/broadcast-spectator branch) (#148)
  • Prompt for local play when not logged in
  • Finish updating styles to match designs
  • New icon designs
  • Prompt and quick start page for when user hasn't created online connect code
  • Console mirroring and autoswitcher (rewrite/mirroring)
  • merge master changes like v6 of slippi-js, new stats etc.
  • Test playback + netplay dolphin installing and auto-updating on all platforms
  • QA testing on mac and linux
  • SLP file association
  • Electron app auto-updating

feat: drag and drop multiple files

Drag and drop is a useful feature for sharing replays, but having to do them one at a time might not be ideal so there should be some way to drag and drop all the selected files on the replay browser.

feat: account switcher

Being able to easily add accounts to/remove accounts from the slippi desktop and switch to an account with a couple of clicks would be pretty sick imo.

Performance: Cache loaded file results

Long load times are unfortunately not isolated to the startup of the desktop app - Upon returning back to the replay browser from a game stat screen, replays are reloaded from disk.

Consider adding application-level caching to previously loaded games.

simple and complex replay filtering

Relies on #178

Some basic options would include stage and characters. Complex filtering should be closer to writing SQL queries but with a bit less complexity.

feat: add update notification and ability to choose when to update

The app just updates automatically and without notice to the user right now. Adding a notification and the ability to choose when to update would help reduce confusion about if an update worked or not. There could also be a setting that enables or disables always updating on close.

show patch notes after an update

Patch notes are already listed in the news section (#129), but adding a modal to bring the notes front and center after an update is still important so that people don't accidentally miss what changed in an update.

  • Display a modal that has all the patch notes for each update
    • This may require showing multiple modals or combining the patch notes.

Users cannot broadcast multiple streams

When fetching the list of broadcasts it currently returns the following type:

{
  broadcaster: {
    name: string;
    uid: string;
  };
  id: string;
  name: string;
}

However, the id field is identical to broadcaster.uid. This means it's not possible for a single user to broadcast multiple streams.

There may be a use case where people might want to broadcast say a Dolphin instance, and a console mirror, or multiple consoles etc. One example I can think of is say primary streams and secondary streams on Twitch.

If we want to support such a use case, backend server changes are required, since it's the server which determines a broadcast ID.

move IPC calls to functions in lib

Components should not have to deal with handling IPC calls directly. IPC calls should be encapsulated inside of an async function inside of lib which components can then import.

It may also be helpful to have the functions exported inside of a hook so that the exported function already handles errors using addToast.

Scroll Position isn't properly updated

Right now the scroll position is updated when the FileLoader component is updated, but it doesn't scroll to the correct spot.

Test:

  1. Ensure the folder has enough replays to require lazy loading
  2. Scroll to the very bottom (load all replays)
  3. View stats of any replay at the bottom
  4. Press Back to return to the replay browser
  5. Confirm that the replay browser did not scroll to the bottom.

Unable to stream replays on 1.6.1

I'm getting the error:

Command failed: /Users/axlui/Library/Application Support/Slippi Desktop App/dolphin/Slippi Dolphin.app/Contents/MacOS/Slippi Dolphin -i /var/folders/y5/r8b115js4wd2pzx8r9bnp4qc0000gn/T/slippi-comm-vod-6af709a95845c07cf90f6ca7.txt -b -e /Users/axlui/SMASHH/Super Smash Bros. Melee (USA) (v1.02) copy.iso

when trying to stream .slp files from the new client. I'm not sure how I can gain more visibility into what is going on.

Performance: Replay Browser's loading time is proportinal to number of replays

Currently, there's no support for the pagination/segmentation of replays. The result of this is that every replay file must be loaded before the UI becomes usable.

After using slippi for a few months (accumulating about 2500 replays), my load time is about 15-20 seconds. Adding proper pagination support would allow for a constant load time of the desktop app.

Rewrite Styling/Design

Discussion/comments about the design should be done here for posterity.

Will reopen when we feel the design is in a good spot to be critiqued.

Changing Install Location

This isn't exactly a bug, but it would be really helpful if you chould choose the install location of Project Slippi rather than just having it default to the C drive. My C drive is essentially full, so I'd rather not put more programs on to it.

Replay Database

Description

Add a database that caches replay data so we don't have to parse replay files all the time. Currently the work being done in this space can be seen in #400. It addresses most of the issues raised with previous implementation attempts, such as:

  • Database interactions do not block main, since they run in a worker
  • Migrations are automatically handled by the kysely package
  • We have typed databases and typed database interactions thanks to the kysely package
  • It's fairly well tested

Roll-out plan, and future improvements

  1. Merge #400
  2. Once well tested, remove the old FileSystemReplayProvider
  3. Add pagination and continuation support such that we don't return all replays in a folder
  4. Remove virtualization in the replay browser
  5. Add search/sort/filter capabilities by utilising the database
  6. [Stretch] Add match/set/session groupings
Show old issue notes

There are some issues with the current implementation in the rewrite/db branch from PR #126.

  1. It maxes out CPU during stats processing/db insertion.

    • so like imagine you were playing some netplay tournament, and then cuz you're launching dolphin through the launcher, and now launcher detects a bunch of new slp files so it starts indexing them by calculating stats and inserting them into the DB, your cpu is at 100% and you're dropping dolphin frames or something as a result. That's really bad. What we need is some sort of background indexer which is allowed some amount of cpu, and then just pause when dolphin is open.
  2. it has some weird event listener issues cuz it kept complaining that the event listeners hit the max of 11.

  3. figure out how to best manage typings between the sqlite and the rest of the app.

    • currently all the sqlite schema stuff is using strings and it's not very typesafe. i personally want to use some sort of ORM to manage database changes and migrations.
  4. figure out a good workflow for database migrations without losing data and having to re-index on major schema changes.

Add friends list

Friends list should be part of the user's data on the website so this will require some supervision from Fizzi.

Add friends manually or from the replay browser. Website backend should provide desktop app with list of friends. friend requests, and declined friend requests. Friend requests should be accepted or declined. Declined friend should not be able to re-request unless the user clears the decline.

Some method of communication might be fine, to say invite a friend to play some games. It would be nice to have discord integration at this point so that users can share their discord with added friends.

opening two configuration dolphins blocks a close event from triggering

I noticed a very weird interaction where if you open two dolphins for configuring, the close event of the dolphin opened second won't trigger until you close the dolphin you opened first. This doesn't happen when you launch netplay and a replay.

Steps to repro:

  1. Add some log statements in the close events for configuration dolphins.
  2. Configure a Netplay Dolphin.
  3. Configure a Playback Dolphin.
  4. Close Playback Dolphin, notice that the log message doesn't show up.
  5. Close Netplay dolphin, notice that the log message for netplay shows up immediately and then the log message for playback shows up.

Version on slippi.gg

Currently the website lists version 1.6.4 as the latest and provides downloads for this version, but version 1.6.5 seems to already be out.

Also would there be a possibility to open-source the website itself, or at least a way to provide feedback about it?

Dolphin Settings Page

The desktop app is now capable of launching dolphin for playback and netplay, but modifying dolphin requires going to the folder in appdata which isn't convenient. We have settings pages available which we can populate with various dolphin settings. There should be a page for Netplay Dolphin Settings and Playback Dolphin Settings, but most of the options will be the same.

Bolded items are required for this issue to be closed.

  • Configure button
  • Reset button
  • Clear Cache button
  • Modify simple settings
    • ex: ability to turn on and off gecko codes

Slippi desktop app looks for `latest-linux.yml` in wrong release.

I just downloaded the latest Slippi Desktop app for Linux from slippi.gg, version 1.4.5.
When firing up the app, it looks like it just gets the latest release off of Github and expects to see a latest-linux.yml.
The latest release on Github is 1.5.1, but that was not built/released for linux, and there is no latest-linux.yml.

This is my first time trying the app so I don't know if what I then observed is relevant:

  • Configuring paths went fine
  • Could launch FM dolphin by clicking "Configure Dolphin". It says "Waiting for game"
  • After configuring paths, I clicked the "Back button", but the app still says "Root Folder Missing".

App logs:

$ ./Slippi-Launcher-1.4.5-x86_64.AppImage                                                                                                                                                                       
[19:10:34.122] [info] App starting...
[19:10:34.326] [info] Handling URL...
[19:10:34.326] [info] 
[19:10:34.327] [info] protocol: null:, hostname: null
[19:10:35.544] [info] Checking for update
[19:10:36.808] [error] Error: Error: Cannot find latest-linux.yml in the latest release artifacts (https://github.com/project-slippi/slippi-desktop-app/releases/download/v1.5.1/latest-linux.yml): HttpError: 404 Not Found
"method: undefined url: https://github.com/project-slippi/slippi-desktop-app/releases/download/v1.5.1/latest-linux.yml\n\nPlease double check that your authentication token is correct. Due to security reasons actual status maybe not reported, but 404.\n"

After those startup logs, a dump of the request headers and a stack trace follows.

feat: button to install GC Adapter Drivers

Have a button that downloads, if necessary, and installs the right driver for GC adapters depending on the OS.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.