Switching to a new Tech Stack

Intro

A couple of months ago, an itch started to present itself to me, that needed scratching. After a bit over two years now of game development as a hobby and a lot of learning, I felt like I was getting too comfortable with the tools and tech I was using.

Back when I got into developing games, I was a mediocre Python programmer and thus my search for suitable tech to get into, was pretty much limited to that programming language. So I chose tools that allowed me to make use of what I already knew, to get me started fast.

I quickly managed to get my first couple of triangles on screen and made a lot of progress in very short time, diving into the Panda3D framework/engine. After some experiments in planet generation, I entered my first GameJam in December 2018 and managed to submit an entry by the deadline. It felt good to have a sort of working game and I learned a lot in the process.

All models and artwork are a result of procedural generation, there's only one ready made texture in the entire game.

The first venture outside the comfort zone

Since much of my motivation to get into game development came by discovering the existence of procedural generation, I quickly realized, that while Python may be fast enough to do certain/most things (keep in mind that Panda3D is written in C++ and Python is mainly used as the scripting language!), there are computationally heavy things, for which I would need to use languages that are closer to the metal and better suited for such tasks.

Thus began my first venture outside my comfort zone, learning C++. I had a year of C++ at school, back in the year 2000, but I really wouldn’t call that actually learning the language, let alone learning the modern parts of it, that came many years later. So I dove into it, with a little bit of a head start and made very good progress.

I was quickly fascinated with the performance boost I got, even though looking back, my code was far from optimal. I obviously knew that C++ was going to be faster than Python, but it still propelled me forwards and gave me a lot of motivation to create tools of my own.

At around the same time, I also tried my hand at shader programming using GLSL, which is it’s own kind of fun and challenge, but I didn’t focus on that as much as I did with learning C++. 

Going from 3D to 2D

After spending a lot of time learning C++ and utilizing it in experiments and projects, I wanted to apply my new found knowledge with something, that would hopefully give me much faster results.

At around that time, my girlfriend was playing a free to play Solitaire a lot on her smartphone, riddled with adverts that couldn’t be skipped over. So I got the idea of creating my own Solitaire app as sort of a virtual present to my girlfriend.

I set out to do some research, on how I could get an app, written in Python onto a smartphone. I didn’t want to learn yet another couple of languages, so I figured that there’s already some crazy enough people out there, that have created something that would fit my needs, or at least could be bent into shape that it eventually would.

Successful in my search, I set out to create a small prototype and after a couple of weeks, I had my first working version of Solitaire. Initially, it was all Python and ran on Android, using python-for-android for creating an APK and SDL2 for the 2D rendering.

After that initial prototype, I set out to write my first engine and use my new found C++ skills to speed up certain parts of the game. I named the engine “foolysh“, since creating an engine (almost) from scratch, when there are countless existing ones out there, is sort of a foolish, albeit addictive endeavor.

Fast forward a couple of months, my Solitaire went from a simple prototype to an almost complete game, including online multiplayer, daily challenges, comprehensive statistics. I write almost since there’s neither a tutorial nor in app help present at this time and thus remains unpublished in the store, only available to my internal test track (which you can join, if you’d like and have an Android device. See About Me to get in contact with me).

Flip the table upside down

Since most of my friends and family own Apple devices, my tech stack started to become more and more of a burden and I couldn’t show off my work to them. There is an equivalent to python-for-android for iOS called kivy-ios, but I didn’t want to go down that road, never knowing if or when the next erratic step from Apple regarding their policies for the App Store would come, that could technically void my hard work in a blink of an eye. A thing I’m much less worried from Google.

So I figured, it was time to have a look around, what else was out there, waiting for me to be discovered. I didn’t look at Unity, because my principal development environment is GNU/Linux and throwing proprietary software in the mix just feels wrong to me. Unreal (which is source available) I didn’t consider for it similarly being focused on development on Windows and Godot (that actually is completely open source with a very permissive license) didn’t make the cut, since at the time I was looking at it, it didn’t bring a Metal backend. Given Apple having deprecated OpenGL a while ago, I just did not think it to be wise, to go with an OpenGL backend and hope it will work long term, other than the regular, Apple only, OpenGL related bugs, appearing in the issue trackers of several frameworks and engines.

I figured, my main selection criteria thus should be easy deployment to both the App Store and the Play Store. After digging through a bunch of frameworks/engines out there, I ultimately found Kha, which I instantly fell in love with!

Kha - A parrot that enjoys dishes containing pigs feet

I knew Kha existed long before I started the search for a new tech stack, but at the time, I didn’t had the confidence I have now, to simply dive into yet another language to learn, another API to get accustomed to and so on.

The saying that gets thrown around a lot “The more you learn, the less you know” and feels very fitting for what I experienced on the way to now and here. Obviously when you learn something new, you know more than you did before, but simultaneously the amount of possible attainable knowledge increases exponentially with every new discovery you make.

So making use of my growing confidence, I happily accepted the challenge of learning the Haxe programming language, getting comfortable with the Kha framework and started to write the tools I would need, to create my first game using Kha.

The more time I spent, the more I learned and, much to my surprise, the more I laughed. The creator of Kha, Robert Konrad, might be one of the funniest guys I’ve ever encountered in the world of tech chats. Next to his dry and sometimes sarcastic sense of humor, he brings a “can do” and “no nonsense, unless it’s the entertaining sort of nonsense” attitude to the table, that really appeals to me.

And I don’t seem to be the only one, given the interesting and hilarious folks hanging around the #Kha IRC channel and on the other side of the bridge in the Haxe Discord servers #Kha channel. Kha appears to attract a colorful subset of geeks, nerds, artists and professionals alike, where I instantly felt welcomed, professionally helped when in need and just enjoy to spend time in regularly. For everyone that hasn’t spent a lot of time in tech and development focused chat/discussion platforms on the internet, believe me when I say that it’s most of the time groups of pseudo elitist personalities, that enjoy making fun of your lack of knowledge and usually turn out to be the opposite of helpful, if you’re not already equipped with all the knowledge there is to the discussed topic at hand…

I definitely feel like I’m in the right place and am looking forward to share the work I’m currently doing with Kha and Haxe with you soon.

Leave a Reply