Experiments and Progress

My Learning adventure - Part two

A Search for Inspiration

After a couple months, I’ve returned to write part two! For anyone that might’ve noticed I hadn’t posted anything in a while, I’m sorry! The hectic nature of the holidays in combination with my job usually means that some of my projects take on lower places in my list of priorities, and lately thats included this website. With that said, its time for me talk about what I consider the next chapter of my journey towards becoming a mostly competent game dev.

When we left off in part one, I had shown off and talked about a few of the earliest examples of my attempts at making games. In my efforts to learn I always felt something I’ve struggled with is inspiration, and its been key in shaping the type of projects I like to work on. A lack of unique ideas, along with my want to make every element of my projects “make sense” meant that it was really hard for me to develop without running into mental blocks. This was bad for a lot of reasons as it was simply the wrong approach. Trying to design with strict logic and real world reasoning for every detail just doesn’t work, and was the sort of restrictions that only served to distance me from the ultimate goal of actually making something.

It took me a while to figure out that I just don’t have the time, patience, or specific kind of creativity required to write the stories, design the art, or layout the lore and reason of every last aspect of a game world all on my own. So what about game development had I even been enjoying? What made me keep trying things in the first place?

I feel that the solution to my dilemma was to realize that I'm more of an engineer than an artist.

Over the last couple years it’s become clear to me that what I really enjoy is problem solving, such as successfully implementing specific functionality, mechanics, or writing shaders and doing graphics programming. If someone asked I’d probably still say I’m a generalist programmer, though with that emphasis on technical work. 

I feel that this conclusion, while it does help me orient my goals, is in itself something that I hope to change at some point. I wish I was more artistic and could write, draw, and design at a level that I could have confidence in. Maybe that’s another journey to have and to talk about one day. All that said its time to get back on topic, so how did this manifest itself in my projects?

My next move was simply to just try and replicate things that exists in games that I liked and played. In hindsite, it was an obvious path to take. I especially like how it is stated on the 20 Games Challenge front page:

If you take a traditional art class, you might be asked to re-create a famous work. It might sound like a waste of time at first, but by copying a masterpiece, you will often gain a deeper understanding of the fundamentals than you could gain by just “winging it.”


So what did I make?

Well truth be told, one of my favorite games of all time is Donkey Kong Country for the Super Nintendo. Something worth noting is that Donkey Kong Country is, in my opinion, a game that is very design heavy. Its full of fun, captivating, but simple and challenging gameplay, so I think its fair to say that it holds up so well as a classic largely thanks to its beautiful soundtrack and amazing pre-rendered art style. What I’m slowly getting at here, is that trying to make an experience similar to Donkey Kong Country was definitely not a step in the right direction for me.

Anyhow, here’s me doing exactly that!

Rabbit Country

This project was one I spent a few months on before I accidently broke the USB flash drive the files were stored on. That was very frustrating at the time especially because I hadn’t learned proper source control and kept no backups.

Ultimately, the game was a rather uninteresting attempt at making a copy of Donkey Kong Country. Despite the want to make something that lives up to that classic game, this wasn’t that, so I’m glad I didn’t continue on this project. That said, I still learned and figured out a dialog system, textboxes, and level transitions.

I felt it worth mentioning that Yooka-Laylee and the Impossible Lair set the bar as high as it can go in terms of spiritual successors for DKC, and I highly recommend giving it a play.

Scrapped Game Concept

When I first lost the files for Rabbit Country I didn’t wanna give up on a DKC clone. Before I changed direction, I made this concept for what would’ve been another art-forward puzzle platformer.


Finding what I was looking for

This is roughly the point where most of the more impressive examples of my past projects come into play. As usual, none of these projects really got finished or turned into complete games, however everything from this point forward involved me learning my way around some of the more advanced concepts which I never would’ve imagined being able to understand when I started. 

Clash of Kaijus

This one is interesting, and I almost completely finished this game. For starters, this was a Clash of Clans fan game, though the concept of having a Kaiju join you in raids was inspired by the heroes in a similar title called Castle Clash. At the time I had picked up Clash of Clans and had been playing it a lot, and since its release I’ve had a few separate points in my life where I’ve fallen back into the game. Despite the money I’ve spent on the game, which is more than I’d like to admit, I’ve still never maxed out my base or got enough trophies to get past the crystal league due to losing interest from the exponential time requirements the game gives you. Regardless, I felt like making my own version, and I also happened to have been watching Naruto around the same time, so that’s probably why I went for the themes I chose and the ninja troops just look like they’re wearing Hidden Leaf Village colors.

Everything on the game area is actually placed using conventional 2D coordinates on a flat grid as if you were looking straight down at the map, but it was all rendered using a script that converted those coordinates to mimic an isometric-projection. This was sort of a round-about approach to avoid learning 3D which I didn’t know anything about at the time.

