As is typical for me, starting out with a new blog and new intentions to maintain said blog haven’t gone as well as I’d hoped. Though I’m making some inroads by actually attempting to actively Tweet, I haven’t felt too compelled to write much at length, mostly due to how crazy the year has been already with regards to my health, work, and personal life. However, today I found myself actually making time to work on some creative projects and ended up musing on my development efforts in 2012, which while not producing anything that I’d want to show, gave me a lot of experience and perspective.
I started last year full of fire to finally become a Real Life Game Developer, after spending a good portion of 2011 designing some game concepts that are still quite dear to me. There were two big concepts that emerged: “far” and “e.g.o.” I don’t care to go much into the details of either at this point, but at a high level they’re designed in the vein of SNES-era Squaresoft RPGs, with my own stories, characters, and (hopefully) interesting twists on the gameplay. From October to December 2011, I worked a lot with e.g.o. on paper, fleshing out world design, character bios, story flow, and some high-level technical design. In January 2012, around the same time that I revived expectnomore.net on a shared VPS (which, as it turned out, I really did not need), I started to work on implementing e.g.o. in earnest by coding an RPG framework. The idea was to target multiple platforms with a big emphasis on both PC and mobile, which I still maintain was a good approach, but I was somewhat misguided at the time.
I started off using Marmalade, which turned out to be a very powerful and robust abstraction layer for targeting multiple environments. Since my daytime gig involves development on a large C++ framework, I was excited and intrigued at the idea of making my own in my spare time. I worked a lot on design and getting back up to speed with OpenGL concepts, but what I found out after about three months (on-again-off-again) was just how much work it takes to make a framework in your spare time, particularly for a relatively inexperienced developer. It’s not that I don’t think I could do it, but I recognized that it would take me a pretty damn long time to even get to the point that I was prototyping gameplay; a framework just requires so much boilerplate implementation. I started to realize that I was getting a little out of my element. It’s certainly a challenge I’d like to take on again in my career; no doubt, designing big things is a fascinating problem to tackle. But I realized that I cared a lot more about getting my ideas implemented than solving all the problems inherent in making a generalized RPG framework. I started looking for a technical solution elsewhere.
I did get some valuable lessons to take away from my first pass, however: Firstly, the importance of scoping when doing a hobby project; you really need to have a focus on what you want to accomplish and try not to let grandiose ambitions get in the way of that. A F/OSS RPG framework would be a great thing to have under my belt, but it’s definitely not my primary ambition. Secondly, pick the right tool for the task. I really do like Marmalade an awful lot and think it’s a well-designed approach to developing multiplat, but at the same time, it was just too big and generalized for what I wanted to accomplish short-term. It certainly is a viable option for the right type of project, but what I wanted to do just wasn’t a good fit. Lastly, git! Starting this project was my first time using git, and it turned out that I love it. I don’t think I need to really expand on that point – the merits and virtues of git should be old hat at this point – but seriously, it’s awesome.
I started looking around at what kind of tech was available after that and ended up hearing a lot of buzz about cocos2d. Reading up on its design philosophy, I realized it was doing a lot of the stuff I had agonized over designing in my framework attempt, but with some clever tweaks that I hadn’t thought about. I saw it as a good chance to pick up Python, which sadly I had only done extremely basic work with in the past. I found both Python and cocos to be a joy to work with, doing some RPG engine implementations with astonishing speed compared to my attempts in C++.
e.g.o.’s design relied pretty heavily on the concept of minigames, which on paper seemed interesting, but I wanted to see how fun they really were in prototype form. I figured this would give me a chance to iterate and improve the minigame’s design, so I tried to package a few of them into a cute idea I had called Online College.
Online College never saw the light of day because, after implementing one of the minigames, I started realizing they really just weren’t fun, and started having concerns about a fairly large chunk of e.g.o. Due to this, I changed gears somewhat; e.g.o. was put on the back burner to work a bit on far.
As it turns out, far’s story fascinated me. It’s significantly bigger in story scope than e.g.o., which I found very exciting. I spent a nice chunk just working on covering all the ins and outs of the game world (or rather, universe) and progression of the story. far also had less of a reliance on the minigame gimmick that e.g.o. had (no reliance, really), so it seemed more straight forward to implement from a technical standpoint. At this point, I was starting to see the value in chunking things out and just trying to get a demo released representing a portion of what I wanted to implement in order to gauge interest and get feedback. I had designed an e.g.o. demo – cutely enough, called e.g.0. – but the minigame reliance made me re-think portions of it. far’s story was to be told in chapters, which gave me more of an option to put things into self-contained units that could be implemented in smaller amounts of time. After writing one of these sections and designing some of the maps, I started looking again at the technical implementation.
I decided at this point to look at alternatives to cocos2d, since I didn’t have a whole lot of confidence in the mobile implementations, and for some reason just didn’t want to do more work in the Python version – I don’t recall my rationale for either of those now. I made a decision to try and really cut out some effort by just using RPG Maker XP, which I gave an honest effort, but it just didn’t stick; part of me felt icky using such a closed environment for something I had poured so much of myself into. RMXP did have scripting, but learning another language’s syntax within the confines of the engine didn’t seem terribly appealing, either. At this point I was interested in the idea of HTML5 development to totally avoid using multiple build systems and just have web browsers as a single deployment target.
And that pretty much wrapped up 2012. I’m back to looking at cocos again, and after playing with cocos2d-x, I feel more confident in it. I’m actually back to wanting to do prototyping in cocos2d Python with an eventual conversion to cocos2d-x in C++, which I feel should be relatively painless and give me the speed of implementation I’d like to have. I’m also working more on the far script, just because I’ve found I really like the writing aspect, and going back for a refresher by looking at old documents I’d written, I remembered just why I enjoyed the game story so much.
I’m hoping to continue working in 2013 on all of this; despite how I didn’t have anything to really show after 2012, I can’t say it was worthless in terms of my education and growth as a developer. I played with a lot of really cool tech and started to really question what my goals in order to do a better job of accomplishing them. I’m not sure when, if ever, I’ll get these ideas out the door. But regardless, I’m still having a lot of fun and can see how every step I’m taking is helping me grow my skills in writing, designing, and coding, and I see that in itself as being significant.