Hi, I'm Henry. In 2012 I quit my job as a programmer at BioWare to spend a year making my own indie games. This blog is about what happened next...

Like Spaceteam? Want to support my work?
Join the Spaceteam Admiral's Club!

Back to Work

Big Money

I'm a bit late posting about this but back in November at the MEGA+MIGS festival here in Montreal Blabyrinth won another award, for Innovation! And to my surprise it came with some money which was presented as a GIANT NOVELTY CHEQUE! Thank you so much to MEGA+MIGS and Ville de Montréal (the award sponsor)! ❤️

Giant Novelty Cheque

Not quite Blabyrinth

I was hoping to have a Blabyrinth beta ready for Christmas but it didn't happen. I'm eager for people to play but it doesn't make sense to push it out before it's ready or the feedback I get won't be as useful. Don't worry, you'll hear about it when the beta is ready.

I did make some progress on cleaning up some core systems, and I'm halfway through adding a new low-level system to make the game feel snappier called "Client-side Prediction". I might be using this term slightly wrong but it's close enough.

Client-side Prediction

In networked multiplayer games like this if the network connection isn't fast or consistent enough then there will be a delay between touching the screen and seeing a result (like your character moving). It's usually only a few milliseconds but if it gets longer then it becomes noticeable and frustrating. This is generally known as "lag" or "high latency".

In Spaceteam lag doesn't really matter because everything is so chaotic and you don't know what the other players are doing. Also Spaceteam sends very little data. So I got away with it. But Blabyrinth sends more data on the network and you can see more of what's going on so delays are more obvious.

Blabyrinth and Spaceteam use a "Client/Server" network architecture (as opposed to "Peer-to-Peer"). This means that one player's device (the Server) is more important than the others and considered to have authority over the game state. When you tap on the screen in Blabyrinth your character won't actually move to that spot until the Server gives you permission to move. The sequence of events looks like this:

  1. 👉 Player taps on floor
  2. ... Player's device (the Client) sends message to Server that we want to move
  3. ... Server decides if the move is allowed
  4. ... Server sends message back to Client that the move is allowed
  5. 🚶Character moves to tapped position

If the delay from steps 2–4 is more than half a second then the game feels sluggish, or the player doesn't think the tap was recognized so they tap again which can be confusing if the second tap does something else. So to improve this I'm changing it so that the character moves immediately after the tap, before getting permission from the Server. The Client is "predicting" how the Server will respond (hence Client-side Prediction).

Here's what happens now:

  1. 👉 Player taps on floor
  2. 🚶Character moves to tapped position ( ⬅ prediction! )
  3. ... Client sends message to Server
  4. ... Server decides if player can move
  5. ... Server sends message back to Client
    1. ✅ if the move was allowed: Great! We saved some time.
    2. ❌ if the move was not allowed: FIX IT!

The complicated part is the "FIX IT" step. It means the character moved when they weren't supposed to and so we need to quickly move them back to their previous position. This can look awkward depending on the situation. For example, the character is supposed to be trapped in a cage but they start to move through the bars and then quickly snap back inside.

Luckily the client predictions are usually accurate. Even though the clients aren't the authority, they still know most of the game state so they can make very educated guesses. And the occasional glitchy movement is a small price to pay for a responsive interface with immediate feedback.

I used character movement as the example here but this Client-side Prediction change also applies to other actions in the game that have to wait for Server confirmation. It's a broad change that touches lots of code which is why I was waiting until after all the festival demos to do it.

Spaceteam Android crash

The latest version of Spaceteam (2.8) on Android is causing some issues on startup. I haven't figured out what's causing the crash yet but if you go into App Settings (in system settings) and clear the cache and data for Spaceteam it should work again.

Mailing List Transition

I talked about wearing many hats in my last post. Here are some more hats! I would love to spend all of my time doing design & programming but I also have to maintain my mailing list, website, blog, and forum. I used to use MailChimp for sending newsletters but it's getting very expensive now that I have more than 2000 subscribers (> $100/month) so I needed to find a replacement. I finally decided on Sendy, which is self-hosted for a one-time fee of $59 (plus a $5/month DigitalOcean droplet that I'm also using for other things).

It took me a few days to get it running properly because I had to find another way of generating nice HTML emails (I settled on Topol.io) and then figure out how to personalize the messages with member-specific IDs, rewards, etc.

