[FREE] Launchpad - A free, open-source UE4-compatible game launcher

Hi everyone!

A few years ago, I decided to make a proper launcher for my game. Instead, well… I got a tad carried away.
We’ve come a long way since that first janky litte application, and I’m happy to have had you with me along the way. Here’s to another few years of open development and solid game launchers!


Presenting, Launchpad! An open-source, UE4-compatible launcher for your games, available free of charge!

Description
Launchpad takes care of the installation, updating and maintaining of your game. It features game installation, automatic update scanning, local file verification and displaying of a HTML changelog. The program (if you’re a developer) requires you to have a working FTP or HTTP server to distribute your files - it’s also a little picky about the folder structure. A guide is available on GitHub, where I’ll walk you through setting up Launchpad for your game.

Features

  • Full Unix, Mac and Windows support through Mono and GTK# - compile once, run everywhere!
  • Not just UE4 - Launchpad can handle arbitrary games and software.
  • Handles updating, installing and verifying your game
  • Supports all major game platforms on one server (Linux, Mac, Windows). One server, one launcher!
  • FTP and HTTP/HTTPS support, with BitTorrent coming soon
  • Lightweight (tiny install size and not a resource hog)
  • Supports resuming of aborted downloads or interrupted files
  • Simple to set up and simple to use - in many cases, it’s a one-click setup!
  • Displays a standards-compliant HTML/CSS changelog to your users!
  • Available in 19 languages, thanks to community effort!

Launchpad is intended for people who don’t have the time, knowledge or resources to create their own specialized launcher (single developers, indie studios and hobbyists) - if you represent a proper company, I’d advise you to talk to your lead programmers about developing your own launcher. You are, of course, free to use Launchpad or build off of it. If you want to write your own launcher, you’re also free to study what I’ve done in Launchpad.

The default UI is very, very basic, but it should not be very hard to edit it in VS or MonoDevelop to suit your needs. I’m not an artist, which is probably pretty evident at this point :stuck_out_tongue: If you have any suggestions on how to improve the default UI, feel free to share.

Launchpad is written in C#, and the source is available here: GitHub - Nihlus/Launchpad: An open-source game launcher for your games
I would greatly appreciate any bug reports, feedback or suggestions for it.

You can download a binary package of Launchpad here, however, I recommend building from source. The version provided below is outdated, and will most likely not be automatically updated due to a breaking change (the move from WinForms to GTK+ on Windows which requires the end user to install an additional package.)
Zipped binaries
Tarball of binaries
Debian package

Launchpad is released under the GPLv3 license, which means you’re free to use Launchpad in commercial projects and to build off of the code as much you want to.
https://github.com/Nihlus/Launchpad/…aunchpad-Legal

If you want to talk with the community, or give me feedback, I’ve set up a Discord server- we’d love to have you :slight_smile:

There used to be a guide here! If you’re looking for the old documentation, it’s been deprecated and is no longer supported. Read the new documentation here.

3 Likes

Dude this is amazing! What other questions should I ask you on answerhub lol. I figured you would help me out but wow.

Haha :wink:

I had already started working on a launcher for my game - I figured I might as well release what I had, and it sort of snowballed from there. I’m glad you’re happy -It’s going to be pretty buggy initially, so do tell if you find something worth fixing or tweaking.

I understand however, the fact that there is something in the works is great.

Launchpad has been updated to version 0.0.2.

  • Reworked the UI code a bit
  • Fixed a hardcoded URL
  • Added an option to receive official updates from me instead of hosting Launchpad yourself
  • Improved game and launcher update checking

The launcher will not auto-update to this version due to the changes I made to the update procedure - you’ll need to manually update.
All links in the main post have been updated :slight_smile:

