Moving from Team17

Nearly two years ago, Team17 offered me the opportunity to leave my previous company to work full-time as a games programmer for the video games industry. I have no regrets about taking that opportunity.

On top of getting to work on various titles for various platforms, from a souls-like action RPG to a music-rhythm game with pigeons, I got to move to Manchester and work with some brilliant and talented people.

Last year, I moved into my own house to escape the struggles of renting, and now, outside of spending fifteen hours a day writing code (for work and pleasure), I’ve taken up writing, sword fighting and enjoying the northern countryside.

Following my departure, I’ll take a short break from everything for now, but I wish everyone I’ve worked with and those still working at Team17 best wishes and a promising future!

Unstable Grounds – Ludum Dare and the Future

So it’s been been several months since I last made a post here, life has been busy and it’d been more difficult to motivate myself for games development than it has been in the past. Most of my time outside of work had been preoccupied with personal writings completely irrelevant to games, including a book project that I had been working on and off since May 2019, and after Rogues of the Seven Seas, I was doing lots more writing and walking around the lakes and countryside than writing code.

That being said, in April of this year I decided I was going to set a weekend aside to work on a games jam, a simple bullet hell game for a bullet hell themed game jam. It went alright, but in my stupor I failed to realize that this game jam was a week before Ludum Dare 48, and so as a result of mental exhaustion, I decided to opt-out.

Fast forward to this month, and needless to say, things went a bit crazy. To start off with the easiest, I decided I was going to take part in Ludum Dare 49. Because I’m kinda lazy, I’ve copied over the postmortem I wrote on the website to explain how they went.


Although I’ve done several game jams over the last eight years, this time was rather worrying for me as the last game jam I actively took part in this year was back in April. Not to mention, I had fallen back to my low, unmotivated, state that I thought I broke out of back in LD47, so I had done little to any hobby game development during the months since then. When I said I would take part in LD49, I was incredibly rusty.

The Idea

Ludum Dare has a tendency of the majority theme being something a lot of people hate, and “Unstable” was no exception. I initially gave it a positive vote, until I found out that all I could come up with during my brainstorming session was a physics balancing game, so I changed to a negative vote.

When the theme voting results were released at 11pm on Friday, I couldn’t think of any other idea, at least until I talked it over with Kris, a friend that I usually talk with about game ideas for Ludum Dare. When I told him that all I had was a physics balancing game as an idea for the theme, he replied “city building game about balance right?”

Since I was working with a mostly 2D game framework, and a physics based city builder sounded like it’d work with 3D, I was doubtful of how good the idea would be, but I had nothing else to go with.

I quickly set up a physics world in my project, and using the custom shape object to create a bowl shaped world and some randomly placed blocks in less than an hour. The resulting GIF was slightly more popular than I thought it would be.

LD49-00000.gif

Day One

As with other previous Ludum Dares, I work on a set of rules. First two rules are Gameplay First and Small Scope, to put it simply I make sure the gameplay that I want is done in the first day and I make sure the scope of the gameplay is not too big.

The three things I wanted the game to do first and foremost is to place buildings, move them around, and have little people walking to and from them. Prior to this, I had worked on adding phyiscs in my engine, and I wanted to make it easy to add and remove physics to a game object. As such, all I need to do when clicking on a building was to remove the physics, and then add the physics back in when I click again to place a building.

I also wanted to avoid buildings from being dropped at high places, since blocks tend to bounce when they land, and might not go exactly where the player wants it to. As such, I had to go back to trigonometry to calculate the point on the ground to place buildings based on the mouse’s position.

As for gameplay logic, I figured having buildings not only of different sizes, but different types. Houses and apartments would house people, shops would be wider and be a place people can go to, power stations would be the largest (and therefore heaviest), hospitals can produce more people overtime, and police stations would reduce crime (and hence reduce the chance that people would die).

LD49-00002.gif

Unfortunately, I didn’t have the day completely free, it was one of my friend’s birthday, and we all went out to a fancy Indian restaurant to celebrate, followed by more drinks afterwards. Considering the lack of social gatherings because of the pandemic, I didn’t want to miss out, so adding people was rushed in past midnight. It proved to be harder than getting the buildings to work, since the people needed to walk from one building to another. I wanted populations to be kept track of, so buildings needed a count of how many people are in them, with the count changing when people leave and entering buildings.

Not to mention that getting people to move on a constantly wobbly surface isn’t straightforward in a physics enviroment.

Day Two

One of my other rules is [Make your content easy and noticeable], which is primarily a rule I apply for doing art for the game. If I decided to go with doing the 72 hour jam instead (or was able to produce more art at a faster rate) I would have done more detailed fully coloured pixel art, but given the rustiness I have (and I had recently transitioned from Photoshop to Photopea), I went with the 1-bit minimalist approach.

Texturess.png
LD49-00003.gif

Looking back at the first GIF with art for the houses, I kinda like the effect I put in with the outline of the ground drawing around buildings when they land, it’s a pretty easy trick that didn’t require any shaders to pull off, however I wasn’t a fan of the lack of detail the bowl ground had, even though in hindsight it looks like the city is balanced on some Figgy pudding.

As for music, I went with LMMS. After the suprise success of the audio in my LD47 entry, I used my same approach of utilising samples and instruments for the music. However, I couldn’t really come up with something long and complex enough that could fit the city buiding theme, which was ultimately why I took out Audio rating for this game. I’ve heard some people say they still like the music, but I don’t think it’s worth getting a ranking for.

Sound effects were also just random chiptone samplings. I kinda wish I had more options to create sound effects for games so they don’t all sound the same.

The last thing I added for the game was the weather effects, which was a combination of a random applied force and particle effects so it looked like either snow or rain. I felt like I had everything done by 9pm on Sunday, and as such submitted it to the compo.

