Forged Alliance Forever

The community-driven lobby for Supreme Commander : Forged Alliance.

FAF Developer Review 2017

Christmas is coming upon and as soon as Santa leaves our chimneys, the year is almost over. So our christmas present to you is a wrap up of all of our progress: Time to take a look at what our developers have achieved this year.

With the new year, Downlord started building a new Java API as a proof of concept for replacement of the current Python API. With the rapid development going and no competing implementation showing up, it became our new API of choice, while the old API is running until everything is ported over (which is finished to 95%).

So what features did it bring along? Well quite a few:

Auto-generated API documentation
Auto-generated API documentation
  • Clan management
  • A huge amount of data queryable by now, such as game results, ratings & leaderboards, maps, mods, ladder scores, coop results, achievements
  • Map & mod upload working again
  • Map, mod & replay reviews as new features
  • A Challonge proxy for our tournament information
  • Auto-deployment for our core featured mods (which especially speeds up the development process for beta & develop)
  • A central authorization platform for other backend servers under development
  • Auto-documenting the available data routes (visit api.faforever.com)

Arkitekt was the first one building his own application on top of the API by querying the game results for calculating results of the ladder week (see ladderstats.fafcasts.com).

As already noted in the API features, Dragonfire has reworked the clan app which is now purely JS-based and doesn’t interact with the database anymore, but purely relies on the API instead. This also brought an enhanced design and less legacy PHP code.

Softly giving eye-cancer to our moderators
Softly giving eye-cancer to our moderators

Along with the API development, a lot of issues popped up in the database. Most of them were data inconsistencies that were caused by missing database constraints. A lot of sanitization was done on the database, which took most of the time during our server updates. Unfortunately, not all users understand that long-term-maintaining a server requires a downtime now and then (actually it’s just 6 times a year).

Early this year, Softly created an avatar management app, which uses our old Python API. Since it was supposed to be a workaround, he made intentionally as ugly as possible. Kudos to him, I couldn’t have done better. Unfortunately, the workaround still lasts, until the last 5% of the API is implemented (a pull request already exists).

In preparation for the server move, we open-sourced plumbing for our server setup in the new faf-stack GitHub project. faf-stack encapsulates all of our running server apps using docker-compose and a consistent structure. But the best of all: by default everything is configured to be run on localhost. This makes starting development for FAF easier than ever before. Just install Docker, check out the git repo and fire up whatever you want. Along with the faf-stack, we tried to improve the test-data in the db repository.

The server move itself went pretty smooth compared to the previous one. There are still issues due to some Docker limitations with Linux file permissions, but it wouldn’t be FAF if nothing would be broken 😉

The move itself was initiated by the withdrawal of visionik as the administrative councilor. Sheeo followed Visionik on his position, while the software councilor position is now shared by Download and Duk3luk3. Since Visionik was the main funder of FAF and paid for the (in the author’s opinion ridiculously overpriced) servers and other services, FAF was now reduced to standard servers which cost less than 100€ per month instead of over 1000€.

Mockup of a reworked tutorials tab by surtsan

The Python client finally went Python 3 and Qt5 thanks to the long-time work of duk3luk3, mazornoob and many others. This leaves 10 years of legacy behind us and improves the developer experience on Windows. If you want to jump in, this wiki article explains how to setup a dev environment. However, this update also had a lot of drawbacks our devs are still chewing on. So the big feature breakthrough is still ahead of us (like the new tutorials tab).

Many many game patches were released (18 patches were released on GitHub, but not all of them made it into production). One of the most useful: mex capping on right click. One of the most hated: The new veterancy system. Not all of these changes were welcome and a huge discussion about the rating system started out. Equilibrium was made a featured mod. That led to quite a roar in the community, which eventually wore out. Since the beginning of December, BHEdit also gathered the status of a ranked mod, so there are now multiple ways to play with rated games. Unfortunately, rating changes of mods require a server restart, which leads to an undesired delay as of now. On a side note, there’s also work happening to make RKS Explosions a ranked mod again, but this won’t make it into 2017.

To reduce the number of downloads with each patch Brutus5000 developed BiReUS as a replacement for the legacy patching mechanism. While the server component seems to be ready, we just implemented it client side in Downlord’s FAF Client. It will still take a lot of developing & testing time before we will consider it stable. More information on that can be found in the devblog.

As there is no active maintainer of the current Python lobby server, Downlord reengineered it Java and went above feature parity. Load tests show that is able to handle way more players than the current server does, with the current roadblock for adoption being ICE support, which the server is built upon. After that, we will be upon to implement new features that are asked for a long time (ladder division already implemented, 2v2 matchmaker could be a choice).

ICE is one of the disappointing topics in 2017. While initial tests looked promising, there is still no stable release and the code was rewritten multiple times. This keeps the connection issues still a hot topic, yet we can’t speed it up since we don’t have any networking experts on the dev team.

The map vault view in the mdoerator client
The map vault view in the moderator client

Though our personal low mark this year was reached when certain members of our community decided to not only ignore rules and circumvent bans by mass registration but also to actively cheat and break other player’s games on purpose. This in return has lead to some protective measures like the 24h waiting time for new accounts.

Just in time, we were able to finally release the long-promised moderator tools, which enabled fast bans and listing of latest registration, so we could deal with the mass registered smurf accounts. With the latest release from this December, the moderator tools finally allow cleaning the map vault.

 

So what are our plans for 2018?

  • Get ICE finalized and deployed on both clients
  • Downlord is going BETA with his Java client
  • The old Python API along with Jeremy will be retired in favor of Java API and the moderator client
  • Bireus as the new patcher

 

The FAForever team wishes everybody happy holidays and a happy new year. We try not to screw up the servers over the holidays, so you can chill out and play some nice games.

 

 

 

 

 

 

 

But wait. We forgot one of the presents, didn’t we?

 

 

 

 

Oh right. Well, g0l0l and Brutus5000 have not forgotten you, so we just want to tease a little bit more for 2018…