Code Monkey home page Code Monkey logo

launchpad's Introduction

Launchpad - Game Launching Multitool

Manage your game platforms and create beautifully-simple .exe files to launch games from any platform within Steam or other applications.

main-window--tri

Every launcher in the list creates a small .exe file you can add right to Steam that handles the entire launch process seamlessly. Or if you don't want to use another platform, you can run all of your launchers directly from Launchpad!

Check out my introduction series on YouTube.

Introduction

Gone are the days when your entire game library exists in the form of game discs--digital downloads are where it's at. But there are many different options for where and how to download and play PC games. And frustratingly, many games are specific to certain distribution platforms, meaning gamers are often forced to run several different game platforms on their PC simultaneously.

This is where Launchpad comes in. It helps you take control of your games and game platforms, letting you launch your games the way you want, without the usual pitfalls and compatibility issues that come along with trying to make game platforms work well together.

Launchpad can handle almost any advanced launch scenario you can throw at it!

Launchpad can be used as a game launcher itself (you can run all your launchers directly from the UI!), but what's cool is that each game launcher exists as a self-contained .exe file with the right name and icon, and you can add it right to Steam or any other platform that allows external games.

Why Use Launchpad

Let's take Steam as an example, because that was the original use case for Launchpad's creation.

Adding Non-Steam games to Steam often works well, but it is a bit quirky, and sometimes features are broken or it might not work at all. Some common issues include:

  • Some games that open via URL or the Windows Store can't be added to Steam.
  • Some games cause Steam to say you're playing only for a moment and then stop even though you're still in-game. In these cases, playtime cannot be tracked and your friends don't know you're playing a game.
  • Some games launch in ways where the Steam overlay doesn't hook into their process
  • Some games that use external launchers continue to say you're playing the game after you exit--sometimes for days if you don't notice.
  • Changing a game's icon in Steam adds a shortcut arrow that obscures the icon and makes it obvious it doesn't belong

Launchpad was created to solve all of these issues and more. It gives you a simple way to create a lightweight .exe file for any game that looks and acts the way you want. You can add these files to Steam, or any other launcher. Or you can simply launch them directly to help you control how your games run.

Features

Launchpad is getting new features all the time. Some of its main functionality includes:

  • A simple, themeable GUI for managing your games and launchers, as well as optionally displaying progress while launching your games. The default theme fits in great with Steam!
  • Generate .exe files to launch any type of game from any PC game platform
  • Manage and detect installed games from Steam, Epic, Origin, Blizzard, and Bethesda.net effortlessly
  • Add custom games from any other platform without editing a single config file
  • Sync games with Launchpad's online launcher API to pre-configure advanced details automatically
  • Fully automate a game's launcher (such as starting it or closing it before or after running the game, with customizable behaviors and delays)
  • Run games from shortcut, .exe file, URI, or a custom command. Run games directly, or as a scheduled task. Take over process ownership from another launcher
  • Run and/or close a custom list of programs (such as performance hogging apps or music apps) before and/or after running a game
  • And more!

Screenshots

Note: The screenshots section was pitifully outdated and did a disservice to the project. I will make new screenshots soon, but I encourage you to see it for yourself!

How To Use

If you're a new user, head over to the Releases page and simply download and run the latest Launchpad-x.x.x.exe installer file!

The setup screen that runs on first launch will walk you through some initial options and get you started detecting your games and creating your first launchers.

Once you've got some launchers created, simply Build All, and you will have a .exe file for each game launcher that you can add to Steam or any other platform.

Updating Launchpad

Launchpad automatically notifies you when there are updates available, and clicking Update will automatically download and start the latest installer.

You can also click Check for Updates in the main Launchpad menu at any time.

Note on AHK version of Launchpad

Launchpad is built with the AutoHotKey v2-alpha release. Since this is an alpha release, is it under rapid development and breaking changes occur regularly.

It is for this reason that we recommend using the installer release of Launchpad, which always includes the correct version of AutoHotKey v2 that it's compatible with.

Using the installer, you'll never have to worry about which AHK version to use. If you with to use the AHK version of Launchpad, such as for development purposes, you must have a compatible version of AHK v2 available. The simplest way to do this is to first install the Launchpad installer, which will put a compatible version of AutoHotKey in its "Vendor\AutoHotKey" directory. You can then run the AHK version of Launchpad using this AutoHotKey binary.

