Deathdealer — Success!

My entry into the 2015 Seven-Day Roguelike Challenge is complete! Deathdealer, an arena combat roguelike with trading card game mechanics, is finished and available for you to play.Deathdealer_screenshot


  • Survive as long as possible against endless waves of fiendishly difficult enemies
  • Mix and match three schools of magic
  • Customize your character’s deck from 69 different cards
  • Vanquish 32 types of enemies, including 6 absurdly lethal boss monsters
  • Unlock new cards every 5 waves to expand your capabilities
  • Simple controls make the game easy to play
  • Advanced ASCII graphics technology for a modern user experience


  • WASD, arrow keys, or vi-keys to move or use menus
  • 1-7 to cast spells from your hand
  • Tab to view enemy information
  • Spacebar or period to wait one turn, to make selections in menus, or to exit the deck builder
  • + and – to add or remove cards from your deck
  • Escape to quit

Known Bugs:

  • Enemy pathfinding is rather weak.
  • Minimum deck size of 20 cards is not enforced, and issues may occur with decks of 7 or fewer cards; please make your decks contain at least 20 cards.
  • No in-game help is available.
  • Completely untested on any platforms other than Mac OS X.

Download Deathdealer for Mac OS X here, or the python source (for any platform with Python) here.

Good Game Success

Good Game screenshot

A tactics/strategy game focused on using consumables

gimmicks: number of enemies for each floor is constant, ascii character health representation, potions with a random chance of two effects

after the 7 days I realized I had a bug so I included a post-challenge updated version, no gameplay changes

you can download the latest version or download the 7drl version (both include a windows .exe and python source)

arrow keys: move/attack, numbers:use potion, Esc:exit

read the manual for detailed information, most of it should be apparent from play

Servitude – Day 1 – Report

Well, my seven days are up.  Too much time was spent debugging the same silly problems, hours on end each day.  Yesterday, it was just not being able to get my indexing into a given piece of allocated memory to work correctly.

  • As a challenge to write some reusable game code which I can build on in future, SUCCESS.
  • As a challenge to write a game, FAILURE.

Servitude – Day 2 – Report

The code is still writing itself, it just isn’t doing it fast enough.  I haven’t programmed this much C for a long time, so I tend to make all the standard mistakes.  Forgot to put a break; statement after a switch case clause?  Check.

What did I actually accomplish yesterday?

  • The beginnings of an area generation system.
  • Polishing the turn-based action system.
  • In-game messages.
  • Killed a lot of flies with one of those metal tennis racket things that have a button which electrifies the metal “netting” so caught flies roast.

Can I add enough gameplay in the final day?

2013-03-15 - Servitude - 01 - Screenshot

Day 1 begins!

Servitude – Day 4 – Report

Again, I didn’t spend half as much time on this as I would have liked.  But I did get big bang for my bucks out of the time I did spend, from the generic code I’ve already written.  Doors now have two flags, locked/unlocked and open/closed.  The player can no longer walk through a closed door.  Walking into objects pops up a context menu based on the type of object.  The turn-based action system is begun.

Move into something, context menu appears.
Context menus.

Sometimes I think I would be making more progress, if I didn’t take the time to perfect my code.  Other times I find that “perfected code” enabling me to build other things with minimal effort.  Or lending itself to easy extension.  Whatever the case may be, things are pretty much writing themselves so far.

On to day 3!

Servitude – Day 5 – Report

The day started off well, I got everything working after the “improvement” that gave a global coordinate space.  But that’s about it, due to a more pressing programming task which I couldn’t afford to delay.

2013-03-12 - Servitude RL - 01


I guess I look at the challenge as a way to see what I come up with, without much in the way of planning or pushing myself to do anything but see where it goes when I feel like working on it.  In the long run, it’s all code in the bank.

Servitude – Day 6 – Report

Sunday was a day of lackadaisical work, where I was supposed to be watching Alaska The Last Frontier and Gold Rush Alaska while programming, but was really programming while watching them.  A big difference, unfortunately.  What should have been interesting and educational television, was ruined by reality TV overproduction.  The editing was so bad it was hard to understand what was going on, either they were reshowing the same things over and over, or they seemed to lose track of the interpretation they were trying to show and didn’t show enough to build a clear picture.  Wait.. writing this is more procrastination of a different sort!

My game received absolutely no gameplay improvement.  All the work was rewriting things to be done in the best way.  Some of these were necessary, but most of these I could have lived with and built a game on.


  • Doors are now reclassified as in-game objects, rather than a fixed part of the background
  • There can be multiple objects at a given coordinate, rather than just one.

Not necessary:

  • The UI now deals with in-game coordinates in the absolute world coordinate space, and no longer has an “area id” that it passed around with any area coordinate space coordinates.

Today I have to finish the world coordinate space debacle, which is almost working.  Then more world generation is next on the cards.

Day 5 begins..

Servitude – Day 7 – Report

Yesterday, I mainly concentrated on two things.

  • Improving my basic game engine.
  • Debugging based on false information from GDB.

My game engine initially provided a basic UI, and a placeholder non-interactive game world view.  Day 7 replace the game world placeholder logic with real logic, and now defines a minimal world that the player can walk around.

Hours were wasted believing where GDB said a crash was happening.  There’s only so much you can do to try and get a line that isn’t crashing, from crashing.  So out comes printf, and the real problem emerges.

I wish I too were making a rougelike, I expect there’s a lot of money in creating women’s beauty products.

Day 6 has already started!