I have frequently hinted in the previous chapters at the tedium and agony that went into the Inform-based implementation of Marlinspike and Demeter. My attitude towards this implementation can be characterized by three conceptual metaphors that I used at different stages of the process to try to describe it to others.
I began using this metaphor as I finished Marlinspike and I started writing Demeter. As I worked through the various bugs and game crashes at that time, Demeter felt like a digestive tract. Each turn, the player enters their input. This input is then processed through all the various sub-systems already described: parsed into a command, translated into a deed, passed to the drama manager, cast into an event, and recast into various sub-events. Then the drama manager combs through its stored scenes and selects one to play, producing the system output.
Thus, each turn, this long tract of organs has to work perfectly. If any part of it has a bug, the whole system grinds to a halt. Yet, when it finally works perfectly, all of this detail and marvelous construction then becomes invisible to the end user. It becomes a black box. Input goes in, and output comes back out. At the time I used this metaphor, the output produced by Demeter did indeed bear a suspicious resemblance to the output of a digestive tract. And, in both cases, the nature of this output failed to convey the effort and magic that went into producing it.
As I passed the halfway point, the complexity and tedium began to wear at me. The results were not too bad for a three-to-six month prototype, but I found it increasingly disappointing for a two-year effort. I had many ideas on how the system might be improved, but I also had a deadline to meet. So I pressed on with what tools I had. At this point in the implementation, I just wanted to douse it all in gasoline, light a match, and watch it burn. (There is not much metaphor here, except that it is not really possible to watch software burn.)
As I completed the implementation, combed out the worst of the bugs, and began reflecting upon what I had built, the garden shed metaphor became more apt. Marlinspike/Demeter was meant to be a simple prototype that would allow me to focus my attention on story structure and the effects of reincorporation. Starting out, I had little experience with either artificial intelligence techniques or programming large projects. I also chose fairly simple tools (Inform) to do it, and so my first step was to build some of other tools I needed (such as a linked list implementation).
So the beginning of this project was much as if you decided to get some practice with woodworking by building a small garden shed in the backyard. Since this is a fairly simple project, you decide you only need a hammer, tape measure, and a wood saw. As you start, you realize you might need to build some saw-horses before you start on the shed itself... As the months drag by, your spouse starts asking what you're doing out there and why a simple garden shed is taking so long. Finally, after two years of work, you realize you have actually built a two car garage... and it could really use a live-in loft on top with some indoor plumbing. In retrospect, it would have been worth it to take a carpentry class and buy some power-tools at the outset!
This same project growth happened with Demeter. All the problems involving NPCs, reaction coordination, narration production, and myriad other daily problems had to be tackled. And even the basic task of authoring sufficient scenes proved more extensive than anticipated. Like the metaphorical carpenter, I should have started with better tools and a bit more personal experience before undertaking this project. But, also like that carpenter, I have learned a great deal from the experience, and I now have many plans for expansions on what I have built so far.
Argax Project : Dissertation :
A Rough Draft Node http://www2.hawaii.edu/~ztomasze/argax |
Last Edited: 11 Apr 2011 ©2010 by Z. Tomaszewski. |