Jul 142020

Last year, before I started working on my Frozen game, I started with something a bit simpler for my then-3 year old – a 2D Little Mermaid game. I wanted to make something very simple to teach basic 2D pad controls with minimal buttons required. On the plus side, no UI or text was required as she can’t read. Ariel is my daughter’s original favourite character, and some kind of swimming game sounded like a good idea. Also I hadn’t tried tilemaps in Unity before, and this was a good excuse to investigate. Here’s the end result:

The initial idea was to help a mermaid find her children who were hiding in a little maze, and bring them back to her. I’d picked up one of the Humble Bundles for creators that had some basic tile sets in, so I thought this would be easy. Unfortunately when I actually looked at the tileset it was completely useless – most of the tiles weren’t even square! Long story short, I eventually hopped into GIMP and drew my own, hence they don’t look very good!

But after making a simple maze, chucking in a parallax underwater background and adding a few simple fish sprites that moved back and forwards, it actually looked OK and I excitedly showed my daughter.

She takes the pad, goes straight up to the roof of the cave and says “Daddy, I want to go to the surface and see Prince Eric”. Except there isn’t a surface, or Prince Eric. But she does have a bit of fun swimming around looking for mermaids.

A couple of days later I’ve added some scrolling waves, some sky, and Prince Eric standing on the shore. “Daddy, I want Ariel to turn into a human and go into Eric’s castle.”

This game is going to be a little more involved that I’d anticipated. Oh well, it give me some direction, and it’s not like I’m not used to the whims of demanding designers.

Soon it had escalated. “Daddy, put in a giant penguin that goes up and down and has water spraying out of its head. And some monsters.” But finally I called it a day – after rescuing the mermaids you retrieve Eric’s castle key, do a little bit of platforming inside to grab your luggage, find the keys to chests containing other vital supplies, and then you sail off with Eric on a boat. Phew.

It’s not a technically great game by any stretch, I was just hacking stuff in quick. But it was pretty fun to make, and it was great for my daughter to see it being made (we mostly played it together in the editor, chucking sprites in and moving things around – she was obsessed with making the seagulls huge and green at one point). The only thing I’ve changed since is the music it originally had – after hearing the same jingly song from the musical on loop for hours on end, I just had to replace it with some generic background music.

Feb 162020

I bought a bunch of the popular Unity landscape tools recently, namely Gaia Pro, Vegetation Studio Pro, Complete Terrain Shader and River Auto Material. I also picked up a couple of the Nature Manufacture asset packs.

Here’s a little video of using the tools to quickly create a landscape. Note that I have spent a decent amount of time setting up the biomes and rules first so there’s work to be done after acquiring the tools, but once that’s done it’s super quick to create landscapes!

Gaia Pro

Gaia Pro from Procedural Worlds is primarily a tool for creating terrain heightmaps. It includes a wide range of ‘stamps’ (predefined heightmaps) which you can move, scale and rotate, and then apply to your terrain. There are loads of modes for applying stamps – add, subtract, blend, or apply effects like erosion, steps or peak enhancement. Stamps can be further combined with distance masks or other heightmaps for plenty of control. There’s a nice preview visualiser so you can see more or less what it’s going to do to your terrain before you apply.

Gaia Pro has loads of other features bundled in. You can set up texturing rules based on angle and height to automatically texture your terrain, as well as add rule-based spawners to add trees, rocks and buildings. Also bundled in are other asset sample, such as water, environmental audio, post-processing control, and a selection of trees, rocks and building assets.

This was the first tool I bought, and it’s a good all-in-one package to get started with. The terrain editing bit is great, but personally I don’t used the texturing and spawning controls – I find that Vegetation Studio Pro does that better.

Vegetation Studio Pro

Vegetation Studio Pro from Awesome Technologies is a must-have if you’re making large outdoor terrains. It takes a bit of setup, but afterwards you can author whole terrains in minutes.

You set up a series of biomes, each of which consists of terrain texturing rules and vegetation placement rules. The terrain texturing is similar to Gaia. You defines rules for each texture based on height and slope, convex or concave terrain, and Perlin noise, and they’re all combined to get the final texture. Vegetation follows similar rules – drop in your prefabs and set up similar rules for each based on height and slope, underlying texture, and density.

One massive bonus of the Pro version is that it supports multiple biomes types simultaneously. You define a default biome and can then drop other biomes into the scene and define their extents. The highest priority biome at each point is the one used, and there are cross-fade rules and curves to blend textures and reduce vegetation density or scale across the border.

In my game I have a default grass biome. I’ve defined a couple of different forest biomes so I can drop them into the level, mark the borders and you’ve got instant forests. And it uses its own batching and rending system so everything draws super fast! It’s the most expensive tool I’ve bought but definitely worth it.

Complete Terrain Shader (CTS)

Complete Terrain Shader is also from Procedural Worlds. It replaces the default Unity terrain shader with a more advanced one with more options. I think it has two main uses – the simple one is to add interest to distant terrain and break up the tiling, and the second is to use height maps for each terrain textures to completely change how textures are blended together.

The standard shader variant adds ambient occlusion, low frequency detail normal maps, height-based geological banding and snow, lower frequency tiling on distant terrain, and a few other features. These tweaks will make your distant terrain more visually interesting and less flat. Whether it’s worth it probably depends how much stuff you have in your world – if there’s a lot of detail and objects over your distant terrain it might not be so noticeable.

There’s an advanced shader variant that uses per-texture heightmaps, combined with the standard texture blending, to determine which texture to use per-pixel. I’ve not looked into this too far, but done well it can give far higher resolution, sharper texture blending.

River Auto Material (R.A.M.)

River Auto Material is a tool for creating river, lake and road geometry. You just click to add river spline nodes, set the scale and rotation of each node, apply a material preset, and paint transparency for blending. Fast and slow water effects are applied automatically based on the river gradient, or you can paint them yourself.

You can also simulate river flow, which I use a lot. Drop in the start point, hit the Simulate button and it’ll generate a river that flows downhill. Then there’s a terrain carving tool – draw the river bed profile in the graph editor, hit the Carve button and it’ll reshape the terrain around the river and blend it in to the existing terrain.

The other great feature is Vegetation Studio Pro integration. For each river preset you can define an associate biome type. Simply set the desired biome width, press a button and it’ll automatically generate a matching biome mask around your river. This makes it really easy to blend your rivers into your scene – the sand and rocks in the screenshot above were added like this.

I’ve not dived too far into the possibilities yet, but it’s a fun tool to use and I like the results a lot.

Feb 092020

It’s been a while. Turns out that having a child takes up a lot of your free time. Who knew.

It’s a tricky balancing act with children and technology. Too much screen time is bad, but they need to learn to use technology and feel comfortable with it. Being from a tech background, I often wonder if we were more conscious of this and a bit too strict (somewhat hypocritically, thinking back to my own youth…).

Everything is touch screens these days. Direct control is so much easier than indirect control, so I wanted to make sure that my daughter had some practice with a controller. Time to get back to Unity and make something!

I did a couple of simple 2D games early on (I’ll share them later), but I wanted to try something in 3D. My daughter loves Disney and Frozen, and after a quick Google I found some passable Elsa and Anna models (3D modelling is definitely not in my skill-set). After a quick proof of concept and a bit of research, the Unity Black Friday sale was upon me and I went all-in with a bunch of the popular tools. I may follow up with a technical post later.

The only slight hiccup is that we have another child due any time now, and nothing is going to get done for a few months afterwards. So this is what I’ve come up with so far:

There’s no real gameplay there, but my daughter always prefers to play in a sandbox than be told what to do, so running around and exploring is fine. You can summon snowmen, push them around, throw snowballs at things and cast magic at wolves to scare them off. I could spend hours more detailing the world and adding areas things (there’s loads of black areas), but I think it looks pretty cool so far.

Obviously the game will never be finished or distributed as they’re not my characters, but it also has the advantage that it only has to run well on my own beefy gaming PC so I don’t have to waste limited time on performance and optimisation!

Games for kids

Thinking about games for children in general, every child is so different that it’s really hard to find anything ideal off-the-shelf. They’re either too complex, or too simple, or require reading skills, or the theme isn’t interesting. Which is why I just make my own games, which can become more complex as my daughter grows up. And most importantly she can see how things are made and give ideas and suggestions about what to add, and see me make changes in real-time. Much better than games being some mysterious black box (I realise I’m lucky in being able to do this). If my kids are going to be gamers, they might as well start with early-access, moddable PC gaming! Much closer to the Spectrum scene I grew up with.

Co-op modes

Co-op mode is the best thing ever in gaming. It’s the ideal way to share a game with your family, and done well it can let an adult handle the complicated bits while the child does what they can.

This fit really naturally with a Frozen game, with two main characters. It’s not really in the video (because I recorded it myself and using two pads at once is hard) but one pad controls Elsa, and one controls Anna. Both pads can control the camera, so the child doesn’t have to. If there’s no input on a pad for five seconds, that player drops back to AI mode (they just follow you around for now) and the camera focuses on the active player. Any input will put them back under player control and the camera will keep them both in view. No rules around this, no complicated explicit join/drop-out mechanics, it ‘just works’. I’ll definitely be keeping this concept for future games.

Oct 302015

It’s been a slow year on the blog. This is mainly due to taking up a few new hobbies (learning Norwegian, and getting into astronomy and astrophotography) and preparing for a new child. I may write about some of these in future. But in the meantime I’ve done a little bit of work on my previously-untitled “spaceship game”, and figured I should put it up for download on the off-chance that anyone wants to play it.

