This project was conceived and developed as a part of Georgia Tech’s CS7634 – AI Storytelling in Virtual Worlds class taught by Mark Riedl. We created a multiplayer story generator in Python that would generate a Murder Mystery for the player.
Players choose the character they wish to play. Minor roles are NPCs.
- Motives :
- The simulated story generates motives for characters.
- During gameplay, these motives are divulged to the players. Multiple characters may have motives, but there is only one killer.
- The player must know the motive to claim Whodunnit
- Clues & Knowledge :
- Players must converse with other characters to piece the story together.
- Solving quests in the real world also divulges a clue.
- Inter-player dialogue is limited to exchanging information.
The player playing the murderer does not know he’s the murderer. Any player can choose to accuse each other or themselves when they think they know the murderer.
The scoreboard updates at the end of the game
Our story generator used a simulator with an Island based approach to guide the storyline.
We used a Django-Python data model to define all the models in our story with the relationships between them.
The simulation initially randomly assigns all objects and player characters around the locations in the game world. During each cycle in the simulation the characters are able to interact with objects in the locations (eg. pick up, drop, use, etc), interact with the characters in the locations (eg. talk, argue, etc) and walk around from one location to another. Modeled on real world interactions, characters may have altercations with one another that could lead to arguments or fights based on a probability defined by their interactions. These fights could escalate into a “murderous rage”. Once the killer and the intent/motive to murder has been found, the simulation allows the killer to walk around the world to collect objects that could be used as weapons or to harm the victim. Once the murder has been committed, the killer moves away, and incriminating evidence is hidden randomly in different locations. The simulation cycles are used to form the “Story History” which then informs the Quest/Clue generator in our application.