Note on Portability

Launchpad's configuration files are portable, but the launchers that Launchpad generates from them might not be. Some functionality in Launchpad relies on dependencies existing in the right place, and even if the same game is installed on another computer, that computer may not necessarily be able to use your generated launcher file.

If you reinstall your OS or move your games, you'll probably want to open Launchpad and rebuild your launchers to make sure they are fully up-to-date.

Credits

Launchpad was conceived and developed by Ben McClure of Volantis Development ([email protected]) using the powerful scripting language AutoHotKey.

Launchpad automatically downloads a few dependencies for use during its operation. The dependencies it installs are:

These dependencies each use different licensing from Launchpad, and they have their own release cycles, so Launchpad doesn't include them in your initial download.

Launchpad downloads and manages these dependencies internally, and you don't ever have to even think about them.

Contributing

Any and all contributions are greatly appreciated! Here are some ideas for ways that you could help:

Attribution

  • Icons made by iconixar from Flaticon.
  • Spinner graphics by loading.io
  • Launchpad uses parts of the 7zip program for extracting archives. 7-Zip is licensed under the GNU LGPL, and its full source code can be downloaded from 7-zip.org.
  • Some launch techniques for Battle.net were learned by studying the excellent BnetLauncher by @dafzor. Launchpad no longer uses BnetLauncher and does not include any of BnetLauncher's code, but would not be where it is today without it.
  • The Launchpad Overlay feature was learned with the support of @lemasato and by studying his very useful Non-Steam-Overlay-Manager tool.

launchpad's People

Contributors

bmcclure 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

Watchers

 avatar  avatar  avatar  avatar  avatar

launchpad's Issues

Implement better launching of Epic games

(Description mostly copied from the task for Origin)

Launchpad launches Epic games with a fairly generic and forceful method--it closes Epic if it's running, then launches the game (which opens Epic itself), then after closing the game it closes Epic again. There is planned functionality to optionally launch Epic again (through a scheduled process so it doesn't hook into the Steam overlay) at the end so you can keep it running.

It does this because otherwise process hooks such as the Steam Overlay typically won't work. Steam has to be the thing that launches the game process, but if Epic is already running, then Epic , which is a sibling of Steam and not a child, is what launches the process. Closing Epic first means Steam can own the Origin process, which makes the overlay work.

However, having to forcefully close Epic is not ideal. It can mean cloud saves aren't fully uploaded, and it means you won't get game updates until you run Epic next, which might be when you're trying to play the game that needs updates.

Blizzard game launching works much better by contrast. It happens like this:

  1. Launch Battle.net's exe with an argument which goes to the game's correct page and click the Play button automatically
  2. Wait for game process to exist, and then immediately close and re-launch it with the exact same process info

This causes Battle.net to still know you're playing the game, but Launchpad now owns the game process so Steam's overlay can hook in regardless of whether Battle.net was already running or not.

A similar solution should be found for launching Epic games if possible.

Implement better launching of Bethesda.net games

(Description mostly copied from the task for Origin)

Launchpad launches Bethesda.net games with a fairly generic and forceful method--it closes Bethesda.net if it's running, then launches the game (which opens Bethesda.net itself), then after closing the game it closes Bethesda.net again. There is planned functionality to optionally launch Bethesda.net again (through a scheduled process so it doesn't hook into the Steam overlay) at the end so you can keep it running.

It does this because otherwise process hooks such as the Steam Overlay typically won't work. Steam has to be the thing that launches the game process, but if Bethesda.net is already running, then Bethesda.net , which is a sibling of Steam and not a child, is what launches the process. Closing Bethesda.net first means Steam can own the Origin process, which makes the overlay work.

However, having to forcefully close Bethesda.net is not ideal. It can mean cloud saves aren't fully uploaded, and it means you won't get game updates until you run Bethesda.net next, which might be when you're trying to play the game that needs updates.

Blizzard game launching works much better by contrast. It happens like this:

  1. Launch Battle.net's exe with an argument which goes to the game's correct page and click the Play button automatically
  2. Wait for game process to exist, and then immediately close and re-launch it with the exact same process info