I’ve mainly improved the frontend and UI, as it used to use the terrible looking built-in UI system in Unity pre-4.6. However, as my day job is making nice UIs for mobile apps, it’s not really the sort of thing I want to spend all my spare time on as well, so it’s pretty minimal (but not as embarrassing as before). The graphics are also terrible, because I’m not an artist. You may have heard the term “programmer art” before. If not, you have now.

At least the game now has a title. Using the time-honoured method of picking pairs of vaguely relevant words at random and putting them in Google until no existing game comes up, it is called Galaxy Arena. Download it here:

PC: GalaxyArena_PC.zip (13.1MB)

Mac: GalaxyArena_Mac.zip (15.1MB)


The Game

Galaxy Arena is a multiplayer-only game where you competitively build a spaceship out of square parts against the clock, and then fight everyone else with your creation. It’s pretty obviously heavily inspired by the board game Galaxy Trucker if you’ve played that (and if not, you should).

You can play free-for-all or with teams, and it supports 2-12 players. Team support is flexible but rudimentary – simply type a team number into the Team box by your name in the lobby, and the game will form teams accordingly.

I’ve only actually tested it on a LAN with up to eight players, but I presume it works over the internet. It uses the Unity development server for posting open games, and this is occasionally down for maintenance. If it is, you’ll just have to try again later (sorry), or use the Connect to IP option (port 33104).

Build Controls

The first phase of the game is where you build your ship. Your Core module in the middle of the screen. This has tiny engines and a puny laser built in, and your match is over when it’s destroyed. Around the edge of the screen are eight stacks of tiles, shared between all players. You have 60 seconds to grab tiles from the edge and attach them to your ship.

Left-click: grab a tile / place a tile if valid (when green)

Right-click: rotate the grabbed tile 90 degrees

Esc key: discard the current tile

Building Rules

Ships must be built following a few rules:

  • Tiles must connect to an existing part of the spaceship
  • Edges of the new tile must match all existing neighbouring tiles – either connector-to-connector, or blank-to-blank
  • No tile can be placed in the square directly in front of a weapon (shown with a red cross)
  • No tile can be placed in the square directly behind an engine (shown with a red cross)

After the time is up, you’ll be taken to the arena to fight.


ga_coreCore. Lose this and you die.



Engine. Provides thrust and increases turning rate.


ga_laserLaser. Rapid firing, low damage weapon. Faster projectile than the missile.


ga_missileMissile. Slow firing, high damage weapon. Slightly higher DPS than the laser.


ga_gyroGyroscope. Increased turning rate.


ga_crewCrew. Increases rate of fire, and increases engine power.


ga_batteryBattery. Increases total energy reserves and recharge rate.


ga_armourArmour. More hit points than other modules.



Fight Controls

The arena stage is last man (or team) standing. There is no time limit and no walls around the arena, so just play nice and don’t run away forever… (this is remaining a prototype, not a polished full-featured game).

W/ S / Q / E : thrust forwards / backwards / right / left. Fires whichever engines you have pointed in that direction

A / D : steer left / right. Steering is faster the more engines and gyros you have, and slower the more mass of ship you have

Space : hold down to boost your engines, but this drains your energy bar quickly

Arrow keys : fire all of your weapons that face in that direction. Firing uses energy, and weapons won’t fire if there isn’t enough.

Tab : show the scores (just for fun, they don’t mean anything). Score is purely the amount of damage you’ve inflicted.

Your team mates have green names, and have green arrows pointing to them. Your enemies have red names and red arrows. You can damage your team mates, so be careful.

And that’s about it. Here’s a video of the previous version of the game. Enjoy!

Jan 282015

Just before Christmas I had a couple of days off work and planned to give Elite a proper play, but then something happened: a friend very kindly bought me a copy of Kerbal Space Program. I knew of the game and I’d always been curious, but I assumed I would quickly get bored of a predominantly sandbox experience. Apparently I was wrong – I booted it up one morning and spent the next three days solid engrossed in orbital mechanics, staging, lander design and “delta-v”.

The game involves building rockets and space planes from a huge variety of components and launching them into space to explore the solar system (different to but based on our solar system, which I guess stops people nitpicking about accuracy), while using reasonably realistic physics. As such, it was humbling as a self-confessed science/space nerd that it took an hour of failures and a tutorial before I managed to get a rocket into orbit. It’s refreshing to play a game that pays so little attention to traditional ‘gaming’ experience and relies so much on a knowledge of physics.


A brave Kerbal on his way to the moon

There are three different game modes – sandbox mode where everything is available, “Science sandbox” where new parts are unlocked by doing new things and using scientific instruments, and a full career mode which also adds money earned through contracts. I was warned that the career mode was really hard, so I went with Science mode. This lowers the learning curve of Sandbox mode by introducing new components slowly, while removing the stress of money and crew management. The game is still in Beta but when it’s done I’ll have a stab at Career mode now I vaguely know what I’m doing.


This little guy can’t get home. I’ve reclassified him as Moon Base 1

I was struck by the familiarity of my progression during the first few hours compared to the real space programmes, and the real sense of accomplishment that I’d not felt in a game for years:

  1. Fire a rocket up into the air. Heh, this is cool.
  2. Fire a rocket up into the air and parachute the capsule back home. First successful mission.
  3. Blast well into space before splashing down in the ocean. Sub-orbital space flight!
  4. Making it into orbit (eventually) and safely de-orbiting. Ooh, reentry looks cool.
  5. Getting into orbit, firing off towards the moon, slingshotting round the back and getting back home again. Landing there looks tricky!
  6. Getting to the moon, going into obit and landing on the surface in one piece. Having no fuel left for the return journey (real-life thankfully skipped this stage).
  7. Landing on the moon, grabbing surface samples, getting back into space and making it back in one piece for the first time. A real accomplishment!


About to ditch the last stage and deploy the parachutes for splashdown

Each stage presents new challenges and physics concepts to master. Getting into space requires staging (jettisoning empty fuel tanks and engines to make the rocket lighter). Obtaining a circular orbit needs an understanding of the apoapsis and periapsis orbital nodes (farthest and nearest points) and how burning at one side of the orbit only affects the other side. And then you can worry about orbital transfers to get to other moons and planets.


Get used to the view, son, you’re stuck on Eve for the forseeable future…

Thankfully the game provides a great maneuver planning tool. The current orbits of all bodies and ships are shown, and you can add planned maneuver nodes along the path. Drag the node in each of the six directions (prograde and retrograde, normal and anti-normal, radial and anti-radial) and the predicted path updates, including closest approaches to other bodies and ‘encounters’ (getting within their gravitational sphere of influence). While I’m sure NASA use complicated maths to plan their paths, in this game dragging nodes around until you hit on something useful also works while you’re getting the hang of what each direction does to your orbit. Then you just follow the directions on your control panel to carry out the planned burn.


The aerodynamic model is very simple, otherwise this rover and sky crane would never get off the ground

 After that the sky is, indeed, the limit. I’ve got “small colonies” (read: failed return missions) on Eve (Venus) and Duna (Mars), and used a sky crane to drop a small rover on the moon. The other planets require even more powerful rockets to reach, and as we speak there are probes scouting the outer planets for my future (probably suicide) missions…

And finally, for the truly brave, there is the small matter of orbital rendezvous and docking. Why get just one spacecraft where you want it to go when you can get two in the same place, at the same speed, at the same time? Building substantial space stations requires launching them in multiple sections, and this is my next project. My first and only successful docking took an hour, but it must get easier. I mean, it’s complicated, but it’s not rocket science.

Jan 212015

The wait is over, Elite: Dangerous has been out for a month now and I’ve been playing it quite a lot. I was going to wait until it was actually released before diving in, but I had the chance to borrow an Oculus Rift DK2 for a weekend right at the end of the beta, so I dived in early. And both are awesome!

I’ve heard a few predictions that the Rift won’t turn out to be any good. I don’t know how it’ll fare as a consumer device in the market, but from a technical perspective I can safely say it works great.


Prepare to be randomly attacked by many of the psychotic NPCs

I had a quick go on the original devkit about 18 months ago at the Rezzed show, playing a completely unsuitable game (it used FPS controls on a joypad) and it was… quite good. You could see the giant square pixels, and everything was a bit blurry and smeary, although that was probably a combination of steamed up lenses and the fact I wear glasses. But still, you could look around it was pretty immersive – until the point when I moved my head both in real life and with the stick at the same time and felt instantly sick. Moral of the story – the Rift and FPS controls don’t mix.

The DK2 is a massive improvement. The resolution is higher and it added full head positional tracking. The positional tracking is the biggest improvement to immersion – the best games and demos involve sitting in some kind of chair, and the first time you lean over and look behind or underneath you, you almost forget where you really are.


On my way to the Pleiades

Elite is an unashamedly slow-paced space simulation, which really benefits from the immersion offered by the Rift. Despite the complicated controls it’s completely possible to play on an Xbox 360 pad (assuming you don’t have a flight stick) without touching the keyboard, which is vital for VR (use the Advanced Pad preset in the options – lots of controls are mapped to “hold a button and press the D-pad” which takes a bit of learning but works well). In particular, the dogfighting is much better with the Rift as you can look up out of the roof to keep track of your target. The only downside is the text is a bit small, so you have to lean it to read it easily. But the fact that you can do just that is awesome in itself!


Ringed planets can be very pretty