Conclusion

LD49-00005.gif

I think the game went well, the biggest positive I can say from this game was that it was the first time using the implemented phyiscs in my engine in a game project, and it went remarkably well. There are a few hiccups that I can’t figure out (notably when game objects jump in the air after a certain amount of delay between frames), not to mention the code I used to handle the amount of people in the city was broken, leading to people being visible despite the city population being zero, as well as a lack of transparency inside the game regarding to how buildings work.

But as long as other people enjoyed it, I’m happy with it. Glad to know I can still make games in two days with only a few bumpy roads.

LD49-00006.gif

As of writing, that was several weeks ago, voting has since finished. One of my friends asked what I’d hoped my ratings would be, and honestly I thought the game was too simple and the hiccups would put people off giving it high scores, and with my Ludum Dare 47 having my best results so far in the compo I didn’t think this game would top it,

Well…

Capture.PNG
EIGHTH PLACE?!

I still cannot believe it, even after going to the game’s page multiple times. but there it is. After eight years of participation, I’ve achieved a top 10 ranking in the Ludum Dare comp. It was surreal seeing my game on the results page without the need to scroll downwards.

Still, words cannot describe how happy I am to achieve this. Thank you to everyone who played it, shared it, and provided feedback on it.

The Future

This part is quite important, as it has both good and bad news.

I’ll give the bad news first, following from Gemstone Keeper on the Nintendo Switch, I started working on a new big project, a bullet hell shooter. I had gotten up to a pre-alpha demo before the pandemic brought a lot of things to a grinding halt. I’ve decided to place this project on hiatus for the forseable future, if not indefinitely. This is partially because the inspiration that got me to work on it has all but faded out, and although I did use some of the code for Bullet Hell Exam, so it wasn’t all to waste.

If I get new inspiration, I may pick it back up again, possibly starting from scratch, however there is a new career that I wish to focus on. This is the good news.

Starting near the end of November, I will be working for Team17. I have had a great time with the company I have spent six years with, but this is a career opportunity that I have been working for since the beginning, and I’d never forgive myself if I didn’t take it. Team17 has been around longer than I have, and I’ve enjoyed the Worms titles from my childhood, and their decision a few years ago to move into indie game publishing has shown to be impressive. I look forward to joining them, and seeing where my future will take me.

Rogue of the Seven Seas – 7DRL Postmortem

Last week, the 7DRL Challenge took place. It’s the same game jam that I’ve done three times previously, where game devs have 7 Days to make a RogueLike, a turn-based procedural roleplaying game with permadeath. One of the benefits of this jam is that you’re free to choose which seven days to take, as technically the jam ran from the 5th – 14th March, but you could start at any time as long as you finish at the end of the seventh day. Funnily enough, the past ones I’ve only done on even years (specifically 2016, 2018 and 2020), but I figured I’ll make an exception.

The Idea

I decided to start the jam on Saturday morning, but I needed an idea. For the week before the jam started, the most I was thinking of doing was something in the realm of Smash TV or Robotron as a roguelike, I was struggling to get anything concrete. Then an idea hit me while, admittingly, I was listening to some sea shanties/acapellas on Youtube, a sea-based exploration and trading roguelike. The player would start out with a weak dingy and move their way up to a massive multi-sail ship through buying and selling items at ports, as well as making other ships surrender their supplies. It felt like a fun idea, so I went with it.

Rules

I have developed a mostly streamlined process for working on games in a jam enviroment, based on my previous experience. Coincidentally, I did a pechakucha talk for the local Midland Games Industry talks night:

To summarise, I often use this section that I routinely post during Ludum Dare:

EjL_Em8WsAYHmKA.png

Fortunately, I take advantage of 7DRL’s relaxed rules of pre-existing code and used a base template project that instantly provided me with a title screen menu with options and a blank state for gameplay, combined with some code for tile-based movement and tilemap features from my previous 7DRL entry, built in my own game framework that I’m very familiar with. That there is a good example of Know Your Tools!

Gameplay

Then was the first two rules, Gameplay First and Small Scope, which was what I wanted to focus for the first two days. I wrote myself a checklist of what I wanted in the game using comment blocks in my game’s code, there were three main things I wanted to focus on: Generating Land with ports to sail into, buying and selling stuff in those ports, and combatting other travelling ships.

First was the land generation, which I went on instinct and went with using FastNoise to generate a noise tilemap that I can then define which would be land and which would be ocean. I ultimately went with using a combination of Perlin and Simplex noise to get enough variation in the noise pattern, transformed it to have values between 0-63, and then through experimentation ended up with any tile with a value below 45 being sea and the rest of the values above could be a certain level of land.

The next challenge was to group each land tile into a group of them to make up an island, I ended up using a recursive depth-first search algorithm to go through each tile and all of their neighbouring tiles, using an array flag to avoid any tiles being checked twice, creating a box around each island so I could work out how many ports each island would need and avoid applying tiles to other islands by checking for overlaps.

For placing ports, I was admittingly lazy and decided to just randomly assign every beach tile (the lowest land tile ID) as a potential port and chose at random which one to use. In hindsight, this would cause scenarios where ports are right next to each other, or at least be close on the same island for easy back and forth. I think if I wanted to make choosing port locations more interesting, I might have use algorithms to determine suitable paths between islands near to each other, that way it would make sense for a port to be located close to a near, perhaps with A* path finding or delauney triangulation.

Despite this, I at least had a tilemap with islands separated out so I could start a ship on a random port, and then have it travel to other islands grid by grid. Since I had the data, I decided to make three more tilemaps to render on the sides and corners, setting their location depending on the ship’s location on the map. Combined with the game moving the player to the opposite end of the map if they go too far in one direction, and you have the illusion of a seamless map that wraps around.

