One of the manifold strengths of games is their ability to codify and contextualise interaction and through that provoke a sense of agency and investment.
At the heart of stories, and vital to their ability to provoke emotional reactions, are characters in conflict with each other, either directly or indirectly.
If we are to even consider interactive or systemic storytelling we need to leverage the strengths of games in a way that gets to the heart of what give stories their power. The following are some of the my own first steps towards a conceptual framework for systemic storytelling.
Of the concepts and techniques described below the majority are implementable in a basic form using current technology, however they are still only building blocks and a substantial amount of further development in design and implementation terms is required.
Part 2 can be found here.
Characters and Players:
- Don’t create allies or antagonists create Characters.
Define Characters both contextually and functionally. Create AI Characters that are autonomous Agents with their own personalities, goals and motivations. Use these variables to determine their behaviour and reaction to the Player’s actions. Let them become allies or antagonists based on the Player’s behaviour and their own perception of it.
- Provide Characters with a view of the world based on actions and outcomes.
Model the world based on objects with associated variables. Make this space searchable, in an AI sense, so each Agent can select the appropriate actions to take based on the desired future state of objects in the world, as determined by their specific personalities.
- Alter the state of objects indirectly.
Don’t allow Players or Characters to directly change object variables, instead utilise temporary objects to provoke changes in other objects: A Grenade creates an Explosion and a Fire object; a Door reacts to the Explosion object by taking damage and the Fire object by starting to burn, the Fire Alarm object also reacts to the Fire object by sounding an alarm and initiating Sprinkler systems. Multiple objects can react to a single temporary object depending on context and proximity.
- Model knowledge of events based on connections between Characters.
Initially only allow knowledge of an event to be passed directly to those Characters who witnessed the event. Propagate that knowledge through the network of Characters based on their connections to each other: Allies share information, Enemies don’t. Any Characters who don’t receive knowledge of events directly should only receive knowledge of the consequences as represented by the changed state of objects within the world. Propagate changes in the world to the player through the same channels.
- Define Character “intelligence” based on their ability to comprehend object interactions.
Limited the searchable possibility space for each Character based on their personality traits. The more “intelligent” a particular Character the further along the chain of indirect object interactions they can search. Standard “Grunts” are only aware of first-order actions and their consequences, limiting their perceived intelligence but allowing for faster reaction times.
- Determine player knowledge through evaluation.
Test Player’s knowledge of the state of objects within the world by requiring them to make use of that knowledge in future actions. If they fail to act on this knowledge either reinforce or continue, as required.
- Contextualise Player behaviour based on Player knowledge.
If Players are repeatedly acting against the interest of a Character whose motivations they have been made aware of, it can be assumed that they are choosing to act in a fashion they know to run counter to that Character’s desires. Use this to codify Player motivations and then reinforce/reinterpret based on future Player behaviour.
- Use past Player actions to make predictions about future actions.
Assume consistency and use that to make predictions about the Player’s likely actions. Have Characters base their interactions with Players on these predictions.
- Use predictions based on past Player actions to define each Character’s “emotional reaction”.
If a Player has consistently been helping a specific Character and then acts against them treat that as a betrayal and have the Character react according based on their personality. Use similar behavioural predictions to handle emotional reactions to other changes in Player behaviour over time.
8 replies on “Framework for Systemic Storytelling, Part 1.”
For the sake of clarification, by systemic do you also mean procedural?
I love this direction of thinking though, and hope more games utilize a more organic approach to storytelling. This almost seems like it could be a “Dear Bioware” or “Dear Lionhead” kind of thing.
If there’s one issue I have with this formulation, it’s that it seems to be a system for creating situations about which the player can make up stories in their head, rather than for creating stories per se. The distinction is similar to that between what’s called Simulationist and Narrativist play in GNS theory from the field of tabletop RPG theory – which I absolutely recommend you investigate. Tabletop RPG theory has a lot for video game theorists to draw on, and it seems underutilised at the moment.
Noah Wardrip-Fruin’s GDC talk about storytelling systems (which I linked you on Twitter) is an example of something that’s more about systems for stories than systems for story-able situations.
I’m aware of GNS theory and have been for a while. I wasn’t directly thinking about it when developing these but the comparisons are accurate. What I would say is that the framework is only a starting point and currently only defined with regards to Characters and Players. There are additional systems required which would take Character motivations and predictions about Player behaviour as inputs to an AI Director like mechanism. Imagine what could be done with such a system if we start with a framework able to predict player behaviour and motivations?
However I’m not as clear in my mind about those aspects yet.
Eve Online has the potential of providing story-telling like this (except that’s multiplayer so I don’t think it counts). Too bad the game’s immersion is ruined by exploitative players.
Great post Justin!
I feel like the rule about altering objects indirectly is true in spirit, but there’s something more generalizable there. I always have difficulty articulating it though, and you touch on it in other points. It seems to be more an issue about managing any changes through a level of abstraction/indirection.
So the example you provide with fire, objects is of course the correct term, but if the example involved quests/missions… Let’s say you had quest A that required you to kill character X, and quest B that required character X to be dead. Linear authoring would define the outputs of quest A as having character X dead and quest B unlocked. A systemic approach would define the outputs of quest A just as the state of character X, and the inputs/requirements of quest B would be that character X was dead.
That way, the player can navigate those quests/missions with more emergence & expression, just like they might problem solve on their own with the fire example. However in the quest example, object state is explicitly referenced, it’s just that the connection in changing the state & what that causes is only implicitly referenced (so the abstraction/indirection comes from the way the state requirements are defined).
Or something like that.
Thanks.
The situation you describe with the quests is something I’ve given quite a bit of thought to, I’m working on something that is structured in a similar way at the moment though it’s at a much lower level. I’m working on an RTS-lite game and the AI determines its next action based on the current state of world and a desired state of the world. It does this by examining the world state (Object Properties) and seeing if it matches the desired state, if it doesn’t it selects a Task (Short-Term action) that will change the state of the specific part of the world it’s interested in from its current state to the desired state. Because it doesn’t simply set a flag when a particular Task has been completed changes in the world state outside the actions of the AI cause it to change its plans if the current Task becomes invalid (Current state no longer satisfies prerequisites for the Task) or the achieved changes has already occurred.
Ideally it the Task network will be searchable so the AIs can determine long term goals based on a sequence of changes to the world state.
If that concept of checking prerequisites was used instead of relying on binary flags to determine Quest completion, it would allow for Quest Objectives to be satisfied through essentially any means possible, all that would matter is if the current world state fit the criteria; they could even complete Quests accidently and it should be less liable to break the gameflow.
If non-player characters then treated the Quests like the Tasks I described, you could potentially have Characters who used the player as a tool to fulfil their long term ambitions.
This is an excellent article, but I would add one point –
You must give the contextual power over to the writers, instead of revolving it around gameplay. More focus must be put on a fully procedural story telling engine into giving the writers contextual power over the influence of variables and switches.
Without this important aspect the project will always progress with a decrease in coherence.