The first few hours are a bit of a grind as you carry out delivery missions for a few thousand credits each, but pretty soon you can get into a dedicated trading or fighting ship and make some serious money. My early goal was to get into the classic Cobra Mk3 and kit it out, and then go on a jaunt somewhere interesting. Looking around the map, the closest landmark I could find was the Pleiades star cluster and the thin nebula around them, at a mere 300Ly away. The journey there took an hour or two, scooping fuel from stars on the way, and watching the nebula grow bigger after each jump thanks to the dynamic sky box.


A young planet around one of the massive, bright Pleiades

The attention to realism is what makes the game for me. Everything is to scale, from the layout of the stars to the planets in a system, and planets and stations move and orbit correctly within systems. That’s such a surprise after being used to the static universes of Eve and the X games – for example when you find your trade route has got a bit slower because the station is now on the wrong side of the planet compared to an hour ago.

Arriving at the Pleiades, it’s all massive, bright, young stars with new lava-riddled planets around them as you’d expect. Slightly less expected was the random NPC cruiser that started shooting at me shortly after I took the screenshot above, hundreds of light years from civilisation. But I suppose the game needs to attempt to give the illusion of a populated universe.


Back to space trucking between outposts

One criticism I do have is the multiplayer aspect. I admit that when I’m trading I play in Solo mode, with no other human players. There are no ‘positive’ interaction you can have with other players – all you can do is randomly blow them up or crash into them. Given that losing a ship full of expensive cargo can set you back hours of game time, I don’t have any desire to risk it. I appreciate that some like the thrill and the adrenaline, but being on the wrong end of a pirate encounter isn’t for me. Hopefully Frontier will add some other incentive to play with others, but in the meantime I’m happy enough in my own little world.

It’s also not a game you necessarily want to play for hours at a time, as it can get fairly repetitive grinding money for the next ship. But by mixing up a bit of trading, fighting, mining, exploring and keeping up with the evolving story, as well as playing in small doses, it’s still a game I feel excited to get back to and play. A worthy new (old) entry into the sparse space sim genre!

Oct 012014

This is part 2 of how my spaceship building/fighting game is structured. Find part 1 here.

Space network synchronisation

Each player’s ship consists of a parent object with a PlayerShip script and a Rigidbody 2D, and a bunch of children (one for each attached ship module). I very much like the fact that you can just add a selection of children with box colliders (i.e. the modules) to an object with a Rigidbody and the physics interactions Just Work (certainly well enough for my purposes).

With that in mind, the only objects created with a Network.Instantiate() are the parent ship objects, one for each player. The server owns all network-instantiated objects, and nothing is network-instantiated on a client. The server keeps track of which object belongs to which player.

The clients have already been told which modules make up all the ships, so they create them all locally and attach them as children of the ships. The parent PlayerShips are the only things in the game that use the NetworkView state synchronisation (which automatically updates position and rotation 15 times/second). This is very efficient as there is only one synchronised object per player.

Prediction and interpolation

The ships use some simple prediction to minimise the effects of lag. I’ve seen a few people asking about how this works, so here’s the serialisation code:

void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
  if (stream.isWriting)
    Vector3 position = rigidbody2D.position;
    Vector3 velocity = rigidbody2D.velocity;
    float rotation = rigidbody2D.rotation;
    float rotSpeed = rigidbody2D.angularVelocity;

    stream.Serialize(ref position);
    stream.Serialize(ref velocity);
    stream.Serialize(ref rotation);
    stream.Serialize(ref rotSpeed);
    stream.Serialize(ref syncPosition);
    stream.Serialize(ref syncVelocity);
    stream.Serialize(ref syncRotation);
    stream.Serialize(ref syncRotSpeed);

    syncPositionFrom = transform.position;
    syncRotationFrom = transform.rotation.eulerAngles.z;
    syncBlendTime = 0.0f;

And here’s the update code to calculate the transform every frame:

void Update()
  if (!Network.isServer)
    syncBlendTime += Time.deltaTime;
    float blend = Mathf.Min(1.0f, syncBlendTime / blendTimeMax);
    transform.position = Vector3.Lerp(syncPositionFrom, syncPosition, blend);

    float newRot = Mathf.LerpAngle(syncRotationFrom, syncRotation, blend);
    transform.rotation = Quaternion.Euler(0.0f, 0.0f, newRot);

    // Update the from and to values by velocity.
    syncPositionFrom += syncVelocity * Time.deltaTime;
    syncPosition += syncVelocity * Time.deltaTime;
    syncRotationFrom += syncRotSpeed * Time.deltaTime;
    syncRotation += syncRotSpeed * Time.deltaTime;

This will predict the position/rotation in the frames following an update, and blend out previous prediction errors over blendTimeMax (set it the same as your time between updates). This will fix all positional discontinuities (nothing will pop to a new position) but there will still be first-order discontinuities (velocity will pop).

That’s not a problem at all for the other ships, as it’s not noticeable in a game like this with slow controls. The only issue is if the camera is fixed relative to your ship (which it currently the case), because a tiny change in the ship rotation leads to a large movement of the background at the edge of the screen. It’s still barely noticeable, but ideally the camera position/rotation needs to be slightly elastic.

Controlling the ship

The Space scene contains a PlayerControls script which takes input from the keyboard and sends it to the server. You have controls for applying thrust in four directions (forwards, backwards, left and right), firing in each of the for directions, and steering left and right. The PlayerControls sends an RPC to the server whenever any of the inputs change (e.g. started or stopped steering) to minimise server calls. On the server, the inputs are passed to the PlayerShip owned by that player.

Ships are controlled by applying physics forces to the Rigidbody. Every FixedUpdate(), the PlayerShip uses GetComponentsInChildren() to find all the Engine components (scripts attached to the engine module prefabs) and send them the net horizontal and vertical thrust. If the engine is facing the right way is applies a force to the parent Rigidbody with AddForceAtPosition().

Applying the force at the actual engine location results is wild spinning for even slightly unbalanced ships, so I blend the position nearly all the way back towards the centre of mass to make is more controllable (97% of the way in this case, and even then it’s hard to drive with off-centre engines).

Steering simply uses AddTorque() to rotate the ship.


A ship with unbalanced engines


Weapons are fired in a slightly different way to engines. Because there are a variety of weapons systems, I use BroadcastMessage() to call a function on every child script that responds to it (scripts are added to each weapon module). Each weapon script keeps track of its own cooldown and fires if it can.

Firing weapons creates Projectile objects. Each weapon module prefab has a Projectile prefab referenced in it, and each Projectile can have different graphics, speed, lifetime, damage and particle effects. The projectile is created on all clients by doing a Network.Instantiate().

Because projectiles go in straight lines there is no need to synchronise the transforms over the network. The initial position and velocity are set precisely the same as on the server, and the parent ship velocity is added immediately after creation with an RPC (use the new object’s networkView.viewID to identify it on the client). The projectile can then move itself locally and be in exactly the right place.

Impacts and damage are all calculated on the server. OnTriggerEnter2D() is used to detect when a ShipModule has been hit. Network.Destroy() is called on the projectile, a particle effect is instantiated on all clients, and damage is applied to the ShipModule.

If the ShipModule has been destroyed it informs the parent PlayerShip which checks if any other components are no longer connect. RPCs are then used to tell clients to destroy the relevant modules. If the red central component is destroyed then you’re out of the game.

No physics calculations or collisions are processed on the clients at all. The game is entirely server-authoritative to minimise cheating possibilities – the clients simply sends off inputs and receive updates. Overall I’m pretty happy with how it all works, and very happy that the entire game comes in at under 3000 lines of code (total, including comments and blank space)!

Next it needs a load of polish – better graphics, add some sounds, a building tutorial etc, but it’s a decent start.

Sep 282014

A little while ago I posted about my spaceship building/fighting game, made in Unity. Because Unity is quite different to how I’m used to writing games (pure C++), it required a bit of getting used to how to structure things. This post will give a high level overview of how it works and all fits together. Again, as a Unity novice I’m not saying this is exactly right, but I’m happy with how easily everything came together so it can’t be too far off!

I plan to do a few more improvements and usability tweaks to the game and then I’ll probably put it up for download. No guarantees on when though.


The game consists of just three scenes: Lobby, Garage and Space.

The Lobby contains the UI for creating, joining and leaving servers, a Start button and a chat panel. There is a singleton NetworkManager that stores state about which server you’ve created or joined, and the other players in your game. I talked about that here.

On starting the game, every player loads the Garage scene. This scene contains the base ship and the components available to build it. After 60 seconds of building, the server calls time and tells every client to load the Space scene.

The Space scene contains very little except for a textured quad for the Background, a camera and a couple of manager scripts. All players are added in code, and at the end of the game the Lobby is reloaded.

Quickly about the networking side of things. The server player also plays the game as a client, so as much as possible the code is split out into Server and Client parts. The client-running-on-the-server goes through all the same processes as any other player for simplicity (but the NetworkManager shortcuts the message passing, as I spoke about before).

Garage structure

The Garage scene contains a bunch of GarageSlots which are where the available components appear. There’s also a GarageManager object which has references to all the GarageSlots (set up in the inspector). Finally there’s a PlayerShip which is mainly a container for ShipModules (the square tiles you add to your ship).

Each individual ShipModule is defined as a prefab which contains a sprite, a box collider, a ShipModule script (with info about the connectors on each face, hit points etc), and any module-specific scripts. There are currently eight types of module and around 30 different module variants, so there are 30 different prefabs.