I finally got it working, so that's one less thing to worry about, but the time spent doing little things like this all adds up.

Is the Hype real?

Another task taking me away from Blabyrinth is a potential opportunity with the folks at Hype Labs to use their mesh networking system (called the Hype SDK). If it works for my needs it will solve a lot of my networking issues and I can rest easy knowing that a team of experts is maintaining and improving this technology so I don't have to. This is one hat I will gladly give to someone else.

I'm hoping it will work fine for Spaceteam and Blabyrinth but they don't have a Unity plugin for Hype yet so in order to test it properly I have to build one myself (for iOS and Android). I'm in the process of doing this, and I'll soon find out if it's worth it!

~ Henry

Blabyrinth on Tour

Blabyrinth on Tour

For the last couple months I've been travelling a lot showing the Blabyrinth demo at festivals. First there was Berlin (AMAZE), Toronto (TCAF), and Montreal (ComicCon). Then Portland (XOXO), Boston (BFIG), Montreal again (TeaCade) and LA (IndieCade). The game was also shown briefly by volunteers (thank you!!) in London at ERIC (the Escape Room Industry Conference). And next weekend there's one more local Montreal conference: MIGS.

IndieCade Photobooth

IndieCade Award

The response has been great (I won an award at IndieCade in LA!) and I've been making connections with escape room designers for potential future collaboration. But travelling has been tiring and takes away from development of the game itself, since I've only had a few days between each event to make changes (mostly just bug fixes). When you wear this many hats they don't always fit on top of each other.

Now that I'm back home I finally feel like I can put my programming hat back on and plough through the big remaining tasks.

What's left to do?

  • Integrate the new CaptainsMess networking library and make sure the game works over Bluetooth
    • ...and release the new CaptainsMess to the public!
  • Better onboarding/tutorials/hints
    • As with Spaceteam, in Blabyrinth I'm trying to avoid having hand-holdy tutorials and instead teach the game through organic interactions and discovery even before you start playing. There's no traditional Title Screen/Menu. I've been spending a lot of time trying to make the interactions intuitive with only small hints at key moments. The latest round of festival playtesting shows that this still need some improvement.

Title Screen Notice Board

  • A few more core puzzle types that involve custom UI
  • The Metagame and difficulty balancing (see below)
  • Refactoring a few core systems
    • Better to do this sooner than later but it was too risky to do between festival demos in case I broke something basic (I've learned this the hard way)
  • Lots of beta testing (with help from you!)
  • Stability + performance + battery optimizations
  • Upgrades and Admiral's Club rewards
    • There are lots of components of the game that can potentially be reserved and "unlocked" later: new puzzles, new avatars, new scenery, new items, new level themes, new game modes. I just need to decide which will be Paid Upgrades (probably a $5 or $10 In-App Purchase, like Spaceteam), which will be Admiral's Club Rewards (if you're not already a member please join to get exclusive goodies!), and which will be bonus unlocks that you'll get just by discovering secret things in the game.

Admirals Clubhouse

My current goal is to launch the public beta by Christmas (watch this space!) and launch Blabyrinth version 1.0 a couple of months after that. So, early next year.

This game is going to be ripe for post-launch expansions and features so I plan to keep adding to it for while after the first release. One feature that will have to wait until after launch is a user-facing level editor. This is a substantial project by itself and I'd rather get people playing the game sooner.

Difficulty balancing

Without giving too much away, the Metagame is a way to unlock harder puzzles for people who want more challenge. But this involves figuring out which puzzles are easy and which are hard, which is not always obvious. I can make a lot of educated guesses but some of this balancing will come from more widescale playtesting (the public beta) as people self-report how easy they find particular puzzles. And to complicate matters, difficulty is affected not just by the puzzle type but also the manifestation of the puzzle. For example, a puzzle involving a keypad can be made harder simply by having the symbols on the keys be more complicated shapes/glyphs so they're harder to recognize or describe to your team. Even if the puzzle interaction is the same.

Spaceteam news

Spaceteam VR

The Spaceteam VR team has also been in demo mode, here's a recent video from EGX in London:

I finally have my own VR headset to play the game on and I'll be testing the game soon (for the first time!) to provide my feedback and make sure it stays true to the spirit of Spaceteam. Everything I've seen so far has been great but it's no substitute for actually playing it.

