Systemic narrative design in Ren'Py: choices enter from multiple directions, create persistent state, and come back as later opportunities, costs and callbacks.

Format: Ren'Py interactive narrative · Near-complete

Role: Game & narrative design · writing · branching/state design · Ren'Py scripting & implementation

Focus: Systemic narrative design · branching dialogue · persistent state · fail-forward design

What the game is

Rooftop Riot is a cyberpunk interactive narrative about an illegal rooftop concert that ends in a corporate raid.

Before the show, the player explores the venue, follows rumours and builds relationships. Those choices create allies, enemies, information and escape options that matter later.

The concert itself is playable, and the crowd state the player creates carries directly into the raid and its aftermath.

Flow: explore → choose → perform → survive → face the consequences.

Design principle

Player choices create state that pays off later.


Case study 1 — Multi-entry rescue encounter

A coerced neural-upload encounter can be discovered through five different routes and resolved through multiple approaches and persistent outcomes.

Five entry routes: ambient rumours · abandoned-jacket clue · overheard distress · social lead · direct exploration

Multiple approaches

Approaches include: intimidation · direct confrontation · public exposure · sabotage · stealth · violence · walking away

Failed combat does not reload the scene; it creates another choice about what the player is willing to sacrifice.

Persistent outcomes

Outcomes persist beyond the scene: the player can create an ally, injure the victim, leave a future enemy alive, gain escape-route intelligence or fail the rescue entirely. Those states are referenced again during the raid and ending.

Powered by Worknot