All very straightforward. One problem is then how to create a global accessor for these modules, so that both the Garage and Space scenes can get references to the prefabs. Looks like we need another singleton, which we’ll call the ModuleLibrary.

Singletons with configurable parameters

The ModuleLibrary script contains references to every module prefab, set up in the inspector. This is all fine if the script only exists in one scene because you can just drag one into the scene and set it up. However, singletons like the NetworkManager work by newing up a NetworkManager script and adding it to an object. Instead I want a singleton that I can configure in the editor.

To do this we can set up an object containing a ModuleLibrary script, configure it by adding all the Module prefabs to it, and save that as a prefab. Then you can use this singleton get() function to instantiate it from the prefab:

static ModuleLibrary m_instance;
public static ModuleLibrary Instance
    if (m_instance == null)
      GameObject obj = Instantiate(Resources.Load("ModuleLibrary")) as GameObject;
      m_instance = obj.GetComponent();
    return m_instance;

One thing to note is that Resources.Load() takes a path relative to the Resources folder in your Assets list. This folder doesn’t exist by default so you’ll have to create it.


Now we are able to get a prefab for any tile from this singleton and a module ID number.

Garage security

For a small hobby game I’m not at all worried about cheating, but it’s good practice to design a robust hack-proof system as much as possible anyway. To that end, the server keeps track of and verifies all steps in the ship building process.

The server generates the IDs of the modules that will be available in the slots, and tells all clients. When a player clicks a module to pick it up, their client sends the chosen slot ID back to the server. The server stores which type of module that client has selected, and generates a new one to fill the gap.

When a player then clicks to attach a module to their ship, the client only sends the grid coordinates and the rotation (one of four). The server already knows which component is selected and verifies that it’s valid. Therefore it’s not possible to send new modules back, or create invalid ships, by sending fake packets to the server.

From the Garage to Space

The details of everyone’s ships are stored in a ShipStore, which is another configurable singleton. The ShipStore on the server is what keeps track of the ships that each player is building. When the Space scene has loaded, the server ShipStore uses RPCs to tell every other player the details of all the ships.

Unfortunately the built-in Unity networking doesn’t support sending arbitrary byte arrays, so the transmission is a bit cumbersome – an RPC call is made for every single component on every ship and contains the player, coordinates, module ID and rotation. It’s not ideal but it works, and there are at most a couple of hundred messages.

At this stage there is a little bit of message passing to ensure that every client has finished loading and receiving ship data. Everyone has now build a ship and made it into space so it’s time for some action, but that can wait until part 2.

Sep 042014

I’ll try to keep this brief, I don’t normally like to get too serious on here and everything has been said before more eloquently that I could put it.

I 100% support Anita Sarkeesian and her work on Feminist Frequency, as well as everyone else who has received abuse as a result of working on or expressing a view on video games.

If you don’t know what I’m talking about, count yourself lucky that you’ve been spared this particular display of vulgarity from a small segment of the “gamer” community in response to the Feminist Frequency videos. And if you have any interest in video games and how they can be improved, you could do far worse than watch them yourselves.


My main emotion while writing this is embarrassment. I’m embarrassed to have to state the blindingly obvious: that women and minorities have the right to criticise a medium of entertainment without being subjected to abuse and death threats. I’m embarrassed that the gaming community has allowed mysogynists and sociopaths to be such a prominent part of how the public (and even gamers themselves) perceives it. In 27 years of being a gamer I’ve never once been ashamed of my hobby, but the events of the last few weeks have pushed me perilously close.

This is me stating that those people do no represent me. Along with many many many many others, I believe it’s important to make a public stand – to do my little part in counteracting this toxic culture.

Games have been fighting to be recognised as art for years. Now they’re made it – and they’re starting to get the same level of critical examination as any other media. Some of it is valid, some less so, but any high-quality reasoned commentary is welcome, especially in a medium that has been mostly devoid of it for so long. As a (ex-professional, now spare time) game developer, I wholeheartedly welcome any criticism that makes me think harder about what I do, and what can be improved.

To end on a positive note: in the long run this sorry episode may actually achieve something. The developer community is small, close-knit and predominantly comprised of rational, educated, well-meaning professionals. I believe the issue of equality in games has very much been brought to the forefront for most of those developers. And I believe that gaming will continue to accelerate along the sometimes-rocky road to being a fully-fledged respected artform, one that we can all be proud of.

Thank you. Normal service will be resumed shortly.

Aug 232014

Today’s post is a rather mixed bag of  vaguely-related topics. Lets kick off (ahem) with Kickstarter…


Last weekend I was supposed to be at Alt-Fest, a crowd-funded goth/metal/industrial festival that was shaping up to be awesome. Then three weeks ago it imploded spectacularly – cancellation rumours circulated on Twitter, before finally a statement was released saying they’d not sold enough tickets and had run out of money. I suspect the UK alternative community is too small to support such an ambitious festival, but it was worth a punt. I suspect that this could be the first and last large-scale crowdfunded festival.

I love the concept of Kickstarter, but I’m done for the time being. I went in with some friends on the Deadzone game, but by the time we received it we’d all rather lost interest in miniatures wargaming, so I’ve got a small pile of useless plastic I may never use.


Chaos Reborn concept art

It’s not all been bad. The other project I’ve backed recently is Julian Gollop’s Chaos Reborn, a remake of the best game ever made: the original Chaos on the ZX Spectrum. To be honest I don’t know if I’ll actually get around to playing the finished product, but as a ten year old I spent hundreds of hours playing dodgy copies of Chaos and Rebelstar, so I figured some back-payment was due. It’s looking pretty good though.

Space sims

On a similar note I’m done with pre-ordering games as well, and I can pin that down to one game: X Rebirth. I’d been a fan of the X games since my university housemate made me play X-Tension years ago. It was a modern-day Elite with trading, shooting, pirates, space stations and fleets of ships. It was quite slow and the interface was awkward but I spent months building my space empire. The sequels were more of the same but bigger, better and prettier.


World’s most annoying co-pilot with character design straight out of the bad old days

So I was aware that X Rebirth was going off in a slightly different direction, mainly by making it friendlier and more accessible, but obviously it was going to be good, right? There was a small pre-order discount and access to the soundtrack (which I loved in the earlier games and spent hours listening to) so I succumbed to a rare impulse purchase. A few weeks later and I was the proud owner of a (literally) unplayable mess. Frequent soft-locks, glaring bugs and things just not working made progress through the game impossible.

The worst bit though wasn’t the bugs, but was leaving your ship to walk around a station. There were all of two different station interior layouts, the NPC character models were straight out of System Shock 2, every character was incredibly rude when speaking to you (even they ones you’d employed) and the gameplay involved walking around looking for crates full of junk to sell back to people stood three feet away from them. Some sage advice: “if you can’t do something well, cut it from your game”. The have been a huge load of updates since, but I can’t bring myself to go back and play it again.


It’s a shame because the actual space bit can be very pretty

All is not lost is the space sim genre though. The most successful crowd-funded project of all time, Star Citizen, continues to attract cash at an alarming rate. I’ve not been following it too closely because I can’t see any way that it’ll ever be ready for release. I suspect it’s far too ambitious to ever lock down on a shippable feature set, but prove me wrong and release a decent game and I’ll buy it.

But! The real Elite is back and looking good! With a more sensible level of funding, Elite: Dangerous is already in beta for an expected release later this year. In a classic case of doing more with less it’s promising to be a worthy sequel, and I fully expect to while away many more hours in the dark depths of space. Finally this most venerable of genres is getting the attention it deserves, on the modern hardware that can do it justice.


Elite Dangerous


Anyway, to make up for Alt-Fest here’s a few more bands I’ve been listening to lately.

Bad Pollyanna

I was looking forward to Bad Pollyanna last week, but instead I’ll be seeing them play the Whitby Goth Weekend later in the year. It’s catchy guitar tunes paired with a slightly retro horror-goth theme. Also try Monstrous Child.

Leaves Eyes

I saw Leaves Eyes back in January, and my main memory is how genuinely happy and polite they all were! From Norway and Germany, they play some great Viking-themed symphonic metal. If you like the less heavy stuff, give singer Liv Kristine’s solo work a go.


Amaranthe is one of those bands I keep going back to without getting bored. Their three vocalists – female singer, male singer and male growler – keep things varied, with a nice mixture of metal styles and pop influences. I saw them in Nottingham earlier in the year and while their complicated sound meant the mix wasn’t perfect, I’ll certainly be going to see them again. Check out Razorblade and Electroheart.

Miss FD

Time for something a bit different with Miss FD. A mix of upbeat American-electro with the more recent albums featuring a lot of moody quieter tracks. Also try Moment Of Fade and Enter The Void.

Aug 142014

It’s become a bit of a tradition now that when I host a LAN I show up with a new game prototype (although as it’s usually six months between them that’s not saying a lot). This time was my first attempt in Unity, and it got its first outing a couple of weeks back. Conveniently I had a second LAN the next week with a different group of friends, so I had time to make some tweaks and improvements. Here’s an eight-player team game:

If you know the Galaxy Trucker board game (which I raved about ages ago) then the ship building mechanics may look slightly familiar. It’s pretty simple – you start with a central tile and add more tiles which build outwards, making sure the connectors match up on all sides. Nothing can do directly in front of a weapon, or directly behind an engine, but that’s about it for building rules. Everyone has the same tiles available at any time, and once a tile is picked a new one spawns for everyone. After 60 seconds it’s all done and you get to use your creation.