It still feels a bit weird to me that Spaceteam is a "brand" now, with multiple products!

Bunch bugs

Spaceteam on Bunch (which lets you play remotely using video chat) is broken at the moment but we are working on a fix!

CaptainsMess progress

David from TripleBoris has been busy finishing the new Android Bluetooth plugin and it's almost ready. I'm very happy that I outsourced this work to someone else as illustrated by the following example:

I have 3 Android devices at home for testing and one of them refuses to join games using Bluetooth. It can Host games fine, but not Join. It's a pretty standard device (Samsung Galaxy S7) and TripleBoris has the same device which works fine for them. It's just mine that has a problem. I first assumed it was because of other software on the phone but yesterday I discovered that if I bring it to a café and test it there it can join. Something in my house, or perhaps the number of Bluetooth devices in my house, prevents it from connecting. But only this device and only when joining. Fun!

Thank you David for worrying about this stuff so I don't have to! ;)

~ Henry

Summer Sundries

Spaceteam news

ESL Speech Recognition

Educational variant Spaceteam ESL and its French counterpart Astronautes FLS are getting a new feature: Speech Recognition! Now you can get immediate feedback on your pronunciation in Practice mode. I'm using Google Speech-to-Text API which is more appropriate for understanding what you mean rather than exact pronunciation so it's not perfect for our needs but it's close enough. The new versions are in review and should be ready for the new school year on September 3rd.

ESL Speech Recognition

New translations for Spaceteam (now 22 in total!)

  • Swedish
  • Estonian
  • Simplified Chinese
  • ...and Bosnian coming soon!

I paid for a good official Chinese translation in the hopes of launching in China on Android sometime soon. This is actually a complicated procedure requiring special permission from the Chinese government, documents, fees, and working with a Chinese partner. Google Play is not allowed in China so instead you have to distribute your app or game on various other competing app stores. There are dozens of these stores, each with their own terms and policies, so it's much easier to work with someone else to handle the distribution.

I'm still investigating the best way to make it happen but it seems like I shouldn't just ignore such a big potential audience!

I am in violation... of something

When I uploaded my latest beta version to Google I got an unexpected message back that I was violating their Payments policy. Apparently it has to do with linking to my Patreon inside the app (it allows people to "donate" to me outside Google Play which I guess they don't like) but after asking for clarification it's still not clear what I can do to fix it. The app has been this way for a looong time. I've resubmitted without a clickable link (now it just says "Learn more at: spaceteamadmirals.club"). Hopefully that's good enough.

CaptainsMess is being revived!

I finally decided to outsource the one part of my job that I like the least: network programming. I'm working with a local company called Triple Boris to upgrade my CaptainsMess networking library. It will make Spaceteam and Blabyrinth networking more reliable and, since it's open source, hopefully others will be able to benefit from it too!

The first task I've given them is to build a custom Android Bluetooth plugin. I was previously using one from the Asset Store, but it cost money and is no longer supported. CaptainsMess will soon have built-in support for Bluetooth on iOS and Android without relying on external code (still not cross-platform though).

Blabyrinth news


The latest Blabyrinth showing was at Montreal ComicCon in July. Here's Phil (my musician) at the booth with some random players. Our booth was a bit boring so on the second day we brought some puzzle props and Phil's partner Linda made us a great "Escape The Room!" sign to make it more obvious what the game is about. This attracted a lot more escape room fans (and designers!) so I'm going to bring it to other events too.

ComicCon booth

From watching people play the demo it's clear that I need a good way to teach the basic interactions like swiping, pinching, and dragging. When I introduce the game I still feel compelled to explain to people how to zoom in to look for clues and pick up items. So I've been working on making the game teach itself using just the right amount of hinting.

Dragging Hint

New puzzle types

I'm still waiting to open the floodgates on new puzzle types until the game is more stable but I've been adding a few here and there. Here are some previews:

Photo Clue

Letter Grid

Paper Holes

Paper Holes

Paper Holes

Meta game

I don't want to spoil anything about the meta-game but suffice it to say I've been connecting things together so that everything will work if you decide to seek out the additional challenges hidden throughout the game. The labyrinth is not what it appears!

Next stop for Blabyrinth... XOXO Festival in Portland, Oregon (unofficially)

~ Henry