Next were the ports and combat, both of which were menus. The port menu used mulitple switch cases, which I was foolish enough to use knowing that I also had my framework had its own Finite State Machine, which I would use with the combat menu. I ended up keeping the stock items (which players can buy and sell) in a separate array from upgrades (which you can only buy) so that stock could be easily increased and reduced in events such as trading and battles, while upgrades have a single purpose.

For battles, I had ships scattered randomly outside the player’s field of view, and those ships would only update when they were in view of the player in order to optimise for AI calculations. I actually had some fun with this, separating the ships into pirates and transport ships, and not only giving them different behaviour to give the generated world some life independent from the player: Pirate ships will always move towards the nearest ship, even if it isn’t the player. They can then engage against the other ship into battle, which means that other ships could sink without you being near them. Meanwhile, transport ships will aim to go to a port, and so will move along a generated path towards a random port.

By the Sunday evening, I had finished the base gameplay, with the most basic visual assets. Unfortunately, gameplay work never really finished because of balancing out the stats or both the player and other ships, not to mention tweaking the land generation. In the end, I’ll see what the reviews will say about how the game feels.

Art

I normally do pixel art myself with piskell and photoshop. However, despite having seven days, the remaining five days were also working days, meaning I only had evenings. That meant I resorted to open source/creative commons art assets. The main ones that helped me were Kenny-NL’s pirate pack for the ship designs and qubodup on OpenGameArt for environment tilesets, with photoshop to aide me in giving the assets a bit more of my own style. I also made use of stock images for the port menu to give a visual aid. I think the only original artwork I actually did was the side view of the ships, the UI box border, and a secret boss. I remarked that I wouldn’t get high marks for graphics, but some of the other participants reassured me that it looks fine. Fortunately, 7DRL doesn’t merit how games look and sound.

One downside to this tileset is that GIFs ended up being massive on the overworld.

Sound

So for sound effects, I used sound effect libraries from GDC audio packs and freesound, with the sound of oceans being ambient. However, with it being early 2021 with sea shanties being all the rage, I couldn’t help but make some basic renditions of my own. I didn’t go with any fancy samples and beats like I did with Twist, Turn, Shoot, Burn, just some basic NES chiptune using soundfonts. Of course one of the renditions had to be the Wellerman, since that one blew up on TikTok, but I also know a couple others so I also did renditions of “Leave Her Johnny” and “Bully in the Alley” as well.

What went wrong?

I really should have taken five days off to get the most out of this jam, doing five evenings from 5pm to 11pm (and Saturday 2am) is really tiring and you end up struggling with even the basic tweaks. I already mentioned the placement of sea ports, and how the sea port menu used switch cases when the combat menu used a finite state machine. I also ended up missing out on features that could add to the challenge, like a content weight limit (you can buy infinite amount of stock to sell).

Being better rested and prepared would have also helped me with submitting the game. Word of advice, never use Windows Explorer to set up a .zip folder. I don’t know why, but if you ever try to update a file within a .zip folder, Windows Explorer corrupts it. The best recommendation is to use 7zip or WinRAR instead.

In the end, I’m pretty proud of this game. It feels a lot more complex than KALQL8TR and yet just as novel, I might do a post-jam build some time this week to see if I can fix that menu and sort out the ports and whatever improvements I think I could make, but for now, I hope people enjoy it.

https://gamepopper.itch.io/rogue-of-the-seven-seas

Twist Turn Shoot Burn: A Postmortem

This was originally written as a blog post on the Ludum Dare website back on October 10th.

Icon.gif

^^^ Click to Play ^^^

It’s now been just over a week since Ludum Dare 47 began, so an ideal time to reflect on how well things are going so far. I’ve been taking part in game jams for seven years now, and this was my 16th Ludum Dare, although you find that every game jam you do has a challenge that you never expect, no matter how many you do (and I’ve done over 50 at this point).

So the game: Twist Turn Shoot Burn is an auto-run ‘n gun, you run around a randomly generated path shooting red things from one of two lanes. Here’s how it was made:

The Idea

349b6.png

As I wrote in my entry post, I wasn’t a real fan of any of the themes. I was actually hoping “Technical Difficulties” would make it to the final voting round, but alas you make with what you do. My usual plan is to brainstorm ideas, with the goal to have at least one idea per theme. Ideas in this case is usually a simple phrase to describe a game’s setting or mechanic.

All I had for “Stuck in a Loop” was this: Run (and shoot) inside a loop.

Yeah, not sure why but even as I slept, my attempts to think of what game I could make around this theme always reverted to this. As such I just gave up and decided how on earth I was going to get a game to work…

Day One

So to people who know my approach to game jams (all five of you…), I have a set of rules that I always follow when working on game jams regardless of length. A lot of these rules were written and refined from experience for efficient development and maintain good wellbeing.

EjL_Em8WsAYHmKA.png

So day one was purely focused to develop on gameplay, and the first thing I needed doing was having the player run around a basic path.

Following rule four (stick mostly with what you know), I figured I’d do a tilemap but I was worried about how to do collisions. My engine’s tilemap system isn’t built to handle slopes and curved paths, and I wanted the player to go around a proper loop. I was worried that I was gonna have to figure out how do write a Sonic-style platforming system. Then I was literally booting up my PC, first thing in the morning, when I realised: I didn’t need to calculate collisions, I just need to calculate positions.

I made each game object stick to a specific position based on an X and Y value (between 0 and 1) what tile it’s currently situated in. The X value would position it from one side to the other, and the Y value would handle gravity and securing it to the floor. I originally had it up and running by midday, however in my original approach, the player would move fine on tiles that moved straight, but would float on turns. It took an hour’s walk, a hour lunch break and about two more hours for me to get it to work correctly.

LD47-00000.gif