At this point you’re all dumped into a deathmatch arena, where you fly your ship around and destroy everyone not on your team. The combat is somewhat inspired by Mechwarrior, with large, slow ships that take a lot of punishment, and each part of the ship can be blown off individually. Firing weapons and boosting uses up energy, so there’s some management involved here as well. Destroy the central component to destroy the whole ship.


Considering I hadn’t actually played it properly during development, it worked really well. After the first session I made the ships a lot less sluggish and added team games, which made the fighting a bit more tactical and less random. I had a few people saying it was the most fun game of the LAN, so there’s definitely potential. It still needs sound, and some non-programmer art, and I’ve got a bunch of things I want to add, but I’m really happy with it so far. I should really think of a name…

Aug 112014

It’s been a while since the last post, mainly because I’ve had two LAN parties in the last two weeks and getting my first Unity game prototype into a playable state has taken priority. But more about that one later. In the meantime, here is a prototype I made at the end of last year (complete with terrible programmer art).

Each player has an end zone area in their colour, and the idea is to place mirrors to direct as many of the beams into your zone as possible. You get points whenever the beams are going into your zone, and you can place bombs on other players’ mirrors to blow them up a few seconds later. First to 100 points wins. Here’s a three-player game:

Turns out that after playing it a few times, it’s not that fun. There is too much going on with mirrors popping up and disappearing all over the place, so beams change path unpredictably making it hard to plan anything. Originally there was limit to how often you could place mirrors or bombs, and the game became a manic click-fest. I then added a slight cooldown between clicks, but that was a bit frustrating.

The prototype was written completely from scratch in C++, apart from using ENet to make the networking side a bit easier. The reason for starting from scratch was purely that I wanted to have made some kind of playable game in this way, which I managed (but Unity is definitely the way forward from now on).


For the networking side of things I went pure server-authoritative to ensure there were no sync issues, and as a result it’s been almost entirely bug free. The client didn’t even know which player it was until near the end of development – it simply sends mouse clicks to the server, and the server sends back all the tile state updates. This is even the case when playing single player – the client and server run in the same process, and all communication goes through the network. This is a model I’m sticking with for all prototyping, because it means that if it works in single player it’s almost guaranteed to work multiplayer, which is makes debugging and testing much easier.

Apr 182014

I recently dug up my university dissertation and related code, and was surprised that it still runs and isn’t as bad as I feared. It was pretty interesting at the time so I thought I’d share. It was a good call to choose a project in the games/puzzle area, as I’m pretty sure that helped me get my job in the games industry a few months later!

Full report, and running the code

RollingBlock.pdf – this is the full dissertation I submitted, in case you’re interested in reading about this in more depth.

RollingBlock.zip – this is the full source and compiled code, written in Java. I’ve not recompiled it since 2002 and some of the formatting seems a bit messed up, but it still runs (please don’t judge the code quality, this was my first reasonable sized coding project!). There is the full editor program, plus a variant on the player for puzzles with multiple moveable blocks.

To run the Editor program you need the Java JRE installed. If java.exe is in your path then editor.bat should launch the program, otherwise you’ll need to put the full path in.

Rolling Block Puzzles

The idea of the ‘rolling block’ puzzle is to roll a non-cube block (2×1 in the simplest case) through a grid-based maze so it ends up exactly covering the goal. Because the block isn’t square it takes up more room in some orientations that others, and the puzzle involves shuffling the block into the right orientation to get to where you want to go.

Here is an example puzzle, where you need to roll the blue block so that it stands upright on the yellow goal square. So the only possible first move is up-left, because there isn’t enough room to roll in the other directions:

Example of a rolling block puzzleThis is a type of multi-state, or concealed path, maze. Underneath you’re navigating a state graph of moves from the start point to the end point, but the shape of the block, and the moves it allows, means that the actual path to the solution can’t easily be seen. There are only 53 empty squares on the grid but there are 125 reachable maze states, and the shortest solution requires 32 moves (solution at the bottom).

Automatic maze generation

These types of puzzles are very hard to design unassisted, because each block added or removed impacts the state graph in many different places. Some clever people design these things by hand, but us mere mortals can use a computer.

The first thing we need is a solver. This does an exhaustive breadth-first search of the maze and builds a graph of all states and the transitions between them. In each state there are at most four legal moves so it checks if each destination state is a duplicate, add a new node if it isn’t, and add an edge between the two nodes. Here is a very small 5×5 maze:

rb5x5And this is the state graph a solver will come up with:


The numbers are how many moves are required to reach each state, so zero is the start position and 18 is the goal position (the colour coding is based on branches and dead ends). So you can see that even a tiny 5×5 maze with three obstacle blocks has quite a complex state graph.

Measuring puzzle quality

To generate good new puzzles, we have to be able to tell the difference between a good puzzle and a bad one. What makes a puzzle ‘good’ is a hard thing to pin down, but we can pull out a few ideas such as it having a long solution, many dead ends, looking deceptively simple etc. For our purposes though we need to come up with a single score for the quality of a given puzzle, such that a higher score means the layout is ‘better’ in some sense.

One approach is to analyse the graph that the solver produced, and score it using a weighted set of criteria. The criteria I used are:

  • Number of nodes – more states means a more complex puzzle
  • Solution length – longer puzzles tend to be harder
  • Number of branches – choices and dead ends are what make the puzzle interesting
  • Number of blocks – give this a negative weight to prefer simpler looking puzzles with less obstacles
  • Number of turns – requiring more direction changes can be a more interesting solution
  • Average loop length – large loops in the graph make it less obvious when you’re on the right path

Different weights can be assigned here depending on what characteristics you want in your generated puzzle.


A more interesting block – 60 move solution

Genetic algorithms

So now we can give a score to a specific puzzle, but we need to use this to come up with the best puzzle possible. For this we can use a type of genetic algorithm.

Genetic algorithms are based on the same principles as evolution in the real world: using randomness to slowly evolve towards an optimal solution. The idea is to start with a solution (any solution), and then randomly modify it a bit. If the new solution is better than the old one, keep it, otherwise throw it away. Repeat this process many times, each time starting with the best solution you’ve found so far. To tell if a solution is better than the previous one we apply a fitness function to see if it survives to pass on its ‘genes’ (or instead gets eaten by bears). After a while, you can stop the process and take the best solution found so far as your result. Despite what creationists may tell you, order can result from randomness (plus a fitness function).

In the case of a rolling block puzzle we start with either an empty board, or one with a few random blocks, and a mutation rate (maybe 5%). Each iteration we check every grid square to see if it ‘mutates’ (toggles between obstacle and empty). The fitness function is the puzzle score described earlier. If the score is higher or equal we keep it. Then just keep going as long as you want.

And that’s pretty much all you need to generate new puzzles. The key is the fitness function – the better it fits our subjective opinion of “this is a good puzzle”, the better the generated results will be. I’m sure that there are much better fitness functions out there but this one works well enough.

Here’s a video of it in action.


Robert Abbott’s Logic Mazes page

My multi-level puzzle applet hosted on Logic Mazes (probably won’t run with today’s security settings)

Erich Friedman’s designs

A bunch of mobile games using a similar puzzle



Apr 012014

Time for an epic game roundup post.

LAN parties, for me, and the best way to play games. Getting a load of friends together in the same room for some quality gaming time is great. There is just one recurring problem: finding games that are enjoyable for everyone to play. Ideally we all play the same thing, and the preference is for something co-operative, or at least team-based, to smooth out skill differences. However I’ve found that multiplayer games fall into one of a few categories:

  1. AAA, easy to play, polished and enjoyable experiences. That generally cost £20-40, which is a lot of money for something that will likely only get played for a couple of hours.
  2. Free to play (in the sense of actually being a reasonably fun game to play without having to pay anything). Except they usually require 5-10 hours of playing/grinding to get going.
  3. Complex strategy games. Which have a massive learning curve and require tens of hours of play to get good at.
  4. Cheap, fun, indie games. Where tutorials were last on the ever growing list of features, making them inaccessible without substantial background reading.

I’ve tried a lot of games at LANs over the years, so here’s a summary of a few old favourites along with some recent attempts:

Dawn of War

Dawn of War is a Warhammer 40K RTS game, released in 2004. It’s the go-to game for one of my groups, who have been playing it (and the various expansions) since release. It’s a Category 3 (along with almost every RTS), but luckily we all had loads of free time back then are were fans of the licence, and it’s given us years of gaming in return.

Pros: Flexible player numbers, 2-4 co-op play versus AI (stretching to 5 vs 3 AI on the hardest difficulty). Runs on any system.

Cons: It’s showing its age. And frankly it’s getting a bit repetitive after nine years.


Wolfenstein: Enemy Territory

I wrote about Enemy Territory a while back. It’s a team objective-based FPS from 2005, and is the other old favourite of the Dawn of War brigade. The game has always been available for free, and is great fun if you can get at least six players. I would put this in Category 4, as being an unfinished game there is no help for new players (each map requires learning by heart because there is no on-screen information about where to go and what to do).

Pros: Supports large numbers of players (6-20+). Free. Runs on any system.

Cons: Steep learning curve. And again, we’ve been playing it forever.


Left 4 Dead 1 & 2

I’m sure you all know this one, but the Left 4 Dead games are zombie survival shooters. They’re great co-op games if you have exactly four players and even better in versus mode if you have exactly eight players. This actually avoids all of the problem categories, so gets played most times (or at least is the backup game).

Pros: Frequently on sale for a couple of quid.