This causes Battle.net to still know you're playing the game, but Launchpad now owns the game process so Steam's overlay can hook in regardless of whether Battle.net was already running or not.

A similar solution should be found for launching Bethesda.net games if possible.

Replace Is64BitOs check with a more reliable one

The Is64BitOs check is currently not smart at all. It simply checks for the existence of "C:\Program Files (x86)" and assumes you're using a 64-bit OS if it exists.

We should instead find a reliable way to detect that with the tools available in AutoHotKey v2.

Add update checks for managed platforms

Currently the version numbers detected for managed platforms may or may not be 100% accurate--they are what is reported in the platform's uninstaller entry in the registry.

There is a button which either says Install or Update when you select a platform, but currently in both cases it simply sends you to the download page for that platform.

There are a couple possible ways this could be used instead:

  • Actually get the latest version from somewhere, and if the installed version is outdated, download a new release. This might not be ideal because most platforms offer self-update methods which are easier than re-installing.
  • When Update is pressed, open the platform and automate the process of checking for updates however that is done

Support patching and extending games

Some games I play require me to keep a custom patch or set of override files, and whenever the game is reinstalled, I need to install that patch or copy over the custom files to the game directory.

It would be nice if Launchpad let you provide a list of assets that get applied to a game's install directory if certain conditions are met (or unmet).

Enhance Bethesda game detection

Currently, the only Bethesda games detected are those installed in launcher's main "games" directory.

It would be much better to find a way to read a list of installed games, or at least to detect other directories where Bethesda games are installed.

Consider merging the concepts of Platforms and Managed Launchers and updating terminology to be clearer

As Launchpad has grown, it's acquired some similar concepts that are tough to justify keeping separate, and also may cause some confusion if kept separate.

Currently:

  • Launchpad creates Launchers that each represent a single game
  • Launchers have a "Managed Launcher" which refers to any launcher that the game itself might have (e.g. Battle.net)
  • Launchers have a "Managed Game" which refers to the game itself (not its launcher if there is one)
  • Launchpad managed a list of Platforms which end up being almost the same as Managed Launchers but used on the backend for detecting installed games

This seems somewhat confusing and arbitrary, and there seems to be overlap between concepts.

To provide clarity, consider merging concepts and/or changing terminology.

One possible idea:

  • Launchpad creates Launchers which represent a launch configuration for a single game
  • Launchers optionally have a Platform selected which will preconfigure as many settings as possible
  • Launchers optionally have a Managed Launcher which would NOT be the platform, but rather, the extra layer of launcher that some games come with (Often a menu that lets you launch the game or verify the files)
  • Launchers have a Managed Game which gives it the details of the game it's launching

This would mean that Managed Launcher and Platform no longer overlap, and Platform as a concept is brought into launchers and not used only for detecting games.

Allow launcher configurations to be contributed easily back to the online Launcher DB

The Launcher DB is currently a "dumb" API, it is simply a set of JSON files living in a GitHub repository and served through GitHub Pages.

This is not very sustainable, especially when considering users of Launchpad, which might not have GitHub accounts or be open to creating a PR or an issue, should be able to easily contribute their launcher configurations for the community to make use of.

Clear outdated cache and temporary data when it becomes outdated

After updating Launchpad, the state file should know that the version changed and it should automatically flush the cache and delete temporary files on startup before updating the state file with the new version. This will help avoid any stale files getting used or causing problems.

Support view mode switching in the main Launchers list

The Launchers list currently only shows the Details view, which I think makes sense if you want as much info as possible.

However, it might look nice to support a tiled icon view where you just see the name and icon of each launcher in a grid.

Replace IconsExt dependency with a new Icon Browser

The browser should:

  • Optionally take a default icon source to pre-select
  • Allow browsing the filesystem for a .ico or .exe file, or choosing from a list of free game-oriented icons
  • If a .exe is chosen, show an additional browser that lets you choose between the icons in the .exe if there is more than one
  • Store a main reference to the source that is selected and return it at the end
  • Optionally extract the chosen icon to a destination

Implement a Launcher Validation bulk operation

Launchpad doesn't know whether the game your launcher is supposed to launch actually exists or not. Additionally, you could have an invalid combination of options which prevent the launcher from launching and/or monitoring the game properly.