It was also during that first lunch break and walk that worked out how to do obstacles. I only wrote four enemies: Same Direction, Opposite Direction, Bounce and Always Flying. I also decided to do something similar to Super Crate Box, have it so enemies would spawn the moment you defeat one. All the enemies use the same movement behaviour as the player, which funnily meant the Always Flying enemy was the hardest to implement because it wasn’t straightfoward to disable gravity.

LD47-00003.gif

You might notice the player had the ability to jump. The original plan was to have the player shoot, jump and change places. I eventually decided to diable jumping because I found myself always changing direction more than jumping.

Day Two

The base game was pretty much done by the end of Saturday, I did want to make the levels more random but I wasn’t sure how to do it, so I decided to leave it as something to implement if I had time. For Day two, it was all graphics and sounds.

This is where rule 5 (“Make Your Content Easy and Noticeable”) comes in. This rule was concieved after Ludum Dare 42, where I spent somewhere around five hours on a detailed player character, despite how small it actually appeared in the game itself.

Piskell is my tool of choice for doing pixel-based sprites, as it’s easy to pick up and test out frame-by-frame animation. All I can say for the player character is that I cannot confirm or deny whether the recent popularity of Among Us or Fall Guys had any roll, but I will say that the 2-bit palette of Downfall was deep in my mind when thinking of the visual design.

Visual effects are also a prerequisite for most of my games, partially because one of my game dev influences being Jeff Minter, and I’m a huge fan of his vibrant nightclub/psychedelic visual aesthetic. The main effects I use were Chromatic Abberation (distorting the red and blue colours), Bloom (make pixels glow), scanlines (TV effect) that constantly offsets, Bad TV Shader (to get the noisey distorted look) and a fisheye lense (to make it buldge out slightly).

LD47-00004.gif

For sound effects, I used sfxia and ChipTone. If I wanted more realistic sound effects and wanted to go with the loose jam rules I’d mix and mash stock sound effects together, but I know with this game’s visual design that I was going with a retro-esque feel.

For music, LMMS. I’ve gotten comfortable with it as a music creation tool, although when I tried to mess around with soundfonts and VST plugins for retro inspired music. That’s when I went back to Jeff Minter’s games and decided to try a drum ‘n bass approach. Fortunatelly I did experiment with this for an earlier Tetris recreation project, and I was able to come up with a 1 1/2 minute long loop that I was satisfied with.

Based on my social media posts, I had everything submission ready by 4:30pm. That meant pleanty of time to get the submission details ready and add in stuff. I added a new enemy at this time, and tweaked around the controls, but I didn’t think there was much that I needed doing. It wasn’t until two hours before the deadline that I decided to give randomly generated levels a go, you can read up on how well that went here.

LD47-00007.gif

Conclusion

I’d say this game went better than I thought it would, I’m always into making small arcadey games and after this pandemic had drained me from doing personal game dev projects, this one just revitalised me in many ways. That’s not to say it was perfect. So time to explain some issues:

  • Camera: I had spent the last hour trying to figure out how to get the camera to focus in on the randomly generated level, instead of the full screen. Unfortunately time had ran out before I could figure it out, so I had no choice but to leave the camera in its full form. The “Player” mode I thankfully decided to leave as an option, as much as I thought it was a fun camera mode, I could tell it was disorientating for some players.
  • The Volume: So when I was working on the music, I had the PC and headphones on full volume, and I thought the volume was perfectly fine. Turns out my headphones aren’t as strong as I thought they were, cause players on some streams were taken aback by how loud the music was. I’ve deamplified the music for the post jam build, but I’ve also had feedback suggesting not to have full volume by default.
  • Menuing: Yeah, I probably could have spent those final hours adding some important stuff to the menus to make it clearer and easier to modify, especially the option to turn off the visual effects that might be an eye strain to some people. In hindsight, I also have a config class that I used in a past game that I could have easily dropped into this game, so saving options would have been a breeze.
  • Linux: As much as I work on Windows, I have a soft spot for Linux and major respect to their userbase. I usually have a Linux Mint distro on hand to easily produce a native Linux build of my games, and let users decide whether to download it or not. This time around, I was curious and posted to a Linux games community (shoutout to /r/linux_gaming on Reddit!) to get actual Linux gamers to try it out. Turns out quite a few couldn’t get the game to work due to a libcurses dependency, and one of the Twitch streamers that tried the game on Arch Linux (shoutout to @marcmagus) found out his gamepad ran funny with axis inputs when he played the game.

So yeah, there’s a lot to deal with. Perhaps in the next update I do to the post build, I should add a long warning for players with senstive eyes and ears before I do anything else. Thanks to everyone for playing, thanks to my friend Kris for helping me with brainstorming ideas and here’s hoping to a good ranking!

Icon.gif

^^^ Click to Play ^^^

Straight Out Of Furlough

So the pandemic is still at large, and despite being one of many employees that had to take a pay cut in March to keep businesses afloat and people with jobs at the company I work for, a number of people had to be furloughed in May as customers remained closed, I myself being one of them. Unfortunately, it’s happening everywhere where it’s non-essential, and the silver lining with mine was that it was only for three weeks (and I had it in writing despite my families concerns). Today is my last day of furlough and tomorrow will be my first day back at work, from home because as far as myself and my company is concerned, whatever excuse the British Government is giving to lifting lockdown is not good enough.

Even so, it feels weird to think about getting back to work. Getting into routines is a slow process for me in general, working from home daily basis took a while for me to adjust to, as well as the first week of furlough. I just hope my first week back at work will be smooth, I’ve worked in games programming for years so it’s just a case of not getting rusty.

So what have I been doing in May? Well, the week before furlough started I wanted to practice some personal game development by working on a clone of a game genre I usually don’t approach, puzzle games. I decided on Tetris since it’s the most popular, and I remember back when writing games in XNA trying (and failing) to make a Tetris clone, so it would be a good progressive piece.

