Fallout: Cascadia

Role: Narrative Designer | Tools: Creation Kit, Papyrus, GitHub, Notion

Team: ~30+ modders • Timeline: Ongoing • Project: Total Conversion Mod

Fallout: Cascadia Logo
Scenes from a content showcase video.

Overview

Fallout: Cascadia is a standalone total conversion mod for Fallout 4, set in a post-apocalyptic Seattle. As a narrative and quest designer, I helped craft original faction questlines, branching dialogue, and world-reactive storytelling that embraces Fallout’s signature moral ambiguity.

My Responsibilities

  • Designed and implemented multi-path, open world quests across multiple factions
  • Wrote branching dialogue using Papyrus scripting and the Creation Kit
  • Scripted reactive conversations with emotional arcs and faction-specific variations
  • Built narrative worldbuilding through in-game terminals, holotapes, and set dressing
  • Collaborated with Level Design, Scripting, and QA to implement story beats across zones
  • Playtested and iterated on content based on feedback loops and vertical slice reviews

Goal

Design and implement narrative content that captures Fallout's signature moral ambiguity while creating meaningful player choice and faction reactivity. Build quests and dialogue systems that enhance world immersion and provide multiple resolution paths that respect different player builds and moral alignments.

Scope & Impact

  • Wrote and implemented 3+ branching questlines across multiple factions
  • Authored 20+ unique dialogue scenes with stat checks and faction reactivity
  • Built systemic barks and terminals for 10+ world areas

Quest Design & Branching Dialogue

Quest Design Philosophy

I center quests around political conflict, faction power shifts, and moral complexity. Here's a sample from my original side quest, "A Bad Hand":

Quest Premise: Johnny Bradshaw, a failed politician indebted to the Orcas crime syndicate, becomes a pawn in a deadly political game. The player must decide whether to protect, manipulate, or eliminate him.

Branching Outcomes: Align with the Hearts and fake Johnny's death; obey the Clubs and publicly execute him; or negotiate a perfect compromise under Granddaddy's watch. Each path alters faction reputation, city stability, and access to unique perks.

Dialogue Design & Structure

My dialogue design emphasizes reactivity, layered choices, and skill-check driven paths. Here's a smart example from "A Bad Hand"—a confrontation with Johnny Bradshaw that rewards high Perception:

Player [Perception 8+]: "Your cufflinks. Pretty high-end stuff, seems a bit lavish for a broke man."

Johnny (Surprised, defeated):
"You've got sharp eyes. They're from Alicia Wu—a gift. Meant as proof that Security wouldn't dare touch me... but she's probably set me up from the start. Damned Hearts, always two-faced."

Technical Implementation

Papyrus Scripting & Creation Kit Integration

This encounter script from "A Bad Hand" drives a pivotal branching moment involving Johnny Bradshaw. I implemented it directly in the Fallout 4 Creation Kit using a combination of trigger volumes, dialogue conditions, and scripted quest logic.

What this script controls:

  • Skill-based branching dialogue: The script checks player stats (e.g. Perception, Intimidation) and routes to different outcomes in real-time.
  • Dynamic quest stage control: Dialogue choices update quest objectives, modify global variables, and shift faction reputations.
  • World state manipulation: Fake death sequences are staged using XMarker references, disabled/enabled actors, and custom sounds.
  • Creation Kit Integration: Properties like JohnnyBradshaw, ABH_Quest, and GunshotFX were manually linked in the CK interface by selecting scene objects and populating the script’s properties.
  • Debug trace logging: Integrated trace calls help QA verify branching logic and trigger sequences during testing builds.
Expand to view script inline

// ABH_JohnnyEncounterScript.psc – Fallout Cascadia
ScriptName ABH_JohnnyEncounterScript extends ObjectReference

;======= PROPERTIES =======
Quest Property ABH_Quest Auto
Actor Property JohnnyBradshaw Auto
Faction Property HeartsFaction Auto
Faction Property OrcasFaction Auto
ObjectReference Property JohnnyCorpseMarker Auto
ObjectReference Property JohnnyFakeCorpse Auto
GlobalVariable Property PlayerReputation_Hearts Auto
GlobalVariable Property PlayerReputation_Orcas Auto
Message Property PerceptionOptionMessage Auto
Message Property IntimidateOptionMessage Auto
Message Property BluffOptionMessage Auto
Sound Property GunshotFX Auto

