It’s done… for a certain value of ‘done’. I spend the last day of the competition madly cramming in last-minute features and tuning the mechanics to make the game as interesting as possible, given the features that were complete. I also wasted far too long trying in vain to compile a Windows version. Lesson learned, I suppose – sort out your build environments before the competition’s final hours.
Although I said originally that ‘Blackguard’ was only a working title, I couldn’t come up with anything better, so Blackguard it is. I consider the week a success for the most part. This is the first time I’ve completed a non-trivial game such that it is playable from start to finish and is more-or-less feature complete, so that alone is a victory. However, I feel the biggest benefit from participating in the competition was simply gaining an understanding of all the parts necessary to make a game work, which should make similar future endeavours much easier. That applies to both the actual code, and the process of designing and prioritising features.
You can download the 64-bit Linux build here. Source code is available on Bitbucket.
I finally got around to sorting out a Windows build, which can be downloaded here.
Almost there… all the features are in place, and several have been scrapped entirely. It’s possible to play the game from start to finish in its current state, though the combat is still completely unbalanced (in your enemies’ favour). I think I’ll spend my last day trying to simplify combat to the point where I can realistically play test and balance it in the time remaining.
I’ve already cut back a lot of the items and enemies that were originally implemented, and I think it was a wise move, as it helps the game feel more focused. I’ve also settled on a story and theme. In short, you play as a prisoner who has escaped from a dungeon, and need to find your way through a labyrinthine cave to win your freedom. To complicate matters, the cave is infested with undead, and the guards from the prison are trying to hunt you down. You’re not much of a match for the guards on your own, so most of the game mechanics revolve around trying to evade guards while they’re distracted by undead, or teaming up with other escaped prisoners.
It’s a bit of a shame that I’m left with so little time to refine the actual gameplay, as I feel like there are some decent ideas here, but they need a lot more polish before I’ll be happy with them.
It took 5 days, but the game is finally playable. Not that you’d really want to play it in its current state, because combat isn’t even remotely balanced, but progress is progress.
I’ve tried to do something a bit out of the ordinary for the combat mechanics in an effort to get away from the typical hit points system that almost every RPG uses. Although there are hit point-ish numbers in the background keeping track of things, the outcome of any given attack is decided based on factors like a character’s current stamina level and how wounded they are. Getting tired or hurt reduces your combat ability and increases the chance that you’ll be dealt a fatal blow. While you’re in good condition, however, you’ll be able to evade or parry attacks that otherwise may have killed you. Instead of just chipping away at hit points, the feel I’m going for is an exchange of blows that suddenly ends when one side lets their guard down.
With only one full day left, there are still a few features to be implemented, like the win/lose screens, and the all-important title screen, but the real challenge will be getting things as polished as I can with the time remaining.
Past half way, and I finally feel like I have enough code in place to start implementing some actual gameplay! Today was all about getting NPCs into the game, which came down to setting up data structures to support procedurally generating each NPC’s race, appearance, class, and equipment, as well as when and where they should appear in the dungeon. Then, it was simple to spawn as many as I wanted in each level.
In the screenshot above, in addition to the player (wearing the red cloak), you can see two undead and a ‘Soldier’ class human NPC in the upper left. NPCs are only capable of wandering about aimlessly right now, but I have plans for some interesting interactions between them. For example, human NPCs aren’t necessarily hostile towards you, and have their own goals in the dungeon that may or may not involve hindering your own progress.
Tomorrow, it will finally be time to implement combat. Even now, I still only have a vague idea of how combat will work, but all the necessary pieces are in place.
The game hasn’t changed much visually over the last 24 hours, but a lot of work has gone into procedural item generation and inventory management. I’ve come up with a fairly solid framework for adding item ‘templates’ that can be used to generate items with varying attributes, controlled by how far into the dungeon the player has progressed. If time allows, it will also be easy to add more item types to the game later in the week.
On the inventory management side, you can open a dialog that lists what you’re carrying. It currently only shows item names, but will eventually contain more information.
Next up is enemy generation, and I’m planning to follow a similar pattern to item generation to get randomised enemies into the game. The beauty of the inventory system is that I can easily equip any NPC with items in order to change their attributes and appearance, and that’s exactly how I intend to create variety in the enemies you’ll face.
With any luck, I may even have something resembling a playable game after tomorrow.
After committing countless programming sins in the name of celerity, day 2 is over and the basic equipment system is mostly in place. Implementing the items was reasonably quick, and most of the day was actually consumed working out issues with the scrolling viewport that follows the player around the area. This is something that my library doesn’t yet provide, so I had to hack it in from scratch. I also completed transitioning between areas, so the game now consists of an infinite cave system filled with random items that you can equip and not much else.
As you can see, equipped items are displayed on the character model. This was something I wanted to do from the beginning, and it didn’t take long to add – the worst part was getting the sprite sheets together.
I’ve decided to go with a very simple inventory system – you can pick up and equip one of each item type (weapon, armour, etc.), and if you want something else, you have to leave what you had behind. Depending on how the combat implementation goes, I may need something more sophisticated.
Tomorrow, I’ll be working out procedural item generation and hopefully adding some enemies to the game.
Day one has gone fairly smoothly, though I haven’t got as much done as I would have liked, mostly due to being distracted by some real-life errands. However, the rest of my week is all clear, so it’s full steam ahead from here. So far, I have the basic framework set up, area generation is done aside from fine-tuning, and the player can move around the level.
If the graphics look familiar, it’s because I’m using the Dungeon Crawl tileset. As much as I would have liked to create my own graphics, time is of the essence, and this tileset is perfect for my purposes.
One of the main things I was hoping to get out of this project was a sense of how easy or hard it is to use my library to make a game from scratch, and I’ve already made a long list of potential improvements. That said, I managed to get things up and running fairly quickly, so I’m pretty happy with it overall.
The agenda for tomorrow is items, equipment, and inventory management.