How to make a VR game for WebXR with Godot

Submitted by David Snopek on Tue, 11/03/2020 - 11:05

For the last few weeks, I've been working on adding support for WebXR to the Godot game engine, and recording periodic progress report videos on YouTube.

Things have gotten to a point where it'd be useful for other folks to try it out, to help find bugs and give feedback on the APIs. So, I've decided to write this short tutorial on how to use a development build to make a VR game!

Of course, since Godot's WebXR support is still a work-in-progress, there will be changes and after awhile, these instructions may no longer work exactly as written here, so be sure to check my site and YouTube channel for newer information.

UPDATE (2020-11-10): I've made a video version of this tutorial for those who prefer video!

Introducing "Interstellar Smuggler VR" - Devlog #1

Submitted by David Snopek on Fri, 04/03/2020 - 10:35

I've been super interested in the idea of virtual reality (VR) for a long, long time, although, until recently, I hadn't actually even tried it much. However, the price and quality (in both hardware and games) seemed to have reached a critical intersection, so a couple months ago, I picked up an Oculus Quest. Since then I've been playing almost exclusively VR and just loving it!

(Yes, I've been playing Half-Life: Alyx too - it's an amazing game.)

So, of course, I started experimenting with making my own little VR games in the Godot game engine right way. :-) I wish I had been posting articles about them at the time, but it's hard enough to find a little time to work on my game projects, let alone write about them.

Anyway, after my first experiments, I started working on a bigger project...

Nakama client library for Godot (in GDScript)

Submitted by David Snopek on Wed, 10/30/2019 - 11:38
Nakama logo

A couple months ago, I started experimenting with network multiplayer games in the Godot game engine. First, with Battle Pong, which was just to learn the basics of the Godot High-level Multiplayer API. And then, with Retro Tank Party, which was to try and make an actually fun network game.

When the tank game started to be kind of actually fun, I wanted to take the multiplayer to the next level...

This meant I needed to have some persistent server component!

But, I didn't want to have to build that custom... I want to focus on making my game AWESOME!

That's when I heard the news that Heroic Labs, the company that makes an Open Source game backend called Nakama, was going to sponsor Godot.

An Open Source game server that I can just drop in and use without writing my own? Perfect!

I ended up integrating it into Retro Tank Party, and it's now providing user authentication, matchmaking and part of the multiplayer setup for the game. You can read more about how that game is using it in a separate article.

I also created my own client library for interacting with Nakama in GDScript, which is what this article is about. :-)

If you want to learn why I made my own library, and how to use it - read on!

Switched to WebRTC for networking (and changed name to "Retro Tank Party")

Submitted by David Snopek on Wed, 10/23/2019 - 13:26

David Snopek's Retro Tank Party, as it's now known, is a 2-4 player network game where you drive a tank and shoot your friends.

(It was originally a gamejam game that I was calling "Battle Tanks", but I've continued working on it, and it's turned into a persistent project, so I figured it needed a real name that was somewhat unique.)

Over the last couple of weeks, I've been converting the game from using a client/server model over UDP, to a peer-to-peer model over WebRTC. This also included setting up a persistent backend (based on Nakama) so players can have user accounts, and, among other things, support matchmaking.

The most exciting thing about this, is that you can now PLAY THE GAME ONLINE on

Check it out! If you want to play a match with me, feel free to ping me @snopekgames on Twitter.

Read more to find out why and how this was done!

Lots of playtesting and minor improvements for "Battle Tanks"!

Submitted by David Snopek on Thu, 10/03/2019 - 12:01

I originally created "Battle Tanks" a couple weeks ago in the MDW gamejam. Since then, I've been playtesting it with my co-workers for 15 minutes or so every morning, and making minor changes to improve the gameplay.

This has been super cool!

Up until now, I've been learning the technical bits necessary to make the game work (aka game development). But this process has helped me learn more about game design and how to make a game accessible and FUN!

Here's a video from this morning's playtest:

(FYI, I'm also considering picking a different name for the game, since it seems there is already a "Battle Tanks" game. Any ideas? I'm thinking either something super generic and descriptive, like "Top-down Tank Battle" or something really specific so it can't be confused with another game...)

Each day, I've made some notes about the changes I made to the latest build, my goal for those changes and then recorded the results.

Read more to see my playtesting notes!

Creating "Battle Tanks" for the MDW gamejam 2019-09

Submitted by David Snopek on Tue, 09/24/2019 - 21:31

At work (myDropWizard or MDW), we started doing psuedo-monthly gamejams a few months ago. This past weekend was the 3rd one, and this time I decided I wanted to take what I'm learning from creating "Battle Pong", and make a network multiplayer game that might actually be fun. :-)

So, I created "Battle Tanks", a 2-4 player game, that pits tanks against each other in a 2D, top-down battle to see who will be the last one standing.

I used the great "Top-down Tanks Redux" asset kit from

It was a really interesting experience, and while not yet at its full potential, the game has the seeds of a fun experience that I think I'm going to continue to develop, at least for a little while.

Read more for the deets!

Creating "Battle Pong" - a networked multiplayer game in Godot

Submitted by David Snopek on Sat, 09/14/2019 - 06:34

Lately, I've been wanting to experiment with creating a multiplayer game in Godot, my current game engine of choice.

So, thought, "What is the simplest two player game I could make?"

The answer: Pong. :-)

The goal isn't to make a unique or engaging game, but just to learn about making a network multiplayer game, so that I can get the fundamentals of that and use them for a more interesting project later.

See, my assumption is that certain design decisions will make network multiplayer easier or harder. If I make a really complex game, and then add network multiplayer after, I may have to rework the design significantly for it to work.

However, if I can learn these lessons on a simple game, I could perhaps create that complex game with the right design initially, so that network multiplayer fits in naturally.

That's my hope anyway! :-)

Read more to find out about my progress and end goals!