;======= STATES =======
Bool Property HasFakeKilledJohnny = False Auto
Bool Property HasRevealedOrcasPlan = False Auto

;======= MAIN TRIGGER =======
Event OnActivate(ObjectReference akActionRef)
    If akActionRef == Game.GetPlayer()
        If Game.GetPlayer().GetAV("Perception") >= 8
            PerceptionOptionMessage.Show()
            HandlePerceptionBranch()
        ElseIf Game.GetPlayer().GetAV("Intimidation") >= 60
            IntimidateOptionMessage.Show()
            HandleIntimidationBranch()
        Else
            BluffOptionMessage.Show()
            HandleBluffBranch()
        EndIf
    EndIf
EndEvent

;======= BRANCH FUNCTIONS =======
Function HandlePerceptionBranch()
    Debug.Trace("[ABH] Player used Perception to uncover Johnny's allegiance.")
    ABH_Quest.SetObjectiveCompleted(10)
    ABH_Quest.SetStage(20)
    PlayerReputation_Hearts.Mod(5)
EndFunction

Function HandleIntimidationBranch()
    Debug.Trace("[ABH] Player used Intimidation to force Johnny's cooperation.")
    ABH_Quest.SetObjectiveCompleted(10)
    ABH_Quest.SetStage(30)
    JohnnyBradshaw.EvaluatePackage()
    PlayerReputation_Orcas.Mod(-3)
EndFunction

Function HandleBluffBranch()
    Debug.Trace("[ABH] Player failed all checks, triggering default conflict.")
    ABH_Quest.SetObjectiveCompleted(10)
    ABH_Quest.SetStage(40)
    JohnnyBradshaw.StartCombat(Game.GetPlayer())
    PlayerReputation_Hearts.Mod(-2)
EndFunction

Function TriggerFakeDeath()
    If HasFakeKilledJohnny
        Return
    EndIf
    Debug.Trace("[ABH] Triggering fake death sequence for Johnny.")
    JohnnyBradshaw.Disable()
    GunshotFX.Play(Game.GetPlayer())
    Utility.Wait(1.0)
    JohnnyFakeCorpse.MoveTo(JohnnyCorpseMarker)
    JohnnyFakeCorpse.Enable()
    ABH_Quest.SetStage(50)
    HasFakeKilledJohnny = True
EndFunction

Function RevealOrcasPlanToHearts()
    If HasRevealedOrcasPlan
        Return
    EndIf
    Debug.Trace("[ABH] Player revealed Orcas plot to Hearts.")
    ABH_Quest.SetStage(60)
    PlayerReputation_Hearts.Mod(10)
    HasRevealedOrcasPlan = True
EndFunction

Function ResetEncounterState()
    HasFakeKilledJohnny = False
    HasRevealedOrcasPlan = False
    JohnnyBradshaw.Enable()
    JohnnyFakeCorpse.Disable()
    ABH_Quest.SetStage(10)
EndFunction
  

Work Samples

Below are examples of my narrative design work on Fallout: Cascadia, showcasing different aspects of my contributions to the project.

Bark Dialogue

An example of the ambient dialogue systems I designed for Cascadia's trading caravans. This barks sheet demonstrates how I created reactive dialogue that responds to player faction reputation, environmental conditions, and world state changes. Each bark includes multiple variations and conditional triggers to create dynamic, living NPCs that feel aware of the player's actions and the world around them.

Branching Dialogue

An example of my branching dialogue design work for the NPC Toby Green in the "Catch and Release" quest. This dialogue spreadsheet demonstrates my approach to conversation design, including skill checks, emotional beats, and multiple resolution paths. The format shows how I organize complex dialogue trees with clear conditional logic and implementation notes for the Creation Kit.

More Writing Samples

If you want to check out more writing samples, visit my Writing Samples page.

What I Learned

Designing for a large mod team reinforced disciplined quest scoping, explicit state tracking, and readable Papyrus script conventions. I learned to structure dialogue and quest logic for maintainability, build systems that remain reactive over long playthroughs, and collaborate across level, scripting, and QA to keep narrative intent aligned with world implementation.