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!

Admiral’s Club 2.0

With the upcoming launch of Spaceteam 2.0 I will also be re-opening the Admiral’s Club to new members using Patreon, which is another crowdfunding platform.

I wanted to give existing club members a heads up about what that means.

First of all, the work I’ve been doing for the Kickstarter project is still happening. Blabyrinth is still in progress, and Shipshape is still in my future plans (although it’s possible I may make another game first… too early to tell).

Secondly, I don’t want my Kickstarter backers to feel any pressure to join the new campaign. You were part of the initial push, the founding members, and I’m forever grateful for that. You’ve helped keep Spaceteam alive and kick-started these new projects into existence.

The Patreon campaign gives new fans the opportunity to join and helps me stay sustainable long-term. It’s different from Kickstarter in that patrons subscribe to creators they like by giving a small amount every month (eg. $1 or $5). It’s more in line with my philosophy of supporting people rather than projects, and it’s a more predictable income stream.

If you’re frustrated that Blabyrinth isn’t ready yet, I understand. I am too. I wish I was working on it right now. But all the projects that it made way for, some planned, some unexpected, were worthwhile investments and couldn’t have happened without your support.

  • Spaceteam ESL now has a life of its own through Concordia, and has opened further educational doors
  • Spaceteam Apple TV got some great App Store features and experience working with a big screen
  • Spaceteam the Card Game was a fun foray into the physical universe and gave me a peek at the board game production process
  • Spaceteam Unity solves a difficult problem and ensures a healthy future for all my games
  • CaptainsMess will hopefully lead to even more awesome games from others!

I’d like to point out that crowdfunding, specifically, was what allowed me to pursue these opportunities. It would have been very hard to sell the Spaceteam rebuild, for example, because it’s not a new game.

These are the kind of business decisions that I have to make if I want to keep on creating. I’ll continue to be transparent about them and I’m hoping that I’ll get to spend more time on creative decisions in the near future :)

Don’t hesitate to contact me if you have questions or comments.

Space out!


P.S. I’ll be in San Francisco next week at the Casual Connect conference if any of you want to say hi or go for a drink.

The Last 10%

“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time” — Tom Cargill, Bell Labs

Beta Testing!

Spaceteam 2.0 is getting close. My translators have started testing and if you would like to help test, dear reader, then you can sign up here:

Beta Test Sign-up: [CLOSED: I have enough testers for now, thanks!]

I’m using a service called HockeyApp which helps me distribute builds so don’t be alarmed if you see references to it after you sign up. You can report bugs here:

Bug Tracker: https://bitbucket.org/hengineer/spaceteamunity

There are a few outstanding features that I have yet to add:

  • Acknowledged Mode
  • Ship’s Cat
  • Admiral’s Challenge special achievements

…but I wanted to test the main game as early as possible.

New Features

I tried very hard not to add any new features during the rebuild but there were some things I basically got “for free” with Unity, and a few others that I decided were worth it.

  • Slightly nicer graphics
  • Multitouch (finally!)
  • A “Play Again” button
  • QR code scanning on Android
  • Dutch, Greek, Turkish, and soon Arabic translations (many thanks to my volunteers!)
  • Downloadable Content — Optional assets like ship skin upgrades can now be stored on a server and only downloaded when needed. Now that I know how to do this it’s going to be pretty useful for my future games.
  • Analytics — Will help me estimate how many people are playing and also record certain things that happen in the game, like highest level reached. I’m hoping I can use it to create automatic high score leaderboards for special events.
  • “FailCam” — An (optional) fun feature suggested on the forum where the game takes a photo of your face at the moment of failure. The photos are then displayed on the Game Over screen as a memento of your accomplishment.

FailCam in action

I’ve also had to make a few sacrifices:

  • The first release will be Wifi-only, I haven’t had time to add Bluetooth yet.
  • The game runs more slowly on older devices. I’m still hoping to make some optimizations but I think this is price I have to pay to keep up with technology.

The 10%, or what’s been keeping me busy

Just finishing all the little corners of the game has been a slog, and then some unexciting things that took longer than I thought. The details are boring, but for what it’s worth.

  • Japanese font + symbols. I made some trade-offs between build size and flexibility and ended up treating Japanese differently from all other languages.
  • System Dialogs/Alerts. None of the plugins I tried did what I wanted so I made my own using Unity’s UI system. This turned out to be much easier than I thought but I wasted a bunch of time playing with other systems.

More New Plugins I’ve Discovered

