Asynchronous Turn-Based MMO

A game called DayZ has been getting a lot of attention lately, and I hope to be able to try it out soon. FPS play can be very exciting and immersive, but I still find myself coming back to turn-based games like TBSes and roguelikes in the end. Turn-based games in multiplayer run into a…

Distributed Ticket Sales System

Running the ticket sales system for Playa del Fuego has presented some peculiar challenges I don’t face in most products. Primarily, there’s the issue of dealing with a thousand or more simultaneous users during opening sales but very little traffic over the rest of the year. We tried outsourcing to a third-party vendor, but their…

Clever AI

I just came across Cleverbot the other day, and found it pretty intriguing. When I got my first PC (an IBM AT 80286), a friend gave me a floppy with a little program on it called Eliza. I could spend hours chatting with Eliza, not so much trying to hold an actual conversation, but trying…

Isometric Coordinate Algorithms

Just thought I’d share the final functions I settled on for isometric coordinate calculations. Unlike most of the others I’ve seen around the web, these account for: * Origin offset * Tile-based position offset * Varied scale * Any aspect ratio (not just 2:1) def GetScreenPositionForTile(self, map_pos, view, origin, offset, delta=None): if self.projection == Layer.Projections.BirdsEye:…

Layered Board Structure for 2D Games

I’ve found that in more complex 2D games, I end up maintaining several “boards” containing 2D arrays of objects. Generally I have a base board to hold the floor, a terrain board for walls and other structural objects, a feature or object board for smaller items, and an actor board. The feature and actor boards…

Pathfinding algorithms in Demon Keeper

While ZedZed required only simple directional pathfinding (zombies are stupid, so advanced pathfinding is not needed), Demon Keeper required some more advanced techniques to facilitate targeting. I found a great A* tutorial, and some great additional information, which helped me get started, but it wasn’t quite what I needed. The first thing I did was…