Cons: Best with exactly 4 or 8 players.


Diablo 3

Diablo 3 is an isometric dungeon crawler where a bunch of you run around killing hordes of monsters and grabbing loot. This sounded like the perfect LAN game – highly polished, four-player co-op, easily accessible and a challenge requiring some interesting teamwork. It’s a Category 1 game, but four of use bought it at release and sat down one evening to play through. Unfortunately it wasn’t to be. The game was just too easy, unless you put in 50+ hours of repeated playthroughs to grind up through the difficulty levels. Even the bosses seemed to fall within seconds. I know it was meant to be accessible, and it certainly is, but some kind of configurable difficulty option could have saved this game.

I believe that the recently released Reaper of Souls expansion fixes most of these issues so it may be worth another look, but it’s not cheap.

Pros: Requires no thought or skill. Very accessible.

Cons: Requires no thought or skill. Far too easy when starting from scratch. Expensive.


MechWarrior Online

Everyone loves giant hulking robots, and when we came across MechWarrior Online recently it sounded great: a team-based, slower paced, tactical game with lots of room for strategy and less reliance on twitch skills. Unfortunately everything about the game itself conspired to make this as difficult as possible. The frontend UI is possibly the worst in any game ever (may be a slight exaggeration, but it’s really terrible), it’s a definite Category 2 in that you need to put a few hours in before you can buy and customise your own Mech (which is when the game gets fun), and the community was pretty hostile to new players.

The worst part though was the team options – each match is a fixed 12v12, but the allowable team sizes are 2, 3, 4 and 12. We got around this with our group of seven by forming two groups and hitting Start at the same time, which mostly got us into the same game, but that may just be an indicator of the number of active players. I understand that the point of the team size restriction is to allow the matchmaker to make fairer games, but I’ll stick my neck out and say that actually being able to play with your friends is much more important than slightly fairer matches. Having said that I’ve played the game a fair bit solo, and I quite like it.

Pros: Free. Fun for small groups of experienced players.

Cons: Restrictive group sizes. Not at all friendly to completely new players.



After failing with MechWarrior we found out that most of us had picked up Terraria in the Steam sales and never played it. Terraria is basically 2D Minecraft, where you dig, build things and fight monsters. It’s a Category 4 with no explanation of how to play, but luckily we had a couple of experienced players to show us. Exploring caves in a group is pretty fun for an hour or so, but it got samey quite quickly. It’s not a bad way to break up and evening though.

Pros: Freeform drop-in/drop-out gameplay. Cheap.

Cons: No real point to the game. Can quickly run out of things to do.


Various Call of Duty/Battlefield games

I’ll lump all the more recent Call of Duty and Battlefield games together, as they’re all the same from the point of view of a LAN. You can’t fault the technical quality of the multiplayer modes in any of these games – very polished, good fun, progression systems to keep you playing, definite Category 1 games. But it’s no secret that we’re getting older, and our 30+ year old reflexes just can’t keep up with the teenagers. Since the move to online-only multiplayer, these types of games have become more frustrating. The inclusion of the grinding aspects of free-to-play to unlock decent equipment further puts me off (I gave up on Battlefield 3 when it came out because I rarely got more than a couple of kills per match, although I hear the equipment is supposed to be more balanced in Battlefield 4).

Pros: High quality experiences. Flexible teams. They’re shooters so minimal learning required.

Cons: Frustrating if you don’t have pro-gamer skills. Even the old games still command high prices.

Battlefield 2

Taking a step backwards, Battlefield 2 was a great successes. It’s old, but still looks acceptable on modern PCs. The main bonus is that it’s from an era of local LAN play and bots, which caters perfectly to our preference for cooperative experiences for a range of skill levels. I think we settled on 8 humans vs 14 bots, tweaking the difficulty level until we got close matches. It’s got guns, tanks, comedy helicopters (“Who wants to be my gunner?” – “HELL NO I value my life”), and introduced Commander mode where wannabe-Eisenhowers can set objectives and airdrop vehicles and supplies.

Maybe I’m just not that into competitive gaming but local multiplayer against AI frequently gives the best experiences, where everyone succeeds or fails together. And when you fail you work out what went wrong and have another go. Very satisfying when you finally succeed.

Pros: Local multiplayer. Flexible numbers. Highly configurable difficulty level.

Cons: Starting to show its age.


Jan 062014
May 142013

I’ve been playing Eve Online on and off since 2006. It’s a very complex game with 500000 active accounts, all playing on the same server. What this means is that it has the most interesting economy of any game out there due to the huge number of interacting players, complex supply and manufacturing chains and a complete lack of market regulation.

This makes it a great sandbox for observing economic behaviours and principles from the real world, manifesting in its virtual economy. Here I’ve picked a few interesting or important things that I’ve come across.

Opportunity Cost

This is probably the most basic and misunderstood concept in Eve, so it’s likely misunderstood in real life as well. The opportunity cost of doing something is the price of not being able to do something else instead. For example, you’ll frequently come across advice in game like “mine your own minerals to increase your profit margin on manufacturing.”

Sounds sensible, but it’s completely wrong. Mining minerals may be a worthwhile thing to do, but it doesn’t increase manufacturing profits. They are two independent activities, and should be treated as such. Profit calculations for manufacturing should use the market value of the input materials, and not how much it personally cost you to acquire them. This is because you could have sold your mining output instead of using it. The opportunity cost using your minerals is that you can’t sell them (although there are other reasons why you might want to produce your own inputs, e.g. avoiding transaction taxes, or saving time selling and transporting, or just for fun).

Here’s a real world example. Suppose you need to clean your house, but you also have the option to work some paid overtime. You may think you can save money by doing the cleaning yourself, but if the overtime pays more than the cost of a cleaner then you’re better off working and paying someone else. The opportunity cost of doing your own cleaning is that you can’t be working at the same time.

Emergent market hubs

The design of Eve includes no central trade areas. Anyone is free to sell or buy anything anywhere in the galaxy. What is interesting is that a series of market ‘hubs’ have spontaneously emerged, with one main super-hub in the solar system of Jita. Many years ago, when there were less players and no major markets, some systems with slightly better facilities and connections were more densely populated that others. This meant slightly more market activity in those systems which attracted new players looking for markets, which grew the market even more. The result is a positive feedback loop, with the end result being that if you now want to buy or sell something quickly you go to Jita (or one of the smaller ‘regional hubs’ that grew along the same principles, but to a lesser extent).

There are a few downsides of basing your Eve industrial business in or near a popular hub. One is the rental cost of corporation offices (required for efficiently managing your industrial activities), which are much higher in popular systems. Another is availability of factories – these are limited and you can wait many days for a slot around trade hubs.

There are analogous factors at work in the real world, affecting where people and businesses base themselves. There are bigger markets and trade opportunities for London-based companies, but the rents are huge. Smaller cities have reduced costs at the expense of available markets and potential workforce. Different companies weigh up these factors and choose an appropriate location.

I found some statistics about the populations of the most popular systems in Eve, so I thought I’d compare it to the sizes of the largest UK cities. The results are quite striking:

Normalised populations of the 30 most populous Eve systems and UK cities

Comparing the normalised populations of the top 30 systems and UK cities, you can see a large degree of similarity in the distribution. There is one super-system/city (Jita/London), followed by a few large ones (Amarr/Birmingham, Rens/Manchester, Dodixie/Liverpool), followed by lots of much smaller ones.

The relative proportions are very similar. This suggests that similar price/opportunity trade-offs may be being made in Eve as in the real world, leading to a similar distribution. Eve populations seems to favour the larger hubs while the UK population is spread slightly more evenly, which could be explained by there being stronger non-economic reasons for living in a certain place in the real world than in Eve.


Here’s a more technical version of the above graph – log of population against log of rank. You can see they both follow a power law (very high R² value means the linear trend line is a good fit), even though the absolute population numbers in solar systems are very small so are prone to noise (or large passing fleets). The drop off in population is indeed faster in Eve as I mentioned above. Further analysis is left as an exercise to the reader 🙂

Log(population) against Log(rank), with least-squares trend line

Price vs Convenience, and Time Is Money

There are many ways of making money in Eve, and the one thing they have in common is that they take time. Time is the limiting resource of both Eve players and real-world workers. Travel in Eve is also slow, and flying around for fifteen minutes to save a few ISK (the in-game currency) is inefficient, as you’re paying the opportunity cost of not doing something more profitable.

Similarly, coffee shops in busy station charge a huge markup compared to a café you could find ten minutes walk away. It’s inefficient to use your time to save a pound if it takes a sizeable chunk out of your working day.

This inefficiency creates market opportunities. Ammo and other consumables are generally priced much higher outside of trade hubs, leading to higher profits, in the same way as station coffee shops. (Well, actually it’s the people renting the space to the coffee shop that make the profit, but as there is no shop rent in Eve the producer can keep it.)

Profit vs Volume

In an efficient free market it’s possible to either make a large profit per item sold, or to move large volumes of items, but not both. Where large volumes are shifted (trade hubs, busy shopping streets) you will find other businesses in competition and high prices will be undercut. In the ‘convenience’ market described above (backwater systems, small village shops) less people can be bothered to fight for the meagre sales so there is less competition and prices can be higher.

One example is manufacturers who sell their own goods. It is worth putting a few items on sale at the place of production, at inflated prices, to pick up passing trade, but manufacturing ability far outstrips these sales volumes. The bulk of the items will need to be sold at trade hubs where turnover can be huge – a smaller markup per item but higher overall profits.

