Substream - Now Available

I'm super happy to tell you that Substream is finally released to the world!

It's been a long journey but I've definitely reached a point when I feel like this game is solid. Technically the custom engine works well and it's been played by several beta testers. And the game itself is well rounded and fun!...

Substream is an abstract aerial on-rails shooter for Windows PC.

Animated to Music ► Pilot alien aircraft as you fly through a world that constantly pulses and morphs with the rhythms, moods and melodies of the soundtrack. Each of the six levels are inspired by the soundtrack, which includes jazz, tribal, techno and funk. The terrain, sky and your enemies are all synchronzied to music by artists such as Souleye (VVVVVV) and Floex (Machinarium, Samarost 3).

Looped Space ► Experience airborne combat in looped space, where your attackers appear in multiple positions ahead of you. Look to the sides and you'll see copies of your aircraft like a squadron stretching off to infinity. You can attack the same enemy in multiple directions and they can do the same to you, but destroy one and you destroy the chain.

Aerial Combat ► In each level you fly over a landscape shooting down robotic alien drones, collecting weapons and scoring points, surviving until the end of the tune. Pick up railguns, pipe bombs and homing missiles. The two aircraft represent two different difficulty levels, each with their own weapon and control style.

Substream Winner EP Soundtrack ► Beat the game with both aircraft to unlock the Substream Winner EP, a collection of MP3s from the game soundtrack that are installed direct to your music folder.

Substream Beta - Release Candidate One

There's a new Substream Beta available from [now redacted].

This is pretty much the full game, nearly ready for release. This is not quite an "open beta", but I'm happy to share this with everyone who follows or finds this on the blog. You're welcome to send it to any friends who you think may enjoy it too, but please do not distribute it on public file shares. I'd love any feedback you have for me of course!

enter image description here

What Happened to Substream?

I started developing this game Substream in 2010. It was a very different era and even I was a different person, nine years younger. Since I started developing Substream I have proposed to my girlfriend, got married, had a little girl. I did some contracting, got a full time job, changed my job, went back to the old job and then changed jobs again. I went running for the first time and had to sit down after half a mile, struggling to breathe. Last month I ran a marathon.

In 2010 Substream was my focus, my job and my investment. The major events then occurred in 2012 when I spent the last of my money moving city, and 2014 when I tried Kickstarter and it failed. Kickstarter is really hard by the way. Anyone who gets funded totally deserves it. You have to get everything right. I had this idea I could finish up a playable demo and manage Kicktarter promotion at the same time. Don't try that. Have your demo ready. Have everything ready.

Anyways. I really enjoyed developing this game. A "labour of love". So I continued developing it in my free time, now and then, over many years. There's been intense periods, and months where I did nothing. In 2010 it was my focus every day. Most days now I don't think about it. But I also couldn't leave it unfinished. So about a year ago, May 2017, I fixed the last major bug.

But at the finishing line I lost motivation. I started to look at Steam integration into my custom C++/DirectX engine (because buying good game engines cost major monies in 2010 (and also writing my own game engine has been a fantastic experience)). I started to look at all the businessy things and forms I need to complete to get there. Boring. I would rather spend my evenings playing Duplo and reading books to my little girl.

Substream has some new stuff I haven't shown online. There are now five unique levels. New music and enemies and weapons. Two playable aircraft which form two different game modes. It takes an hour or two to complete, so not a long game. But fun and still unique.

How to conclude this blog post? Well, I have sat on a finished game for a year. I still don't want to not release it so something will happen. I don't want to say it will happen this year because, well, I've done that a few times already. I have every intention of releasing it when I have the time, motivation and headspace to pick it up again.

Signet in Trieditor

From The Top

I took part in Global Game Jam for the second time this year. I worked in a team of two over forty eight hours and tackled a new engine called Amulet, coding in Lua. Myself and fierydrake created a memory game where you learn a sequence of sounds, words and patterns that build over time. We managed to get the fully game playable by the end of the jam. I've polished it a little for itch.io. You can play this game in a browser or download it for Windows or Linux. From The Top on itch.io

From The Top

Asus Zenbook Yellow Fix

This is a guide on how to help the Asus Zenbook laptop with a 13.3" 3400 x 1600 QHD screen to display the color yellow. This is something a laptop screen should probably be able to do straight out of the box, but there are dozens of posts online asking why yellow displays as a dark mustard color and how to fix it.

enter image description here

There is an unofficial BIOS flash program on the internet that is supposed to improve this. I ran it on my own laptop but it didn't do as much for the problem as I'd hoped. It's not included in this guide as I've had several reports that it can stop a screen working permanently; it works for some people but it seems like a huge risk.

But I experimented further with a bunch of software and found a set of steps that gave me a good result, and that I haven't seen described elsewhere. The steps below worked on a QHD Asus Zenbook UX303LN running Windows 10. My understanding is that this mustard problem still affects the newer UX303LB and UX303UB models. In theory I guess this guide would help the yellow problem on those laptops too...

