Tiamat Open Source RPG Framework

After much internal debate, I've decided to officially discontinue this project. Read here for the explanation why. This page will be left up for anyone curious.


Tiamat is an open source software framework to support the development of role-playing games (RPGs). Tiamat contains specifications, code, libraries, and utilities geared to provide the backbone of an RPG. This is not the same thing as a game engine or RPG creator but may evolve into one over time. Tiamat is intended to be flexible enough that it can provide the building blocks for many different styles of RPGs.

I've been interested in game programming for about as long as I can remember. Ever since I owned my first Apple ][+ clone, I've been working on games whenever I've had the time. It started with copying code from Family Computer magazine and writing some crude choose-your-own-adventures from scratch. Over the years I'd get better computers but also have much less time to pursue writing games. My primary reason for getting into computer programming in the first place was to write games. Somewhere along the way it became a college major and a job instead of a hobby. 

The extent of my formal game industry experience is an appearance as a background character in the less than memorable Street Fighter the Movie arcade game. I suppose I could just go work for a game company, I've had offers. The only thing holding me back is the thought of toiling 85 hours a week to crank out yet-another-game-based-on-the-half-life-or-quake-2-engine (YAGBOTHLOQ2E for short) in time for the holidays. What I'd really like to do is work on RPGs. So rather than go work for a game company and hope one day I can squirm my way to being a game designer, I decided to set-off on writing an RPG on my own.

In 1997 I learned Visual Basic (VB) over spring break. I started working on a fan game based on the Ys Series. It didn't get very far. VB turned out to be a poor language to write a game like that in. Although I did make a wicked Pong clone that I hid as an Easter egg in some overpriced EDI processing software. At that time VB programmers were in high demand so all the work with VB paid off. I ended up working at a now-defunct software company while still going for my Bachelor's degree.

I finished my Bachelor's degree in the fall of 1999 and started planning how to write an RPG in early 2000. I initially used Phantasy Star II as the model for how I wanted the game to look and feel, minus the annoying random battles that haunt the entire Phantasy Star series. I didn't make a ton of progress on this idea either. Over the next few years I was working full-time, going to graduate school at night, buying a house, getting married, having a kid, and so on. I managed to write down a lot of the things I wanted to do but didn't get a real design started.

In the spring of 2004 I finished my Master's in Computer Science and decided to focus my newly found free time on writing an RPG. I sat down one day and starting authoring a small demo based on the ideas I assembled. It was a useful exercise in that it got me to really think about how to break down a full-blown RPG into a series of smaller components (the same way I've been writing professional software for years). I started writing down requirements and design for each of these components and was slowly assembling the building blocks of an RPG. I took everything I had and began a design document for what I was now calling an "RPG Framework". The name "Tiamat" was something I'd been batting around in my head for a while, maybe as far back as 1996. I just thought it would be a cool name to use somewhere in a game title. As this "RPG Framework" idea progressed I decided that Tiamat would be a perfect name for the project. In Babylonian mythology, Tiamat was the dragon that gave birth to the other gods. I can only hope this project will give birth to many RPGs. That might be a little overly optimistic. For now, Tiamat is mostly a labor of love.

The Tiamat Framework now consists of four things: a specification document, class implementations, utilities, and demos. It's being done in an iterative process. I start with an idea for a demo, identify the components it requires, write specifications for the new components, implement them, and create editors or other tools as needed. The design for Tiamat is still largely inspired by the original Phantasy Star series, although many other games have influenced the long-term plans. The games I aim to write are somewhere between an 8 and 16-bit console game. I'm not big into flashy effects in RPGs, just a solid storyline and hours of adventure.

Now, I still have the job, wife, kid, and house so I don't have a ton of time to commit to working on Tiamat. My personal goal is work 8-10 hours a week on it, less than graduate school used to eat up. As a result I'll likely be putting out many incremental development releases of Tiamat and not many stable ones. Don't let the word "stable" throw you off; an "unstable" release of Tiamat just means "buggy" not "it'll crash your system". All the implementation plans for Tiamat are in "managed code" environments such as Java and eventually C#. Even an "unstable" release won't be able to negatively impact your system. 

Tiamat is an open source project so contribution is always welcome. Hey, while we're on the topic of contribution.. for some reason I can't program graphics to save my life. In all the demos you'll notice a lot of flicker and other graphical annoyances. I would be thrilled if someone could fix that up. I'm also looking for people who can contribute original graphics and sound for future demos and full-blown games.


Here is a screenshot of the sprite editor, it's used to create and edit four-directional sprites. There are a couple of samples included in the download.

This is the character editor, as the name implies it's used to edit characters. This editor can set attributes, items, and skills for a character. It's generic enough that it can represent characters from different styles of games. There are a few same characters included in the download too.

This is a little quicklaunch utility to run the editors included in the distribution package.


Current Development Release
Version 0.3 Development Release (0.3.20060830) [version history]

Previous Stable Releases
I can just about guarantee that each new minor release will introduce some sort of breaking change. One downside (of many) to this being a part-time project is that I make a few poorly-planned decisions. When I find a bad design decision that needs to be corrected I have two choices: 1) apply generous amounts of duct-tape to existing code to make it fit into a new design  2) introduce a breaking change. All things considered, 2) is the better option. I've seen some horrible code in my time that resulted from an irrational fear of breaking changes. To alleviate potential problems, I'm leaving all previous stable releases online. 
Version 0.2 Final Release (v0.2.20051210) [version history]
Version 0.1 Final Release (v0.1.20051001) [version history]

Download page for demos