Continue reading

Gardening of Pandemic Proportions

Good start of the decade, huh? In February I was enjoying a break from game development outside of patches for Gemstone Keeper, as well as spending a nice holiday in Sweden. Then March hits, and a virus that started in the Wuhan province of China spread to pandemic proportions and every country was starting to lock down and encourage people to either quarantine or distance themselves from others. For the last six weeks, I’ve been mostly working from home, my only travels are our long hikes around the local countryside and I’ve only been able to communicate with family and friends online in video calls or online games (Jackbox and Animal Crossing have been godsends during this pandemic).

It’s still a good time as any to work on some smaller games, and I’ve been wanting to get back into a few game jams, so during this pandemic, I took part in two big ones: The Seven Day Roguelike and Ludum Dare 46. This post goes over Ludum Dare’s submission: Keep the Garden Alive

Continue reading

Calculators of Pandemic Proportions

Good start of the decade, huh? In February I was enjoying a break from game development outside of patches for Gemstone Keeper, as well as spending a nice holiday in Sweden. Then March hits, and a virus that started in the Wuhan province of China spread to pandemic proportions and every country was starting to lock down and encourage people to either quarantine or distance themselves from others. For the last six weeks, I’ve been mostly working from home, my only travels are our long hikes around the local countryside and I’ve only been able to communicate with family and friends online in video calls or online games (Jackbox and Animal Crossing have been godsends during this pandemic).

It’s still a good time as any to work on some smaller games, and I’ve been wanting to get back into a few game jams, so during this pandemic, I took part in two big ones: The Seven Day Roguelike and Ludum Dare 46. This post goes over Seven Day Roguelike’s submission: KALQL8TR

UPDATE: The results for 7DRL were just released earlier today. Each of the 166 games were ranked in various categories. KALQL8TR was able to get into the Top 50 for all but one category, including 8th place for Innovation!

Continue reading

A Decade of Game Development

Happy New Year everyone! It’s 2020, meaning it’s the start of not just a new year but a new decade (unless your one of those people insistent that the decade starts on 2021)! Needless to say, it has been a full ten years, and it’s fitting that nearly ten years earlier I started working on a computer game for an Extended Project at my Sixth Form project. I did a brief summary of what I’ve done over the last decade on Twitter, but I figured I’d write about what my experience with game development has been like. I won’t write in detail about every game and related projects I’ve ever worked on (at this point it’s 48, not including some of the game jam projects that didn’t get finished), but to give some highlights. You can check out all the games I’ve worked on here, as well as the academic stuff here.

First game

I’ve always enjoyed playing video games, and it had crossed my mind on a number of occasions to have a go at making my own one. Problem was that I struggled when it came to trying new things on my own so if I didn’t have someone to instruct me, I’d get lost and eventually give up. I remember looking through DarkGDK and an old 3D game engine, and the tutorials were confusing so I stopped after a few days. Even when I was 16, I didn’t even think of being a programmer or a games developer (I originally wanted to be an electrical engineer) until one day where I took a class that was meant to demonstrate what you’d learn if you took Computer Studies as an A-Level course. Having a good teacher who could walk you through writing code (in Visual Basic .NET) effectively got me to consider taking up programming instead.

Game development was something else, I remember at the start of the year there was plenty of encouragement to do what’s called the AQA Extended Project, which is basically an assignment that students have a year to create on any given (approved) topic of their choosing. It’s the equivalent of half an A-level grade, and it’s advertised as being good on a University application because it’s extracurricular work. I remember in one of the numbers of presentations that the teacher speaking about it saying something to the likes of “You can do a project on almost anything, such as something you do on a daily basis like taking care of an animal, a certain subject you’re interested in, or a particular hobby you have. One year, someone made a computer game for their EPQ, if you want to try that, you can.” and almost immediately on my mind, I thought I should try that.

For the report, I looked at a number of tools at the time and stumbled onto Game Maker 7 (I later moved to Game Maker 8 when that came out). I read on a couple of websites that it was used in secondary schools for creating games, and it looked like you simply needed to understand flow charts in order to do stuff so I downloaded it and tried the tutorials. For the time, they must have been the most straightforward and clearest tutorials I’ve ever used. It took me less than a day to make a vertical scrolling shooter similar to 1942 just from following a PDF document, so I figured for the project I’d turn it into a horizontal scrolling shooter. I was also a fan of a sprite-based Final Fantasy webcomic called 8-Bit Theater by Brian Clevinger, so I figured I’d use Final Fantasy sprites and make it a fan-game: 8-Bit Theatre: Black Mage is in a Shooting Game.

Looking through all my documents, I think it’s safe to say I might have been a bit too ambitious for a first project. According to the design document I wrote for it, I was hoping to create eight levels, each with a boss battle (in the end, I only managed two levels and one boss battle). I even gave the game a full plot synopsis even though I never found the time to implement a game’s storyline. The game was also purely developed using the Drag and Drop visual scripting tool, which did enough that I wanted to do although more experienced Game Maker developers don’t even touch it and do everything almost entirely through Game Maker Language. That being said, I did try some of the more intermediate tools within Game Maker such as Timelines and Paths, and the boss I did end up making was massive. Regardless, it was definitely a learning experience, and it was a fun project to do in-between school, homework and a part-time job as a school cleaner. The teachers definitely thought that my game, even in an incomplete state, was an accomplishment and recognized that I had skill and drive. In some aspects, I probably had a bit too much drive, I made a gameplay video of it and put it up on a Youtube channel, pretending I was a games company called YARGHgames (I’m pretty confident it was an acronym but I cannot recall what it actually stood for). Still, we all have to start somewhere. I did try to remake this game back in 2018 for a games jam, and although I never went further than the original, I think the fact that I could remake what was more than a year of work back in 2010 in around a single week in 2017 shows I must have improved somewhat.

