Looking Back On 'A Game in 2020'

At the beginning of last year, I told myself that 2020 was going to be the year I finally released a game. I’ve only ever released a simple mobile game before, and outside of that, I’ve only ever “finished” jam games. Now that we’re in 2021, I can safely say that the efforts I collectively referred to as “A Game in 2020” were a failure.

My friends are very supportive.

What I Wanted To Make

I didn’t enter 2020 with a plan, and ended up exploring a few ideas in January. By the end of the month though, I was absolutely certain that I wanted to make some sort of seafaring strategy game, and so I got to planning.

The game was going to played top-down, and the player would make their own way, sailing the open seas of a fictional world. They could become a pirate, or a privateer, or remain a simple trader. Minute-to-minute gameplay was going to be real-time, and when the player entered combat, it would shift to a turn-based battle on a hex grid.

I was hoping to make something with minimal models and a heavy focus on the systems. I’m not a great 3D modeler now, and I absolutely wasn’t then.

Of course, that game never came to be. Through a few rounds of scoping down the game or executing a complete pivot, I ended the year with a handful of seemingly disjointed pieces.

What I Actually Made

I was trying to decide how I should group everything I ended up making, and I think the best way to approach this is month by month, because it changed about that frequently. On top of that, I’ll have somewhere to put the things that don’t really fit anywhere else.

January

January was a time of exploration, bouncing through a few different things looking for “the one”.

Desert Fish Ripples. I couldn’t find an image for it, but the first thing I made was a system for placing ripple sources of various strength and frequency onto arbitrary surfaces. This was just a simple effect done through a vertex shader. I had been thinking of a game where you’re fishing for creatures in the desert and these tremors would help you find them.

Inventory System. The inventory screen wasn’t one of my game ideas, but I had briefly thought about making an RPG and sat down to make this early in the month.

Wow, look at all of my things.

I ended up with this system for items of any size on a given grid. It allows for moving items around, providing there’s room to shift the pieces (you can’t just pick up an item and move it over others though).

Seafaring Strategy. After those, I jumped into the nautical game that would become my first “major” project.

I created a hex grid, a ship (made in Kenney’s Asset Forge, an amazing tool), and some nice looking water. Getting the clicks to register on the world space hexes ended up being a way bigger pain point than it needed to be.

BIRDS

This bird was the first model I made in Blender during the year. It took me ages to make something so simple, but I was really happy with how it turned out.

One of many water styles I tried.

A lot of my initial work on the nautical game was just messing around with water. In hindsight, it was a major waste of time. I really should have been focusing on systems. This focus on style over substance ended up becoming a major theme of the year.

February

February was entirely dedicated to the seafaring game. I had locked it in, and I was absolutely sure that that was going to be the one. I ended up making a few bits and pieces for the game, some of which were arguably unnecessary.

Island Generation. The world of the game wasn’t going to be based off any real location, and so I decided it would be best to just generate random islands to scatter around the world.

Oh, the places you'll go.

Metaballs made up the base of the island generator. I made a few tweaks to increase falloff the further a point was from the center, and to make some islands generate smaller islands near them. It went through a few more iterations after this GIF, but in the end, I was happy with what I had.

Dynamic Hex Grid. I wanted the combat of the game to take place on a hex grid. On top of that, I wanted players to be able to enter combat at any time, even near an island. So I needed a system to ensure they couldn’t move onto hexes that would put them in the island.

The result was a grid manager that could detect landmasses before placing a hex. It was quite generous with its spacing, as there were definitely spots you could fit another hex, but overall it worked well.

Wacky Ship Movement. For a while when I was working on ship movement outside of combat, I could not get my ship to stop spinning like a top. I can’t remember what the issue ended up being, but I had a couple days of fun movement.

Captain, I'm gonna be sick.

Obviously this wasn’t an intentional bit of work, but when I saw it while browsing my recordings, I definitely wanted to include it.

Real-time Combat. Part-way through the month, I decided turn-based combat on a grid was no longer the way to go. This was the first of another common theme of the year: talking myself out of an idea without actually testing it in play.

