Minions of Mirth - Brief Post Mortem
by Prairie Games · in General Discussion · 12/15/2005 (9:35 pm) · 22 replies
Minions of Mirth - (Brief) Post Mortem
Prairie Games, Inc
12-15-05
Introduction: Minions of Mirth was developed by Prairie Games, Inc over 11 months in 2005. There was over a year of prototyping leading up to the main development period. This is a brief post mortem of the game's development. The game's production had the following breakdown:
Developer:
Prairie Games, Inc
Target platforms:
Windows and OSX
Length of development cycle:
11 months
Internal team members:
2
External contractors:
3 (Character Models, Clothing Textures, and Music)
Primary External Technology:
Torque Game Engine ($500 Commercial License),
Python (Free), Twisted (Free), SQLObject (Free), SQLite (Free)
Programming Languages:
Python, C/C++
Components:
Master/Registration Server, World Server, Zone Server, Client,
Automated Packaging and Patcher System, RPG Database and Editing
Final Product Size:
226MB
Release Date:
December 15th, 2005
Prairie Games, Inc
12-15-05
Introduction: Minions of Mirth was developed by Prairie Games, Inc over 11 months in 2005. There was over a year of prototyping leading up to the main development period. This is a brief post mortem of the game's development. The game's production had the following breakdown:
Developer:
Prairie Games, Inc
Target platforms:
Windows and OSX
Length of development cycle:
11 months
Internal team members:
2
External contractors:
3 (Character Models, Clothing Textures, and Music)
Primary External Technology:
Torque Game Engine ($500 Commercial License),
Python (Free), Twisted (Free), SQLObject (Free), SQLite (Free)
Programming Languages:
Python, C/C++
Components:
Master/Registration Server, World Server, Zone Server, Client,
Automated Packaging and Patcher System, RPG Database and Editing
Final Product Size:
226MB
Release Date:
December 15th, 2005
#2
4. Subversion (as a cross platform auto-patching solution): We use Subversion for versioning control. The merits of version control on a project are well documented. I am mentioning Subversion in the post mortem for it's use as a backend to our auto-patching system. I wrote some Python scripts that are able to build demo/full version distributions from the game's sources and data files.
The scripts inspect assets like dif/dts to find out what files are needed. They also open up the RPG Database to find out what textures, sounds, models, etc are actually used. The scripts generate jpg files from pngs and do other operations to get the file sizes down. Multiple SHA checksums are then generated for every file and the results are stored in a manifest.zip file. The client keeps a cache of local SHA checksums and connects to the game's Subversion repository which is being served over SSL. It requests the manfest.zip and compares the SHA checksums with the local ones. The client then downloads any missing or changed files, verifies them once downloaded, requests the user to restart the application, and then copies the new files into the install. It's all very anal and has performed beautifully. It was awesome to painlessly patch users during the beta process. I don't remember getting one complaint!
5. SQLObject and SQLite: MoM uses the SQLite database via the SQLObject Python library. SQLite is a wonderful in process database that can be treated inline for most operations. I went with SQLite primarily for its zero server setup which was important to our "Host your own Persistent World" feature. It also greatly simplified many database operations where they may happen asynchronously. When using transactions, SQLite is very fast. Also, it lost absolutely no data as we were exclusively using transactions. Our testing server maintained the same characters from late alpha, through beta, and up to version 1.0!
SQLObject is "an Object Relational Manager for providing an object interface to your database, with tables as classes, rows as instances, and columns as attributes." It was great to work with because it transparently accesses the database from my Python classes, slick! Another nice thing about SQLObject is its support for MySQL, Postgres, SQLite, Firebird, SybaseConnection, MAX DB, and MS SQL Server databases.
12/15/2005 (9:37 pm)
3. Twisted: Twisted is an open source, event-driven, networking framework written in Python. It's amazing how fast you can write client and servers with this framework. I used twisted's remote object and procedure perspective broker system for much of the RPG game data communications. The game's chat system uses twisted's IRC support. The patching system uses the twisted web client with SSL support. I wrote a nice user/role/permissions system that is shared between the various servers. Our master/registration server, world server, zone server, and client all use Twisted networking.4. Subversion (as a cross platform auto-patching solution): We use Subversion for versioning control. The merits of version control on a project are well documented. I am mentioning Subversion in the post mortem for it's use as a backend to our auto-patching system. I wrote some Python scripts that are able to build demo/full version distributions from the game's sources and data files.
The scripts inspect assets like dif/dts to find out what files are needed. They also open up the RPG Database to find out what textures, sounds, models, etc are actually used. The scripts generate jpg files from pngs and do other operations to get the file sizes down. Multiple SHA checksums are then generated for every file and the results are stored in a manifest.zip file. The client keeps a cache of local SHA checksums and connects to the game's Subversion repository which is being served over SSL. It requests the manfest.zip and compares the SHA checksums with the local ones. The client then downloads any missing or changed files, verifies them once downloaded, requests the user to restart the application, and then copies the new files into the install. It's all very anal and has performed beautifully. It was awesome to painlessly patch users during the beta process. I don't remember getting one complaint!
5. SQLObject and SQLite: MoM uses the SQLite database via the SQLObject Python library. SQLite is a wonderful in process database that can be treated inline for most operations. I went with SQLite primarily for its zero server setup which was important to our "Host your own Persistent World" feature. It also greatly simplified many database operations where they may happen asynchronously. When using transactions, SQLite is very fast. Also, it lost absolutely no data as we were exclusively using transactions. Our testing server maintained the same characters from late alpha, through beta, and up to version 1.0!
SQLObject is "an Object Relational Manager for providing an object interface to your database, with tables as classes, rows as instances, and columns as attributes." It was great to work with because it transparently accesses the database from my Python classes, slick! Another nice thing about SQLObject is its support for MySQL, Postgres, SQLite, Firebird, SybaseConnection, MAX DB, and MS SQL Server databases.
#3
7. Music: The music for MoM is a funny story. We didn't plan to have much music other than maybe some canned licensed stuff. We were approached by an artist who was excited about MoM and wanted to add music. I do remember us telling him that we didn't have time to go back and forth with the music to get it right. He didn't seem to think this would be a problem and went away to work on it. I was doubtful we would ever hear from him again. Well, one day there was an ftp link with over 2 hours of amazing music. The music adds so much depth and feeling. It's perfect for the game!
8. Community: We were very lucky to have some incredibly positive and wonderful people join our community. These people not only contributed feedback and assisted other players while testing, they even helped add quests, characters, dialog, items, and even buildings and other graphics to the game. MoM would not be the game it is today without their vigilant testing, input, and contributions.
9. Right Sizing Our Life: Lara and I moved to Wishek, North Dakota to pursue Prairie Games, Inc. We bought a house for $40k at a $300/month mortgage. We cut our expenses as low as we could. The game would have not been possible without this move and restructuring of our finances.
What went wrong:
1. Internal Alpha - MoM had an "internal alpha" milestone of March 22nd. This was 2 months after switching (more like starting over) with Torque. We had to change the entire art pipeline, resurrect assets, and get most of the game's core functionality up in 60 days. This was far too short a time and the date was absolutely unrealistic. It caused a great deal of strain on our company. We were quite pleased with the alpha in the end. Though, the process of getting there was very painful.
2. Delay on Model Job - We didn't start the modeling job for characters and monsters until April. We had to work very quickly to get the game's animated models in place. Also, due to the late start, the game didn't ship with all of its models. We will be releasing additional models as upgrades via our auto-patching system.
3. Fumbling in 2004 - It's hard to remember the Quake2 GPL version of Minions of Mirth from 2004. Summer and Fall are kind of a blur. The game was single player only, then multiplayer, then back to single player. The game was going to use the D20 (SRD) ruleset and I wrote a ton of code. We switched to Quake3 in anticipation of its GPL status in December, 2004. The GPL was pushed back though it wasn't announced until January 1st, 2005. See "Internal Alpha" above!
12/15/2005 (9:37 pm)
6. Contracting Artwork: Prairie Games, Inc's development staff numbers 2 people. That's one, two. We contracted with two excellent and very professional artists on MoM. There was a fair amount of communication that had to happen on the aesthetics and to catch any glitches in the artwork. There were very few problems involved in this process. I think a big part of this had to do with simplifying how the engine's animation system worked. Also, the technical savvy of the character artist saved us all a fair amount of pain.7. Music: The music for MoM is a funny story. We didn't plan to have much music other than maybe some canned licensed stuff. We were approached by an artist who was excited about MoM and wanted to add music. I do remember us telling him that we didn't have time to go back and forth with the music to get it right. He didn't seem to think this would be a problem and went away to work on it. I was doubtful we would ever hear from him again. Well, one day there was an ftp link with over 2 hours of amazing music. The music adds so much depth and feeling. It's perfect for the game!
8. Community: We were very lucky to have some incredibly positive and wonderful people join our community. These people not only contributed feedback and assisted other players while testing, they even helped add quests, characters, dialog, items, and even buildings and other graphics to the game. MoM would not be the game it is today without their vigilant testing, input, and contributions.
9. Right Sizing Our Life: Lara and I moved to Wishek, North Dakota to pursue Prairie Games, Inc. We bought a house for $40k at a $300/month mortgage. We cut our expenses as low as we could. The game would have not been possible without this move and restructuring of our finances.
What went wrong:
1. Internal Alpha - MoM had an "internal alpha" milestone of March 22nd. This was 2 months after switching (more like starting over) with Torque. We had to change the entire art pipeline, resurrect assets, and get most of the game's core functionality up in 60 days. This was far too short a time and the date was absolutely unrealistic. It caused a great deal of strain on our company. We were quite pleased with the alpha in the end. Though, the process of getting there was very painful.
2. Delay on Model Job - We didn't start the modeling job for characters and monsters until April. We had to work very quickly to get the game's animated models in place. Also, due to the late start, the game didn't ship with all of its models. We will be releasing additional models as upgrades via our auto-patching system.
3. Fumbling in 2004 - It's hard to remember the Quake2 GPL version of Minions of Mirth from 2004. Summer and Fall are kind of a blur. The game was single player only, then multiplayer, then back to single player. The game was going to use the D20 (SRD) ruleset and I wrote a ton of code. We switched to Quake3 in anticipation of its GPL status in December, 2004. The GPL was pushed back though it wasn't announced until January 1st, 2005. See "Internal Alpha" above!
#4
I have learned an incredible amount in the years of R&D and production on Minions of Mirth. As most of the technology is written in Python and is platform/engine agnostic, we can port to newer engines such as the Torque Shader Engine. We have plans for Minions of Mirth expansions and to use the MoM technology in other game genres. We already have an active modding community which is even helping generate content for the official build of the game. I am very hopeful that Minions of Mirth is a success and finds its audience. So far, so good.
References:
Prairie Games, Inc:
http://www.prairiegames.com
Minions of Mirth: World Server Source:
http://mom.servegame.com/svn/prairiegames/dws/common/mud/world
Minions of Mirth: RPG Database Source:
http://mom.servegame.com/svn/prairiegames/dws/common/genesis
The Python Programming Language:
http://www.python.org
Torque Game Engine:
http://www.garagegames.com/products/1
Twisted:
http://twistedmatrix.com
Subversion:
http://subversion.tigris.org
SQLite:
http://www.sqlite.org
SQLObject:
http://www.sqlobject.org
12/15/2005 (9:37 pm)
Conclusion:I have learned an incredible amount in the years of R&D and production on Minions of Mirth. As most of the technology is written in Python and is platform/engine agnostic, we can port to newer engines such as the Torque Shader Engine. We have plans for Minions of Mirth expansions and to use the MoM technology in other game genres. We already have an active modding community which is even helping generate content for the official build of the game. I am very hopeful that Minions of Mirth is a success and finds its audience. So far, so good.
References:
Prairie Games, Inc:
http://www.prairiegames.com
Minions of Mirth: World Server Source:
http://mom.servegame.com/svn/prairiegames/dws/common/mud/world
Minions of Mirth: RPG Database Source:
http://mom.servegame.com/svn/prairiegames/dws/common/genesis
The Python Programming Language:
http://www.python.org
Torque Game Engine:
http://www.garagegames.com/products/1
Twisted:
http://twistedmatrix.com
Subversion:
http://subversion.tigris.org
SQLite:
http://www.sqlite.org
SQLObject:
http://www.sqlobject.org
#5
Its awesome how now it is possible to make great quality indie games.
12/15/2005 (10:50 pm)
Just bought the game, and it is Great! The best no-fees MMORPG I've seen (Guild Wars was a real let down).Its awesome how now it is possible to make great quality indie games.
#6
12/16/2005 (1:21 am)
Thanks for sharing info. Good report.
#7
-Josh Ritter
Prairie Games, Inc
12/16/2005 (9:26 am)
Thanks, I want to get some of this stuff down. A full post mortem would be a large undertaking, especially right now :)-Josh Ritter
Prairie Games, Inc
#8
12/16/2005 (10:36 am)
Wow this is an awesome story. To see that 2 people created a game with such high quality. Its really a boost to my moral and it lets me know that I want to do is possible. Thanks for the kick in the motivation area!
#9
12/16/2005 (10:43 am)
Informative and inspiring! Thanks Josh!
#10
The Technology advancements with torque and python along is worth a bit by itself. I look forward to purchasing my own copy of the Retail MOM. and eventually modding up my own universe to play in.
And when the initial storm dies down Josh I hope you can enlighten us further still. I believe that with enough time you may cause a stir in the whole MMORPG community itself there are fans out there eager to build there own custom worlds. (Me definitely) and giving the chance to do so they will. Easy tools to work with, easy content creation, make your own world, define your own rules. NO MONTHLY FEE, Host your own servers. You get all that started at $29.99. <-uh Iam posting this on some of my favorite sites too LOL
12/16/2005 (2:21 pm)
BIG OLE GRATS!! TO ALL of the MOM Crew!!The Technology advancements with torque and python along is worth a bit by itself. I look forward to purchasing my own copy of the Retail MOM. and eventually modding up my own universe to play in.
And when the initial storm dies down Josh I hope you can enlighten us further still. I believe that with enough time you may cause a stir in the whole MMORPG community itself there are fans out there eager to build there own custom worlds. (Me definitely) and giving the chance to do so they will. Easy tools to work with, easy content creation, make your own world, define your own rules. NO MONTHLY FEE, Host your own servers. You get all that started at $29.99. <-uh Iam posting this on some of my favorite sites too LOL
#11
12/19/2005 (2:28 pm)
Is it time for Q & A?! ;) How about a quick blurb on how many copies of MoM you've pushed so far and what your projections are for the future of it?
#12
I don't think we failed ;)
-Josh Ritter
Prairie Games, Inc
12/19/2005 (7:57 pm)
Well, let me put it this way: I don't think we failed ;)
-Josh Ritter
Prairie Games, Inc
#13
12/19/2005 (8:00 pm)
Failing is a relative term. that mean you don't want to publish member counts?
#14
They are no Sony or Blizzard so relax and let the story unfold. It has just began.
12/20/2005 (1:04 am)
Let them enjoy the moment man....They are no Sony or Blizzard so relax and let the story unfold. It has just began.
#15
I'm going ot put an ad on my site!
12/20/2005 (2:16 am)
MoM feels alot like DAoC, which I cancelled my subscription for (too much moolah). This is bringing back all those experiences again, for next to nothing!I'm going ot put an ad on my site!
#16
12/20/2005 (2:40 am)
I will buy the day a Linux client is available. You do still have plans for a Linux client right?
#17
12/20/2005 (6:30 am)
Asking for a member count out of curiosity isn't letting them enjoy the moment? hmmm.
#18
I am the sole "technologist" at PrairieGames. This means I do the games, the web stuff, the customer support stuff, everything. I don't have any capacity left. I haven't had time to even really consider a Linux "client" which is really the game as you can also play MoM single player. We do need a Linux dedicated server and will be looking to contract this out soon.
We're not publishing our sales numbers at this time. Though, OSX is around 20-30% of the sales at this time. We'll know more as we do SOME marketing. We're still mostly word of mouth. We may use some portal sites. Though, this depends on a number of factors. The game is a 226MB download, isn't in the casual market, and most of the online portals totally rip you off.
It's obvious we need help with marketing and we desperately need to update our website. There are major features of this game that aren't advertised well, like, um, playing Dragons and other huge creatures, large scale battles, etc.
I am only one person. I have done a LOT of work on this game. I am very proud of the work on MoM. It's also amazing to me that this is Lara's first game. She wasn't even into games when I meet her a few years ago :) ... and then there is "The Blikstad" which is a whole other topic!
MoM is built for expansion. We also plan to make games in other genres with the technology.
"It has just began." - Randy "Vashner" Anthony
You couldn't be more right :)
-Josh Ritter
http://www.prairiegames.com/games.html
12/20/2005 (7:17 am)
Woot! Thanks guys!I am the sole "technologist" at PrairieGames. This means I do the games, the web stuff, the customer support stuff, everything. I don't have any capacity left. I haven't had time to even really consider a Linux "client" which is really the game as you can also play MoM single player. We do need a Linux dedicated server and will be looking to contract this out soon.
We're not publishing our sales numbers at this time. Though, OSX is around 20-30% of the sales at this time. We'll know more as we do SOME marketing. We're still mostly word of mouth. We may use some portal sites. Though, this depends on a number of factors. The game is a 226MB download, isn't in the casual market, and most of the online portals totally rip you off.
It's obvious we need help with marketing and we desperately need to update our website. There are major features of this game that aren't advertised well, like, um, playing Dragons and other huge creatures, large scale battles, etc.
I am only one person. I have done a LOT of work on this game. I am very proud of the work on MoM. It's also amazing to me that this is Lara's first game. She wasn't even into games when I meet her a few years ago :) ... and then there is "The Blikstad" which is a whole other topic!
MoM is built for expansion. We also plan to make games in other genres with the technology.
"It has just began." - Randy "Vashner" Anthony
You couldn't be more right :)
-Josh Ritter
http://www.prairiegames.com/games.html
#19
12/20/2005 (7:38 am)
So when can we see DaD in the works? ;) sorry, saw MoM too much to not comment.
#20
12/20/2005 (11:24 am)
From my brief scan of the web site it looks like an impressive product. To me, one of the most innovative things is that it appears you could use it to build your own online world. i.e., run your own server, and customize the world rules/behavior however you want. This is a really cool concept. Wish you the best of luck with it!
Torque Owner Prairie Games
Prairie Games, Inc.
1. Python Programming Language: Minions of Mirth was written in 11 months by one programmer using a number of inexpensive and freely available technologies. The bulk of the programming was done in Python. Python is an incredibly quick language to program in for tasks where it's a good fit. Python also has great debugging mechanisms which make it great for trapping errors not only on developer machines but also tester and end users.
The production would have taken much longer without a high level, cross platform language with extensive libraries, like Python. The master/registration server, world server, RPG database and compiler are pure Python applications. The packaging system and many utility scripts are also written in Python. My respect for Python only deepened over the production of MoM.
2. Torque Game Engine: We switched MoM to Torque on January 17th, 2005. At this time, I started a new codebase from scratch. I did roll in some of my previous work with TGE Python bindings and day/night cycles. The first thing I did was to get TGE compiling as a Python extension so it could be easily combined with other technology I wanted to use.
I changed around the Torque network game connection handshaking a bit. I pretty much gutted the engine's Player class, replacing much of the animation code and adding material overrides and other things specific to MoM. We had some problems with Torque's sound system which required some hacking. There were a number of changes to the GUI's C++ code that needed changing for the game.
I added some optimizations to the rendering system. The best (and easiest) being a visibility slider which handles terrain, dts shapes, and interiors. I was able to get interiors rendering using VBO's, though I didn't see any noticeable framerate increase. I lowered the client and server tick rates in half which saves a fair amount of CPU. Torque was a great fit for Minions of Mirth's development. I barely had to think about the actual art pipeline which was fantastic!