I also took this opportunity to learn about Game Maker’s Motion Planning functions which basically amounts to grid-based pathfinding known as the A* algorithm. This was a suitable solution for raids, and while I never got base defenses working, it was pretty satisfying to watch troops walk around and destroy an enemy base. Each individual troop ran its pathfinding twice, once with walls and once without, and from there they would weigh the cost of getting to its target building either by going around obstacles or by breaking the walls in their path. This was extremely inefficient and slow, so I wouldn’t recommend that approach.

Something notable was the button on the bottom right that would rotate the entire loaded village by 90 degrees around the center, including the troops. I felt that feature was convenient because of the fixed perspective and how some buildings were tall enough to occlude other buildings and troops behind them, but it caused all sorts of issues with pathfinding and things not moving where they were supposed to.

Another notable feature was the map. which had different raids with a scaling difficulty. There was also a working shop for buying buildings, and you could train troops which each had their own different cost to train and house. Lastly, there was my first successful implementation of a saving and loading system.

Some of the things I mentioned here aren’t in the video, but if I ever locate the project files I’ll include a better video.


Rift Haven

One of my favorite old projects of mine. Chronologically, it was one of the last things I made in GMS 1.4 before upgrading to GMS 2.0. The idea was that you we’re a drifter and you’d travel across space using rifts, which were basically worm-holes. Sometimes it’d be an alien planet or as shown here, a floating island. You’d then collect materials for crafting or selling and use those to get better tools and gear for a pretty standard survival experience. The threat would be the occasional swarm of aliens or all sorts of scary inhabitants. Terraria was the main inspiration for this project, though more than anything I just wanted to make real-time destructible terrain.

I gained a lot from this project, and I’ve considered returning to the concept on multiple occasions. Still, there was a ton of stuff I did that make it surprising this even worked at all. For starters this uses Game Makers Box-2D physics system for all the collision and water particles. For the terrain I had this gigantic array that stretched over the whole explorable area, and each frame I’d iterate over the part of the array that was visible on the screen. For each cell of the grid I’d read all eight surrounding cells, and I’d use that data to generate physics fixtures called edges along the exposed side of cells, again, only handling what was visible on screen. This approach meant that there was no off-screen collision, but at the time it was all I could come up with to make it run at a playable speed while being able to update the terrain as fast as I’d like.

The way the water and terrain was rendered was with what look like 2D SDF textures that when using alpha-thresholding resulted in them appearing to congeal and combine together, producing the smooth result as shown. To maybe help you understand this, imagine a box that is completely opaque in the center and becomes transparent towards its edges. If you took multiples of these boxes and stacked them on top of each other, the transparent edges would eventually add up to be visually opaque. This is what I mean when I refer to alpha-thresholding, and so I set a value to be compared with the combined opaqueness to determine if it was visible or not and the shader would draw it based on that. This blew my mind, and when I made the connection it inspired me to eventually further explore SDFs. I’ll be talking more about this technique in detail along with other related topics in part three.

The mini-map serves as a great example of me learning about surfaces and sprite-saving during run-time. I simply rendered the entire map to a surface and then saved it locally as a sprite for continued use. Unfortunately, the game took upwards of 2-5 minutes to compile depending on the terrain generation settings. The cave generation specifically was extremely unoptimized, and did all sorts of checks to avoid exposing open caves to the edges of the terrain, and even involved multiple passes to blend caves together and smooth them out.

For the water, it initially started off as me following a tutorial for “Setting up Liquid Fun Physics in Game Maker” by Nathan Auckett. The final implementation as shown in the video ended up being more based on a Game Maker Marketplace asset called True Water and Jellies by SmallBigSquare.

I also want to give a shout out Chris Bradel (ChrsCool8). While researching options for the terrain I stumbled upon his work and his old videos talking about a game he was working on called “Suh Burb”, and it was partly his videos that inspired me to keep trying to find a solution I liked. I believe it was specifically his video on Concave Physics Objects that I saw and was impressed by. He’s still uploading and making videos about his projects, and he’s currently working on a 3D title called “The Burbs”. I recommend giving him a subscribe and checking out his stuff.


Red Dragon Rush

At some point I watched a video or read an article somewhere talking about how mobile gaming had become the biggest sector of the gaming industry, so I made the decision to learn how to make mobile games, but I wanted to start out simple. This idea seemed pretty doable, though it never fully came together because of all of the different things I was trying instead of finishing it. It was a 2D runner game where you played as a chicken, and all you had to do was tap the right side of the screen to jump and avoid obstacles while occasionally tapping the left side of the screen to shoot an egg and keep the dragon from catching up and eating you. This had three specific inspirations, one being the Google Chrome Dino Game, the second being Dino Run by PixelJAM Games, and last but not least, Alto’s Adventure which I still play from time to time.

