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!

Bad Generation


The game is getting more stable and I'm steadily improving the generator. My day-to-day work often consists of: generating a random level, exploring for a few minutes and inevitably finding something broken, and then stepping through the construction algorithm one piece at a time to see what caused the problem.

I made a visualizer so I can see what it's doing at each step, here it is in action:

Generation Timelapse Visualization

The rooms coloured green in each step are the candidates being considered for placement of the scenery/item/whatever. The choices become more limited as rooms fill up or sections get blocked off due to a dependency (eg. can't put a key inside the section it unlocks). Sometimes there's only a single choice because a puzzle requires everything to be in one specific room.

Lately the most glaring issue is scenery groups and set pieces colliding with each other. Here's an extreme example:

Major Scenery Collision

There is some "scenery group layout" code that tries to place the scenery in sensible ways, but sometimes if there isn't enough space it just gives up. I actually don't know what happened here, it's never supposed to get this bad... :)

It seems like the obvious solution would just be to place some of the scenery in a different room, but occasionally there's a situation where something more complicated is required. For example, maybe the room has two secret passages, both of which require scenery-based "rituals" to unlock, and the neighbouring rooms are already full of other stuff. In this case I need to solve the collision at an earlier stage in the generation, before the 'scenery placement' step happens, with some kind of rule like "if there are two hidden doors in a single room, restrict the type of rituals that can happen there..."

Anyway, I'm gradually refining the process and before long these collisions should be rare (or at least handled gracefully) and I'll have a new set of problems to deal with :)

Another common problem is clues being unintelligible because they are cutoff/overlapping/badly-formatted/too-small/etc. Clues can contain all sorts of arbitrary text and symbols, and show up on oddly-shaped scenery, so I knew this would be a problem.

A Bad Clue

The solution here is usually (as with scenery placement) adding more restrictions about which clues can go where, rather than getting creative with text layout and trying to squeeze everything in where it doesn't fit.

But enough problems. Here's an example of a simple puzzle that works.

A Simple Puzzle

If you can't see the image, it shows a room with a numeric keypad and four statues with letters engraved on them. The statue engravings read "ENTY", "FIVE", "TWEL", and "VETW". It should be pretty easy to discover the secret code!


One thing I'm not having a problem with is music. Phil has started sketching out the music tracks for the game and I'm really happy with how it's going. Here's a teaser of the main theme:

Space Out and Happy Holidays!

~ Henry

Spaceteam Bunch

Spaceteam News

Bunch Video Chat

You can now officially play Spaceteam using video chat! You'll see the other players' faces and hear their voices while you play. It's not the same as them being in the room with you, but it works :)

Animated GIF of Bunch

I teamed up with Bunch to add this feature so you need their app to use it (free download from the App Store). Choosing the Bunch option from the Connection Menu will launch you into a Bunch lobby where you can invite your friends. If you don't have the app yet it will take you to the App Store to download it.

Bunch Connection Mode

Once your friends are all in the Bunch lobby, just choose Launch This Game and it will launch a Spaceteam game with everyone in it and video chat enabled. When playing, you can tap the chat bubbles for more options.

Bunch Lobby

This feature is only on iOS for now. And you must have iOS 10 or higher. Android is coming soon but Bunch is still working on Android support.

Data Privacy

The introduction of the GDPR back in May got lots of indie developers worried about how it would affect their games and communities. Lots of games collect and use the kind of data that is now protected in Europe.

Spaceteam doesn't collect any data directly but the Unity engine does, so I've added a link to their Privacy tool (in the About menu) where you can request and download your own data and also opt-out of collection entirely. It is mostly device-specific data like the make/model/system of your phone but you should check it out if you're interested.

New Language: Catalan!

Spacefriend Pau Guri volunteered and submitted an entire translation of the game into Catalan! Big thanks to you Pai!

Space out!

~ Henry

Autumn Cleaning

Captain's Mess

I was recently encouraged to give my open-source networking library CaptainsMess some more love. It's still missing Bluetooth and Internet support so I've been transferring those features from Spaceteam, generalizing the code, and making it more user-friendly so the 3rd-party libraries that I use can be added/removed/replaced.

In fact, while doing this I discovered that my current Android Bluetooth plugin is no longer being supported by its developer :( so I'm looking for a new one to integrate before I release the changes. Since the existing plugin costs money I can't recommend that people pay for it if it might stop working in the near future. It does still work for now, but it's only a matter of time before it will need an update...

Blabyrinth Progress

After a bunch of complicated technical work on the LevelGraph re-architecture, it's now up the same state the game was in before (exciting, I know...). So it generates the same kind of levels but they are easier to test/debug and extend.

I'm still not 100% happy with it but it's much better than it was and I'll only need to make small changes from here on instead of big ones.

One thing I can do now is create an editor to choose which components the level generator picks from. I did this before in code, but this way is sooo much faster and easier. I can turn everything off except for a few settings to get a really simple level with only certain features (for testing). For example:

  • only keypad locks using numbers
  • only clues split up onto multiple items (eg. scraps of paper) hidden in plain sight
  • nothing else

Or I can turn everything on for a complete level.

But I'm also planning to use this system to change the difficulty of levels by excluding or including harder puzzle types and obscure features. The final game will start easy (to introduce new players) and then there's a secret way to access harder puzzles that needs to be discovered within the game :)

Music & SFX

I'm starting to work with Phil (Philippe Lachance, the musician for Spaceteam) to add music and sound. It's a tricky game to write music for because there might be four devices all playing audio at once, at different volumes and with a slight delay (due to network latency). Also people need to hear each other talking, so the in-game music will mostly be atmospheric/ambient.

Next time hopefully we'll have some music samples for you but for now here are some random sound effects.

Secret Passage opening



~ Henry