I suppose this blog deserves a proper conclusion. So, here it goes.
I managed to implement the murder mystery game and get it working the night before my presentation. There are demo videos below (finally).
The way it works is this:
You start as a player character in a world of NPCs (some randomly generated, some not). You can walk around and talk to them, affecting their moods with different actions. At a certain point, either because of you (indirectly) or not, someone will get angry and will murder another character. You will be alerted, at which point you can go around and ask each person how they're feeling and what they've been doing (the murderer will lie about committing murder). You figure out who you think did it and accuse them. If you're right, you win! If you're wrong, you lose.
Relative to the rest of the project, the game was actually pretty easy to implement. The storytelling engine was already defined... All I had to do was define a start state (when someone is murdered, allow the player to accuse) and an end state (when the player accuses, gameover). Everything else just came out of the emotions and actions I defined for the murder mystery, meaning I was able to set it up in almost no time using the code that had already been built. The ease with which the engine was converted into a playable game was a welcome surprise, and a clear indication that this model is great for use with games. Even more of a surprise was how much fun the game was to play. I found myself spending up to half an hour trying to follow characters around and figure out which one had the best motivation for killing the victim (in the demo videos above the murderer says "I did not do anything to (name of victim)" so that the game can be ended quickly, but the hard version has the murderer cover the murder with a good lie like "and then they stormed off."). That's what really works about this murder mystery game. The murderer isn't just chosen at random - they murder because of motive, and the motive is what you investigate. The motive is generated dynamically, and will be different each time. Simple as it is, the model works. I created a game that has a different story each time you play because the characters in the world behave differently every time you play.