I got a question on that (:
Is it possible to limit the game to only start from the launcher?

I want a launcher with a Login (thats not the problem) and after a succesfull login, i want the player to be able to start the game from there.
But as far as i know, he could still start the Game without the launcher with the normal .exe.
Is there a way to stop this?

I will ask this question in the answer hub as well. Maybe i can grab a Staff guy (:

Hi there!

Launchpad can’t do this on its own, but you should be able to implement a system via C++ that requires some type of login token before the game will start (passed through command line, for example). That login token could conceivably be generated by Launchpad (or some other launcher). It’s most definitely possible, but I’m not sure where you’d implement that code.

Ok thank you (: i will ask some Staff Guys on the HUB for that and let you know. Maybe some more guys here want to know that, because most of the launchers are made like this.

Another day, another update! This time it’s an (almost) pure UI update. If you have the previous build, you should receive an automatic update alert.

Launchpad 0.0.3:

  • Updated the UI using a background and buttons made by Isaac Nichols - thanks!
  • Fixed a bug where the install button would not update and display “Play” instead

Hey this is really awesome nice work thank you for sharing!

I’m currently setting this up for my project to deliver test builds so I’m excited to see how she works. One concern I have is the bandwidth of the FTP server? How many concurrent users do you think this system can support? Would it make sense to try to adapt this to using Amazon S3? I imagine this is premature optimization but just curious.

Hi Mentos! Glad to hear that you’re using Launchpad :slight_smile: Be sure to tell me if you run into any issues or bugs, it can be a bit fiddly.
The number of supported users largely depends on the FTP server itself - connection, disk speed, etc. I’ve never used Amazon S3, but I’m sure I could implement support for that as well ^.=.^

Awesome I will let you know. I really think it is something that Epic should support out of the box as it is just as crucial as any other bit of functionality in UE4. I’m about to setup the FTP server for LaunchPad but it got me thinking that maybe I could use Dropbox as the ‘backend’ for the files?

Imagine a Dropbox directory with a folder for each version number and a .txt file that serves as the pointer to the latest version and possibly test versions. All you would have to do as a developer would be to setup a dropbox account, drag your files in, change one file in LaunchPad to point to your DropBox directory, distribute LaunchPad (DropPad or LaunchBox might be cool names to play on LaunchPad + DropBox) and boom 1, 2, 3 you’re distributing your game.

But I wonder if this is this kosher with Dropbox? We’d have to see how many people you share this content with before exceeding some sort of quota?

That folder-per-version method sounds like it would work really well - I might just try using something similar as an improvement over the versioning system Launchpad uses right now :slight_smile: It’s kind of a mess, really.

Dropbox is an alternative, but I think it would be harder to pull off. For one, Dropbox cuts public access to your account if your bandwidth exceeds a certain limit, and you’d be dependant on their service as well.

Yea I mean for soloists I think Launchpad is perfect because a more developed studio would probably roll their own solution.

But say in an ideal world Dropbox supported developer accounts where they could charge for bandwidth overages, what other challenges do you foresee?

1 Like

I can’t really say for sure, but I think it would be interesting to try a Dropbox-based solution. I think my main gripe is that you’d be dependant on their service - if it goes down, or if they change their rules, you’d be left without any control over your own files. Hosting yourself or hiring a professional host would be preferable, even in an ideal world.

Is it alright with you if I try and implement your folder-per-version in my next update? I think it would work a lot better than the current method ^.=.^ If I do, I’ll try to keep the client backwards-compatible with the older system.

Yea its a balance between risk v reward, I think indie’s/hobbyists/small studios would be ok with taking that sort of vendor lock-in/dependency for the reward of mindlessly easy distributions. But its not like setting up an FTP is so difficult either.

Feel free to run with any of these ideas and let me know if you decide to pursue the Dropbox approach. The folder-per-version I see being helpful once your game is live but right now while I’m doing small tests I’d probably just delete older versions and replace with new so your current approach is probably fine.

Let me get this up and running and then I’ll see how I fair.

Hey so I followed your instructions on setting up LaunchPad and vsftpd

I had some issues uploading my game to vsftpd that I resolved by setting:

anon_mkdir_write_enable=NO in /etc/vsftpd/vsftpd.conf

I did this because I could not seem to get an account to work to log into, so I just log in anonymously and changed the anon permissions.

Right now I’m finding that though the ftp’s launcherVersion.txt is 0.0.3 and my local LaunchPad config has ‘launcherVersion = 0.0.3’, LaunchPad is complaining that ‘Launcher update is required’

The changelog.html is not displaying so I’m not sure if this is actually an issue with permissions on vsftpd.

Also, I find that if I change the ftp:// in the launcher config to an incorrect address, then LaunchPad will just hang (I assume its continually trying to connect to a bad address). But when I change it to my server’s address it will stop hanging.

I’m going to keep fooling around, but any thoughts on what I may have messed up?

here’s my vsftpd.conf: http://pastebin.com/mcLWthw7

Okay, here’s my conf so you can compare: # Example config file /etc/vsftpd.conf## The default compiled in settings ar - Pastebin.com

I think the issue is that the files in your FTP folder are not readable to anonymous accounts (o for chmod). You should also disable anonymous write permissions for safety reasons.

I started with a fresh build of ubuntu 12.04 and followed your instructions verbatim but still ran into a ‘Login incorrect’ issue after step 9 (using FileZilla on windows)

I searched google and found a solution here: http://www.jackenhack.com/vsftpd-ubuntu-server-530-login-incorrect-error-fixed/

Now I’m able to login to the ftp with FileZilla and upload files and LaunchPad is showing the changelog.html but unfortunately it is still complaining that ‘Launcher update is required Checking launcher version…’ what is weird is changes to the changelog.html in nano are not showing in the LaunchPad client (and i did do a ‘sudo service vsftpd restart’ after making the changes)

I’ll keep at it, thanks for the help

I found that my issue with LaunchPad always saying that it needed to be updated was due to the fact that my remote version had a trailing space character and was therefore not equal to the launcherVersion.

The following modification to DoLauncherUpdateCheck() in the source I believe fixes the issue



        private void DoLauncherUpdateCheck()
        {
            try
            {
                string remoteLauncherVersion = FTP.ReadFTPFile(Config.GetFTPUsername(), Config.GetFTPPassword(), String.Format("{0}/launcher/launcherVersion.txt", Config.GetFTPUrl())).Replace("\0", string.Empty);
                string launcherVersion = Config.GetLauncherVersion();

                System.Version RemoteVersion = new System.Version(remoteLauncherVersion);
                System.Version LauncherVersion = new System.Version(launcherVersion);

                progress_label.Text = "Checking launcher version...";
                progress_label.Refresh();

                if (Config.GetLauncherVersion() == "")
                {
                    //this should never happen - if it did, something is SERIOUSLY wrong
                    bLauncherVersionCheckFailed = true;
                    Console.WriteLine("LauncherUpdateCheck: Local version is NULL!");
                    warning_label.ForeColor = Color.Red;
                    warning_label.Text = "Could not retrieve local launcher version!";
                    warning_label.Refresh();

                    UpdateMainWindow();
                }
                else if (RemoteVersion.Equals(LauncherVersion))
                {
                    //launcher does not need to be updated
                    bLauncherNeedsUpdate = false;
                    if (File.Exists(String.Format(@"{0}\update.bat", Config.GetLocalDir())))
                    {
                        File.Delete(String.Format(@"{0}\update.bat", Config.GetLocalDir()));
                    }                    
                    Console.WriteLine("SYSMSG: Launcher version is OK");                                        

                    UpdateMainWindow();
                }
                else
                {
                    bLauncherNeedsUpdate = true;

                    UpdateMainWindow();
                }
                bLauncherVersionCheckFailed = false;
            }
            catch (WebException ex)
            {
                Console.WriteLine(ex.Status);                
                bLauncherVersionCheckFailed = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
                bLauncherVersionCheckFailed = true;
            }
        }


But I still need to work out why my game is not downloading. Hopefully be able to put more time into this tomorrow.