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!
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.
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.