Posted April 21, 2021 by PVDev
#framework #libgdx #2D #isometric #rpg
Hello there and welcome to Project Visionaries' first dev-log entry. For the first 6 months of development, I decided not to publish anything in the open and instead, posted regular updates privately on a friends-and-family Discord server. Today, I'm making the decision to publish all of these entries dating as back to November 2020 - as they were originally written - and to keep posting similar entries right here on itch in the future. By doing so, I intend to share with the world the tribulations of an ambitious, first-time game developer, with the hope that this content may be of use to anyone out there and to engage in interesting discussions with game dev peers. As an exception and for clarity's sake, I am prefacing this first log entry with a couple of (italic-styled) paragraphs providing more context about the project and the people behind it.
I've worked about 12 years in the IT industry, mostly on large distributed applications and often on topics and issues relating to performance (in particular, Java). My experience includes various approaches to testing, profiling, diagnosing and hacking live systems to make them work smoothly. Out of necessity, I started building my own tools and bootstrapped a successful business with the purpose of selling enterprise-grade versions of these tools. However, I eventually grew tired of dealing with corporations and decided to exit that space. After getting hooked again playing an online Diablo mod for a while and taking notice of the state of ARPG's and MMO-RPGS (as of Fall 2020), I figured it could be interesting to try to bring something different and fresh to the table without touching the parts that did work in D2 and that so many people love to this day and can't find in other games. So I convinced my wife to pick up Blender and Photoshop to help me in the graphics department, and off we went.
After deciding to embark on this adventure, the first decision I had to make was to pick a game engine or at least a game framework so I could build a prototype and see how far I could take it in a few weeks. I spent a couple of weeks researching existing frameworks and giving engines like Unity a shot. A number of criteria needed to be taken into consideration and there were no obvious choices for me as choosing a game engine (or any framework or library for ANY project, as far as I'm concerned) is not, or at least not just about what's currently popular, or as easy as just picking a technology that relies on a language or runtime I'm already familiar with. One of the things I cared about most, initially, was finding something that would play nice in the context of developing a an isometric mmorpg
So I did give the big dogs a shot. I first looked at some footage of people working with Unreal, I installed Unity and played with it for a few hours and I looked at the licensing terms, scripting languages, etc. I basically evaluated them quickly and decided that the "studio" approach was not right for me. My biggest concerns were related to the way a scene is designed in these studios. For example, Unity either supports 2D scenes or 3D scenes. None of the base examples showcased isometric (aka 2.5D) minigame projects. Then I stumbled on articles like this https://connect.unity.com/p/articles-what-i-learned-from-trying-to-make-an-isometric-game-in-unityGames in which someone explains how they managed to build their isometric game as a 3D project, and I decided I hated the workflow. Not only does it feel awkward to be designing a scene while having to keep the camera angle in mind constantly but how was all this going to end up looking like in code when I would start implementing procedural generation of my environment? My intuition was that the answer would be: horrible. At about this moment, I realized that it was likely that I would end up drawing the same conclusions in many other areas and that the editor-oriented approach was just altogether bad for me, as I'm coming in with a developer mentality and don't feel like having a UI as a big part of my workflow. At the end of the day, games are code + assets. As far as I'm concerned, code needs to be treated as code, and I wanted to work with a tool chain that would reflect that.
Having barred Unreal and Unity as potential candidates, I started looking around for headless engines or game dev frameworks. I found various open source engines (like Wuerfel, unfortunately unmaintained and widely used) and frameworks, mostly C++ ones though, for isometric game development. I eventually found libgdx which sounded great for me as it would make on-boarding a ton easier, if not trivial, seeing that I had 10+ years of various experience in and around Java. So I went through the "simple game" tutorial (https://github.com/libgdx/libgdx/wiki/A-simple-game) and absolutely fell in love with the experience and the workflow (no big surprise there)
As a second step, I learned how to use the Tiled editor through this video https://www.youtube.com/watch?v=pVBlwO4wM_w&ab_channel=Gamefromscratch and I was able to load my map into the game in a matter of a couple of hours. Although I did still find out about other interesting frameworks and engines later on (such as Godot), at this point I pretty much new "she was the one" and never looked back since.
By the way, for those who are interested in trying to use libgdx for isometric purposes, what you need there is A) the TMXMapLoader for loading your isometric map (it works exactly the same if you're using classic 2D / orthogonal maps though), and B) the IsometricTiledMapRenderer to get a jump and start rendering a basic map with a couple of layers (drawing sprites in the right layer and in the right order is a different story though). At this point I wasn't all-in on this project just yet though, I was making good progress but I still didn't know exactly what all the modules were which are required for a full blown game, I have a much, much better idea now that I'm pretty much done with the prototype and am getting into full-time development. So I was still just toying around with my little basic java project here and there for a few weeks. It's not until the end of October that I actually sat down and started working seriously on the project. My first commit on the prototype repository is dated October 25th