At the time I had just read the Pixel Logic Book by Michafrar, and watched some pixel art tutorials. I was also in the habit of just sitting down and passing the time by doing pixel art, so I ended up practicing pretty consistently. I’m not saying this art was particularly good, but it was better than what I had done before. I believe I was using the Pear36 Palette by PineTreePizza. Despite all the effort I was putting into improving my pixel art, I had a huge focus on making sure that everything looked good on any phone. This eventually led me trying to use a combination of vector art, vertex buffers, and pixel art which had an upscaled effect applied to it. Basically, I wanted everything to look smooth and crisp. When I dropped this project I was in the middle of reworking the art towards that goal, hence why one video has all the gameplay, and the other had a few graphical improvements but only shows the dragon. I had done that in a separate project file to be implemented later. Again to clarify, the dragon would usually appear behind the chicken on the left side of the screen, chasing and trying to eat you.

There was all sorts of problems I just couldn’t get past which led me to drop this project. For one, I just didn’t really understand how to handle resolution, aspect ratios, and just scaling in general. So despite my efforts converting a bunch of the pixel art to a high-res alternative, I could never be sure that it would look good on all devices. I had touch-controls, a solid menu design, and I recall playing around with an extension that let me trigger the vibration in a phone for haptic feedback. My favorite thing was the actually the menu for picking chickens with different designs that eventually players would’ve bought with coins.

Some of the stuff I was working on for the art was just way over complicated, but some of it was still pretty cool. The clouds for example are drawn using the alpha-thresholding technique I mentioned was in Rift Haven, but with a more specialized shader to achieve the shadows and outlines I wanted. The mountains in the game were actually a vertex buffer that was procedurally generated on each game start. I used a combination of sine waves for the height of the mountains and generated triangles using the points from that. I also used a linear interpolation of two colors based on the height of the mountain to set the vertex color. Fortunately, since mountains further away moved slower due to parallax, I could reuse the closest mountain range for the further ones, sliding them along in some direction, and flipping the middle one horizontally. Also the hills visible in the dragon video were generated using the same process with a simpler sine wave, dotted with some trees made of triangles.

Not sure why the concept art has a kangaroo, kind of ominous. That game over screen would’ve been cool though!


Notable Mentions

Beyond what I’ve already covered there are a handful of smaller projects which I spent maybe a few weeks to a month on.

Inspired by Finn Morgan of Snake Hill Games. Specifically, his work on his game Sun Shy. I followed both his blog post about Animating on Uneven Surfaces and also his video talk Bipedal Animation on Uneven Surfaces. I also learned a bit about inverse-kinematics which handles the position of the knee. The idea was mainly to simulate where the player character would go based on their current velocity, then use that data to determine the optimal target position of footsteps, similarly to what people subconciously do in real life. Definitely check out his stuff, as my attempt didn’t come even remotely close.

Something else I’ll talk about in part three is my dream project which is a Digimon inspired virtual-pet game. A necessary step towards that goal was learning 3D, and this is where I started. Once I figured out the setup and how to manipulate the camera, I made a few scripts for generating some basic geometry. After that I played around with manipulating vertex buffers so I could do procedural animation and I made this little colorful creature that walks around.

I wanted to learn more about loading in models and using shaders. I tried here to make a custom solution for 3D skeletal animation. Firstly, I generated a skeleton from a list of points, and made a script that looped over every vertex and determined which bone was closest, and I stored that bone’s ID in the buffer to be used by the vertex shader. Traditionally, that is done while making the model, for example in Blender. My main challenge was that I didn’t really understand quaternions, so I faced an issue called gimble lock when trying to define rotations using only three values, hence the visual oddities.

With the goal of a Digimon inspired virtual-pet game I had thought up a concept for the graphical layout of the project. Since then the overall scope and planned aesthetic has changed, but the heart of it was still here. I love the interactive and over-animated buttons (made using Clean Shapes by Juju Adams), though I feel these details would be lost on a phone where your finger would cover the buttons. I also learned how to use a wonderful 3D collision system called ColMesh by TheSnidr. I even played more with 3D modeling and shaders, and yes I know that is basically a yellow version of Biyomon.


Conclusion

I’ve definitely covered a lot here today, but for me this paints a picture of how learning game development can be a very slow process. I’ve been spending years just learning and experimenting to be able to make something I’m genuinely proud to show off. While studying fundamentals are important, having a personal goal or focus can be all the motivation you need to keep going. Changing my mindset about what I work on, and focusing on the aspects I want to explore is what kept things fun. I would say that it may be more beneficial long-term to actually release smaller projects as you go, which is largely what others will say and swear by. Regardless, as I’ve documented here, it is possible to take a different approach as long as it works for you.

In part three I’ll be talking about actually finishing projects, as well as the most current things I’ve been learning and working on. This was a long one, so if you took the time to read, I really appreciate it. 

Next
Next

New Profile Picture