Step One: Drivers

  • Install the latest nVidia GeForce drivers for your 840M or 940M.
  • Uninstall "ASUS Splendid Video Enhancement Technology", if it's installed.

Step Two: Intel HD Contrast

Download the latest drivers for the Intel HD graphics. One of these three...

The first thing you'll notice is that this makes the screen dimmer, and you think it's a setting you're not going to want to keep. The antidote to this is to increase the screen brightness. But... if you use the Intel HD Graphics Control Panel to increase the brightness its software driver changes the color curve so that you end up with a smaller range of colors being output. Instead...

  • I recommend increasing the screen brightness using the [Fn] and [F6] keys. This sends more power to the screen to make it brighter.

Step Three: Refresh Rate Nudge

If you have the same experience as me, setting this contrast just improved the yellow but when you unplug the power the screen somehow readjusts itself back again. (Watch the palette in MS Paint in the three seconds after you unplug). After a while I discovered one weird trick to make it permanent...

  • With the contrast set to 40, right click the desktop, choose "Display Settings", "Advanced display settings", "Display adapter properties", then "Monitor".
  • Change the Screen refresh rate to 48Hz, click "Apply", then change it back to 60Hz and click "OK".

Now this sticks even when I restart the laptop. There's definitely something strange with the configuration of these screens. This is a lot of hoops to jump through to achieve something that should definitely be a standard feature of any screen. It took me some time and experimentation to find this solution but I've had some kind of yellow ever since.

#procjam 2014

This month I took part in a nine day game jam. #procjam was my second game jam, the first one I took part in on the web, and the first where I worked solo. The theme was to "make something that makes something". Making a game was optional though, so I made ProcBreaks - a procedural breakbeat generator. It's a Unity program that designs drum patterns, making a kind of dance music that mixes and evolves over time. I definitely had fun making this, I feel like I finally "get" game jams.

I think I reached the goals I hoped to achieve with it. Since the jam I've found it actually quite listenable. Usually the first thirty seconds are a bit strange; I notice that it's not the best or most natural music I've ever heard and the timings seem to be a little off. But once it goes through a few changes I get the jist of it and as musical "background noise" it makes an acceptable infinite mixtape.

soound effects

I met up with some of the local Southampton game devs in the uni library to work on this. Joe made this infinite island explorer, Rob and Greg made a pixellated procedural mine navigation game.

I played a few more web-based procjam entries today. There are many cool things, but I'd say Forska, Do Not Believe the Robots, Khrushchyovka and Empty Museum are all worth a look.

strenum

Here's a macro I wrote for C++ which I've found extremely useful. It creates structures which act just like an enum, but where the value names are inside the scope of the enum.

To avoid values in different enums having the same name, a traditional C++ coding style is to write something like this:

enum Answer
{
  Answer_Right,
  Answer_Wrong,
  Answer_Pending,
};

A naming convention like this is necessary to distinguish from a Direction_Right, or a function called Pending(). I wanted something more like C# so I'd be able to use Answer::Right.