University

When it came time to apply for University, wanted to do Games Programming as a career, with the hopes that I could write code for games on the major video game consoles. I originally chose to do games specific courses, but my parents insisted that I go to the more general computer science route instead. Neither of my parents had much of a background in computers and didn’t think there was a good chance in getting into games, and in fairness neither did my A-level teachers. My cousin was the one who recommended me to look into Staffordshire University because of the games and computer courses, and I made it my first choice. I enrolled as a Computer Science student in the latter half of 2011, and after taking an optional module in games programming I decided to transfer before the end of the first semester (I was able to convince my parents that I should do it, and early enough so I don’t have to do additional modules to catch up).

Most of my work was purely academic, the most game-like stuff was a Pac-Man clone and one where you controlled a goldfish. I did pick up a lot of stuff using Microsoft XNA and C#, as well as some early 3D programming using OpenGL (with the really old framework GLUT) and then later DirectX. I even spent three months at a Summer Camp in Hawley, Pennsylvania where one of the activities I did was teaching C# and XNA. I didn’t try to make proper games until two things happened: Game Jams and Microsoft.

First one was Global Game Jam 2013, I went mostly because I knew two of my friends were taking part. Staffordshire University was the largest GGJ site in Europe for a number of years, so you got to see a lot of people get involved. Joining one of my friend’s team, we worked in XNA to create this top-down driving game we named Anarchy Ambulance in a similar vein to crazy taxi, except you’re running people over and delivering their hearts (incidentally, this was the same GGJ where Surgeon Simulator was made). It was a terrifically fun project to work on and it remains one of my favourite team-projects I’ve worked on, we were able to get a lot done and had a laugh doing it. I didn’t think it was entirely possible to get the game done in two days, but James and I managed to pull off all the coding stuff, even the collision with rotated bounding boxes. It was received fairly well at the time because of its morbid concept, I remember years later seeing it featured on a showreel the University Games Design faculty played during open days for a few years after. I’ve gotten into doing game jams since that day, because there is a lot of creativity and drive to finish a game in a short amount of time, having to decide what’s worth implementing and what stuff needs to get polished.

The other one was Microsoft’s Windows Games Ambassadors, a programme that was set up to encourage students to build gamedev portfolios by writing games to Windows 8 and Windows Phone 8 and submitting them to Microsoft’s digital store. One of the requirements for the role was to make multiple games yourself to demonstrate and work on your own portfolio, so I made a couple such as BOOM, a game where you defend people from fireworks. There were a lot of good experiences I had while working as one of their ambassadors, from getting free devices (such as a Nokia Windows Phone which remained my smartphone for years) to attending events like EGX as one of Microsoft’s crew. It did give me an early look into building games for mobile devices in particular, as well as have early experiences with submitting games to storefronts (one that I’ll get more used to later on). I still get updates from other members of the team and almost all have worked in games in some capacity, such as with Unity, Playground Games and Supermassive, as well as other technical fields such as VR and Medical.

IBM

During the second year of University, most students were looking for an internship or student placement. At the time, games industry internships were hard to come by and often were available late into the year, so I started off by applying to big software companies. After a few rejections, I applied to IBM. I had a lot of help with the application process, from the University’s careers team to an old friend from Sixth Form (who was already working for IBM at the time) and my sister. I remember having to fill in application forms with answers that could be compiled into an essay and going to the Hursley offices for interviews, a presentation and multiple group exercises. I got accepted and decided to work at the Hursley office as it was their main software engineering hub in the UK starting in August 2013.

Despite the day-job having nothing to do with games (I worked in the RDM, which was one of their data management teams), the work environment was built to be relaxed enough that employees could spend half of their time in different parts of the building to attend other things like courses to pick up skills (I did a few C++ and PHP courses at the time), conferences, as well as events that ran to help the local community (called Givebacks). I did two of the more popular Givebacks, one was teaching a local primary school IT once a week and the other was making a game for a competition called Blue Fusion. I pitched a game called Clean Commuter where you learned programming by giving a car simple commands, with the goal of making the car reach a goal in the fewest possible moves. It became one of the selected games and I was appointed team lead, so along with assisting with writing the game’s visual side (other programmers worked on mechanics and network multiplayer parts) I also had to manage the team and make sure the game was ready in time for the competition. It was a struggle at first, but things got a lot more comfortable once a plan was put in motion and the work got into a routine.

Untitled-1

I was also working on Secret of Escape around that time, beginning as a game jam project with the premise of “What if there was a stealth game which you had to complete as fast as possible?” (I somehow forgot Metal Gear Solid: VR Missions had existed). Since I liked the concept I thought I’d make it a proper game. Because of my work at IBM, I had to keep the work outside of my spare time and hold back on releasing it, which did help in some areas. This was also the first game I made an attempt at showing in a public setting with the first Norwich Games Expo and the Indie Zone at London Gaming & Anime Con. I also got to show the game unofficially at one of the early Indie Zones at Insomnia Gaming Festival, after I found the guy running it by chance and told him I was an indie game developer (networking was a funny thing back then).

In retrospect, I’m not surprised the game didn’t do so well as it wasn’t exactly a game you could easily get into and hardly stood out. I also thought to add easter eggs that no one would find was a good idea, having one or two for a laugh is fine if they are easy to find with a bit of messing around but I put in a bunch that only I would know or someone if they had to dig through the project, Not to mention putting it on Desura and IndieGameStand not long before both services would shut down when Steam was starting to do Greenlight wasn’t a good decision, at least it’s still free on itch.io and was nominated for a games industry award. It’s also the time were two of my personal favourite solo game jam entries came from, Galaticus from GBJam and Glow Drop from Ludum Dare.

Final Year