You can see this with farmers markets and farm shops. Volume is small, but profits per item are much higher. The excess has to be sold to bulk buyers (e.g. supermarkets), but the additional profits from direct sales provide a nice additional income.

Fluid markets from professional traders

In the real world, if you want to buy or sell shares or a commodity then it is nearly always possible to conduct the trade immediately. It doesn’t require waiting for another person who wants to buy exactly the same amount of shares that you’re selling. This is good because it enables more trades to take place quicker, which means more benefits to those trading. The market is said to be fluid.

Fluid markets are enabled by professional traders – if you go to a foreign exchange they will buy currency at slightly below the average price, and sell it at slightly above. Therefore there is always a reasonably priced seller or buyer for your currency. The same principle applies to shares, commodities and other goods. The higher the potential profit (total traded volume multiplied by markup) the more competition will be attracted, and the buy and sell prices will converge.

Professional trading can be seen in action at trade hubs on almost all of the 6000-odd different items available in Eve. You will see buy and sell orders for huge volumes of items that could never be for personal use. High value items like ships attract a lot of competition and will have margins of 5-10% between the highest buy order and the lowest sell order. This means that whenever you want to buy or sell a ship, you can do so immediately with very little financial loss – you’re effectively paying the traders for convenience.

A weakness in the market can be seen by looking at some of the less popular items, where you’ll see 100% or more markup between the buy and sell prices. The volumes just aren’t there to support more competition – bringing the buy and sell prices closer together would mean it’s not worth the bother of trading, given that there are plenty of other things to do in game.

Barrier to entry, monopolies and cartels

An important principle in economics is the barrier to entry to a market. There are two reasons why the profit margin on an item may be high, but only one means you’re being ripped off:

  1. Sales volumes are low, so high margins are required to make it a worthwhile business.
  2. There are high barriers to entry, so it’s hard to compete with existing businesses.

To tell if you’re being taken advantage of, look at how hard it is to set up a competing business. If it’s easy then you’re probably not being ripped off and it’s just hard to make a profit. There are lots of examples of barriers to entry, from government restrictions (e.g. pre-privatisation utilities), to long professional training requirements (lawyers, doctors), to prohibitive startup costs (building a supermarket).

You can see these in operation in Eve. One interesting development was the creation of OTEC – the Organisation of Technetium Exporting Corporations – founded on the same principles as the more familiar OPEC. Technetium is a vital component in the manufacturing chain of many items in Eve, and is only found in one area the galaxy under the control of a small number of corporations. The barrier to entry here is nearly absolute – getting into the market would require overwhelming military force and months of warfare. Hence it was practical to set up a price fixing cartel and reap the resulting massive profits.

Another historical example was the breaking of the monopoly on Tech2 goods (these are better ships and weapons than the standard ones). Originally, the ability to manufacture these goods was distributed via lottery to a few lucky individuals. The one I’m most familiar with is the Damage Control II component, where I made most of my ISK.

With no competition, the first of these things were selling at 200+ million ISK each.  After a couple of years a game mechanic called Invention was introduced which allowed anyone to make them,  but less efficiently and with a significant up-front investment required for tools, skills and materials (in the order of 500 million ISK, and several weeks of in game training time). When I jumped in, prices had dropped to around 2 million ISK/unit, with about 60% of that as profit.

Over the next few months the initial investment price dropped and now it’s possible to enter the market with a few tens of millions. Profits are right down to something like 300,000 ISK/unit, and it’s approaching the “worth it” line where I need to decide whether it’s worth carrying on production.

Thus enabling competition has successfully brought the cost of a good right down to theoretical minimum of the cost of production plus the minimum profit required to make people bother. Economics in action!

Apr 102013

Recently the wife and I have been playing through Tomb Raider and Bioshock Infinite, and there is one thing that has really stuck in my mind from those games: how much I hate scouring a world for crates of loot.

Tomb Raider

First things first – the new Tomb Raider is really good. It’s actually the first Tomb Raider game I’ve played (not sure how I managed that) so I don’t know how it compares to previous ones, but it looks great and the animation on Lara is top-notch. The storyline is pretty interesting and very dark, exploring her journey from gentle young woman to bloodthirsty killing machine. Well, the story elements explore her trauma and shock at having to kill to survive, but it obviously doesn’t affect her too much because by the end of the game you’ve murdered several hundred people. Such are the concessions to interesting gameplay I suppose, but it does create a bit of a disconnect.

The were a few moments of intense frustration and boredom for me. These weren’t directly the fault of the game, but from years of conditioning. Most of the time my wife was playing the game and I was watching. Every so often we’d come into a large open area with loads of buildings and things to climb around. After ten minutes of viciously killing the local inhabitants, the next hour was spent meticulously exploring every single corner of every single part of the map, in search of crates of salvage, ancient relics or log books. It must be an obsessive compulsive thing learnt over her previous fifteen years of playing Final Fantasy games.

“OK, we must be done here, are you going to go rescue your friend now?”

“Hang on, there’s another thing over there I think I can get to…”

“You don’t need any more stuff.”

“But… need to get the things…”

“…I’m going to do the washing up, call me when you’re ready…”

The best part of the game in this regard is the Survival Instincts feature. Press a button and everything you can see that can be interacted with glows yellow. Which I feel should have sped up the exploration process a lot more than it actually seemed to.

Overall though, I highly recommend giving Tomb Raider a go. Interesting story, satisfying combat and very pretty.

Bioshock Infinite

I’m currently undecided about Bioshock Infinite, although it would appear that I’m in the minority. We both loved the first game – the art deco styling; the creepy atmosphere; the scary enemies; all came together to make a memorable experience. I don’t remember much about how it actually played, and as the general opinion is that Infinite is basically the same gameplay-wise, I think I may have a case of rose-tinted glasses. Because I’m just not having much fun actually playing the game.

We’re maybe three-quarters of the way through. It looks nice enough (we preferred the aesthetics of the first game, but that’s just personal preference), the storyline is getting quite interesting, and your companion character brings a lot of life to the game when you meet her. But far too often the game falls into that all-too-familiar and ludicrous situation of:

“I need to rescue Elizabeth, she’s been seized by the baddies again. Hmm, she can wait, I need to finished searching all of these bins for loose change and scraps of food. Oh, a few random rooms, I really want to get on with the story but if I don’t thoroughly search them I might miss a big pile of coins or an infusion or a good piece of gear…”

Nothing breaks the flow of a game more for me than having to take time out from saving the world to scavenge for junk, search for trinkets, or steal from random people’s houses. It’s not so bad if it’s just optional extras (e.g. relics and audio extracts in Tomb Raider), but in Bioshock it’s almost the entire progression mechanic. Upgrading your guns and powers requires money, which is primarily obtained from scavenging, and the health/shield/salt upgrade infusions are usually tucked out of the way behind closed doors. All of which means that you’re ill-advised to ignore the quest for loot.

Overall, it’s still a pretty good game I think. It’s very old-school in its mechanics (particularly the combat, which feels really dated), but it’s worth playing to see how a companion character can be done right.

So you should probably get it. But play Tomb Raider first.

Mar 022013

Lately I’ve mainly been playing a couple of shooters at different ends of the same evolutionary path.  They are Planetside 2 and Wolfenstein: Enemy Territory (henceforth called ET).

Wolfenstein: Enemy Territory

I’ll start with ET, as it’s pretty old now and you might not have come across it.  It’s a free game that started out as an expansion to Return to Castle Wolfenstein, but was never finished and simply given away as a standalone game.  Amazingly I’ve been playing this on and off with my gaming group for eight or nine years now, and it still gets an enthusiastic response.

Wolfenstein: ET Seawall Battery

This is purely a multiplayer game and was an early example of lots of the things you see in modern shooters. It has asymmetrical gameplay, with an attacking and defending team. It’s purely objective based, with a string of objectives for the attacker to accomplish within a time limit.  It’s class based, with five distinct classes. And it has an XP and levelling system.

Our favourite map is Fuel Dump.  The Allies are attacking and first must escort a tank across a bridge, with their engineers keeping it repaired while the Axis team rain down air strikes and sniper shots. Oh, and the bridge requires building before the tank can cross, and every time it’s built the Axis team seem to blow it up again.  Then the tank is driven through a tunnel system before finally blowing a hole in the fuel dump wall.  Finally the Allies have to get into the base, destroy the gates with explosives and plant the dynamite.

The longer maps can be a bit of a gruelling slog, repeatedly running out into the defenders’ guns as you inch closer to achieving the objective, but when you finally get that dynamite to blow seconds before the 30 minute timer runs down, it’s really rewarding. The classes are varied – the engineer is the most generally useful as most objectives require building stuff or blowing stuff up, but you’ll likely die a lot. Soldiers have heavy weapons (switch to the Panzerfaust if you’re getting frustrated at not getting any kills…). Covert Ops can steal uniforms and snipe. Medics pick everyone up again when they go down. Finally, Field Ops get love and hate in equal measure as a well timed airstrike takes out three enemies in one go, or you wipe your entire team with a misplaced flare canister throw.

Wolfenstein: ET Gold Rush

It’s not the most accessible game ever, likely because it wasn’t ‘finished’. There are very few hints as to what you’re supposed to be doing as a new player and the maps can be a bit confusing, but after a game or two on each with someone showing you the ropes you’ll know exactly what’s going on. Also you need a decent sized group of players to make it work – three per side is the absolute minimum in my opinion, but you’ll have a great game with five or more per team.

