January 2016 Summary
This last month, our focus has been on launching the game prototype to our Dev-access backers.
To that end, we have been working on our company infrastructure, in particular the web servers and database systems. This is not something we can rush, because it would open the door to serious problems down the line. @INovaeKeith is more eloquent than me on that subject:
“While it isn’t particularly sexy everything that comes next is dependent on account management, authorization, deployment, and patching. None of this code existed outside of our website prior to this month. On top of that since this code is critical it has to be done right. If we screw something up here we’re going to be getting bogged down by support requests due to issues with payments and being able to play the game someone just purchased. Even worse we could have a security breach that leaks user information or allows their account to be compromised. The amount of testing involved in making sure this code is solid is significant.”
Here’s a basic list of things we have been working on in January:
- server authentication (players will be able to host their own dedicated servers in the future, it has to be secure)
- client authentication
- access rights verification (who has access to the prototype/game)
- security/encryption of requests and tokens
- automatic bug and crash reporting
- sessions logging (both for client and server)
- kickstarter database importing
- indiegogo database polling and importing (because people can keep pledging)
- rewards claiming / matching databases (lots of people used a different email to pledge)
- versionning and patching ( full or incremental, nobody wants to download a 4 GB patch for every single minor update )
- stats, error logs and backups
- available servers list displayed in the launcher
- connection limitations / logging queue
- launcher, account management
- performance and ability to scaling up
- and probably a lot of other things I’m forgetting
The features are highlighted in bold are the most critical ones. I’ll quickly review them:
-
client authentication is critical because we need to verify the identity of the client, that he does indeed have Dev-access rights to the game prototype, and that hasn’t been banned for whatever reason.
-
security/encryption is critical because as you know, hackers usually come pretty early into play and we do not want to compromise on security. We’ve already done that mistake in the past, never again. In addition, a lot of the early code will probably have serious vulnerabilities, so we need to be able to log in and track incorrect requests to verify that somebody isn’t trying to reverse-engineer our code.
-
KS/IGG database importing: both databases use a different format and pledge levels, so we need to merge everything into our own database. IGG is currently causing us trouble because it is an on-going campaign. Which means that people can continue pledging even after the release of the game prototype. Obviously, people who are going to pledge on IndieGoGo will be expecting to be able to download and play the game within minutes, which means we need a mechanism that will “poll” for any new pledge and inject/merge that stuff into our database in real-time.
-
I should also mention that we needed a solution for those people who pledged with a different e-mail address than the account they registered on our forums/website in the past. Keith has been working on that in the past days and added the ability to link multiple e-mail addresses to a single account.
-
versionning and patching is critical because we need to ensure that everybody has the same, latest version before they try to join a game server. We are expecting frequent patches both for the client and server, so the version numbers will change all the time. In addition we wanted patching to be incremental and automatic, to avoid asking people for downloading and installing a 4 GB patch every day. That would get tiring very quickly. It is IMO one of the most frustrating things with Star Citizen’s launcher, and the reason why I believe a lot of people are not testing the game as often as they wish. A 30 GB patch is not something to be taken lightly, especially for people with not-ultra-fast connections. Fortunately we aren’t anticipating 30 GB patches any time soon in Battlescape, but even a couple GBs patches can become quickly annoying if they aren’t done incrementally.
At the moment, from this entire list, many of these systems are either done, or well advanced. The part that probably still needs the most work is patching. Patches are already automatically downloaded and extracted in the launcher, but the patching procedure itself ( copying the files, registering them, etc… ) still requires a bit of work. One of the main challenges we still need to address are third-party dependencies, such as the CRT and other libs we are using, which themselves have various dependencies.
Once all these systems are done, we still need to do a round of testing. This should go pretty fast, but at the moment I am incapable of saying if this will take a day, or two, or a week. We are using Azure to host our web environment and virtual machines, and the entire thing has to work with different machines all collaborating together. The really good part about Azure is that scaling up is as simple as pressing a button. If we see a flood of new players, we can easily add new game servers, increase the performance of the servers or raise the size of the database. This means that all the work that we’ve been doing on the infrastructure so far is expected to be a robust foundation for the future, and we won’t have to redo it by the final release. That is, excluding the website. The current website is a bit old and inflexible, which is the reason why posting news on it isn’t too easy. There is no content management system, so any news that we want to post on the front-page requires to upload the entire website to the Azure portal, entirely, every single time. Not very practical.


server authentication (players will be able to host their own dedicated servers in the future, it has to be secure)
automatic bug and
crash reporting
The API seems to have been designed with future expansions in mind. Lots of parameters are currently left unused for future use. That’s both a plus and minus, a plus because it should theorically make future expansions easier; a minus because it makes it look more complex than DX12.