Lunar Mobile ConsoleVery useful. It shows a debugging log on the device itself so you can immediately see errors or warnings. It’s easier than attaching a remote log viewer (I’ve been using Editor Console Pro for this) but more importantly it allows external beta-testers (eg. you, maybe?) to send me the log output by email. Getting a log file manually from a user’s device is a huge pain otherwise.

Build Report ToolSimple and effective.

Preparing For Launch

I’m speaking on a panel at Casual Connect in San Francisco in mid-July so I’m using it as a self-imposed deadline. If all goes well then around that time I’ll be launching:

  • Spaceteam 2.0
  • A new website that unifies the game, the Admiral’s Club, my blog, and all the spin-off projects like the board game and Spaceteam ESL.
  • A new Patreon campaign. The Admiral’s Club will start accepting new members, so people who missed out on the Kickstarter will get another chance to join. Existing club members will have no pressure to subscribe, but I’ll talk more about this in a future blog post.

See you soon!

Unification is Approaching

I’ve been making a lot of progress on the Spaceteam Unity rebuild but there’s still work left to do. Here’s what it looks like running in the Editor:

I’m frustrated by how long it’s taking because I really want to be working on Blabyrinth, but I’m still confident this was the right decision. I get emails every day about the game not working on various Android devices.

I’m surprised about just how much stuff there is to rebuild. I still think of Spaceteam as a small, “simple” game but it actually grew quite a lot over the last 3 years with all the upgrades, Admiral’s Club additions, new languages, and spin-off projects.

Challenges I’ve encountered:

  • Unity’s NetworkLobbyManager reloading the scene when a connection is made. I don’t want this to happen but I haven’t been able to prevent it. When the scene is reloaded various objects get reset/recreated and I have to restore their state in such a way that it looks like nothing happened. It also causes the animation to visibly stutter.
  • Publishing an iOS project and then compiling and installing to a real device is slow enough to be very frustrating. At the moment I’m trying to fix problems that only show up on the device and the iteration cycle (change, build, compile, test, repeat) involves so much waiting that it’s very easy to get distracted doing something else.
  • Slime effect (+ wiping). This was tricky even in the original game because it involves RenderTextures and custom shaders, but I had to relearn all that stuff in Unity so it was a bit time-consuming.

More C#/Unity Gotchas:

  • SyncVar objects seem to need a default constructor, or you’ll get weird errors. My OutfitPiece class had a custom constructor and it took me a while to figure out that simple adding an empty OutfitPiece() constructor made the errors go away.
  • To make the dangling panels I naively figured that adding a Hinge Joint to the object would be enough, but I also needed to add a Box Collider (despite not needed collision) or the panel wouldn’t be affected by gravity properly.
  • If you want to Join a List you have to use ToArray() first
  • When calling a coroutine from C# you must use StartCoroutine(coroutine) or it will just silently fail! My solution: I’ve been suffixing all my coroutines with “Coroutine” and making one-line helper functions that simply wrap the call.
  • If you try to override a function but don’t include the “override” keyword sometimes it will fail silently with no warnings.
  • C# does not autoconvert Doubles to Floats. Must always add “f” at the end of floating point values. Mildly annoying.

New Plugins I’m using:

  • ZestKit and now DOTween. Many of my animations are dynamic so I needed a programmatic solution for smoothly animating between different states (“tweening”). I started with Prime31’s GoKit/ZestKit but due to lack of good documentation I ended up switching to DOTween.
  • Procedural Lightning. I wanted a good shock effect for electric malfunctions, so I found a cool library for lightning bolts. Looks great and very easy to customize.
  • QR Code Scanner/Generator for the Admiral’s Club login page. I only used a few bits of code from this library but it got me on the right track.
  • Prime31 Etcetera. For showing native iOS and Android dialog boxes.
  • TextMesh Pro. I needed a way to modify individual characters in a label (eg. for Labelling Malfunction) and TextMesh Pro seems to have a lot of features. I’m still experimenting with it.
  • More Post-Processing Effects. I’m using this for wormhole and anomaly screen distortion effects like rippling and waving.

So it’s going to be a few more weeks of work at least to get the original game done, and then I have to re-port Spaceteam to Apple TV (as a bonus Chromecast/Android TV should now be much easier). Then Spaceteam ESL and the upcoming Spaceteam FSL. Spaceteam Kids is still in the works as well.

Whew! That’s a lot of Spaceteams. I’m trying to stave off the madness by filling in the cracks with some Blabyrinth development.

Space out!