I’m not exactly sure why we’re all still playing it years later (and in preference to many more recent games, including the disappointing sequal, ET: Quake Wars). At a guess, I’d say that it’s because it’s free (everyone has a copy), it runs fine on literally any machine, there are no server and connection issues (we have our own private server), and we’re all ‘bought in’ so there’s no learning period any more.  Oh, and it’s just a damned good game.


Planetside 2

At the other end of the spectrum is Planetside 2, which I’ve played a fair bit in the last few weeks. Planetside 2 is an MMOFPS, with each server seeing hundreds of players across three teams, all fighting over the same objectives at once on a massive map.

The first thing that strikes you on joining the game is that it actually works. Countless other infantry rush around you, tanks trundle past and aircraft buzz overhead, and there’s hardly any lag. The second thing that strikes you is a hail of bullets, and you’re back at the respawn.

Planetside 2

PS2 also isn’t a particularly newbie-friendly game. The UI is confusing, and the mechanics of capturing objectives isn’t obvious. Identifying friend from foe is tricky, the constant explosions and gunfire is disorientating, and standing still in the open will get a sniper’s bullet in your head.  And it’s the closest a game has made to feel to taking part in a real war.

Or at least, one of those fictional wars where random people are pulled off the streets, given a gun and thrown into a combat zone with no training.

Nowhere is this more apparent than with the aircraft. My favourite activity in Planetside is flying the fighter jets. Very rarely do I get shot down. This isn’t because I’m some kind of flying ace, but because most flights end up with me crashing into mountains, buildings, trees, or the ground. Occasionally I crash into enemy aircraft, but that’s good because they tend to blow up and I get XP. Sometimes I manage to shoot at ground targets, although I imagine the conversation in the last transport I attacked would have gone something like this:

“Hey, there’s a plane firing rockets at us!”

“Really? But we’ve taken no damage.”

“Yeah, I’m using ‘at’ in the vaguest sense.  Oh, he’s coming in closer… er… looks like he’s trying to park upside down…”

Planetside 2, not crashed this plane yet

This is a free to play, micro-transaction supported game. This instantly sets off alarm bells among gamers about pay-to-win, but I’m impressed with how much this isn’t the case. All you can buy with real money is additional weapons and cosmetic player customisations. The basic free weapons are all good, and the paid for ones are just different rather than better.  All of the other unlocks and upgrades are bought with XP earned in game, so it’s perfectly viable to play on a level playing field without spending any money.

When this game is good, it’s really good. Your enjoyment is quite dependent on getting into a good squad (or bringing your own group of friends).  If you’re lucky you’ll end up in a well organised team, with a leader with voice comms who knows what they’re doing and sets appropriate objectives.  When that happens it’s as good an MMO experience as I’ve ever had (well, outside of a successful Eve Online fleet battle, but I don’t have time for those any more).

If you’re on Woodman server and come across a TR player called Schizofen, go easy on him…

Jan 252013

I recently found out that the awesome Spectrum game The Lords Of Midnight had been updated for iOS, so I promptly coughed up the £2.99 asking price and downloaded it.

I remember playing the original on my Spectrum when I was probably nine or ten years old.  I paid zero attention to the actual quest, I had no idea on how to even attempt to win the game, but I’d just spend hours exploring the landscape, admiring the views, recruiting a few allies and battling dragons and random passing armies.

Lords Of Midnight Spectrum

Spectrum version

Released back in 1984, this game was completely different to anything else around at the time.  The concept of an epic 3D war game just didn’t exist back then.  These were the days of the text adventure, of brief text descriptions of environments and guessing commands to type into a  terminal window.  Actually seeing graphics of armies marching across the plains in front of you as you moved through the landscape was revolutionary.  Also new was the variety of gameplay with two completely different ways to win the game, leading to two very different game styles.  The first was as an war game, gathering armies together for an assault on the enemy stronghold.  The second was to guide Frodo Morkin to the Tower of Doom, on his own, to destroy the Ice Crown.  It was all very atmospheric.

However, due the the very complex (at the time) nature of the game, it was quite demanding of the player – to have any chance of winning you really had to manually map the game world and keep track of where your characters were in relation to one another.  That was far too much like hard work to me, which is probably why I never bothered with it.

iPad version

So how good is the new version, and how does it stand up today?  In short, I was surprised at how well it’s stood the test of time.  The quality of the port is top-notch.  The style of the graphics has been preserved really nicely, just recreated in high resolution, so it’s unmistakably the same game.  Nicely, the landscape smoothly scrolls when moving or looking rather than just drawing discrete frames at each location.

The touch controls work well enough.  Some of it feels a little clunky, such as the Think screen and having to go to a whole options page to search and attack, but that’s just to keep it as faithful as possible to the original and you soon get used to it.  The vital addition to the game though it that it now has a built in map.  This shows the area of the world that you’ve seen so far with the locations of all of your characters.  It’s so much easier to get a handle on what’s going on than I remember, and it makes the game much more enjoyable to play.

In actual gameplay terms it holds up well enough as a fairly simple strategy game, and I think it would pass as a newly released mobile game today.  My current game sees Morkin dodging whole armies as he sneaks ever closer to the Ice Crown, while further south Luxor is heading up a desperate defence as more and more armies from both sides pile into a massive meat-grinder battle that’s been going on for days.

The meat grinder

If you’ve got fond memories of the game first time around you’ll love this version.  Even if not I’d still recommend checking it out to see what the granddaddy of all modern wargames was all about.  The game is still fun and challenging, but it was never really about the deep strategy so much as the atmosphere of experiencing the world of Midnight, and it’s still got that in spades.

Jan 092013

I’ve been playing a couple of space games lately, which is good because I like space games.


You’ve probably heard of FTL, if you’ve not already played it.  It’s a small game from a two-man team, and was funded by a successful Kickstarter campaign.  The game is basically about flying your ship through randomly generated sectors of space, facing random enemies and encounters and picking up random loot.  What makes it great compared to some of the overblown epics you might have played is that you have one life, there is only one autosave and a whole playthrough only takes an hour or two.

I’m not going to describe the game in detail because that’s been done to death elsewhere.  What’s interesting is that it plays very much like a board game.  Pick a location to move to, draw an event card, pick an action and roll a dice to see what the outcome is.  The combat is realtime and has enough nuances to make it interesting (especially when it comes to the harder enemies and the final boss), but you could definitely see something like this working as a solo tabletop game.

The problem I tend to have with random single player games is I don’t like losing by pure luck.  This is a problem I often find with computer adaptations of games like Catan and Carcasonne, where there is some element of skill but a lot comes down to pure luck of the draw.  When playing against real people this isn’t a problem because, I think, there is still a winner in the room.  But when losing to a computer there is no winner, only a loser, and nobody likes to be a loser…

Having said that, I don’t have that problem in FTL.  Games don’t come a lot more random that FTL, but if you’re getting unfairly screwed you find generally find out in the first few minutes of the game so you can just restart.  Another reason is that you shouldn’t really expect to win.  The game is hard, really hard (and that’s just on the easy setting).  If you just go in with a goal of unlocking a new ship, getting one of the achievements or playing with a different play style (e.g. focus on boarding actions, drones, ion cannons etc) then dying isn’t really a failure, it’s the expected outcome.  I think I’ve just been spoilt for too long with spoon-fed “experience” games, but FTL is a perfect antidote.

So I very much recommend you take a punt if you’ve not played it.  It usually seems to be up for sale for under a fiver, so for that you really can’t go wrong.


Endless Space

I picked up Endless Space in the Steam sale and I’ve been playing around with it a bit.  My first comment is this – it is most definitely not wife-friendly.  The most common question in the house recently has been “What are you playing, that boring game again?”

It is not a boring game (well, if you’re into this kind of thing).  True, there will be a lot of staring at spreadsheets and production queues, but it induces in me exactly the same “one more turn” compulsion that keeps me up late into the night as the various Civilization games over the years.  There is good reason for that – it is basically just Civ In Space.

Instead of cities you have planetary systems, instead of city buildings you have system improvements.  The resources types are exactly the same: food to increase system population, production in each system to build improvements and units, “dust” (gold) to rush constructions, science generated by each system, strategic and luxury resources to unlock new constructions and keep your population happy.  It’ll all seem very familiar.  But that’s not necessarily a bad thing, and it’s all really slickly presented with a nice intuitive interface.

Combat is rather abstract.  Each fight is played out at three range bands – long where missiles dominate, medium where lasers work best, and close which favours projectile weapons.  Your only control is picking an “order” card for each phase, using a board/card game concept again.  Some are offensive, some defensive, and each card cancels out a different class of card.  So if you expect the opponent to play a defensive card in a phase you can for example use the “Sabotage” order which will cancel it out.  It’s a bit random and takes some getting used to but it adds some more interactivity over Civ’s battle system.

My main problem with the game, and it’s exactly the same problem as Civ has, is that it all gets a bit bogged down about half way through.  When you’ve got 20+ systems to manage, with half a dozen finishing constructions each turn, it takes an age to micromanage what they should all be doing next.  Turns start taking 5-10 minutes each and the game can start to drag a bit.

The tech tree is also huge, and you’ll need a couple of games under your belt to become familiar with all the upgrades.  A couple of times I’ve come across some amazing technology (e.g. the planetary exploitation upgrades) that would have provided some massive boost to my empire if only I’d noticed it 20 turns earlier.

Overall though, it’s a decent game.  If you like Civ games you’ll love it.  If you don’t then you probably won’t.