4 Hugues Ross - Blog: 2015: A Look Back, and the Road Ahead
Hugues Ross

12/31/15

2015: A Look Back, and the Road Ahead

Well, it has been quite a strange year!
In fact, strange might be an understatement.

I spent the first half of 2015 rewriting the entirety of my personal game engine from scratch, and the second half of 2015 deciding that maybe it's not worth keeping to begin with.

I announced a whole bunch of stuff, and while I made no real attempt to follow up on some of those things, I actually succeeded at some of them. Akradion has been done all semester, but I keep forgetting to test it, and Halberd's going strong. Speaking of which...

I went back to my roots! Halberd was this blog's first project, started 3 1/2 years ago. It feels like an eternity now, though.
Also, somewhere along the way, my small relaxed "Get into the college mindset" project turned into an epic quest to create the world's most absurdly powerful retro tile-based RPG engine, so that's something.
For those curious about how it's doing, have a courtesy link.

I spent a quarter of last year making a big update to Singularity, and then neglected to touch it at all this year. Just kidding, I started yesterday. That counts, right?

Speaking of not doing things, I wrote the first part of a tutorial last year, and wrote another part 5 days ago. My goal is to release a part every other Monday, and so far things are looking ok.

I also got a job! (Two, in fact) They were only part-time, but it's nice finally seeing a return on the skills I've been carefully honing for nearly a decade. Will any luck, I'll be able to find work after college. Either way, I'm not going anywhere; this blog has grown on me.

2015 is also the year that I started posting code on my programming blog, three years later...
    1 #include <stdio.h>
    2 
    3 int main(int argc, char* argv[]) {
    4     fprintf(stdout, "I\'ll award myself a gold star that says \'You tried\' on it.");
    5     return 1; // This is not a success
    6 }

I quietly released a piece of software that's been in development for a year or two. I'll finish the the post for it eventually.

So...

What's Next?

I've talked a lot about last year, but you might be wondering what I'm up to, besides Halberd. You know about my plans for the tutorial, and for Singularity, but what else do I have in store?

My next step will probably be ditching DFEngine. It's a really hard decision to make, honestly, because DFEngine has been around since before Sophomore year. Nonetheless, I don't see myself using it like I see myself using Halberd. I think this is the case for a few reasons.

Why Drop DFEngine?

DFEngine is primarily operated by writing xml files and lua scripts, which define the game's assets. Halberd was designed with an actual human user in mind from the start, so it's built entirely on top of an interactive GUI-based editor. The thing is, Halberd is still mostly xml-based. It just lets you fill forms and click buttons instead of painstakingly entering information with a text editor. It even has a play button, for instant feedback.

I can't really fix this problem. Not well, at least. DFEngine is C++, and I write my UI code in Vala, which is C-based. The two don't mesh well. I could write my UI code using gtkmm, the gtk C++ bindings, but that just leads to the next problem.

I don't really believe in Object-Oriented programming the way I did coming into college. I used to be a huge fan of C++, until this year when I finally started using C. Don't get me wrong, OO is perfect for solving a few specific problems, such as UI code. Of course, that last bit applies more to simpler OO languages, such as Vala and C#.

More often than not, I feel like OO tends to put you in a mindset where you have to make the perfect hierarchy, and you lose sight of your real purpose. It feels like a trap that wastes resources for code that is ostensibly easier to extend. From my experience, it's the opposite: I find it much easier to extend C than C++, and my code usually feels more concise and easier to read. I've been looking at Go recently, and I think they might have the right idea. I'll have to play with it in the future.

The Solution

Ultimately, DFEngine lacks the ease of use it needs to be good. I started the project because I wanted a framework for quickly getting started during game jams. I'm ending the project because I no longer do game jams, and that's just a little bit sad. I've rewritten DFEngine twice, but each time it has only marginally improved. It's time for a different approach.

Of course, making my game jam entries from scratch in C isn't all that doable, so what will I do instead?

When I refactored Halberd, I split the engine into 5 separate modules. 3 of them are compiled into static libraries, for the sake of flexibility. That's what really got me thinking: What if I just took all of this great, simple, useful code, and just made utility libraries with it? How convenient would that be?

I haven't tried it yet, but I already think I know the answer:
  • Want resource loading code? Here.
  • Want a hefty project file manager? Here.
  • Want a widget for selecting assets, with as-you-type searching? Right. Freaking. Here.
It's easy. It's convenient. Best of all, it's a standard. If I use a common set of libraries for my projects, most of my work disappears and I can focus on the details of each project. Better yet, I basically get a free head start on making editing tools.

One of my first goals this year will be to split some of the Halberd codebase into a separate collection of libraries. After that, I can see about getting back to my other game projects with a new set of tricks up my sleeve. For now though, Halberd and Singularity are my main concerns.

Oh, and here's a little gift for surviving my +3 Wall of Text:
A mockup of Singularity's new UI. It hasn't changed immensely, but there are a few cool new bits in there.

No comments: