Point M3 (tasks 3.1, 3.3, 3.4), M5 (task 5.3), and M6 (task 6.1) to the new character lore profiles in docs/bookmarks/the end of an empire/characters/. Add design docs section to MASTERPLAN current state noting the 19 character profiles and index exist. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
44 KiB
M6: The Plan
The core story of Mistborn: The Final Empire is playable as an event-driven narrative.
Prerequisites
- M5 (The Crew) must be complete:
- Kelsier's crew exists as an adventurer band (or landed fallback)
- Bookmark works with Kelsier/Vin selectable
- Game rule toggle (Narrative Mode / Sandbox Mode) functional
- Kelsier death -> Vin succession mechanic in place
- Crew decisions framework (Recruit, Plan Operation, Lay Low) implemented
is_narrative_mode_trigger,is_crew_leader_trigger,is_crew_member_triggerscripted triggers existcrew_assembledvariable tracked on Kelsier
- M3 (The Final Empire) outputs used:
- Lord Ruler exists as immortal character,
e_final_empireholder - Great House characters (Straff Venture, Shan Elariel, Elend, etc.)
- Lord Ruler attention system (0-100 variable, 3-tier events)
- Religions (Steel Ministry, Survivorism) functional
- Lord Ruler exists as immortal character,
- M4 (Scadrial on the Map) outputs used (if available):
- Custom casus belli types (Rebellion CB)
- Custom schemes (Noble Infiltration)
- Province modifiers in place
- If M4 is not complete, this milestone creates placeholder CB/scheme definitions and marks them for polish in M4/M7
Current State
Events (events/): 8 event files exist with ~2,700 lines total. Key files:
ball_events.txt-- 3 ball events (host, political, intrigue, display) fully implemented. These are the foundation for the infiltration arc.lord_ruler_events.txt-- 5 events (3 tier escalation + decay + gain tracking) fully implemented. Attention system is complete and tested.snapping_events.txt-- 4 events (natural, forced, success, failure) fully implemented. Vin's snapping can hook into this.skaa_events.txt-- 2 events (crackdown aftermath, improved conditions) basic implementation. Needs expansion for the skaa army arc.skaa_allomancer_events.txt,hemalurgy_events.txt,atium_events.txt,mistborn_misc_events.txt-- stubs or minimal implementations.
Scripted effects (common/scripted_effects/mistborn_effects.txt): Contains
activate_allomancy_effect, increase/decrease_lord_ruler_attention_effect,
trigger_snapping_effect, apply_hemalurgic_spike_effect,
create_steel_inquisitor_effect, house effects, atium effects. ~190 lines.
Scripted triggers (common/scripted_triggers/mistborn_triggers.txt): Contains
allomancy checks, feruchemy checks, hemalurgy checks, cultural checks, political
checks. ~134 lines. M5 adds game mode and crew triggers.
Decisions (common/decisions/): 8 decisions for landed nobles. M5 adds 3
crew decisions. The "Plan the Next Operation" decision from M5 is the entry
point for M6 narrative arcs.
On-actions (common/on_action/mistborn_on_actions.txt): Hooks on birthday,
yearly pulse, game start, birth, and death (from M5). ~120 lines.
Modifiers (common/modifiers/00_mistborn_modifiers.txt): Character modifiers
(compounder, attention, ministry favor/displeasure, breeding, atium supply,
inquisitor power), opinion modifiers, province modifiers (ash blight, koloss
rampage). ~154 lines.
Implementation Tasks
6.1 -- Crew Assembly Event Arc
Context: The first narrative arc. Kelsier recruits each named crew member
through events with skill checks and narrative flavor. This replaces the
placeholder from M5's recruit_crew_member_decision. Each recruitment is a
mini-event chain: learn about the person, make a pitch, pass a skill check,
welcome them. Completing the full crew grants a modifier and unlocks the main
operation arcs.
Steps:
-
Create
events/crew_assembly_events.txtwith namespacemistborn_crew_assembly. -
Implement the recruitment hub event
mistborn_crew_assembly.0001:- Fires when the player takes the "Recruit a Crew Member" decision
- Checks which crew members are not yet recruited (via flags on each
character:
has_character_flag = recruited_to_crew) - Presents options for the next available recruit (in rough book order):
- Breeze (requires diplomacy >= 8 or intrigue >= 10)
- Ham (requires martial >= 8 or prowess >= 12)
- Clubs (requires intrigue >= 10)
- Dockson (always available -- he's Kelsier's old friend)
- Marsh (requires learning >= 8, OR Kelsier is the recruiter)
- Yeden (requires prestige >= 50 -- convincing the rebel leader)
- OreSeur (requires gold >= 200 -- kandra Contract)
- Vin (special -- see step 4)
-
For each crew member, implement a 2-event chain:
- Pitch event (
mistborn_crew_assembly.01XX): Narrative description of meeting the person. 2-3 options with different skill checks:- Option A: primary skill check (higher success rate)
- Option B: alternative approach (lower success rate, different cost)
- Option C: "Not now" (cancel, no cooldown penalty)
- Result event (
mistborn_crew_assembly.02XX): Success or failure. On success:- Character joins the band/court
- Set
has_character_flag = recruited_to_crewon the recruit - Increment Kelsier's
crew_assembledvariable - Prestige reward (+25-50 depending on member importance) On failure:
- Small prestige loss
- Can retry after cooldown (30-60 days)
Specific recruitment events (IDs follow pattern -- XX = member index):
Member Pitch ID Result ID Primary Check Cost Dockson .0110 .0210 Auto-success (old friend) 10 gold Breeze .0120 .0220 Diplomacy >= 10 25 gold Ham .0130 .0230 Martial >= 10 OR Prowess >= 14 15 gold Clubs .0140 .0240 Intrigue >= 12 20 gold Marsh .0150 .0250 Learning >= 10 (Kelsier bonus +5) 0 gold Yeden .0160 .0260 Prestige >= 75 50 prestige OreSeur .0170 .0270 Gold >= 200 (Contract payment) 200 gold Vin .0180 .0280 Intrigue >= 8 (finding her) 0 gold - Pitch event (
-
Vin's recruitment is special:
- Event
mistborn_crew_assembly.0180: Kelsier discovers a skaa girl unconsciously Soothing people in Camon's crew. Three options:- "Reveal yourself and offer training" (direct approach)
- "Have Breeze confirm her abilities first" (requires Breeze recruited)
- "Watch her a while longer" (delays but grants intrigue XP)
- On success, Vin joins. If she still has
trait_allomantic_potential, trigger a special early snapping eventmistborn_crew_assembly.0300within 30 days (Kelsier forces her to burn pewter, she snaps into Mistborn). - Vin's snapping event
mistborn_crew_assembly.0300:- Narrative: Kelsier gives Vin a vial of metal flakes. She burns them. The world changes.
- Effect: remove
trait_allomantic_potential, addtrait_mistborn - Major prestige boost (+200)
- Sets
has_character_flag = vin_snapped
- Event
-
Crew complete event
mistborn_crew_assembly.0500:- Fires when
var:crew_assembled >= 8(all members recruited) - Narrative: The crew gathers around a table. The plan is laid out.
- Effect:
- Add modifier
full_crew_assembledto Kelsier (bonuses: +2 intrigue, +2 martial, +1 diplomacy, +0.5 monthly prestige) - Set
has_character_flag = crew_fully_assembled - Unlock the "Plan the Next Operation" decision options for all arcs
- Add modifier
- Option A: "Now we begin." (triggers
mistborn_crew.0010-- the operation planning menu from M5)
- Fires when
-
Add modifier
full_crew_assembledtocommon/modifiers/00_mistborn_modifiers.txt:full_crew_assembled = { icon = "gfx/interface/icons/modifiers/modifier_compounder.dds" intrigue = 2 martial = 2 diplomacy = 1 monthly_prestige = 0.5 } -
Add localization for all crew assembly events to
localization/english/mistborn_events_l_english.yml. Each event needs title, description, and option text keys. Estimated: ~80 localization keys for the full assembly arc. Key format:mistborn_crew_assembly.XXXX.t,mistborn_crew_assembly.XXXX.desc,mistborn_crew_assembly.XXXX.a,.b,.c.
Files:
events/crew_assembly_events.txt-- createcommon/modifiers/00_mistborn_modifiers.txt-- modifylocalization/english/mistborn_events_l_english.yml-- modify (major)
References:
- Recruitment skill check patterns:
events/snapping_events.txt:81-251(forced snapping has similar multi-option skill-gated structure) - Crew member lore:
docs/lore/mistborn-universe.md:165-174 - Character lore:
docs/bookmarks/the end of an empire/characters/-- individual profiles with personality and relationship details for event writing - Event arc planning:
docs/bookmarks/the end of an empire/events.md:9-15
6.2 -- Skaa Army Event Arc
Context: Kelsier and Yeden secretly train a skaa army in caves outside Luthadel. This is a multi-year building process with periodic events, discovery risk tied to Lord Ruler attention, and a climactic success/failure outcome. The army is the military backbone of the rebellion.
Steps:
-
Create
events/skaa_army_events.txtwith namespacemistborn_skaa_army. -
Implement the arc start decision integration. When the player selects "Train the Skaa Army" from the Plan Operation menu (
mistborn_crew.0010):- Set
has_character_flag = skaa_army_training_active - Set variable
skaa_army_progress = 0(tracks 0-100 progress) - Set variable
skaa_army_size = 0(tracks troop count) - Trigger
mistborn_skaa_army.0001(the army training begins event)
- Set
-
Implement
mistborn_skaa_army.0001-- "The Training Begins":- Narrative: Yeden leads the first batch of skaa recruits to hidden caves.
- Requires: Yeden is alive and recruited (
has_character_flag = recruited_to_crew) - If Yeden is dead/not recruited: penalty (progress is slower, -20% to all progress gains)
- Option A: "Send Ham to train them" (requires Ham recruited, martial focus -- +15 progress per event)
- Option B: "Train them yourself" (player gets martial XP but attention +5)
- Option C: "Let Yeden handle it alone" (slower, +8 progress per event)
-
Implement recurring training events on yearly pulse. Add to
common/on_action/mistborn_on_actions.txtunderon_yearly_pulse:mistborn_skaa_army.0010 # Annual army progress checkEvent
mistborn_skaa_army.0010(hidden):- Trigger:
has_character_flag = skaa_army_training_active - Effect: increment
skaa_army_progressby 15-25 (random range) - Then fire a visible event based on progress milestones:
- Progress 25+:
mistborn_skaa_army.0020-- "Growing Numbers" - Progress 50+:
mistborn_skaa_army.0030-- "The Army Takes Shape" - Progress 75+:
mistborn_skaa_army.0040-- "Ready for War" - Progress 100+:
mistborn_skaa_army.0050-- "The Army is Prepared"
- Progress 25+:
- Trigger:
-
Implement milestone events:
mistborn_skaa_army.0020-- "Growing Numbers" (progress ~25):- Narrative: Hundreds of skaa have answered the call. The caves are crowded.
- Option A: "Expand to a second cave" (gold -100, progress +10, but attention +5 -- more visible)
- Option B: "Keep them packed in" (no cost, progress +5, morale penalty)
- Option C: "Arm them with stolen weapons" (gold -75, army quality boost)
mistborn_skaa_army.0030-- "The Army Takes Shape" (progress ~50):- Narrative: Over a thousand skaa now train in the caves. Ham reports they are learning basic formations.
- Option A: "Push harder -- we need them ready" (progress +15 but attention +8 and risk of discovery)
- Option B: "Steady pace" (progress +10, safe)
- Option C: "Bring Allomancers to train with them" (requires crew Allomancers,
progress +12, army gets
allomancer_ledflag for quality bonus)
mistborn_skaa_army.0040-- "Ready for War" (progress ~75):- Narrative: The army could fight. Not well, but they could fight.
- Sets flag
skaa_army_combat_ready - Option A: "It's enough. Begin preparations." (progress +5, army is usable for rebellion trigger)
- Option B: "A few more months of training" (progress +10, army quality +1)
mistborn_skaa_army.0050-- "The Army is Prepared" (progress 100):- Narrative: Thousands of trained skaa soldiers wait in the caves. They are ready. The question is whether you are.
- Sets flag
skaa_army_fully_prepared - Adds modifier
hidden_army_readyto Kelsier/crew leader - Effect: converts to actual troops when rebellion fires (see 6.4)
-
Implement discovery risk events. On each yearly pulse, if
skaa_army_training_activeis set, roll a discovery check:mistborn_skaa_army.0100(hidden):- Base discovery chance: 10%
- Modified by:
- Lord Ruler attention >= 50: +15%
- Lord Ruler attention >= 75: +25%
- Clubs is recruited (Smoker cover): -10%
- Has Allomancer-led army: +5% (more activity to detect)
- On discovery trigger:
mistborn_skaa_army.0110
mistborn_skaa_army.0110-- "The Army is Discovered!":- Narrative: Steel Inquisitors find the caves. Koloss are dispatched.
- Effect:
skaa_army_progressreset to 0skaa_army_training_activeflag removed- Lord Ruler attention +25
- If Yeden is alive: 50% chance Yeden is killed (as in the book)
- Prestige -200
- Stress +50
- Option A: "Scatter and regroup" (can restart training after 2 years)
- Option B: "Fight with what we have" (if progress >= 50, trigger an immediate desperate rebellion with reduced army -- see 6.4)
-
Add localization for all skaa army events (~40 keys).
Files:
events/skaa_army_events.txt-- createcommon/on_action/mistborn_on_actions.txt-- modify (add yearly pulse events)common/modifiers/00_mistborn_modifiers.txt-- modify (addhidden_army_ready)localization/english/mistborn_events_l_english.yml-- modify
References:
- Event arc planning:
docs/bookmarks/the end of an empire/events.md:17-24 - Lord Ruler attention system:
events/lord_ruler_events.txt:1-586 - Existing attention effects:
common/scripted_effects/mistborn_effects.txt:44-99 - Yearly pulse pattern:
common/on_action/mistborn_on_actions.txt:18-92
6.3 -- Noble House Infiltration Event Arc
Context: Vin attends noble balls disguised as "Valette Renoux" to gather intelligence and sow discord between Great Houses. This arc integrates with the existing ball event system and adds a spy scheme layer. The player chooses which houses to approach, which rumors to spread, and risks having their cover blown.
Steps:
-
Create
events/infiltration_events.txtwith namespacemistborn_infiltration. -
Implement the arc start. When "Infiltrate the Noble Houses" is selected from Plan Operation:
- Set
has_character_flag = infiltration_active - Set variable
infiltration_progress = 0(0-100) - Set variable
houses_undermined = 0 - If Vin is alive and recruited: she is the primary operative
(save as
scope:infiltrator). If Vin is dead: Breeze becomes operative (requires Breeze recruited). - Trigger
mistborn_infiltration.0001
- Set
-
Implement
mistborn_infiltration.0001-- "The Disguise":- Narrative: Vin (or Breeze) adopts a false identity to infiltrate noble society. She will attend balls, make connections, and spread discord.
- Option A: "Target House Venture" (the biggest prize, highest risk)
- Option B: "Target House Elariel" (moderate risk, Shan is dangerous)
- Option C: "Target a minor house first" (safest, lower reward)
- Each choice sets
has_character_flag = targeting_house_<name>and triggers the first infiltration event.
-
Implement infiltration ball events that hook into the existing ball system. Add a yearly pulse event:
mistborn_infiltration.0010(triggers ~every 6 months if infiltration active):- Fires if
has_character_flag = infiltration_active - The infiltrator attends a ball at the target house
- 3-4 options based on the infiltrator's abilities:
- "Gather intelligence" (intrigue check, +10-15 infiltration progress)
- "Spread rumors between houses" (diplomacy check, increases inter-house rivalry, +5 progress)
- "Seduce a noble for information" (charm check, high reward but high risk of cover being blown)
- "Use Allomancy subtly" (requires Soother/Rioter/Mistborn, +15 progress but detection risk if a Seeker is present)
- Each option has success/failure branches with appropriate consequences
- Fires if
-
Implement milestone events:
mistborn_infiltration.0020-- "A Web of Lies" (progress ~30):- Narrative: The infiltrator has established a network of contacts. Noble houses are beginning to suspect each other.
- Effect: target house gets opinion penalty with a neighboring house (-15)
- Option: choose which house to further undermine
mistborn_infiltration.0030-- "The Houses Turn" (progress ~60):- Narrative: Open hostility breaks out between two Great Houses. Accusations fly. The crew's work is paying off.
- Effect: two targeted houses gain rivalry modifiers, reducing their
cooperation against the crew. Increment
houses_undermined. - Optionally: trigger a vanilla-style feud/rivalry between the AI houses
mistborn_infiltration.0040-- "The Alliance Shatters" (progress ~90):- Narrative: The Great Houses are at each other's throats. The unified front that could crush the rebellion no longer exists.
- Effect: set
has_character_flag = noble_houses_fractured - This flag is a prerequisite for the rebellion arc to succeed (6.4)
- Bonus: reduces the Lord Ruler's military response strength in the rebellion war
-
Implement cover blown event:
mistborn_infiltration.0100-- "Exposed!":- Trigger: random chance on each infiltration action, modified by:
- Intrigue of infiltrator (higher = less risk)
- Seeker present at ball (presence of
trait_misting_seekerin target court increases risk by +15%) - Clubs recruited (Smoker cover: -10% risk)
- Using Allomancy openly: +20% risk
- Narrative: The infiltrator's true identity is discovered. Guards close in.
- Option A: "Fight your way out" (requires Mistborn or martial >= 14, Vin escapes but cover is blown permanently)
- Option B: "Bluff your way through" (diplomacy >= 16 check)
- Option C: "Flee" (infiltration arc ends, progress reset to half, attention +15)
- On full failure: infiltrator captured, must be rescued (follow-up event) or infiltrator is killed
- Trigger: random chance on each infiltration action, modified by:
-
Implement Vin vs Shan Elariel special event (ties into M7 Ball Assassination but plant the seed here):
mistborn_infiltration.0200-- "A Dangerous Rival":- Fires at progress >= 50 if Shan Elariel exists and target is House Venture or Elariel
- Narrative: Shan suspects Vin. Tension at a ball.
- Sets up the confrontation -- does not resolve it here (M7 handles the
fight), but establishes the rivalry flag
has_character_flag = shan_vin_rivalry
-
Add localization for all infiltration events (~50 keys).
Files:
events/infiltration_events.txt-- createcommon/on_action/mistborn_on_actions.txt-- modify (add infiltration pulse)localization/english/mistborn_events_l_english.yml-- modify
References:
- Existing ball events:
events/ball_events.txt:1-450(integrate with these) - Event arc planning:
docs/bookmarks/the end of an empire/events.md:26-33 - Intrigue check patterns:
events/ball_events.txt:218-328 - Lord Ruler attention:
common/scripted_effects/mistborn_effects.txt:44-73
6.4 -- Rebellion Event Arc
Context: The climax of the narrative. When conditions are met -- crew assembled, army trained (or at least combat-ready), noble houses fractured -- the player can trigger the skaa rebellion. This uses a faction-style mechanic or a direct war declaration depending on what is available from M4's casus belli work.
Steps:
-
Create
events/rebellion_events.txtwith namespacemistborn_rebellion. -
Implement the rebellion trigger decision. Add to
common/decisions/01_crew_decisions.txt:trigger_rebellion_decision:is_shown:is_crew_leader_trigger = yesANDis_narrative_mode_trigger = yesANDhas_character_flag = crew_fully_assembledis_valid:has_character_flag = skaa_army_combat_readyORhas_character_flag = skaa_army_fully_preparedhas_character_flag = noble_houses_fractured(from infiltration) OR willingness to fight without it (harder path)- NOT
has_character_flag = rebellion_triggered
cost: prestige = 200effect:- Set
has_character_flag = rebellion_triggered - Trigger
mistborn_rebellion.0001
- Set
-
Implement
mistborn_rebellion.0001-- "The Night of Rebellion":- Narrative: The fires are lit. The skaa rise in Luthadel's streets. After a thousand years, someone has dared to challenge the Lord Ruler.
- Effect:
- If
skaa_army_fully_prepared: create a large army (special event troops viaadd_men_at_armsor spawn army effect) - If only
skaa_army_combat_ready: create a smaller army - Lord Ruler attention set to 100 (maximum)
- All Great Houses get
rebellion_chaosmodifier (reduces their available troops for 2 years) - If
noble_houses_fractured: houses cannot join against the crew for 1 year (they fight each other instead)
- If
- Option A: "For the skaa!" (begin the war)
- Triggers the war declaration event
-
Implement war declaration. Two approaches depending on M4 status:
If M4's Rebellion CB exists:
- Use the
rebellioncasus belli to declare war one_final_empire(the Lord Ruler's title) - War target: the holder of Kredik Shaw (the Lord Ruler or his proxy)
- War goal: liberate Luthadel
If M4's CB does not yet exist (fallback):
- Create a minimal
rebellion_cbincommon/casus_belli_types/00_mistborn_cb.txt:rebellion_cb = { group = event target_titles = { always = yes } ai_only_against_neighbors = yes valid_to_start = { scope:attacker = { has_character_flag = rebellion_triggered } } on_victory = { # Transfer target titles to attacker } on_defeat = { # Rebellion crushed } war_score_from_battles = 1.5 # Battles matter more than sieges } - Trigger the war via scripted effect
- Use the
-
Implement rebellion progress events (war events that fire during the rebellion war):
mistborn_rebellion.0010-- "The Streets of Luthadel" (fires at war start):- Narrative: Skaa flood the streets. The garrison is overwhelmed in the outer districts. But the inner city holds.
- Sets variable
rebellion_phase = 1
mistborn_rebellion.0020-- "The Inquisitors Strike Back" (fires after ~6 months or when war score < 25%):- Narrative: Steel Inquisitors emerge from the Canton of Inquisition. They are terrifying. They are unstoppable.
- Effect: enemy gets temporary martial bonus. Player loses troops.
- Option A: "Send our Mistborn to fight them" (if Mistborn in crew, better outcome)
- Option B: "Avoid direct confrontation" (lose territory but preserve forces)
mistborn_rebellion.0030-- "Kelsier Fights the Lord Ruler" (fires when Kelsier is alive AND war score >= 40%):- Narrative: Kelsier confronts the Lord Ruler publicly in the city square.
- This event ALWAYS results in Kelsier's death (as in the book).
- Effect: Kelsier dies. But this triggers the martyrdom chain (6.5).
- If the player is Kelsier: control transfers to Vin via the M5 succession mechanic. The martyrdom event fires on Vin.
- If Kelsier is already dead: skip this event.
mistborn_rebellion.0040-- "Victory" (fires when war score >= 100% or war is won):- Narrative: The Final Empire's garrison is broken. Luthadel is free. But the Lord Ruler still lives in Kredik Shaw...
- Effect:
- Crew leader gains Luthadel titles (at minimum
c_luthadel) rebellion_chaosmodifier removed- Sets
has_character_flag = rebellion_won - Does NOT kill the Lord Ruler (that is M7's endgame)
- Major prestige reward (+500)
- Survivorism becomes the dominant religion in Luthadel
- Crew leader gains Luthadel titles (at minimum
mistborn_rebellion.0050-- "Defeat" (fires when war score <= -100% or war is lost):- Narrative: The rebellion is crushed. The Lord Ruler's forces are merciless.
- Effect:
- Massive attention (set to 100)
- Random crew members may die (30% chance each)
- Prestige -500
- If Narrative Mode: allow a restart attempt after 5 years (set flag
rebellion_failed, but allow re-triggering) - Player continues as the surviving crew leader
-
Add localization for all rebellion events (~30 keys).
Files:
events/rebellion_events.txt-- createcommon/decisions/01_crew_decisions.txt-- modify (add trigger_rebellion)common/casus_belli_types/00_mistborn_cb.txt-- create (if M4 CB not ready)localization/english/mistborn_events_l_english.yml-- modify
References:
- Event arc planning:
docs/bookmarks/the end of an empire/events.md:197-224 - War/faction patterns: vanilla CK3
game/common/casus_belli_types/ - Lord Ruler events:
events/lord_ruler_events.txt:340-440(Tier 3 devastation)
6.5 -- Kelsier's Martyrdom Event Arc
Context: The emotional core of the story. Kelsier's death does not end the rebellion -- it strengthens it. His sacrifice transforms him into a religious figure (the Survivor) and galvanizes the skaa. This arc ties together the succession mechanic from M5, the rebellion from 6.4, and the Survivorism religion from M3.
Steps:
-
Add events to
events/rebellion_events.txt(same namespacemistborn_rebellion) or create a separateevents/martyrdom_events.txtwith namespacemistborn_martyrdom. -
Implement
mistborn_martyrdom.0001-- "I Am Hope" (fires on Kelsier's death during the rebellion, triggered frommistborn_rebellion.0030or from theon_deathhook if Kelsier dies during an active rebellion):- Trigger: Kelsier (900100) has died AND
has_global_variable = rebellion_in_progress(or the rebellion war is active) - Narrative: "I am hope." Kelsier's last words echo through Luthadel. The skaa do not despair. They rage. A man has killed an Inquisitor in public. A man has defied the Lord Ruler and smiled.
- This event fires on Vin (or the new crew leader) after the M5 succession event resolves.
- Effect:
- Set
has_global_variable = { name = kelsier_martyred value = yes } - All skaa characters gain opinion bonus toward the crew (+30)
- Rebellion war score +25% (major boost)
- Survivorism gains converts: trigger
mistborn_martyrdom.0010on random skaa characters (they convert to Survivorism) - Add modifier
kelsier_legacyto Vin: +5 diplomacy, +3 martial, +1 monthly prestige, +20 same_faith_opinion (Survivorists)
- Set
- Trigger: Kelsier (900100) has died AND
-
Implement
mistborn_martyrdom.0010-- "The Survivor of the Flames" (spread of Survivorism):- Hidden event that fires on multiple skaa characters
- Effect: random chance (30%) to convert to Survivorism
- Skaa characters near Luthadel: higher conversion chance (50%)
- Sets the stage for Survivorism becoming a major faith post-rebellion
-
Implement
mistborn_martyrdom.0020-- "Vin's Grief" (fires on Vin, 30 days after Kelsier's death):- Narrative: Vin mourns Kelsier. But she sees what his death has done. The skaa believe. For the first time in a thousand years, they believe in something.
- Option A: "He knew this would happen. He planned it." (lose stress -30, gain determination modifier)
- Option B: "I will finish what he started." (gain martial +2, intrigue +2 temporarily for the remainder of the rebellion)
- Option C: "I can't do this alone." (gain stress +20, but crew rallies -- all crew members gain temporary combat bonus)
-
Implement
mistborn_martyrdom.0030-- "The Religion of the Survivor" (fires 1 year after Kelsier's death):- Narrative: The skaa have begun to worship Kelsier as the Survivor of Hathsin -- a religious figure, a symbol of hope.
- Effect:
- Survivorism gains a holy site at
b_luthadel_city(the square where Kelsier died) -- modifycommon/religion/holy_sites/ - Survivorism may get a modifier boosting its spread
- Kelsier's legacy becomes permanent: the
kelsier_legacymodifier on Vin becomes permanent (no years limit)
- Survivorism gains a holy site at
-
Add modifiers to
common/modifiers/00_mistborn_modifiers.txt:kelsier_legacy = { diplomacy = 5 martial = 3 monthly_prestige = 1 same_faith_opinion = 20 } rebellion_chaos = { levy_size = -0.3 garrison_size = -0.5 county_opinion = -20 } reluctant_leader = { diplomacy = -2 stress_gain_mult = 0.2 } hidden_army_ready = { martial = 2 monthly_prestige = 0.3 } -
Add localization for all martyrdom events (~25 keys).
Files:
events/martyrdom_events.txt-- create (or add torebellion_events.txt)common/modifiers/00_mistborn_modifiers.txt-- modifycommon/religion/holy_sites/00_holy_sites.txt-- modify (conditionally add new holy site)localization/english/mistborn_events_l_english.yml-- modify
References:
- Event arc planning:
docs/bookmarks/the end of an empire/events.md:206-214 - Survivorism religion:
common/religion/religions/00_scadrial_religions.txt - Holy sites:
common/religion/holy_sites/00_holy_sites.txt - M5 succession mechanic:
events/crew_events.txt(from M5 task 5.5)
6.6 -- Narrative Mode Gating and On-Action Integration
Context: All M6 events must be gated behind the Narrative Mode game rule. Sandbox players should not see scripted story beats. Additionally, all recurring events need proper on-action hooks, and the event arcs need to be wired into the game loop.
Steps:
-
Add
is_narrative_mode_trigger = yesto thetriggerblock of every M6 event that should only fire in Narrative Mode. This includes:- All crew assembly events (
mistborn_crew_assembly.*) - All skaa army events (
mistborn_skaa_army.*) - All infiltration events (
mistborn_infiltration.*) - All rebellion events (
mistborn_rebellion.*) - All martyrdom events (
mistborn_martyrdom.*) Exception: Some underlying mechanics (the rebellion CB, the army spawning) may be available in both modes, since Sandbox players might organically reach rebellion conditions.
- All crew assembly events (
-
Add on-action hooks for recurring events to
common/on_action/mistborn_on_actions.txtunderon_yearly_pulse:# M6 Narrative Arc Events mistborn_skaa_army.0010 # Annual army progress mistborn_skaa_army.0100 # Annual army discovery check mistborn_infiltration.0010 # Periodic infiltration ball -
Add a 6-month pulse for infiltration events. CK3 does not have a native 6-month pulse, so implement via yearly pulse with a flag-based alternation:
# In on_yearly_pulse effect block: if = { limit = { has_character_flag = infiltration_active NOT = { has_character_flag = infiltration_event_this_year } } trigger_event = { id = mistborn_infiltration.0010 days = { 30 180 } } add_character_flag = { flag = infiltration_event_this_year years = 1 } } -
Add the rebellion war active tracking. When rebellion war starts, set a global variable:
set_global_variable = { name = rebellion_in_progress value = yes }Clear it when the war ends (victory or defeat events).
-
Create an
on_game_startblock specifically for Narrative Mode initialization:- If Narrative Mode AND player is Kelsier (900100):
- Set
has_character_flag = is_crew_leader - Set all initial crew members'
is_crew_memberflags - Initialize
crew_assembledto the number of members already in the band (some may start already assembled; implementation choice) - Trigger the opening narrative event (welcome to the crew) after 5 days:
mistborn_crew_assembly.0000-- "The Plan": Kelsier explains his audacious plan to overthrow the Lord Ruler. This is the first event the player sees.
- Set
- If Narrative Mode AND player is Kelsier (900100):
-
Add localization for the opening narrative event and any gating tooltips (~10 keys).
Files:
common/on_action/mistborn_on_actions.txt-- modify (major expansion)events/crew_assembly_events.txt-- modify (add opening event)localization/english/mistborn_events_l_english.yml-- modify
References:
- Existing on-actions:
common/on_action/mistborn_on_actions.txt:1-119 - Game rule triggers from M5:
common/scripted_triggers/mistborn_triggers.txt - Yearly pulse pattern:
common/on_action/mistborn_on_actions.txt:18-92
6.7 -- Scripted Triggers and Effects for M6
Context: The narrative arcs introduce many new game state checks and reusable effect blocks. These should be centralized in the scripted triggers/effects files for consistency and reuse.
Steps:
-
Add the following scripted triggers to
common/scripted_triggers/mistborn_triggers.txt:# Crew state triggers is_crew_fully_assembled_trigger = { has_character_flag = crew_fully_assembled } has_skaa_army_trigger = { OR = { has_character_flag = skaa_army_combat_ready has_character_flag = skaa_army_fully_prepared } } has_infiltrated_nobles_trigger = { has_character_flag = noble_houses_fractured } can_trigger_rebellion_trigger = { is_crew_leader_trigger = yes is_narrative_mode_trigger = yes is_crew_fully_assembled_trigger = yes has_skaa_army_trigger = yes } is_rebellion_active_trigger = { has_global_variable = rebellion_in_progress } is_kelsier_martyred_trigger = { has_global_variable = kelsier_martyred } -
Add the following scripted effects to
common/scripted_effects/mistborn_effects.txt:# Initialize crew member as part of the band initialize_crew_member_effect = { add_character_flag = is_crew_member add_character_flag = recruited_to_crew } # Increase skaa army progress (parameterized by saved scope value) increase_skaa_army_progress_effect = { if = { limit = { has_variable = skaa_army_progress } change_variable = { name = skaa_army_progress add = scope:progress_amount } } # Cap at 100 if = { limit = { var:skaa_army_progress > 100 } set_variable = { name = skaa_army_progress value = 100 } } } # Start the rebellion (called from the decision/event) start_rebellion_effect = { set_global_variable = { name = rebellion_in_progress value = yes } set_character_flag = rebellion_triggered # Increase attention to maximum set_variable = { name = lord_ruler_attention value = 100 } } # End the rebellion (called from victory/defeat events) end_rebellion_effect = { remove_global_variable = rebellion_in_progress } # Apply Kelsier's martyrdom effects apply_kelsier_martyrdom_effect = { set_global_variable = { name = kelsier_martyred value = yes } # Boost rebellion if war active if = { limit = { is_rebellion_active_trigger = yes } # War score boost handled by the event directly } } -
Add localization for any tooltip text referenced by new triggers/effects (~5-10 keys).
Files:
common/scripted_triggers/mistborn_triggers.txt-- modifycommon/scripted_effects/mistborn_effects.txt-- modifylocalization/english/mistborn_events_l_english.yml-- modify (tooltips)
References:
- Existing triggers:
common/scripted_triggers/mistborn_triggers.txt:1-134 - Existing effects:
common/scripted_effects/mistborn_effects.txt:1-190
Testing Checkpoints
See
docs/TESTING.mdfor the full testing protocol, debug decisions, log analysis commands, and helper scripts.
-
After 6.1 (Crew Assembly): Start as Kelsier. Use "Recruit a Crew Member" decision. Verify each crew member can be recruited through their specific event chain. Verify Vin's special snapping event fires and grants
trait_mistborn. Verify thefull_crew_assembledmodifier is applied when all 8 members are recruited. Check thatcrew_assembledvariable increments correctly (console:get_variable crew_assembled). -
After 6.2 (Skaa Army): With full crew, select "Train the Skaa Army" from Plan Operation. Advance time 3-4 years. Verify:
- Army progress events fire at milestones (25, 50, 75, 100)
- Discovery risk events fire periodically
- If discovered, army progress resets
- If
skaa_army_fully_preparedflag is set after reaching 100 - Clubs' Smoker cover reduces discovery chance (test with and without)
-
After 6.3 (Infiltration): Select "Infiltrate the Noble Houses." Advance time 2-3 years. Verify:
- Infiltration ball events fire periodically
- Progress milestones trigger correctly
- "Cover blown" event can fire and has appropriate consequences
noble_houses_fracturedflag is set at progress 90+- Inter-house rivalry opinions are applied
-
After 6.4 (Rebellion): With army ready and houses fractured, trigger the rebellion. Verify:
- Rebellion decision appears and can be taken
- War starts against the Final Empire
- Rebellion events fire during the war
- Victory grants Luthadel titles
- Defeat has appropriate consequences but allows continuation
-
After 6.5 (Martyrdom): During the rebellion, verify Kelsier's death event fires. After Kelsier dies:
- Vin becomes leader (M5 succession)
- Martyrdom event "I Am Hope" fires
- Survivorism spreads among skaa
- Rebellion war score receives +25% boost
kelsier_legacymodifier applied to Vin- Religion holy site update fires
-
After 6.6 (Gating): Start a new game in Sandbox Mode. Play as any landed noble. Verify:
- No crew assembly events fire
- No skaa army narrative events fire
- No infiltration events fire
- Existing systems (balls, attention, snapping) still work normally
-
After 6.7 (Triggers/Effects): Run a complete narrative playthrough: Kelsier -> assemble crew -> train army -> infiltrate -> rebel -> martyrdom -> Vin takes over -> win. Verify no error.log entries for M6 content.
Acceptance Criteria
- Playing as Kelsier in Narrative Mode, the player can recruit all 8 named crew members through event chains with skill checks and narrative flavor.
- Vin's recruitment includes a special snapping event where she becomes Mistborn.
- Completing the full crew grants the
full_crew_assembledmodifier and unlocks the main operation arcs. - The player can initiate and progress through the Skaa Army training arc over multiple years, with periodic progress events and discovery risk.
- The player can initiate the Noble House Infiltration arc, attending balls and undermining inter-house alliances through event choices.
- When all conditions are met (crew assembled, army ready, houses fractured), the player can trigger the skaa rebellion via decision.
- The rebellion starts a war against the Final Empire with scripted events during the conflict.
- If Kelsier dies during the rebellion, the martyrdom event chain fires: Survivorism spreads, rebellion strengthens, Vin inherits leadership.
- All narrative events are gated behind the Narrative Mode game rule; Sandbox players do not see scripted story beats.
- All events have complete localization (no raw keys visible).
- The mod boots cleanly with no errors in error.log related to M6 content.
- A full narrative playthrough from crew assembly through rebellion victory is completable in approximately 8-15 in-game years.
Risks & Mitigations
-
Event chain complexity. M6 has 4 interconnected arcs with ~50-60 events total. Testing all paths is difficult. Mitigation: Each arc is implemented as a separate task with its own testing checkpoint. Debug events and console commands should be created to fast-forward through arcs.
-
War mechanics may not work for adventurer bands. Declaring war as an unlanded character may require special handling. Mitigation: The rebellion decision includes a fallback that grants Kelsier a temporary title before war declaration, or uses event-spawned troops with a special war type.
-
Narrative Mode can softlock. If a required crew member dies before being recruited, or the army is discovered multiple times, the player may be unable to progress. Mitigation: Add fallback paths -- if a crew member dies, allow a generic replacement. If the army is destroyed, allow restarting. The rebellion can be triggered without full conditions (at a significant penalty).
-
Performance impact of yearly pulse events. M6 adds 3-4 new yearly pulse events. Mitigation: All events have narrow trigger conditions (flags, variables) that short-circuit quickly for non-crew characters. Only the player with active arcs will trigger these events.
-
Rebellion CB balance. The rebellion war may be too easy or too hard. Mitigation: The army size and rebellion modifiers are tunable. Initial values should be conservative (making it hard to win without all conditions met), with balance adjustments in M7/M8.
-
Interaction with Lord Ruler attention system. The rebellion should trigger Tier 3 attention, but the existing Tier 3 event (Lord Ruler's Wrath) could destroy the player before the rebellion completes. Mitigation: During an active rebellion, suppress the Lord Ruler attention events (the Lord Ruler is occupied with the war, not sending Inquisitors on personal errands). Add a trigger exclusion:
NOT = { is_rebellion_active_trigger = yes }to the attention events.
Open Questions
-
How many crew members should start pre-recruited? In the book, Dockson and Marsh are already known to Kelsier. Should they start in the band, reducing the number of recruitment events needed? Recommendation: Dockson starts pre-recruited (oldest friend), others are recruited via events. This gives the player 7 recruitment events to play through.
-
Should the skaa army provide actual troops or only event modifiers? Spawning actual CK3 men-at-arms for an adventurer band may require special handling. Alternative: the army provides war score bonuses and narrative events only, with the actual fighting handled by event outcomes rather than CK3 combat simulation.
-
Can an adventurer band declare war? Standard CK3 war requires a landed attacker. The rebellion may need to: (a) grant Kelsier a temporary title first, (b) use a special event-only war type, or (c) simulate the war entirely through events without using the CK3 war system. Research needed -- check how vanilla adventurers engage in conflict.
-
What happens if the player wins the rebellion but the Lord Ruler lives? M7 handles the Fall of Kredik Shaw (killing the Lord Ruler). M6 should end with Luthadel liberated but the Lord Ruler still in Kredik Shaw -- creating a tense interim state where the player holds a city under siege. Is this a stable game state?
-
Should infiltration and army training run in parallel or sequentially? In the book, they happen simultaneously. In gameplay, running both arcs at once increases complexity but is more lore-accurate. Recommendation: allow parallel operation but with a warning that attention gains are cumulative.
-
How should crew member deaths during arcs be handled? If Ham dies during army training or Vin dies during infiltration, should the arc continue with penalties or fail entirely? Recommendation: continue with penalties (slower progress, reduced quality) to avoid softlocking.