There should be a Launcher Validator bulk oeration run from the Tools menu which shows you a list of all issues with your current launchers.

Additionally, validation should be taken into account when showing the launcher status in the main window.

Finally, don't allow an invalid launcher to actually be built--hide the build button for invalid launchers.

GUI buttons occasionally do not render

For some reason the GDI+ buttons that are drawn on GUI windows sometimes don't appear. If the issue is present, then when the initial Launchpad window loads, no items drawn with GDI+ will show up. Restarting Launchpad sometimes fixes it, but sometimes several restarts are required.

It seems to occur in spurts--if I've been restarting Launchpad a lot, then that evening my buttons might stop appearing more often. Typically earlier in the day or when I'm not using Launchpad as much, the buttons work every time I open it.

It seems to be a race condition of some kind, but I do not yet know why.

Implement better launching of Origin games

Launchpad launches Origin games with a fairly generic and forceful method--it closes Origin if it's running, then launches the game (which opens Origin itself), then after closing the game it closes Origin again. There is planned functionality to optionally launch Origin again (through a scheduled process so it doesn't hook into the Steam overlay) at the end so you can keep it running.

It does this because otherwise process hooks such as the Steam Overlay typically won't work. Steam has to be the thing that launches the game process, but if Origin is already running, then Origin, which is a sibling of Steam and not a child, is what launches the process. Closing Origin first means Steam can own the Origin process, which makes the overlay work.

However, having to forcefully close Origin is not ideal. It can mean cloud saves aren't fully uploaded, and it means you won't get game updates until you run Origin next, which might be when you're trying to play the game that needs updates.

Blizzard game launching works much better by contrast. It happens like this:

  1. Launch Battle.net's exe with an argument which goes to the game's correct page and click the Play button automatically
  2. Wait for game process to exist, and then immediately close and re-launch it with the exact same process info

This causes Battle.net to still know you're playing the game, but Launchpad now owns the game process so Steam's overlay can hook in regardless of whether Battle.net was already running or not.

A similar solution should be found for launching Origin games if possible.

Make it possible to add modules which add or extend app functionality

After thinking this through some more, here are some notes:

  • Launchpad could recompile itself when the modules change
  • Using modules would require downloading basically a full copy of the Launchpad source repository at the current installed version (either tag version or {{VERSION}} = master)
  • The Launchpad installation files and main .exe should probably not be overwritten, so user-compiled Launchpad should probably end up in a different location
  • When Launchpad proper runs, it can check that alternate location for an exe file first and run it instead if it exists
  • There could be a module manager with checkboxes for each module, and if you change the options then you can recompile the custom Launchpad version right from there

Log the results of every bulk operation

At a minimum, every operation should report the number if items successfully processed and the number of items failed (if any). If any items fail, it should ideally log a reason why.

GUI buttons should be able to be disabled without being hidden

Currently Launchpad doesn't have the concept of a "disabled" GUI button.

Where a GUI button would normally be disabled, Launchpad hides it. This is not a bad solution, but it can leave ugly gaps if there are buttons on either side.

Launchpad should be able to gray out a button and make it unhoverable and unclickable.

Add support for optionally choosing from a list of control mappings for each launcher

For some games, you need to remap keys, map mouse buttons to keyboard keys, map a game controller to work with games that don't support one, etc. You can sometimes do this elsewhere, but for cases where that isn't enough, Launchpad should allow extensive key mapping and hotkey support.

You should be able to create profiles in which you can:

  • Remap keyboard keys, controller buttons, mouse buttons, joysticks, etc so that they emulate any other type of control
  • Select from existing common controller mappings
  • Choose a hotkey in Launchpad's settings that, when pressed, will overlay your current mapping

Document what each option and feature does

The ultimate goal should be self-documenting code and a document build process. However, a good initial goal is just updating the README.md file with current information about the options and features.

Flag launchers when they become outdated

The state file should store a schema version for each launcher. When the launcher configuration changes, either manually or through the data determined automatically, the launcher's schema should increment which will then mean the state file's schema version is lower.

When launchers are shown in the main window, any launcher with a lower installed schema version than the available schema version should show as outdated.

Anytime a launcher is rebuilt, its installed schema version should update to the latest.

Launchers should probably also show as Outdated after updating Launchpad itself.

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.