4 Hugues Ross - Blog: 7DRL
Hugues Ross
Showing posts with label 7DRL. Show all posts
Showing posts with label 7DRL. Show all posts

4/7/15

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.
BUGS!

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.

3/14/15

7DRL 2015: Done!

It was a bit rough towards the end, but I finished. This is going to be a short post, but I'll be putting up a longer postmortem of the whole thing soon. In the mean time:

Development Album: here
Main Posts: 0, 1, 2, 3, 4, 5, 6, 7
Code: here
Postmortem: here

EDIT:
The Windows build is (finally) available here!

EDIT 2:
The postmortem is done: here

3/11/15

7DRL 2015: Day 4

I have created the next indie hit: Dragon not-dying simulator 2015

All silliness aside, I've made some pretty decent progress. Sonce Monday, I've made the scripting side of things significantly more powerful, and I also finished up the base monster ai. Any monster-specific ai quirks occur in scripts, which so far work pretty well. I had some bug issues, but they seem to be sorted out now. I added levelling on Tuesday, although it needs to be fleshed out more. I finished the effect system today, which is why the dragons are basically walking tanks now. The effect system is designed to be very general and powerful, so that I can do quite a bit with it, such as altering terrain, spawning enemies, and more.

The data-driven setup is really paying off now. I have 7 biomes and 12 creatures already!

3/9/15

7DRL 2015: Day 2

"Huh? Where's my day 1 post?" is what you might be asking right now. That, or maybe "Since when was 7DRL running?"

That's kinda my fault. I was busy up until Friday afternoon, then 7DRL started on Saturday and it felt too late. I decided to try and avoid spamming this blog while that's going on, so I'll be making 4 posts: One for day 2(this one), one for day 5, one at the end, and one with a postmortem. Last time this happened, I made 7 posts in a row about it and they were all incredibly short. This time around, I decided to post daily progress on the official 7drl site, and then make an occasional post here with a bunch of updates at once. With that said, here's the story thus far:

A screenshot from day 1, showing the biome generation at work.


I decided to make a bigger, more varied game than last time, and came up with an interesting gimmick of sorts: There's only one map, and it's as wide as the screen, but it's also incredibly long. We're talking ~200x longer than its width. The game takes place outdoors, eschewing the traditional tight corridors and rooms for open biomes. As you travel to the other side of the map, enemies will mostly be determined by the biome and scale in level based on your progress. In addition, I've integrated Lua into the project in hopes of allowing more interesting upgraded enemies, giving them special traits and abilities.

A new art style that I'm playing with. I'm not too fond of it, but it increases mob visibility by a lot!


I've named the game To the West, after its main premise, and I've made a simple backstory:
The foul warlock Mochus has stolen the Band of the Stars, bringing it to his fortress deep in the western mountains. Journey to the western lands, find the Band, and slay this dark sorceror once and for all!
This jam is a great breath of fresh air after the months of schoolwork, although it's seriously hurting my ability to do March's one game a month challenge. Oops.

Here are the 7drl.org posts for this game:
  1. Day 1
  2. Day 2 
  3. Day 3
  4. Day 4
  5. Day 5
  6. Day 6

Lastly, I've gotten back into the old habit of making lots of screenshots during jams, so an album will be going up at the end of the week.