Wow… what a year 2009 turned out to be. I ended up doing a lot of travel – especially during the latter half of the year, and ended up working long hours on most of the projects I was assigned to last year. I didn’t have the spare energy to do the personal learning or the blog posting required to be able to achieve the objectives of this weblog, but I’m back on deck now – refocused, rejuvenated and ready to start chasing Eureka moments again in 2010.
So… to keep myself honest, I’m going to post somewhat of a schedule here that I’ll try my best to meet. I’m also going to put my dev work in the context of a real-world project that will make use of .NET 3.0 and 3.5 technologies as a way to task orientate my learning, and the information I’ll be sharing on this blog.
So – let’s get started then!
The project I’m going to be working with is a dice-and-paper role-playing game assistant. I’m an old school gamer (in the pre-PC gaming sense) who has some friends interstate who are keen to do some dice-and-paper gaming, so I want to build an application that can facilitate a distribute gaming session, where participants are in different cities, or perhaps even different countries! For now, I’m going to focus on Dungeons and Dragons Ed 3.5, as it’s relatively well-known, and still widely enjoyed. However, once the initial cut is out, I may look at using some extensibility tools to see if I can make the game system “pluggable” and look at writing some plug-ins for the White Wolf “World of Darkness” game system, and perhaps look into wiring up Cyberpunk 2020 and Shadow Run.
Video & Voice
The first thing I want the tool to do is display multiple web-cam feeds and play multiple voice streams. I also want to be able to have the tool enable private conversations between the Game Master (GM – aka Dungeon Master) and individual players.
The next thing I need is the ability for the GM to send text messages to individual players, and be able to see a feed of text messages being sent between the other players.
Roll, baby, Roll!
Another feature I need to implement is a centralized dice rolling system. In a distributed gaming environment, relying on players to be honest with dice rolls can – well… let’s call it an exercise in optimism. So a centralized dice manager is critical. The dice roller needs to have the ability for all of the GM’s rolls to be made private. The GM also needs to be able to make certain player rolls private between the GM and the chosen player.
What a character…
Another core feature is character sheet tracking. Character stats, abilities, experience points, To-Hit and Saving throw targets, Inventory, Banked Inventory and personal character notes all need to be tracked. We will store some of this information in SQL Server database tables. The database will also store relevant tables used for resolving combat and non-combat character situations. I will also need to build a forms-based GUI for displaying and editing information in the character sheets. The GM needs edit-level access to all character sheets, and the players need to be able to edit certain fields.
A fast game is a good game…
A “nice to have” feature would be to include an sand-timer that the GM can trigger to force players to come to a quick decision. This is particularly useful in combat scenarios where you don’t want players “meta-gaming” too much – i.e. haggling over who is going to hit the dragon with swords, where the archer is going to stand, what spell the magic user should be casting, or who the cleric should be healing first. An alarm that plays in the audio channel of all players when the sand-timer empties should get the message across.
Another “nice to have” will be the inclusion of a combat ticker that can help the GM manage initiative rolls, character/enemy action sequencing and resolve the results of dice rolls. Ideally, this would pop up in a separate window and provide support for various character choices such as subduing an enemy, charging, retreating, performing a defensive disengagement or calling an aimed strike.
Maps, maps and more maps!
Once again, on the “nice to have” list will be a map management tool, that allows the GM to:
- “Automagically” generate dungeon and building maps (this actually requires some quite complex rules, which is why this feature is a nice to have)
- Upload maps created by the GM in Visio or JPEG format.
- Display currently visible map segments to players
- Manage the “Fog of War” based on player lines of sight.
In-Game Economics and Politics
The final “nice to have” feature (and probably the most difficult to implement) is tracking of in-game economics and politics. For example:
- If a band of adventurers clears all the goblins out of a dungeon, who moves in later? What impact does this have on human, demi-human and humanoid populations in the area? Who are the movers and shakers in the region?
- If the player characters killed the goblin smith who was working on a doomsday weapon for a major political player, can they find out who did it? And what form will their retribution take?
- What about the slightly higher level scenario of a dark army levelling most of the towns in a given region and putting their crops to the torch? What are the impacts of population change and resource changes?
- If the players drain a major shrine of its healing power to raise one of their fallen comrades from the dead, will this anger the locals?
- Given the typically feudal milieu that many role-playing games are set in, what sorts of problems might our characters set off by rising above their station, or mingling with lower castes than their own.
A good GM will typically define a set of “factions” with whom adventurers can raise or lower their reputations. A reputation tracker will be an important part of this module, but the GM should also be able to do some basic price modelling based on the demand and supply of resources, keeping in mind that humanoid races may participate in black-market economies, and that monsters can have an impact on the local demand and supply of goods (e.g. the undead roaming the marsh-lands, impacting the supply of peat to locals, or the bandits paying for their supplies with fools gold). These impacts can probably be categorized as geographic, systemic, magic or malefic to help make the modelling easier.
Well… that’s a pretty fair volume of text for a single blog post. I’ll sign off for now, but in the next post I’ll discuss the technologies I intend to use for the Game Assistant, and start building a schedule for follow-up posts.