#define strenum( name ) \
struct name { enum name##_e; inline operator name##_e&() \
{ return name##_d; } inline operator const name##_e&() const \
{ return name##_d; } name() {} name( const name##_e& i ) : \
name##_d(i) {} name( const int& i ) : \
name##_d(name##_e(i)) {} \
private: name##_e name##_d; }; enum name::name##_e

That's very ugly code, but to work with it I just put it in a header file and forget what it looks like. Declaration and usage is similar to an enum.

strenum( Material )
{
  Wood = 17,
  Metal,
  Tin = Material::Metal,
};

Material a = Material::Wood;
Material b( a );

The main practical advantage of this is that I can now forget the names of all my enum values and use Intellisense.

Download strenum.h or copy and paste from above. Feel free to use it in any C++ program you want.

Substream Explained

It's time at last to talk about what Substream is about.

Like the commercial games I've worked on, Substream is a project that's going to consume a lot of my time. I was no longer content spending that amount of time producing a game which had half an innovative feature at the most. Substream contains several experiments. A lot of the programming is standard: I still need to code up boring things like collision detection, depth sorting and render state management. A lot of the gameplay is familiar too: you shoot things, score points, unlock levels. But the new stuff is what's important to me and hopefully to players as well.

Music Synchronization

"Music games" seem quite popular. I think Rez and Audiosurf have done the best job of this so far. These games get really strong positive reactions; it seems like the goal of making a player feel connected to the music has been already been done. This is very interesting to me because I think these games are only scratching the surface of what's possible.

I didn't get around to playing Rez until it had been out for a few years. Several of my friends described it enthusiastically - "it's hypnotizing, it's like you're actually in the music". I was very keen to try it. When I eventually got to play it I could see what they meant, but I was really surprised that Rez's visuals are only really connected to the music in two ways: (1) vibrate certain objects to the beat, (2) hold certain actions from occuring until the next beat.

Audiosurf's method is to analyse any piece of music from your hard drive. It calculates two things: (1) how intense the music is and (2) where the beats are. Audiosurf really makes the most of these two types of data. Getting any more information than this is extremely difficult and PhD thesis are still being written on the subject, so this wasn't a route I decided to take.

My primary experiment with Substream is to connect with more aspects of the music, and to see how players repsond to that. This is my approach...

Audio Marker

This is essentially a music sequencer program. But this tool isn't used to make any music, it's actually used to mark when events and animations will happen in the game world relative to an existing piece of music. My approach in Substream is human design and this is a tool I've created to help me.

This design process is something like choreography. I'm deciding exactly what will happen when, and it means I can pick up on anything in the music I want to...

  • Moods - how does the music make you feel and how does that change?
  • Themes in the music - what does it remind me of?
  • Intensity.
  • Patterns - is the melody moving up, down, in circles? Game animations can repsond to that.
  • Instruments - multiple game animations can be related to different instruments in the mix.
  • Rhythm, including different actions for snares, cymbals, bass etc.

As long as I can hear and can code it, I can implement all the animations I want to fit the music. This process takes time, so Substream will be a short game with with an intense high quality experience. Hopefully there'll be enough going on that you'd want to go back and play it again.

Dynamic Terrain

This really goes hand-in-hand with the above. I started to learn shader programming recently and it got me interested in some possibilties. Vertex shaders are used to alter the shape of an object on a graphics card's processor rather than on a PC's main processor. In the past they have been used for rag doll physics, skeletal animation and other simple animations, but computers are powerful enough now to have every triangle in the game's environment affected simultaneously.  Substream's environment isn't a model that was created in a 3D package in the traditional way, but it's generated while you're flying along and can animate into a different shape, form, colour, or style at any time.

A Repeating Universe

Some time ago, I happened to be playing Starfox SNES and the original Mario Bros at around the same time. In Starfox you are boxed in by an annoying invisible wall to either side of your ship which you couldn't fly past. Mario Bros solves this problem by allowing you to go off one side of the screen and come back on the other. Substream puts these together.

Substream's universe is actually just a narrow channel, but it's repeated in space. What you end up with is something quite interesting, where enemies appear in multiple positions ahead of you simulatenously, and your ship appears to be one in a chain of infinite ships. Pause the this video at around ten seconds in and you'll see exactly what I mean.

Then twenty seconds in you'll see a couple of large enemies. These are protected by shields which means although you might not be able to land a shot on them from the left, you can shoot them from the right. This is an easy level and they pose little threat but with multiple smaller shielded enemies, you'll need to think fast and switch your attack.

I'm really happy with the terrain animations and music syncing. I also know the repeating space is a workable feature and that the game is definitely playable. It's a unique set up and by experimenting with enemy and weapon designs I hope I can squeeze some more gameplay features out of this.

It's my aim to have several levels in the game on launch, each with a carefully selected piece of music which brings out different emotions, rhythms and gameplay styles. Each piece of music is between six and eleven minutes long so if you factor in a few deaths it may take a couple of hours for one play through. But there's going to be a lot packed into those two hours.

If you find this game interesting please don't forget to subscribe to Substream with one of the options at the bottom right of the website.

Game Length

Several indies are blogging about game length today so here's my two pence...

As a Player

I wanted to mention my opinion on this as a player because I think I am probably a rare case. I have completed about 90% of the games I own, and hope to complete the rest. Some of the games I have completed I didn't even enjoy. This is probably partly some sort of completionist OCD and partly the curiosity of a games developer who wants to figure out exactly what makes games bad and why.

As a player is length important? Yes: I prefer to buy games that are short, simply because if it's bad I'll want it to be over. When I'm unsure whether I'll like a game, I'll tend to opt for something that is shorter and costs more, than something which is longer and cheaper.

Although I'm an anomaly I think all gamers want to complete more games than they do. One answer is to allow a flexible length, and luckily side quests and DLC are a move in the right direction. They help me and everyone else to choose how much time it takes to reach the end.

As a Developer

I'm not content to make an empty experience or to dilute a game for length. Substream is going to be short but lovingly crafted. A quality-over-quantity approach, if you like. I know this isn't for everyone, and that's fine. Whether a game is "worth it" is different for different people. There is no one true length or one true price, the decision about whether a game is worth someone's money should be their choice, and based on what they want to get out of it.

Some bloggers are commenting on the tendancy for journalists to list a short length as a negative. I think journalists are acutely aware of gamers' desires for value for money (which is a good thing) but perhaps don't play games in the same way we do.

In particular, they probably don't get to replay games. My games are a carefully cultivated collection which I can easily view on my shelf and whenever I have the time and inclination I can replay any game I want. A journalist's games collection is a an ever expanding mass with less personal input, and new games must be played. I've bought short games that I've really enjoyed including Mirror's Edge, VVVVVV, Windosill; and I've completed these several times. In a high quality title there'll be things to appreciate that you might have missed before. If the majority of gamers really care about cost-per-hour of gameplay, then I kinda don't mind shortness being listed as a negative, but where that's done I'd personally like to see replay value discussed in more depth.