Fallout: Cascadia

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

Fallout: Cascadia Logo

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.

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."

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
  
Scenes from a content showcase video.

Samples

You can view more selected quest samples and dialogue trees in my Writing Samples folder.