I ended up creating broadside attacks, and then eventually a shot targeted with the mouse. At this point, I was going to make a bunch of varied ship abilities.

The Desert. That never happened though, and instead I hit my first pivot. I decided it would be way cooler, and way more unique, to create a game where you sailed a ship through the desert. So I abandoned all of the work I had done on the water and the island generators in the previous two months.

Spoiler: I'm going to get lost in here.

March

Desert Sailing. Sailing on sand dunes is a lot different than sailing on water, so I needed to write a new controller for the ship.

The first iteration jerked around a lot, but the ship was able to sail over dunes and stick to them appropriately.

Chalk Shader. I can’t remember what inspired me to do this, but at some point I decided to make an image effect shader that would render the screen like it was being drawn on a chalkboard.

Rudy's Got the Chalk

After a day of messing around with edge detection and tweaking the static textures, I ended up with something really neat. The shader worked almost exactly like an edge detection image effect, and had variable line width. It would sample the color near the edges so it knew what color to use, and then sampled a grainy texture based on screen position, throwing away whatever was actually in the scene.

Targeting Camera. With a change in scenery came a change in how it was viewed. I decided I wanted the player to see the rolling dunes, and so they needed a new way to target enemies as well.

The new camera used Cinemachine to keep both the player and their target in frame at all times, which I thought made for a cool look, even if it whipped around a bit much at times.

I don’t have very many pictures from the tail end of March, but I know most of it was spent tweaking the desert generation. I could never find something that I was completely happy with. Again, wasting a great deal of time on small minutiae that ended up being scraped anyways.

April

The Hovercraft. At the beginning of April, I started to unabashedly copy the look of Sable. Poorly, of course.

I got rid of the boat and modeled the first of many hovering vehicles, starting with one with a hidden protagonist inside. With that, I made some random props for the desert, and made another edge detection shader based off what I’d learned with the chalk shader.

Ship Trails. Every once in a while there would be days where I was convinced that I needed to make the art style far more zany in order to stick out, and started to try a lot of weird things.

This thing's slower than it looks.

I attempted to make a different kind of ship emission, an abstract view of kicking up a trail along the desert. This was done by just spawning flat triangles behind the ship at regular intervals, and then those triangles would grow, shrink, and disappear.

Desert Roads. I wanted a better way of travelling through the desert, over going up and down the dunes, so I decided that surely these lands would have well-traveled roads.

I wrote an addition to the desert generator that would take the final map and flatten some of it along a random Bezier curve. Then, at regular distance intervals along the curve, it would place posts to each side.

Even More Wacky Movement. Even in the desert, I wasn’t free of odd vehicle movement. Some things never change.

In trying to create a physics-based movement controller, I ended up with two separate issues. I can’t remember what was behind the return of a spinning ship, but the constant bouncing was mostly from not having enough force pushing away from the ground.

ROCKS. With only some statues and crystals to scatter through the desert, I made more models to add some variety instead of making systems to engage with.

I made everything from little rocks to rock stacks to giant rock structures. While rocks turned out to be really simple to make, I was still really proud of being able to turn out something with some intention behind it. With all of the varied models, I added in a script that used Poisson disc sampling in order to place them somewhat uniformly throughout the desert.

May

Desert Generator. I continued to spend a lot of time tweaking the desert generation. It would end up being a huge time sink for not much gained over the entirety of the year.

This baby can generate so much empty land.

On top of changing the generator every day, I also would change the generator interface just as much.

Hoverbike. Along with changing the generators, my other form of productive procrastination was making new vehicles for the player. Eventually, I decided to go from a ship to a hoverbike.

This was by far my best model in all of 2020, and is based entirely off this artwork from Darren Bartley.

June

Desert Train. Spawning from even more procrastination time spent modeling, I decided that the player’s central hub would be a train that traveled from cell to cell in the desert. They’d be able to come back to rest and recuperate, and improve themselves for the future.

