Wiki · Devlog · Rift branches Design

Designing the Rift branches

The revisit mechanic is the thesis of CONTRABAND. Getting it right took more iteration than any other system. Here's how it evolved from "save/load reskinned" to something that actually says what the game wants to say.

The original idea

The first prototype had a simple save/load system dressed up as Rift branching. You picked a choice; if you didn't like the outcome, you reloaded. The UI called it "revisiting" but mechanically it was just a load. Playtesters said it felt good mechanically but narratively flat. The game had no reason to claim that branches branch; it just looked like a standard RPG with save scumming encouraged.

The breakthrough happened when a playtester asked: "If I revisit, what happens to the version of me who made the other choice?" The right answer, for this game, turned out to be: that version is still real. The branch you walked away from did not cease to exist. It exists in a ghost branch, and characters who can perceive ghost branches — Vex, the Oracle, the Guardians — remember what happened there.

The technical challenge

Making ghost branches real required storing every decision, not just the current state. Each revisit creates a new branch entry in a tree structure; old entries persist. The save file grows linearly with total decisions made across all branches, not just the active one.

For a 20-hour game with 63 narrative scenes and roughly 200 decision points, a fully-branched save is about 80KB of JSON. Not small, but not enormous either. I considered compressing it; I decided not to. The transparency of readable JSON is valuable for debugging and for players who care.

The narrative challenge

Characters who remember ghost branches had to be written as if they had actually lived those branches. Vex's dialog is full of callbacks to choices the player made in branches they abandoned. This required writing every decision path, not just the "current" one — and writing characters who could reference them without being confused.

The solution was to write characters outside of branches. Vex does not exist in a specific branch; she exists as the convergence of many. Her dialogue system can draw from any branch because she, narratively, has access to any branch. The Oracle works the same way but stronger — she speaks only in future tense because she has already experienced the conversation in some branch.

The UX challenge

Players needed to understand that the branch was real without being lectured. Early prototypes had tutorial pop-ups explaining the revisit system. Playtesters ignored them. I replaced the tutorials with a single visual: the Rift branches panel, a vertical spine with branching horizontal lines. Players opened it once out of curiosity and understood the system in 30 seconds. No explanation needed.

The panel is intentionally clickable on any node. You can revisit to any past decision by clicking. This is more convenient than most RPG save systems and is the mechanical reward for understanding the concept. Players who experiment with the branch are rewarded; players who don't can ignore it.

The balance challenge

Making revisits free would have trivialized consequence. Making them costly (limited uses, credit cost, etc.) would have broken the "every branch is real" fantasy. The solution was to make revisits free mechanically but expensive thematically. The Black Fleet AI tracks revisit origins and sends reinforcements. Guardians warn about tree instability. The Oracle charges extra memory from "heavy branchers." Revisiting feels psychologically costly even when it isn't mechanically gated.

This is the part I'm most proud of. The mechanic stays accessible, but the game's fiction makes you feel the weight of what you did in abandoned branches. Players tell me they often choose not to revisit a bad outcome because "that's what happens now."

What I got wrong (initially)

Version 1 of the Rift branches allowed combat revisits to undo combat state entirely. Playtesters used this to grind difficult fights — lose, revisit, try again with better knowledge. It worked mechanically but broke the fiction badly. Combat was supposed to matter. Revisiting to redo it made nothing matter.

Version 2 changed the rule: you can revisit to before combat started, but you cannot revisit within combat. Once a fight begins, you commit. This made combat matter again. The silent revisit (learned from Vex at +80 reputation) is the only exception, and it's gated behind reputation specifically to make it feel earned.

What I learned

Narrative mechanics need fiction that supports them. The Rift branches works because the world of CONTRABAND believes in branches. If the world didn't believe, the mechanic would feel like save/load. Every mechanic in a game is a collaboration between code and story. Getting them to align is the design work.

I also learned that telling players "every choice is real" is not the same as showing them. The most convincing moment in any playtest was when Vex said "in the other version, you killed me." Players who had actually killed Vex in a branch they abandoned sat up straight and understood. That single line did more work than any tutorial.