After I finished my year at IBM, it was back to University for one last year. I did end up branching out a bit more by doing engine and multiplayer game development alongside more 3D programming. After spending most of my time with C# in the first two years, and Java in my placement year, I went almost entirely into C++ for the third year, with a few modules in C#. Two key projects at that time for me were the Junior/Senior project and the final year project.

The Junior/Senior project was Staffordshire University’s biggest game design course, with students from every games course (including Games Programming) being eligible to take. For the entire year, teams would make a single game. Each team was made up of sub-teams such as tech, art, design and sound, and each member had roles assigned to them, including a producer and director role. The team I was in was called Ironworks and after a few weeks of making concepts, we went with making an auto-runner where one player had to finish a course while the other player had to sabotage them.

As I was the only person studying in Computer Games Programming in my team, I was assigned as a senior tech, meaning I worked under a lead tech and handled some of the more advanced parts of the game while the three junior techs worked on the less advanced parts. I remember our team being unfortunately unbalanced, as outside of the tech team and producers was one animator, one sound designer and mostly concept artists. Lack of animations was such a problem, that I took the initiative of writing small scripts to make the player look more animated when it moved. I remember the tech team joking that no matter what happened, our game was at least gonna look great. What made the course particularly special that year was that Epic Games sponsored the course and granted every student early access to Unreal Engine 4, so through the year we got new updates and would often raise issues with the engine that would get fixed in the following week if we were lucky.

It was also probably one of the longest and most intensive courses, being around four hours per week on a single day with an hour in-between, excluding any unscheduled sessions to get the game ready before the deadline. Because of my course having Junior/Senior technically being part of a separate module to every other course, I was only required to attend the first two hours whilst everyone else had to attend the four hours. I stayed home after finishing the first two hours after the first day, and I ended up feeling bad for leaving everyone else to work so from the next week onwards I decided to stay for the entire four hours like everyone else, spending my hour break quickly going home to have a pizza before heading back to campus. Apparently, I was one of the few games programmers that actually did this, and maybe the others had other modules as a priority but I personally enjoyed spending four hours a week working on a big fancy looking game.

The Final Year project was the big chunk of the final year, as well as my degree. Everyone had to do a thesis on something related to the course they were on. I had a small interest growing in procedural content generation as the topic was growing in interest around the time (from Spelunky to No Man’s Sky), so I thought of using that as my topic. That quickly developed into level generation and an idea of building a tool that could help with generating levels. Doing a thesis required a lot of taking notes and writing down alongside with doing a project. I had to research a number of different algorithms and methods from academic papers and conference talks, alongside learning to use GUI, Unit Testing and file-format frameworks to create the tool. Thanks to the industrial placement at IBM, I got used to treating University more like a full-time job in some aspects, so even on days where there was little to no lectures or tutorials to attend, I’d go to campus in the morning and spend most of my time in the library until 5pm when I got home, made dinner and do stuff in the evenings. In the end, I had submitted an 80+ page bound essay with a fully functional level editor that used algorithms such as L-Systems, Hilbert Curves, Cellular Automata (plus ones I created myself) as well as a tiny demo where you had to find gemstones in a randomly generated cave. To this day I’m not sure what I’m more amazed by, either the fact that I was able to get it all done despite the thesis document getting corrupted, almost losing everything, and my computer exploding thanks to a faulty power supply (and accidentally damaging the hard drive twice when trying to fix my computer), or that I was able to get a first-class degree at the end of it all.

After I graduated, I was looking for work. I did get more rejections than I did when applying for an industrial placement, but I was given an offer to work for a company that made games in C++ using computer graphics on dedicated video betting hardware. I started working there in August 2015 and I’m still working there four and a half years on.

Gemstone Keeper

Going back to that little demo, I decided to look into it a bit more after graduation and kept working on it even after starting a new job. It was much different from what Gemstone Keeper ended up being, the exploration was much a part of it (because I wanted to demonstrate the level generation) but because I’m a fan of arcade shmups, the gameplay in that demo was much more rigid and focused on getting a high score than traversing caverns, collecting gemstones and finding the exit.

After I finished my thesis, I was getting more interested in roguelike games, where there is more of an emphasis on preserving your character and planning your route, as opposed to the games I typically play where you go straight in, guns blazing. As I got more into them, the more I felt I should focus on the exploration and the relaxed vibe, and was part of the reason why the game has its ASCII aesthetic. I’ve always had this concept of an arcade shmup combined with RPG elements in my mind, but I couldn’t get an idea for it to fit. Next thing I know, I play a few traditional roguelikes like Angband and DoomRL and suddenly, an idea just clicked.

There was a lot of experimentation and trial-and-error to get the ASCII art to look right, although I did anticipate that early on because I always like to develop a game where there was a considerable challenge that was a part of it. All the ASCII art is generated in-game using a single font file: the design of sprites, objects and walls were planned out and then I wrote out which characters should be rendered and where individually. Unfortunately with the nature of fonts, you cannot guarantee that the individual characters would be rendered in the right place, so eventually, I wrote out a function to print out all the generated textures so I could properly inspect them and make necessary adjustments.

Moving from the demo’s original framework of Allegro to SFML was a good move, in the long run, it’s a much nicer framework to work with. It also meant I had to structure the engine in order to get what I wanted. I take a lot of influence in my game engine architecture from Flixel (and it’s more modern equivalent HaxeFlixel) because I like how it’s built from simple pieces, where everything you see in the game is either a basic object, a physical object or a group like it’s purely the entity part of an entity-component system. Although I have tried to write a framework in the past with Ricoh2D, it was working on Gemstone Keeper and taking inspiration from HaxeFlixel that lead to Vigilante, my own game framework that I take pride in. I don’t believe creating your own engine yields an output superior to those who make games in a proprietary engine, but there is something I find satisfying in being able to control as much of your system as possible, to the point where you can find issues in the lower-level part and fix them as soon as possible.

