The past month has been very work-intensive for us, which is why we haven't had the time to write a devlog until now. We got delayed by a rewrite of the backend of the game, which now makes it possible to have multiple maps, VOIP in the lobby and to add bots in the future. These changes have also made it easier for us to add new features as well as fix bugs. In this devlog, we're going to discuss the backend rewrite, show the new maps, the little office we setup recently and the WMR dev kit we got.

Tanks VR uses the Steamworks SDK, which allows developers to integrate their game with Steam. However, this SDK is written in another programming language (C++) than we are using for Tanks VR (C#). This is not a problem as there are wrappers available that allow developers to use the SDK while programming in C#. When we started, we had to choose between two wrappers, Steamworks.NET and Facepunch.Steamworks. The Steamworks.NET wrapper is the most complete, but Facepunch.Steamworks is a lot simpler to implement. However, at the time, Facepunch.Steamworks lacked some lobby functionality, which didn't allow lobbies to select a server from a server list.

So we chose Steamworks.NET and implemented it into the game. However, it was fairly complicated for us to cleanly implement due the nature of this wrapper. Our implementation then caused most bugs that were experienced, such as ghost lobbies, the punishment corner and random disconnects.

It is imporant to know that the lobbies used to be hosted by Steam, not by us. This became a problem when we wanted to add the new maps. When a match is started from a Steam-hosted lobby, all players leave that lobby and join the selected Tanks VR server. So when you're in a lobby, you're not yet connected to a Tanks VR server. As Steam-hosted lobbies can't communicate with servers, this makes it difficult to have VOIP, choosing different maps and adding bots in the lobby. See the diagram below to get an idea of how the lobby system used to work.





How lobbies currently work

We came up with a solution, which removed the need for lobbies hosted by Steam. In the solution, a player directly connects to a Tanks VR dedicated server when creating a "lobby", the server then shows up on the lobby screen as having a player in it. Other players can then join the server, select maps and communicate with VOIP. When the match is started, the server and all players load the chosen map and then play. See the diagram below to get an idea of how this new lobby system works.

How lobbies will work





VOIP speaker icon, change map button and lowered join button

This solution also allows us to make the lobby a physical room, where players would be able to interact with eachother. For instance, we could make a "war room", where each team has a seperate table on which tactical maps are placed and the players can discuss tactical plans as well as taunt the enemy team. But for now, the original lobby screen is still in place. We have modified the UI slightly, such that every player in the lobby has a little speaker icon that shows if they are talking. We have also moved down the "join team" button. For the lobby owner there is now a "map" button that can be used to change the map. See the screenshot below.

We also took this as an opportunity to also do some work on our early code. We are self-taught programmers and have improved greatly since work started on Tanks VR. A lot of our early code needed updating, as it lacked clear error handling and readability. We're now able to pin-point bugs a lot better which should make it easier to fix current bugs.

We have now also added a "beta branch" to the game, which we'll use to test newer versions of the game. That way we can work on the game, without dirupting the live version of the game. When we release any new feature, we'll first launch it on the beta branch and test it before releasing it for real.

All the above took about a month to implement, way longer than expected. We didn't expect that there would such fundamental issues with adding something simple like a map. Then again, the game is still in Early Access, so problems like this can happen. Right now we feel like the game is a lot more future-proof.

We have reworked the original city map. It is now called "Saltzheim" and is still similar to the original. The angled roads towards the government building have been preserved as well as the main road in the middle of the map. The main road is now a lot broader and offers more fortified positions. At the end of the main road is now a church, around which battles can also be fought. We have tried to give every spot a weakness, such that there are no perfect camping spots. This should make the gameplay a lot more interesting. Graphics-wise, we have played around with the lighting and were able to make shadows more detailed. It's a subtle, but nice improvement. A tactical layout and two screenshots of Saltzheim can be seen below.





The other new map that we have added is named "Kreuzstadt". It provides more close-quarters combat, but has a lot of flanking opportunities. It also features a large open road near the top of the map, where more long-distance combat can be expected. As with Saltzheim, we have tried to give every position a weakness. For instance, each fortified position has at least one exposed flank. This way tactics will always pay off. A tactical layout and two screenshots of Kreuzstadt can be seen below.

We had to do some administrative work, as we had not been officially registered in the Chamber of Commerce in the Netherlands. We now work as an official game development called "Freshfield Studios". We have also recently setup a little office, in which we can work together. This has improved our productivity by a lot, as communication is a lot better than a short meeting every now and then.

Freshfield Studios

We have received our Windows Mixed Reality Dev Kit. It's really lightweight compared to the Vive and it feels pretty sturdy. We tried to get it up and running on our development pc's, but it doesn't work for us as it tells us that we need USB 3.0, even though we have USB 3.0. It ran on one of our personal PC's though, so we'll have to use one of those to add support for it.

We received our Windows Mixed Reality Dev kit!



We have yet to receive our Oculus Dev Kit, but it should arrive somewhere around now. Unfortunately we have no control over when Oculus ships the dev kits. So you'll have to be patient!

There are some bugs that we know of right now. One is that the muzzle flash and sound sometimes doesn't appear. We're working on fixing these bugs. We still expect more bugs to appear from all the changes we made, so we'll be paying close attention to how it goes the coming days. We'll do our best to make the game as stable as possible. Apart from that, we're still working hard on adding the bots, and it's going well. We'll write a devblog about it when we're ready for that!

We still required the Steamworks SDK for things such as steam names, avatars and ownership authention. So it was a good opportunity to reconsider the Facepunch.Steamworks wrapper, which has now improved even more. We decided to completely replace the Steamworks.NET wrapper by Facepunch.Steamworks.