I created a model for the engine and the car, and reused the desert road system to create a path for it.

Prism Distortion Shader. There’s a theme of spending time on things that have nothing to do with the game, and a subtheme in there for playing around with random shaders. All I remember when I created this shader was drawing some triangles in my notepad, imagining a high contrast transition screen.

The shader just samples the scene behind it at variable offsets, and the script controlling the image effect will change the speed and distance over time. You can check out the shader here and the C# class here.

Better Dunes. If you thought I was done changing the desert generation, you’ve got another thing coming.

One of the last changes I made before ultimately leaving the desert behind forever was to give the dunes a more defined crest. I was convinced that this was absolutely necessary, of course.

ScrubBot. And now, something that has nothing to do with ‘A Game In 2020’. However, it was a major factor in the downward spiral leading to me stopping all work on the game. ScrubBot was a bot I created to serve a very specific need for my friend’s Discord server.

ScrubBot lets you set up events to play games with your friends. You can read more about it in a much shorter post here.

July

Wrangled. Though I’d stopped working on ‘A Game In 2020’, I wasn’t done making games. My friend and I have talked before about working together on a jam, and decided to finally do it for GMTK 2020.

We created Wrangled, a game where you control a rickety tractor and try to collect your wayward chonkers. In the game, the controls are based off of the balance mechanic you can find in the Tony Hawk games. I mostly did modeling on this game, which was a big change for me coming from solo jam runs, but it was welcome as I’d been on a modeling kick for most of the year.

August and Beyond

The Glider Pivot. After over a month away from the project, and less than half a year to go, I decided to do the least sensible thing possible, and pivot again. I was convinced that my problem was just making a game with an appropriately scoped feature set. So I set out to make a game that still took place in the desert, but instead you’d control a glider, and fly between the desert cells from before.

My first attempt at the movement controller for the glider. I spent an incredible amount of time reading about glider physics in order to make it as accurate as possible which was, of course, not at all necessary.

Starlight Brigade. Around this time, I discovered TWRP, and started to listen to them a lot. I watched the Starlight Brigade music video at least once a day, and decided I really wanted to recreate the big enemy craft from that.

STARLIGHT WITHIN WILL GUIDE US TO THE OTHER SIDE.

The model here is, of course, quite simple. The shader is just a basic stencil shader, with only a particle system being rendered inside.

Disco Room. The final thing I made in 2020 was another failed jam game, this time for the Disc Room Game Jam. The idea was simple, some uncool dudes are crashing your party, and you’ve got to take them out by tossing vinyl at them. However, I think at this point, I had nearly zero drive to make games, and so it was never finished.

These two dudes, and a disco floor I could write light sequences for, were all that I ended up with before dropping it.

Moving Forward

The new year is always supposed to be this symbolic marker for a fresh start, and I think if there’s anything I need to freshen up this year, it’s how I treat myself and my work. A lot of my running around in circles over ideas and the eventual downward spiral came from a hearty helping of self-doubt.

Writing this post and looking back on the year, I still managed to make a lot, my modeling skills have improved, and I’ve learned plenty.

So what’s really going to change about this year?

I’ve thought of some new ways to organize my work that may or may not work, but are still worth a shot. I want to try embracing bouncing between projects and hobbies instead of beating myself up and forcing myself to work on one thing every single day.

I also want to make sure that nothing from the last year goes to waste. I’ve started going through the old work and collecting everything useful into unitypackage files (arguably something I should have been doing the entirety of my time making games) so that I can easily pull them into future projects. This is going to include both of my landmass generators, the hex grid work, the inventory system, movement controllers, and more.

Most importantly, I’m not going to put such heavy expectations on myself. I want to finish and release a game, there is no question there, but the closer I got to the end of the year and the more I realized I wouldn’t complete my goal, the more dismayed I became, and the harder it was to keep myself working. The game will come in time, no need to stuff it into a year.

So all in all, I failed, but I came out of 2020 a stronger developer. Thanks for reading, and here’s to 2021.