Salomonsson.se
May 06 2021

Demeo

We finally released this amazing project: a multiplayer boardgame in VR, that I’ve been working on for the past three years. And the result and the reception has been outstanding!

Here is the teaser trailer

First impressions by some pretty famous persons… :-O

Statement from our CEO

Click below to read about my part in the project.

My part in the project

This game has been a huge team effort, and I’ve had the pleasure to work with some of the most talanted people I’ve ever had the opportunity to meet, but in the following text I’ll focus on the parts where I specifically contributed (because this is my website).

The early prototype

I was asked by our CEO to do a prototype of a VR boardgame. I was excited, I’m a huge boardgame and tabletop rpg nerd, and I started right away, creating a new project, experimenting with networking and interaction. To me it was obvious after just a few weeks that this had enormous potential!

My early prototype with networked grabbing, dice throwing, and movable board pieces

The project ramped up. We decided on a theme (fantasy), got more team members (art, design, 3d and one more coder).

I started implementing melee attacks, making sure it felt really good hitting those bastard skeletons!

Prototype evolved with enemies and melee attacks

Melee was easy. Just drag and drop on top of the enemy. But we needed more! Shooting arrows and spells from afar. My idea was to use cards, but we discussed using actual 3d object representations instead of cards. My first prototype therefore contained 3d spheres, but was later changed back to cards.

Prototyping the functionality how to attack with a 'Fireball' spell.

Multiplatform multiplayer and procedural levels/enemy spawning

Demeo was developed for several platforms at once. One is high end PC VR (Oculus Rift/SteamVR) and the other is Mobile VR (Oculus Quest). Instead of settling for lowest common denominator for graphics quality, I made a custom system where we could bundle different graphical assets and make sure we only ship the right one for the correct platform. In our development setup however, we included all bundles so you could choose to run the game in any of the two modes at startup-time.

High definition in the top, low definition at the bottom. Both looking good.

From the beginning I really wanted to have fully procedural levels, but the artists wanted more control over the visuals. So instead I went with static levels, but procedurally placing everything else inside them (it is interesting to note just how much it adds to a static level by randomizing just the location of the level entry and level exit). However, we don’t use full randomness when placing objects - I implemented a system where designers could mark tiles as candidates for one or several types of objects.

Enemies are also spawned procedurally, and in order to control the pacing of the game we determine what to spawn the moment you uncover new tiles (or re-visit tiles you haven’t seen in a long while) instead of at the start of the level. By doing it this way we can control the pacing of the game depending on the existing threat levels. This way of working was inspired by the AI Director from Left 4 Dead (Mike Booth himself helped us with this system).

I built the base setup of this system which was then handed over to our super talanted level designer to implement the details. The result was amazing!

Visualize level data, red transparent cubes are possible lamps, cyan markers are possible point of interest objects of different sizes
The Demeo AI Director in action (I only did the base part of it)

The BrainTest system

The BraintTest is a integration-test system that spins up the game in a controlled environment, and lets you easily write and assert custom scenarios from a simple API.

In a game that’s closer to being a rougelike, with randomly selected and populated levels, lots of different enemies with custom behaviours and different player and enemy abilities (most with different outcome depending on randomness), this testing toolkit was a true life saver.

I designed, implemented and maintained the system during the development of the project. At the end we had more than 1000 tests running after each commit.

With it, you can very simply create and control actual (or mocked) pieces, have them move and attack exactly as you want, or have the AI control them, mock out all randomness, and have it assert conditions and give reports on what went wrong.

More than once it turned out to be a life saver.

Braintest system running at 8x speed and asserting our scripted test cases

In the beginning we tried to have a stationary camera and control the game with laser pointers (to avoid nausea), but it soon became obvious that players wanted to move around.

Based on research from one of our artists I implemented a system where you could “drag yourself” around the play area, and even scale yourself up or down. The result turned out so good that not only was it functional, user testing showed it was actually mind blowing (scaling yourself to the same size as the board game figures, or making yourself huge as an all-seeing god) while still being fully functional in networked multiplayer. This actually worked so well that I considered it to be a huge selling point of the game.

In the end we had to limit the scaling a bit for UX reasons (being able to scale yourself does create some interesting challenges), but moving around in the game is still very satisfying and quickly becomes second nature.

Movement was very fluent, and scaling was awesome!

Abilities and AI

The foundation of the game are all the different abilities (fireball, poison grenade, war cry, heal, coinflip…), how they interact with each other, and the piece AI that controls how and what the enemies are doing on their turn to utilize these different abilities.

The released game has about 150 different abilities, and my very rough estimate is that I’ve written about a third of them. However, it’s hard to say since many talented programmers and artists has contributed. It is however very fun, and one of my favorite parts of the code base.

The enemy AI has also been my baby for a long time. I have implemented most of the enemy behaviours, together with BrainTests and debug tools for them. Highly challenging, and highly rewarding!

Whenever I made a new ability, I always drew some programmer card art for it as an added bonus to anyone who wanted to try it out

Manage the project

Somewhere in the middle of the production I was asked to manage the whole project, which I did for about two months. But since my passion is programming I asked if I could step down to a regular programmer role again, and was soon granted as a “proper producer” took over.

And all the rest…

When working in a small team you get to do a little bit of everything, which is what I enjoy the most. Here are a few bullets of other things where I feel I can take some credit without going too deep:

  • Wrote the card system
  • Lots and lots of UI
  • Wrote the tutorial-system in a way so our game designers could implement it without code help
  • Wrote several tools to ease the development process for programmers, artists and level designers
  • Optimizing performance-critical algorithms, like pathfinding (speedup x40) and vision range calculation
  • Iterated on constant feedback from game designers, stakeholders and external playtests

…and much more. It has been a fantastic project to work on, and if you have the chance I hope you give it a try!

Shortly after the release of our second content update “Realm of the Rat King” I left the project to explore new things.

The reception

The reception when we released the game blew away all our expectations, with a huge, active (and friendly) community, and even a modding community. The game won two Game of the year awards and was a fantastic success. The story of Demeo will live on long after my part in it is over. It’s been an honor to work on it with so many talented people.