2020

After continuing some work on getting the updated UI ported to Linux I started experimenting with the idea of a launcher

first designs were rather simple and naive in nature

after talking a bit about this in a Discord server I am in a friend of mine decided to create a mockup for a launcher

Implementing it was a bit rough and since I wanted to use OpenFortress assets some things needed to be changed

after that I stopped wanting to work on any of it and concluded any work on OpenFortress

the old source code has been archived on this branch for the sake of archival

2021

After a lot of events (including getting banned from the OpenFortress server due to me being confused with another person) I came back and looked at what was there

A User called VoxelTek had posted a link to their Linux script to install OpenFortress

having seen his script I opened a PR to make it a shell script instead of calling shell commands in python

the response

you might be better off creating your own project.

lead to me doing exactly that

ofman was a shells script inspired by r2mod_cli

from there on I remembered that I the plan to make a launcher in the past so I archived ofman and created OFLauncher

since I can’t simply pull together a bunch of binaries to do the heavy lifting

there isn’t a lot I can say about most parts except for the SVN code

SVN

when adding support SVN I just used the standard svn library which created simple yet powerful code

int svn_checkout(char* path, char* url)
{
    err = svn_client_checkout(NULL, url, path, &rev, true, ctx, pool);

    return handle_error();
}

int svn_update(char* path)
{
    svn_revnum_t tmp;

    err = svn_client_update(&tmp, path, &rev, true, ctx, pool);

    return handle_error();
}

(source code)

but during development I used

the M cross environment to compile the program for the Windows platform

which didn’t build svn with serf to there was no support for fetching over http/https

without support I had to fall back to either loading a svn dll or calling the svn binary

I had no conscistent place to get a free libsvn.dll from so I resorted to calling the svn binary which resulted in interesting code

int svn_checkout(char* path, char* url)
{
    char exec[PATH_MAX] = {0};
    strcpy(exec, "\"");
#ifdef _WIN32
    strcat(exec, "\"");
#endif
    strcat(exec, SVN);
    strcat(exec, "\" " SVN_CHECKOUT " \"");
    strcat(exec, url);
    strcat(exec, "\" \"");
    strcat(exec, path);
    strcat(exec, "\"");
#ifdef _WIN32
    strcat(exec, "\"");
#endif

    return system(exec);
}

You might wonder about the windows preprocessors and I can only link you this SO post https://stackoverflow.com/a/9965141

Qt

Since having a graphical interface was a goal of the original launcher I took the design and asked anyone for feedback on it

I thought I had lost the code for the original so I had recreated a similar design from scratch

with the help of some players I iterated over designs and ended up with this

at this point the launcher was already beyond a simple design and checked your installation to adapt the UI

and with that it was pretty much done

here is a video of version thats a bit older in action

after this OF was temporarily shut down due to a request by Valve and OFLauncher lost its purpose…

2022

May 26, 2022 OpenFortres was released again

With it came the release of the Toast Versioning System (TVN) initially available as a Python library called OFToast, now pytoast by int-72h, a developer for the OpenFortress project. Github

It provided all the utitlities for dealing with TVN information as well as creating repos for it.

The first implementation of an installer using it was of-jam (formerly oflauncher-rei, Github), a simplistic Python GUI that did the job.

Along the way it gained many new features and overhauls leaving us with this

Following that initial implementation was murse (SourceHut) by one of the creators of the versioning system, welt.

It was written in go and improved speed while also making the process way more reliable and stable, getting rid of any bugs the python implementation had.

The only major difference to the Python implementation was that it lacked a Graphical User Interface and did not provide any way of launching the game. As of September 29, 2022 murse is the official implementation to be used on Windows and Linux

OFLauncher was left for dead simply because of all the cruft that it had developed over time. In its place a new launcher was born, OFQT. It included a pure C library for handling tvn information, various frontends for it and various sub libraries intended to make the lifes of frontends easier.

It takes its core design from OFLauncher but refines it a bit to unify the launcher elements into the footer and leave space in the middle for future updates, in this case an RSS feed with changelogs.

Because of the direct access to the update information OFQT can now accurately display what is going on and give an accurate bar on how far it is in processing data

For launching it has 3 different approaches that can be changed at compile time:

  • Direct

Launches the Source SDK 2013 directly with the right options On Linux this requires a special Environment variable “SteamEnv” to make it use the Steam Runtime

  • Steam Naive

Launches OF using steam://rungameid/11677091221058336806 The ID for OF has been static for a while, though no one is quite sure why it is this number

  • Steam

passes commandline arguments to Steam to launch the Source SDK 2013 with specific flags