
One of the cool things about summer is that I have time to work on my own programming projects. I’ve been kicking around the idea of making my own roguelike game all quarter and lurking on rec.games.roguelike.development. Now I’m finally getting started.
The focus on my roguelike is a user-friendly GUI. Nethack is a brilliant game, but I think it suffers greatly from the unfriendly UI. Who wants to have to consult a list of 50-some odd keys and key combos to interact with a game world? Only UNIX dorks. My game isn’t going to use character graphics either. I loved playing ZZT and Kroz when I was a kid, but that era has come and gone. A secondary focus of my game is going to be some advanced AI techniques for making the monsters and NPCs hopefully act more intelligently. One neat idea I have is to train monster behavior using genetic algorithms. We will see how far that gets.
I’m writing my game in C#. After some brief experimentation with GDI+, I decided I needed more speed so now I’m rendering using Direct3D with an orthographic projection (to make it look 2d). I’m having a little trouble getting a truly performant solution, I think because I have too many texture swaps per frame, though displaying the map at the standard zoom level on a 1600×1200 screen runs pretty damn fast. What’s cool about using Direct3D is that scaling, rotation, and transparency effects are basically free.
For my tilemap, I am using the every-tile-is-a-linked-list approach that I advocated on rec.games.roguelike.development, with one caveat. Every tile element contains a base tile and then an ArrayList for everything that sits on top of it (by sorting this this list by z-order I can get cool effects like characters being obscured by doorways). This approach has the flexibility of allowing an arbitrary number of items to sit on one space, while at the same time limiting memory usage (since only a small fraction of tiles will require the instantiation of an ArrayList). We will see if this approach holds up as my map entities become more complicated.
One more interesting thing worth pointing out. I deliberately gave my game a google zero name (partially explains its weirdness). This way I will be able to easily track mentions of my game across the internet by googling for “witherwyn”. Isn’t that neat?
Yay. An outlet for creativity.

