4 Hugues Ross - Blog: 04/01/2015 - 05/01/2015
Hugues Ross


DFEngine: What's new

As I promised in my post about rewriting DFEngine, here's a look at some of the differences in the new version. Buckle up, this is going to be a long one.


To the West Postmortem, and 10 lessons for next year

Note: For those uninterested in reading too much, click here to scroll to the list of things I learned this time around.

It's a bit overdue, but here's a postmortem for my latest 7drl entry, To the West.
For those of you who haven't played, To the West is a roguelike that discards the typically 'vertical' gameplay of a roguelike where you go down a dungeon floor-by-floor, and instead replaces it with a long 'path' of naturally terrain, scrolling horizontally. While the game is not super-great, I actually think the jam went rather well, all things considered. My game has been reviewed twice, as far as I can tell, and while the reviews weren't very positive I still feel happy with the result. Here's why:

What Went Right

The feedback I received was very close to my own reaction to the game, and I like that.

One of my big goals in with the game was to have an engine that would allow me to create interesting things for players to encounter, and it seems like I was able to accomplish this, at least on the engine side. Of the positive feedback in the game, most of it related to the variety, and the fact that there were some interesting and unique things to be found. One of the reviews mentioned liking the Potion of Lakes, and item that forms a lake wherever it lands. The other mentions liking the occasional pieces of flavor text that vary from area to area.
I also really like the negative feedback. Much of it reflects problems and frustrations that I personally had, and parts of the game that I knew weren't very good. This is actually a good sign, because it means that the premise I was working with was sound.

What Went Horribly, Horribly Wrong

Unfortunately, not cool bugs like this one.

This game is an incredibly unstable kludge. In fact, I'm amazed it runs at all. About halfway through, the engine began to collapse under itself in a veritable torrent of segmentation faults. Turns out, when you rush and play willy-nilly with your pointers, bad things happen! You'd think I'd know that by now, but apparently not. Anyway, the result was the loss of multiple cool features, as well as hours of good development time. The faction system that allowed for interesting interactions between different units had to be totally scrapped, which is why there are no sheep, mountain dwarves, or other friendly sorts in the world anymore.  On top of that, the lost time meant that I had significantly less time to polish and balance things at the end. I can actually still think of a few major issues with the game, including a game-breaking crash that no one else seems to have noticed.

My other big issue during the week was in fact balancing. At the end, I must've spent close to 5 hours playing the game over and over, constantly tweaking numbers. In the end, I had to stick to a beatable game, but the result was the loss of a lot of interesting strategic challenges and scary early-mid game fights. Instead we just have a boring grind that ends in an interesting but too easy boss fight. With another day, or even a few more hours, I might've had a good shot at making a well-balanced game. However, I simply ran out of time. It didn't help that I had some interesting variety, but there wasn't enough content to keep the game interesting.

The last issue, but certainly not the least of them, was the porting. My first issue was trying to figure out how to cross-compile a console application to Windows. It *should* be so easy, but you can't search for a solution on Google. Due to the nature of the subject, you'll only find tangentially-related topics, making it much harder to learn the process. I then had to try pdcurses, which can handle curses output to a proper window. Unfortunately, this comes with certain issues of its own, which delayed the windows release for way too long. It wasn't until someone left a comment here asking about it that I found the motivation to sit down and fix all the issues and get the build out. On top of that, pdcurses has limits that I didn't expect from the windowed version. (For more information on color limits and such in curses, look here) I don't know why the version that renders text with SDL has a 16-color limit and can't render bold or blinking text, but it's pretty ridiculous. I've heard tales of a patch that removes these limits, but I haven't had time to explore further. The result was a working but half-baked colorscheme that pulled my review scores even lower. (Also, there's the bug where for some reason the cursor won't move in the SDL version, so I had to rewrite parts of the tile targeting code to match. That was extra-dumb).

Lessons Learned

I learned a lot, so this list may be incomplete. That said, here are 10 lessons that I learned during 7drl, mostly the hard way:
  1. The panel curses library is pretty great, but next time I need to be more careful how I use it.
  2. There are a few other curses libraries/techniques that I ought to learn, especially scroll.
  3. With enough care and diligence, it's actually possible to get some fairly decent performance out of curses. I can make it pretty snappy if I'm more careful about my draw calls!
  4. If the jam is 7 days or longer, I need to spend more time on architecture and setup. Some of the issues I had might've been better avoided with a nicer structure, and the small amount of architectural work I did payed off nicely.
  5. I must stay consistent to my coding style, no matter how short a jam is. If you actually look at my code, it's a mess of naming conventions, which probably slowed me down considerably.
  6. In retrospect, switching to NeoVim mid-jam might not have been the brightest idea.
  7.  I should get all of my tech working on all of my target platforms pre-jam, even if I already know they'll work later. I should also relese binary demos if time permits it.
  8. Before next 7DRL, I should put together a small set of useful utility functions that will make my life easier during the jam. Logging would be extra-useful, as would some form of color palette management.
  9.  People like interesting and varied content, and I should reserve at least a day or two for just content building. However, I shouldn't start too soon, or it might end up making more work for me in the long run.
  10. Valgrind, everything, always.

I enjoyed last year's 7drl, and I loved this one even more. I haven't made anything great so far, but I think I'm improving well. Hopefully, next year's entry will be really great!

If you read all the way here, then enjoy this little announcement: To the West isn't over! I really like this idea, and I want to see it reach it's full potential. Thus, I'm going to continue working on it until I feel like it's done and polished. Obviously, this will require me to rewrite all of the code, so don't expect much anytime soon, but I figured this was a good time to say it.