Hello,
I'm here to present my project of a Community Launcher. First, what is it ? It's basically a launcher, with two important features that were missing in a lot of launcher I saw : Patching / Autoupdate.
I think that it's the only use for a launcher. Spread your custom modifications / eventually add some repair | check functions. And this is what I expect my launcher to do. Spread your patches, without having to worry about versionning etc..
It will get a patchlist to download from a Host you specify, at a URL you specify ( for now, and for test purpose, url is
http://localhost/update/getlist.php, and it send two parameters : Launcher version, Patch version ). And it'll download every patch you provide in this page.
How does the patching works ?First, it creates a file inside your Data folder, ( which is - for now - names patch-R.MPQ ), which contains your data. When created, it's empty. Then, you just have to add some updates.
Updates are in .rvp format ( It's MPQ but I needed to find a name, to make a difference ). It has a patching sequence inside, which - for now - has three command :
a [FileName] : it replace or add FileName in the patch-R from the .RVP update
d [FileName] : it deletes FileName from the patch-R
e [FileName] [Destination] : it extracts the FileName, from .RVP, to Destination, on the local filesystem
For exemple, if you have a .rvp archive, which contains 3 files :
- patch_sequence
- Test.rar
- WORLD/test.dbc
and if the patch_sequence is
a WORLD/test.dbc
d WORLD/Map.exemple
e Test.rar C:/sometest.rar
It will update / add WORLD/test.dbc in patch-R, delete WORLD/Map.exemple from patch-R, and extract Test.rar to that location.
This system is simple, but it permits ( with a good versionning ) to send a lot of update, and keep a trace of each. For exemple, if you have a patch which weight 300mo, and you have to delete or update one file, your update will only contain that file, and that patch_sequence. It will increment the patch-R version, etc.. etc..
It's coded in C++, and use StormLib and Qt. I develope it with QtCreator.
Working features :
- Logging ( For debug purposes )
- All MPQ manipulations ( create / add file / update file / remove file / apply patch file etc.. )
- Versionning ( For now it's still very basic, but you can set the version of your launcher, and of a patch )
- Queuing / Downloading files, and apply all the patches when downloaded.
- Versionning is done
- Webpart has been done
TODO List before release :
- Auto-update of the Launcher. ( Quite done, but I have to modify the .pro, in order to auto-increment version, auto-generate the update, and then you just have to upload it to some host )
- Translate it with QtLinguist ( and put all these tr() )
- Code basic GUI functions ( Menu, Clear cache, Launch game etc.. :p )
- Make the GUI beautiful
- Compile with static version of qt
- Test it
TODO List which is not needed before release ( and which won't be worked before ) :
- StormLib is loaded with a QLibrary hack. It should be static, like that, no StormLib.dll
- Improve patching ( Adding some command, like Exe modification etc.. )
- Support for Changelog, for patch
- Adding some asynchronous cryptography ( for exemple, if you want to download only signed patch etc.. etc.. )
When it will be fully working and when it'll be easy to do autoupdate, I'll release source code.
Feel free to ask if you didn't understand something, or if you have a suggestion / question !
Garthog.