I was worried through most of the Steam Greenlight experience since, despite the criticisms of the quality of most entries meaning the bar was pretty low, there was still that worry that not enough people would like the game enough for it to get through. Accepting an offer to be part of a Groupees bundle did help, even at the cost of the value of my game, as I feel that was mostly what got the game accepted onto the Steam store. It’s a shame that Steam has put less effort into quality control since dropping Greenlight for a direct fee. Despite a fairly rocky launch (I decided to launch the game a day before my birthday in 2017, whilst at Rezzed, and then ended up having to release several patches after I got back home because there were several bugs), I still feel like the game did really well. After all of my experience, I moderate my expectations, yet I was still chuffed to see statements saying how many copies were sold in the first few months.

I was aware of anticipated information on the upcoming generation of game consoles during University (PS4, Xbox One and Nintendo Switch), but it wasn’t until info came out about Nintendo Switch supporting OpenGL that I thought there was a possibility of bringing one of my own games to the console without the help of Unity or another game engine. It was about half a year after launch that I wrote a lengthy pitch about bringing over Gemstone Keeper for the Nintendo Switch, but I heard nothing. I did contemplate following up or trying again, as a few game developers I knew advised, but I wasn’t up for the possibility of radio silence. That was when I decided to do more game jams, particularly in 2018 where I did one game jam a month. Then in late 2018 I got an email from Nintendo asking if I still wanted to bring Gemstone Keeper to the Switch, I responded yes and so starting in 2019, I got my opportunity to develop games for a major games console.

Along with porting over SFML, I decided that the graphics need to be upgraded as the Switch was an HD console, so the game needed to be HD too. The game was originally built at half the 720p resolution, but upgrading involved more than just doubling the size of everything. All the positions, sizes, the movement calculations and other details had to be checked by hand, line by line. It was all worth it in the end.

I’ve gotten to show the efforts of the past year at two large game expos (the news of the latter blowing up on Reddit) and had my work written about in the game development magazine Wireframe.

What’s next?

The thing is, I’m honestly not sure. I said a few months earlier that I want to make my next game a Nintendo Switch exclusive, and I do have an idea or two, but even more than a month after accomplishing a goal that had been in my mind for 10 years, I’m struggling to find an answer to “What will I do now?” I’ll still maintain Gemstone Keeper as long as its necessary, and after only doing one Ludum Dare last year I want to get back into doing game jams, but right now I feel like I’ve just peaked a mountain. I think I’ll just find out where the wind will take me.

If there is anything that I want to show people from writing all this, is that getting to achieve your goals takes a lot of work. I’m as guilty as any other novice in his creative minefield in starting out expecting to make something much bigger than I was capable of. I needed good guidance, support and to take a lot of opportunities to get the experience I have today, and I’m nowhere near done. You might get lucky, but I wouldn’t rely on it. It might have taken 10 years for me to get a game onto a Nintendo console, but at least I have 10 years to look back on.

Time to see what the next 10 years will bring me.

Gemstone Keeper is out on the Nintendo Switch!

By the time you read this, Gemstone Keeper will be available for purchase on the Nintendo eShop in most of Europe, as well as Australia, New Zealand, Canada, Mexico and the United States!

Gemstone Keeper is an action twin-stick roguelike shooter where a brave explorer can traverse a large and mystical cavern to search for rare and precious gemstones. The deeper an explorer goes into the caverns, the more valuable gemstones that can be found, however at the risk of facing more of the dangerous and hostile creatures that live there, including creatures that are larger than life.

Armed only with a gun, explorers must break through rocks to collect minerals and gemstones and fight off the creatures, and find the portal that can help them go back up to sell what they collect or go further down.

Gemstone Keeper uses ASCII art in both a pure and diverse form, as almost every part of the game’s look come directly from text and symbols while very loose in form. The weapon and bullet system is fully interchangeable, over 150 gemstones to collect, several creatures and bosses, different game modes and a soundtrack that echoes through the open spaces in-between the rocky walls. Gemstone Keeper is the shooter that is both fun and eerie.

It is honestly just crazy for me to think that back when I started making games nearly 10 years ago, I wanted to make video games for one of the big consoles, and now I have achieved that goal! Any and all feedback will be great, and I’m just thankful for everyone who has helped in some way, from the SFML team for being helpful for technical issues I had, Vincent Rubinetti for coming on to produce the brilliant soundtrack, to Ironbell for reaching out to me with the idea of working together to bring SFML to the Nintendo Switch.

The EGX Report

It was more than a month ago that Gemstone Keeper was being shown to the public at a games festival. Last weekend it happened again, this time at the ExCel Centre in London. EGX is the largest video games expo in the UK, originally starting as Eurogamer Expo as part of the London Games Festival in 2008, eventually being hosted at Birmingham NEC after the closure of its main venue of Earl’s Court in 2015 until this year where it moved back to London, in a move that excited or angered gamers and game developers depending on what part of the country you were from.

As mentioned in my last post, Gemstone Keeper was part of the Tentacle Zone as one of its 18 games on show. This time they weren’t the only space dedicated to indie games, there was also Rezzed (EGX’s dedicated indie games zone), Tranzfuser (a talent development programme from the UK Games Talent and Finance CIC), the UK Games Fund and the Leftfield Collection (for the unconventional indie games, sponsored this year by Team17), not to mention all the game publishers such as Nintendo, Sony, Bethesda, 505 Games, AAA game devs like Rebellion and retailers, as well as the typical expo showing of cosplayers, dealers, charities. There was also a stage set for the UK Speedrunning community, doing live speedruns of games for Special Effect. All of this was in half of the entire exhibition centre, in the entire south area.

Continue reading