Multilinear Story System
A Rust library for building interactive stories with constrained parallel state channels.
Overview
Model narrative systems using:
- Channels: Independent state machines representing story aspects
- Events: Coordinated transitions across multiple channels
- Safe Composition: Guaranteed valid states through transition constraints
Inspired by petri nets but designed for narrative applications.
Features
- 🚦 State channels with discrete value transitions
- ⚡ Event-driven story progression
- 🔄 Backward simulation capabilities
- 🛡️ Prevention of creating invalid event changes
- 📈 Efficient tracking of current state and available events
Quick Start
use Simulation;
use ;
let mut story = new;
// Create state channels
let place = story.add_channel;
let clothes = story.add_channel;
// Define event: Move from bedroom to living room
let event_move = story
.add_event
.with_change
.unwrap
.event;
// Define event: Change clothes in bedroom
let event_clothes = story
.add_event
.with_change
.unwrap
.event;
let mut simulation = new;
simulation.try_call;
simulation.try_call;
simulation.try_revert;
Core Concepts
- Channel: Independent state machine representing a variable of the story state (like the player location or the relationship to somebody)
- Condition: A condition connected to a channel, also capable of changing the channel (like changing the player location from livingroom to kitchen)
- Event: Transition rule combining multiple channel conditions