Categories
Journal Uncategorized

Post-Mortem: The Pineapple Platformer – Part 1

I think its kind of funny to see written out but I’ve been really looking forward to the doing a post-mortem analysis. First and foremost because you can’t really do one until you finish something and that means that I’ve managed to accomplish something I set out to do – make a game. Just because it’s a crappy little platformer with half-realized ideas that was more of an amalgamation of tutorial series’ regurgitated than it was an actual creative expression doesn’t preclude me from taking pride in the accomplishment that I had made something. Secondly, but no less important, it affords me the opportunity to reflect honestly on what I did and to learn. This whole exercise is about learning – bettering myself and my skills – and taking small steps to get me to where I ultimately want to be as a person with a wanton desire for a creative outlet. I’m not there yet but I am closer and that leaves me hopeful and enthusiastic.

Presumptions and Folly

I’m going to front-load with what I got wrong. I am my most vocal critic. In the face of compliments and praise I scoff and doubt sanity with reckless abandon. It’s easy for me to criticize myself first before I am able to compliment. I am not unique in this and in my opinion you learn from criticism what you can’t from praise – what and where your deficits are.

1. I’m a programmer now so cut to the chase

I assumed that because the last time that I had properly laid finger to key in the crafting of playable experience had been before I had undergone the tempering that is the daily life of a professional software engineer that the most menial of game development tasks would be quickly dispatched with my newly acquired sword of expertise in the practice. Too soon had I forgotten that, though the syntax is similar, the path from question to answer trails between the spires of unfamiliarity. To dispense with the drama a bit: though the fundamentals are transferable, you can’t circumvent learning the nuances of the platform or framework.

For context, when I created my first game I had not had any exposure to C#. At that time I naively thought that “Well I know some JavaScript and PHP so I mean…this can’t be hard at all”. (For the record I probably didn’t think that in the appropriate casing at the time). I had managed to create a playable product by Frankenstein-ing StackOverflow and Unity Forum posts together into something that stopped crashing. I’ve glanced through that code-mess recently, everything is public, static, and void.

My experience did help me address bugs more efficiently. THAT is a transferrable skill and it’s a skill that can really only be honed over time…by producing a lot of bugs that you have to fix.

In the end, I found that I had to start from square one just like every other person who fancies themselves an indie game developer – find someone who has done what you wanted to do already, take their code/advice, tweak to suit your needs. You aren’t going to come up with a better feeling jump than Nintendo because you had your coffee early today. Start at Nintendo and explore out from there.

2. Platformers are easy

I’ve stated it previously: I am not a fan of platformers. Not in that I actively dislike them, it’s more that I don’t prefer or pay attention to them. I was inherently dismissive of them mechanically as one is when they don’t understand the appeal. Seriously, just ask an older person what they think of Twitch.

Some people look at a game and see “Press A to jump” and think they understand what that means: If I press <input> then apply static force or movement to self. And sure, it can be that simple in any other genre. In a platformer, “jump” is a much broader topic of consideration. In a platformer something as simple sounding as a jump has a multitude of things to consider:

  • Was it a press or a hold?
  • How long was the hold?
  • Are we even going to give them more ‘jump’ on a hold?
  • What’s the maximum achievable height? Minimum?
  • Is the jump height sufficient enough to reach all platforms?
  • How many times can you jump within a given time frame?
  • Can you jump while jumping? How many times?
  • Physics based jump or calculated range?

Even after all of that you have to start plugging in numbers and then test over and over and over for the most important part of a jump: the feel. I’ve found that most movement mechanics – most prominently detectible with the jump – is that there is a lot of tuning required in finding the right values to use in getting the action to feel intuitive. Your player needs to trust the representation of the input and not fight against its shortcomings. Every platformer enthusiast that I know will speak to the feel of movement mechanics as a first point of appraisal when discussing a game. And they should, in a platformer the movement is the game.

Platformers are easy. Good platformers take effort.

3. Procedural generation is just code that does the redundant work for you

Procedural generation systems have a scale. I went to two extremes over the course of the development of this game: do everything in code and add small bits in code to add variability. I settled on the latter because I had realized that I hadn’t realized what I had committed to. I had eluded to this previously but essentially I decided that I was going to completely generate my levels from code. I had looked at the prefab system in Unity as a crutch for lesser developers to lean upon. What a completely ignorant mindset to have when looking at an invaluable tool.

In the medium of traditional applications development I would not dare turn my nose at leveraging a reputable framework to get to a working solution. On the contrary, I celebrate the discovery of such useful tools and am eager to share my findings with my peers and encourage them to do the same. Why retread a worn path? I understand if your aim is to discover a greater understanding of the core components utilized to achieve this wizardry but c’mon… where you end up when you turn the corner, at least in the C# world, is the .NET FRAMEWORK!!! It’s another layer! How deep do you need to go and to what end? Given enough time, I feel that I would be compelled to learn Assembly but is it essential to what my ultimate goal is? It isn’t. Is it helpful to have appropriate context? Absolutely but there are diminishing returns to consider. I didn’t need to reinvent the wheel, what I needed was to utilize my available tools as best to suit my immediate needs.

That being said I have aspirations to delve deeper into my understanding of C++ but I am well aware of what motivates those aspirations: I, like many developers, have an innate desire to acquire new skills and a broader understanding of the tools and resources that we use to enable ourselves to have the opportunity to explore the less-travelled paths of the artform. Programming can be an art and many of us want to find a new brush or color with which to paint.

I didn’t need to construct an elaborate algorithm that produces level configurations that I and a four-year-old (now five-year-old…wow) were going to play. I needed to dip my toes in that pool so I could gain an appreciation and better understanding of that craft but, ultimately, I needed to make a thing that fulfilled my requirements: make playable levels and change it up a bit. I did that. I want to go further the next opportunity that I have but I need to be aware of my constraints in that I am an individual and there is a lot of work and consideration that goes into doing it effectively.

To be continued

I recently looked at my first post and saw that I had committed to two posts per month as if that were a low bar to set. Life happens. I enjoy writing and sharing my thoughts with no one in particular but the hard part really is finding the time in the right mindset, sitting down and starting. I want to get more consistent but I will celebrate each step along the way. Progress is a series of small steps in a consistent direction that are able to overcome unforeseen obstacle and setback. The bourbon is kicking in, my backspace button is warm to the touch so I feel it’s time to call it a night. I think next time I will try to get a little more technical but we will see where my meandering muse migrates.