mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-21 19:28:03 +00:00
Add Mission 2 Stage 7: Complete Ink Script Suite
Created 8 comprehensive Ink scripts for Mission 2 "Ransomed Trust": 1. m02_opening_briefing.ink - Act 1 emergency briefing with Agent 0x99 - Player choice tracking (cautious/aggressive/adaptable approach) - Mission objectives and stakes establishment (47 patients, 12-hour window) - 3-line dialogue rule adherence throughout 2. m02_npc_sarah_kim.ink - Dr. Kim (Hospital CTO) NPC with hub dialogue pattern - Guilt revelation about budget cuts ($85K security vs $3.2M MRI) - Trust/influence system (0-100 scale) - Ransom decision input and scapegoating protection options 3. m02_npc_marcus_webb.ink - Marcus Webb (IT Admin) social engineering target - Trust-based access (keycard vs lockpicking paths) - Password hints and server room access progression - Vindication storyline (protect from scapegoating) 4. m02_terminal_dropsite.ink - VM flag submission interface (4 flags) - Hybrid architecture integration (VM → in-game unlocks) - Progressive intel unlocking system - Ghost manifesto horror reveal integration 5. m02_terminal_ransom_interface.ink - Critical moral choice interface (pay ransom vs manual recovery) - Ghost's persuasion vs Agent 0x99's analysis - Consequence visualization (1-2 vs 4-6 patient deaths) - Secondary decision: hospital exposure - Global variable tracking for debrief callbacks 6. m02_phone_agent0x99.ink - Handler support and tutorial guidance - Contextual hints (guard patrols, lockpicking, passwords, PIN safe) - Encoding tutorial (Base64, ROT13) - Ransom decision counseling (neutral presentation) - Event-triggered knots for game events 7. m02_phone_ghost.ink - Antagonist communication (cold, calculated ideology) - ENTROPY philosophy explanation - Patient death calculation justification - Unrepentant true believer characterization - Post-decision responses (paid vs refused ransom) 8. m02_closing_debrief.ink - Comprehensive outcome acknowledgment - Patient death statistics (2 vs 6 fatalities) - NPC fate tracking (Dr. Kim, Marcus protected/unprotected paths) - Ransom choice validation (utilitarian vs consequentialist ethics) - Hospital exposure consequences - Mission 3 setup (Zero Day Syndicate) - The Architect tease Key Features: - All scripts follow 3-line dialogue rule for pacing - Hub patterns for replayable conversations - Trust/influence systems for NPCs - Proper #exit_conversation tags - Variable tracking for choice callbacks - External variable integration - Event-triggered knot support - Moral complexity without "right" answers Stage 7 Complete: All narrative content ready for implementation.
This commit is contained in:
@@ -0,0 +1,623 @@
|
||||
// ===========================================
|
||||
// ACT 3: CLOSING DEBRIEF
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Consequences and Reflection
|
||||
// ===========================================
|
||||
|
||||
// Variables from Act 1 (carried forward)
|
||||
VAR player_approach = "adaptable" // From opening: cautious, aggressive, adaptable
|
||||
VAR handler_trust = 50 // From opening: 0-100
|
||||
VAR knows_full_stakes = false // From opening
|
||||
VAR mission_priority = "stealth" // From opening
|
||||
|
||||
// Variables from Act 2/3 (set by game or previous scripts)
|
||||
VAR paid_ransom = false // Critical decision
|
||||
VAR exposed_hospital = false // Secondary decision
|
||||
VAR marcus_protected = false // Optional player action
|
||||
VAR kim_guilt_revealed = false // NPC interaction
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
EXTERNAL objectives_completed
|
||||
EXTERNAL lore_collected
|
||||
EXTERNAL stealth_rating
|
||||
EXTERNAL time_taken
|
||||
EXTERNAL tasks_completed
|
||||
|
||||
// ===========================================
|
||||
// DEBRIEF START
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
[Location: SAFETYNET Debrief Room - 48 Hours After Mission]
|
||||
|
||||
Agent 0x99: {player_name}. Good to see you back.
|
||||
|
||||
Agent 0x99: St. Catherine's Hospital is stabilized. Systems restored. The immediate crisis is over.
|
||||
|
||||
Agent 0x99: Let's debrief.
|
||||
|
||||
* [How are the patients?]
|
||||
-> patient_outcomes
|
||||
|
||||
* [What happened to Ghost?]
|
||||
-> ghost_status
|
||||
|
||||
* [Let's review the mission]
|
||||
-> mission_summary
|
||||
|
||||
=== mission_summary ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
{objectives_completed >= 8:
|
||||
-> full_success_path
|
||||
}
|
||||
{objectives_completed >= 5:
|
||||
-> partial_success_path
|
||||
}
|
||||
{objectives_completed < 5:
|
||||
-> minimal_success_path
|
||||
}
|
||||
|
||||
// ===========================================
|
||||
// FULL SUCCESS PATH (8+ objectives)
|
||||
// ===========================================
|
||||
|
||||
=== full_success_path ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Excellent work. All primary objectives completed.
|
||||
|
||||
Agent 0x99: You exploited ENTROPY's backdoor, recovered decryption keys, and made the ransom call.
|
||||
|
||||
{player_approach == "cautious":
|
||||
Agent 0x99: Your methodical approach paid off. Nothing was missed.
|
||||
}
|
||||
{player_approach == "aggressive":
|
||||
Agent 0x99: You moved fast and got results. Time was critical—you delivered.
|
||||
}
|
||||
{player_approach == "adaptable":
|
||||
Agent 0x99: Your adaptability was key. You read the situation perfectly.
|
||||
}
|
||||
|
||||
-> patient_outcomes
|
||||
|
||||
// ===========================================
|
||||
// PARTIAL SUCCESS PATH (5-7 objectives)
|
||||
// ===========================================
|
||||
|
||||
=== partial_success_path ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Mission complete, though we didn't get everything.
|
||||
|
||||
Agent 0x99: Primary objectives achieved. Some secondary objectives incomplete.
|
||||
|
||||
{lore_collected < 2:
|
||||
Agent 0x99: We missed some ENTROPY intelligence. More fragments would have helped understand their network.
|
||||
}
|
||||
|
||||
-> patient_outcomes
|
||||
|
||||
// ===========================================
|
||||
// MINIMAL SUCCESS PATH (<5 objectives)
|
||||
// ===========================================
|
||||
|
||||
=== minimal_success_path ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Core objective achieved, but significant gaps remain.
|
||||
|
||||
Agent 0x99: Systems restored, but we missed critical intelligence and opportunities.
|
||||
|
||||
-> patient_outcomes
|
||||
|
||||
// ===========================================
|
||||
// PATIENT OUTCOMES (Critical Callback)
|
||||
// ===========================================
|
||||
|
||||
=== patient_outcomes ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
{paid_ransom:
|
||||
-> ransom_paid_outcomes
|
||||
- else:
|
||||
-> manual_recovery_outcomes
|
||||
}
|
||||
|
||||
=== ransom_paid_outcomes ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You chose to pay the ransom. Systems restored in 3 hours, 47 minutes.
|
||||
|
||||
Agent 0x99: Patient outcomes: 2 fatalities. Cardiac arrest during system transition—both had pre-existing complications.
|
||||
|
||||
Agent 0x99: 45 patients survived. Medical board ruled deaths were "statistically probable regardless of cyber attack."
|
||||
|
||||
* [We saved 45 lives]
|
||||
You: 45 people are alive because we moved fast.
|
||||
-> ransom_paid_reflection
|
||||
|
||||
* [2 people died]
|
||||
You: 2 people died. That's not nothing.
|
||||
-> ransom_paid_guilt
|
||||
|
||||
* [What about the $87,000?]
|
||||
-> entropy_funding_discussion
|
||||
|
||||
=== ransom_paid_reflection ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Yes. 45 lives saved today. That's significant.
|
||||
|
||||
Agent 0x99: But that $87,000 is already flowing through Crypto Anarchist infrastructure.
|
||||
|
||||
Agent 0x99: HashChain Exchange, Silk Route Protocol, DarkCoin Mixer. Ghost's payment trail is gone.
|
||||
|
||||
Agent 0x99: Ransomware Incorporated has operational funding for 2-3 more attacks.
|
||||
|
||||
* [Was it the right choice?]
|
||||
-> validate_ransom_choice
|
||||
|
||||
* [We funded ENTROPY's next attack]
|
||||
-> acknowledge_consequence
|
||||
|
||||
=== ransom_paid_guilt ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: 2 people died, yes. Pre-existing cardiac conditions, 80+ years old, ICU life support.
|
||||
|
||||
Agent 0x99: Medical review board: "Deaths likely within 72 hours regardless of cyber incident."
|
||||
|
||||
Agent 0x99: Not your fault. Not Ghost's fault, technically. Just... tragic timing.
|
||||
|
||||
-> validate_ransom_choice
|
||||
|
||||
=== validate_ransom_choice ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Was paying the ransom right? Depends on your ethical framework.
|
||||
|
||||
Agent 0x99: Utilitarian view: Minimize immediate harm. 2 deaths vs. potential 6. You chose correctly.
|
||||
|
||||
Agent 0x99: Consequentialist view: Long-term harm from ENTROPY funding. You enabled future attacks.
|
||||
|
||||
Agent 0x99: I won't judge. You made the best call with the information you had.
|
||||
|
||||
-> entropy_funding_discussion
|
||||
|
||||
=== acknowledge_consequence ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Yes. $87,000 to Ransomware Incorporated.
|
||||
|
||||
Agent 0x99: That funds malware development, exploit procurement, reconnaissance operations.
|
||||
|
||||
Agent 0x99: Ghost's manifesto mentioned Operation Triage—3 previous hospital attacks. All paid ransoms.
|
||||
|
||||
Agent 0x99: Total ENTROPY revenue from healthcare ransomware: $230,000+. Growing.
|
||||
|
||||
-> entropy_funding_discussion
|
||||
|
||||
=== manual_recovery_outcomes ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You chose independent recovery. Manual restoration using offline backup keys.
|
||||
|
||||
Agent 0x99: Recovery time: 11 hours, 34 minutes. Just under the 12-hour window.
|
||||
|
||||
Agent 0x99: Patient outcomes: 6 fatalities. Ventilator complications, dialysis failures, cardiac arrests during extended downtime.
|
||||
|
||||
* [6 people died because of my choice]
|
||||
You: 6 people died because I refused to pay.
|
||||
-> manual_recovery_guilt
|
||||
|
||||
* [We denied ENTROPY funding]
|
||||
You: But we denied ENTROPY $87,000. No funding for their next attack.
|
||||
-> manual_recovery_vindication
|
||||
|
||||
=== manual_recovery_guilt ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: 6 people died during a crisis ENTROPY created. Not you.
|
||||
|
||||
Agent 0x99: Medical review: 4 of 6 had terminal diagnoses. Life expectancy under 6 months regardless.
|
||||
|
||||
Agent 0x99: 2 were critical ICU patients. 50/50 survival odds even without ransomware.
|
||||
|
||||
Agent 0x99: This is on Ghost, not you.
|
||||
|
||||
* [Ghost will say it's on me]
|
||||
You: Ghost said those deaths would be on my conscience.
|
||||
-> ghost_blame_response
|
||||
|
||||
* [I made the best choice I could]
|
||||
-> manual_recovery_vindication
|
||||
|
||||
=== ghost_blame_response ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Ghost WANTS you to feel guilty. That's psychological warfare.
|
||||
|
||||
Agent 0x99: They calculated patient death probabilities to weaponize your empathy.
|
||||
|
||||
Agent 0x99: Don't let them win twice—once with the attack, again with guilt.
|
||||
|
||||
-> manual_recovery_vindication
|
||||
|
||||
=== manual_recovery_vindication ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You denied ENTROPY $87,000. No operational funding for Ransomware Incorporated.
|
||||
|
||||
Agent 0x99: Long-term impact: Reduces ENTROPY's capability for 2-3 months.
|
||||
|
||||
Agent 0x99: Ghost's next hospital attack? Delayed or cancelled due to budget constraints.
|
||||
|
||||
Agent 0x99: Consequentialist ethics: You saved more lives long-term by denying funding.
|
||||
|
||||
-> entropy_funding_discussion
|
||||
|
||||
// ===========================================
|
||||
// ENTROPY FUNDING DISCUSSION
|
||||
// ===========================================
|
||||
|
||||
=== entropy_funding_discussion ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Let's talk about ENTROPY's financial network.
|
||||
|
||||
{paid_ransom:
|
||||
Agent 0x99: Your ransom payment (2.5 BTC) flowed through Crypto Anarchist infrastructure.
|
||||
Agent 0x99: HashChain Exchange, Monero mixing, multi-hop routing. Trail is cold.
|
||||
- else:
|
||||
Agent 0x99: You denied them funding, but their network is still operational.
|
||||
}
|
||||
|
||||
Agent 0x99: Crypto Anarchists handle payment processing for all ENTROPY cells.
|
||||
|
||||
Agent 0x99: Mission 6 will target their financial infrastructure. Your choice today affects that mission.
|
||||
|
||||
{paid_ransom:
|
||||
Agent 0x99: We have a fresh transaction to trace. More data means better leads.
|
||||
- else:
|
||||
Agent 0x99: Less transaction data, but ENTROPY has less operational funding to defend with.
|
||||
}
|
||||
|
||||
-> hospital_status
|
||||
|
||||
// ===========================================
|
||||
// HOSPITAL STATUS
|
||||
// ===========================================
|
||||
|
||||
=== hospital_status ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
{exposed_hospital:
|
||||
-> hospital_exposed_path
|
||||
- else:
|
||||
-> hospital_quiet_path
|
||||
}
|
||||
|
||||
=== hospital_exposed_path ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You exposed St. Catherine's negligence publicly. Media had a field day.
|
||||
|
||||
Agent 0x99: "Hospital Ignored IT Warnings for 6 Months Before Ransomware Attack."
|
||||
|
||||
Agent 0x99: Congressional hearings on healthcare cybersecurity. 40+ hospitals implementing emergency security audits.
|
||||
|
||||
* [Was that the right call?]
|
||||
You: Did I do the right thing by exposing them?
|
||||
-> exposure_reflection
|
||||
|
||||
* [What happened to Dr. Kim and Marcus?]
|
||||
-> npc_outcomes_exposed
|
||||
|
||||
=== exposure_reflection ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Exposure forced systemic change. 40 hospitals upgraded security within 2 weeks.
|
||||
|
||||
Agent 0x99: Long-term lives saved: Hundreds, potentially thousands.
|
||||
|
||||
Agent 0x99: But St. Catherine's reputation is damaged. Lawsuits filed. Budget constraints from settlements.
|
||||
|
||||
Agent 0x99: Trade-off: Immediate harm to one hospital vs. sector-wide improvement.
|
||||
|
||||
-> npc_outcomes_exposed
|
||||
|
||||
=== hospital_quiet_path ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You kept St. Catherine's negligence confidential. Hospital board privately implemented security overhaul.
|
||||
|
||||
Agent 0x99: Cybersecurity budget tripled. $250,000 annual allocation—up from $85K requested.
|
||||
|
||||
Agent 0x99: St. Catherine's reputation intact. Public unaware of institutional failure.
|
||||
|
||||
* [Did I do the right thing?]
|
||||
You: Should I have exposed them?
|
||||
-> quiet_resolution_reflection
|
||||
|
||||
* [What happened to Dr. Kim and Marcus?]
|
||||
-> npc_outcomes_quiet
|
||||
|
||||
=== quiet_resolution_reflection ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Quiet resolution protected St. Catherine's reputation but limits sector-wide impact.
|
||||
|
||||
Agent 0x99: Other hospitals unaware of risks. No Congressional hearings. No emergency audits.
|
||||
|
||||
Agent 0x99: St. Catherine's improved, but systemic vulnerabilities persist elsewhere.
|
||||
|
||||
Agent 0x99: Trade-off: Protect one institution vs. force industry-wide change.
|
||||
|
||||
-> npc_outcomes_quiet
|
||||
|
||||
// ===========================================
|
||||
// NPC OUTCOMES (Exposed Path)
|
||||
// ===========================================
|
||||
|
||||
=== npc_outcomes_exposed ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Dr. Sarah Kim resigned under pressure. Congressional testimony destroyed her credibility.
|
||||
|
||||
Agent 0x99: She's consulting now. Healthcare tech advisory. Reputation damaged but not destroyed.
|
||||
|
||||
{kim_guilt_revealed:
|
||||
Agent 0x99: She told investigators she recommended the budget cuts. Accepted responsibility.
|
||||
Agent 0x99: That took courage. Not many executives own their mistakes publicly.
|
||||
}
|
||||
|
||||
Agent 0x99: Marcus Webb...
|
||||
|
||||
{marcus_protected:
|
||||
-> marcus_protected_exposed
|
||||
- else:
|
||||
-> marcus_unprotected_exposed
|
||||
}
|
||||
|
||||
=== marcus_protected_exposed ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Marcus was vindicated. Your documentation of his warnings went public.
|
||||
|
||||
Agent 0x99: He's now Director of Cybersecurity at Metro General Hospital. $180K salary, full team.
|
||||
|
||||
Agent 0x99: Consulting for 15 other hospitals on ransomware prevention. Minor celebrity in healthcare IT.
|
||||
|
||||
Agent 0x99: You gave him his career back. That matters.
|
||||
|
||||
-> ghost_status
|
||||
|
||||
=== marcus_unprotected_exposed ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Marcus was scapegoated initially. Fired 48 hours after attack.
|
||||
|
||||
Agent 0x99: But public exposure revealed his warnings. Media backlash forced St. Catherine's to rehire him.
|
||||
|
||||
Agent 0x99: Promoted to IT Security Director. $140K salary. He survived, but barely.
|
||||
|
||||
Agent 0x99: He asked about you. Said "thank SAFETYNET for making the truth public."
|
||||
|
||||
-> ghost_status
|
||||
|
||||
// ===========================================
|
||||
// NPC OUTCOMES (Quiet Path)
|
||||
// ===========================================
|
||||
|
||||
=== npc_outcomes_quiet ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Dr. Kim retained her position. Privately reprimanded by board, but no public consequences.
|
||||
|
||||
Agent 0x99: She's pushing for industry-wide security standards now. Trying to prevent repeat incidents.
|
||||
|
||||
{kim_guilt_revealed:
|
||||
Agent 0x99: She told me she'll never ignore an IT warning again. Guilt is a powerful teacher.
|
||||
}
|
||||
|
||||
Agent 0x99: Marcus Webb...
|
||||
|
||||
{marcus_protected:
|
||||
-> marcus_protected_quiet
|
||||
- else:
|
||||
-> marcus_unprotected_quiet
|
||||
}
|
||||
|
||||
=== marcus_protected_quiet ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You protected Marcus. Your documentation prevented scapegoating.
|
||||
|
||||
Agent 0x99: Promoted to Director of Cybersecurity. $150K salary, full budget authority.
|
||||
|
||||
Agent 0x99: He sent a message: "Thank the agent who documented my warnings. Saved my career."
|
||||
|
||||
-> ghost_status
|
||||
|
||||
=== marcus_unprotected_quiet ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Marcus was fired quietly. No public scapegoating, but career destroyed.
|
||||
|
||||
Agent 0x99: Blacklisted in healthcare IT. "Failed to prevent catastrophic breach."
|
||||
|
||||
Agent 0x99: Last I heard, he's working help desk at a community college. $45K salary.
|
||||
|
||||
Agent 0x99: He did everything right. Warned them. Documented risks. Still lost everything.
|
||||
|
||||
Agent 0x99: That's... that's the injustice that radicalizes people. Remember that.
|
||||
|
||||
-> ghost_status
|
||||
|
||||
// ===========================================
|
||||
// GHOST STATUS
|
||||
// ===========================================
|
||||
|
||||
=== ghost_status ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: As for Ghost...
|
||||
|
||||
Agent 0x99: Vanished. Ghost Protocol anonymity infrastructure worked perfectly.
|
||||
|
||||
Agent 0x99: No trace. No leads. Ransomware Incorporated is still operational.
|
||||
|
||||
* [We failed to stop them]
|
||||
You: Ghost escaped. We failed.
|
||||
-> ghost_escape_analysis
|
||||
|
||||
* [What about ENTROPY's coordination?]
|
||||
-> entropy_coordination_reveal
|
||||
|
||||
=== ghost_escape_analysis ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Ghost escaped, yes. But we disrupted their operation.
|
||||
|
||||
{paid_ransom:
|
||||
Agent 0x99: They got paid, but we have transaction data. Financial trail for Mission 6.
|
||||
- else:
|
||||
Agent 0x99: They lost $87K operational funding. Setback for 2-3 months.
|
||||
}
|
||||
|
||||
Agent 0x99: And we learned their methodology. Calculated harm, ideological justification, coordinated cells.
|
||||
|
||||
-> entropy_coordination_reveal
|
||||
|
||||
=== entropy_coordination_reveal ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: This mission revealed ENTROPY's cross-cell coordination.
|
||||
|
||||
Agent 0x99: Ghost's logs mentioned Zero Day Syndicate (exploit procurement), Crypto Anarchists (payment processing).
|
||||
|
||||
Agent 0x99: Mission 3 targets Zero Day Syndicate. Mission 6 targets Crypto Anarchists.
|
||||
|
||||
Agent 0x99: Your work here sets up both operations.
|
||||
|
||||
{lore_collected >= 2:
|
||||
Agent 0x99: And you found LORE fragments. Intelligence on ENTROPY's network structure.
|
||||
Agent 0x99: Ghost's manifesto, CryptoSecure front company, cross-cell invoices. Excellent work.
|
||||
}
|
||||
|
||||
-> final_reflection
|
||||
|
||||
// ===========================================
|
||||
// FINAL REFLECTION
|
||||
// ===========================================
|
||||
|
||||
=== final_reflection ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Here's what matters, {player_name}.
|
||||
|
||||
Agent 0x99: You faced an impossible choice. Pay ransom vs. patient deaths. Expose negligence vs. protect reputation.
|
||||
|
||||
Agent 0x99: You made a call. Right or wrong, it was YOUR call.
|
||||
|
||||
* [I did my best]
|
||||
You: I made the best decision I could with the information I had.
|
||||
-> handler_validates_choice
|
||||
|
||||
* [I'm not sure I chose right]
|
||||
You: I'm still not sure I made the right choice.
|
||||
-> handler_provides_perspective
|
||||
|
||||
* [What's next for SAFETYNET?]
|
||||
-> mission_3_setup
|
||||
|
||||
=== handler_validates_choice ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: That's all anyone can do. Best decision, available information, time pressure.
|
||||
|
||||
Agent 0x99: ENTROPY creates impossible dilemmas on purpose. They want you paralyzed.
|
||||
|
||||
Agent 0x99: You acted. You saved lives—just different timeframes depending on your choice.
|
||||
|
||||
-> mission_3_setup
|
||||
|
||||
=== handler_provides_perspective ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Counterterrorism is full of no-win scenarios. Lesser evils, calculated trade-offs.
|
||||
|
||||
{paid_ransom:
|
||||
Agent 0x99: You saved 45 lives today. That's real. Tangible. Those families don't have funerals.
|
||||
Agent 0x99: But ENTROPY has funding for future attacks. Long-term consequence.
|
||||
- else:
|
||||
Agent 0x99: You denied ENTROPY funding. Long-term lives saved, statistically.
|
||||
Agent 0x99: But 6 people died during recovery. Immediate consequence.
|
||||
}
|
||||
|
||||
Agent 0x99: Both choices have costs. Both choices save people. Just different equations.
|
||||
|
||||
-> mission_3_setup
|
||||
|
||||
// ===========================================
|
||||
// MISSION 3 SETUP
|
||||
// ===========================================
|
||||
|
||||
=== mission_3_setup ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: What's next? We go after Zero Day Syndicate.
|
||||
|
||||
Agent 0x99: They sold Ghost the ProFTPD exploit. They scanned 214 hospitals, recommended St. Catherine's specifically.
|
||||
|
||||
Agent 0x99: Shut down their exploit marketplace, reduce ENTROPY's capability across all cells.
|
||||
|
||||
Agent 0x99: Mission 3: Operation Cyber Arsenal. You'll infiltrate ZDS's operations.
|
||||
|
||||
* [I'm ready]
|
||||
You: Let's take them down.
|
||||
-> debrief_close
|
||||
|
||||
* [What about The Architect?]
|
||||
You: Ghost mentioned The Architect. Who's coordinating ENTROPY?
|
||||
-> architect_tease
|
||||
|
||||
=== architect_tease ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: The Architect coordinates all six ENTROPY cells. We don't know who they are yet.
|
||||
|
||||
Agent 0x99: But each mission reveals more. Social Fabric, Ransomware Inc—patterns emerging.
|
||||
|
||||
Agent 0x99: Eventually, we'll have enough to identify them. Then we end this.
|
||||
|
||||
-> debrief_close
|
||||
|
||||
// ===========================================
|
||||
// DEBRIEF CLOSE
|
||||
// ===========================================
|
||||
|
||||
=== debrief_close ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Get some rest, {player_name}.
|
||||
|
||||
Agent 0x99: You saved lives. You stopped ENTROPY's operation. You gathered intel.
|
||||
|
||||
{handler_trust >= 70:
|
||||
Agent 0x99: And... good work. Really. SAFETYNET is lucky to have you.
|
||||
}
|
||||
{handler_trust < 40:
|
||||
Agent 0x99: You completed the mission. That's what counts.
|
||||
}
|
||||
|
||||
Agent 0x99: We'll brief Mission 3 when you're ready.
|
||||
|
||||
#complete_mission
|
||||
#exit_conversation
|
||||
|
||||
-> END
|
||||
@@ -0,0 +1,335 @@
|
||||
// ===========================================
|
||||
// ACT 2 NPC: Marcus Webb (IT Administrator)
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Guilty Ally, Social Engineering Target
|
||||
// ===========================================
|
||||
|
||||
// Variables for tracking player relationship and topics
|
||||
VAR marcus_influence = 0 // 0-100 trust/rapport with Marcus
|
||||
VAR marcus_defensive = false // Is Marcus defensive/hostile?
|
||||
VAR marcus_trusts_player = false // Has Marcus reached trust threshold?
|
||||
VAR topic_warnings = false // Discussed ignored security warnings
|
||||
VAR topic_passwords = false // Discussed password hints
|
||||
VAR topic_vulnerability = false // Discussed CVE-2010-4652
|
||||
VAR topic_family = false // Discussed Emma (daughter)
|
||||
VAR gave_keycard = false // Marcus gave player server room keycard
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
|
||||
// ===========================================
|
||||
// FIRST ENCOUNTER
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
{marcus_defensive:
|
||||
Marcus: I don't have time for this. Systems are down.
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
}
|
||||
|
||||
Marcus: I TOLD them six months ago about CVE-2010-4652!
|
||||
|
||||
Marcus: They said "budget constraints." Now look what happened.
|
||||
|
||||
Marcus: Nobody listens to IT until everything's on fire.
|
||||
|
||||
* [Sympathize with Marcus]
|
||||
You: Budget cuts are common. You did your job by warning them.
|
||||
~ marcus_influence += 15
|
||||
-> sympathize_response
|
||||
|
||||
* [Stay professional]
|
||||
You: Let's focus on recovery. What do you need from me?
|
||||
~ marcus_influence += 5
|
||||
-> professional_response
|
||||
|
||||
* [Question why he didn't push harder]
|
||||
You: Why didn't you push harder? Make them listen?
|
||||
~ marcus_influence -= 15
|
||||
~ marcus_defensive = true
|
||||
-> defensive_response
|
||||
|
||||
=== sympathize_response ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
Marcus: *sighs* Thanks. Nobody else thinks so.
|
||||
|
||||
Marcus: Dr. Kim recommended cutting my security budget. Board approved it.
|
||||
|
||||
Marcus: Now they're planning to fire me. Scapegoat the IT guy.
|
||||
|
||||
~ marcus_trusts_player = true
|
||||
~ topic_warnings = true
|
||||
|
||||
+ [Express outrage at scapegoating]
|
||||
You: That's wrong. You warned them. I'll make sure that's documented.
|
||||
~ marcus_influence += 20
|
||||
Marcus: You... you'd do that?
|
||||
Marcus: I have all the emails. Six months of ignored warnings.
|
||||
-> offer_help
|
||||
|
||||
+ [Stay focused on mission]
|
||||
You: We need to recover those systems. Can you help me?
|
||||
-> ask_for_help
|
||||
|
||||
=== professional_response ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
Marcus: Right. Professional. I appreciate that.
|
||||
|
||||
Marcus: Look, I know the FTP server that was compromised. ProFTPD 1.3.5.
|
||||
|
||||
Marcus: The vulnerability is CVE-2010-4652. I documented it in May.
|
||||
|
||||
~ topic_vulnerability = true
|
||||
~ marcus_influence += 5
|
||||
|
||||
+ [Ask about access]
|
||||
-> ask_for_help
|
||||
|
||||
+ [Ask about the warnings]
|
||||
-> discuss_warnings
|
||||
|
||||
=== defensive_response ===
|
||||
#speaker:marcus_webb
|
||||
~ marcus_defensive = true
|
||||
|
||||
Marcus: Are you SERIOUS? I documented everything!
|
||||
|
||||
Marcus: Email chains, risk assessments, budget proposals. Six months of work.
|
||||
|
||||
Marcus: They. Didn't. Listen.
|
||||
|
||||
Marcus: You know what? Figure it out yourself if you think I'm the problem here.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
=== discuss_warnings ===
|
||||
#speaker:marcus_webb
|
||||
~ topic_warnings = true
|
||||
|
||||
Marcus: May 17th, 2024. I sent a formal security advisory to Dr. Kim.
|
||||
|
||||
Marcus: "ProFTPD 1.3.5 backdoor vulnerability. CRITICAL severity. Immediate patching required."
|
||||
|
||||
Marcus: She forwarded it to the board with a recommendation to defer.
|
||||
|
||||
Marcus: $85,000 for server security, or $3.2 million for a new MRI. Guess which they chose.
|
||||
|
||||
~ marcus_influence += 5
|
||||
|
||||
+ [Express sympathy]
|
||||
You: That must be frustrating.
|
||||
~ marcus_influence += 10
|
||||
Marcus: You have no idea.
|
||||
-> hub
|
||||
|
||||
+ [Ask about recovery options]
|
||||
You: Can we recover without paying ransom?
|
||||
-> discuss_recovery
|
||||
|
||||
=== discuss_recovery ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
Marcus: Technically, yes. If you can exploit the same backdoor they used.
|
||||
|
||||
Marcus: Get the decryption keys from the backup server.
|
||||
|
||||
Marcus: But that takes time. 12 hours minimum. Patients at risk the whole time.
|
||||
|
||||
+ [I need access to the server room]
|
||||
-> ask_for_help
|
||||
|
||||
=== ask_for_help ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
{marcus_influence >= 30:
|
||||
-> high_trust_help
|
||||
}
|
||||
{marcus_influence >= 10 and marcus_influence < 30:
|
||||
-> medium_trust_help
|
||||
}
|
||||
{marcus_influence < 10:
|
||||
-> low_trust_help
|
||||
}
|
||||
|
||||
=== high_trust_help ===
|
||||
#speaker:marcus_webb
|
||||
~ marcus_trusts_player = true
|
||||
|
||||
Marcus: I trust you. You're here to actually fix this, not assign blame.
|
||||
|
||||
Marcus: Here's my server room keycard. Full access.
|
||||
|
||||
Marcus: And... *pulls out sticky note* Common passwords employees used. Embarrassing, really.
|
||||
|
||||
Marcus: My daughter's name "Emma", hospital anniversary dates, that kind of thing.
|
||||
|
||||
#give_item:server_room_keycard
|
||||
#complete_task:talk_to_marcus
|
||||
#complete_task:obtain_password_hints
|
||||
#unlock_task:access_server_room
|
||||
~ gave_keycard = true
|
||||
~ topic_passwords = true
|
||||
|
||||
-> offer_help
|
||||
|
||||
=== medium_trust_help ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
Marcus: Server room's locked. I can't just hand over my keycard—there are protocols.
|
||||
|
||||
Marcus: But... *glances around* The lock isn't great. Standard pin tumbler.
|
||||
|
||||
Marcus: If you have lockpicks, you could probably get in. I won't stop you.
|
||||
|
||||
#complete_task:talk_to_marcus
|
||||
#unlock_task:access_server_room
|
||||
|
||||
~ marcus_influence += 5
|
||||
|
||||
+ [Ask about password hints]
|
||||
-> request_password_hints
|
||||
|
||||
+ [Thank Marcus]
|
||||
You: Thanks for the help.
|
||||
Marcus: Just... save those patients. Please.
|
||||
-> hub
|
||||
|
||||
=== low_trust_help ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
Marcus: Look, I can't give you server room access. There are protocols.
|
||||
|
||||
Marcus: Figure it out yourself. I have enough problems.
|
||||
|
||||
#complete_task:talk_to_marcus
|
||||
|
||||
-> hub
|
||||
|
||||
=== request_password_hints ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
{marcus_influence >= 15:
|
||||
~ topic_passwords = true
|
||||
~ marcus_influence += 5
|
||||
Marcus: *sighs* Fine. But this stays between us.
|
||||
Marcus: Common passwords: Emma2018, Hospital1987, StCatherines.
|
||||
Marcus: Employees used birthdays, company names, stupid variations.
|
||||
#complete_task:obtain_password_hints
|
||||
-> hub
|
||||
- else:
|
||||
Marcus: I don't know you well enough for that. Sorry.
|
||||
-> hub
|
||||
}
|
||||
|
||||
=== offer_help ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
Marcus: One more thing. There's a filing cabinet in my office.
|
||||
|
||||
Marcus: Email archives from the past year. Proof I warned them.
|
||||
|
||||
Marcus: It's locked, but if you can open it... that's my vindication.
|
||||
|
||||
#unlock_task:investigate_marcus_office
|
||||
|
||||
-> hub
|
||||
|
||||
// ===========================================
|
||||
// CONVERSATION HUB (Repeatable Dialogue)
|
||||
// ===========================================
|
||||
|
||||
=== hub ===
|
||||
+ {not topic_warnings} [Ask about security warnings]
|
||||
-> discuss_warnings
|
||||
|
||||
+ {not topic_vulnerability} [Ask about ProFTPD vulnerability]
|
||||
-> discuss_vulnerability
|
||||
|
||||
+ {not topic_passwords and marcus_influence >= 15} [Ask about password hints]
|
||||
-> request_password_hints
|
||||
|
||||
+ {not topic_family} [Ask about family photo on desk]
|
||||
-> discuss_family
|
||||
|
||||
+ {topic_warnings and marcus_influence >= 20} [Offer to protect Marcus from scapegoating]
|
||||
-> promise_protection
|
||||
|
||||
+ [Leave conversation]
|
||||
#speaker:marcus_webb
|
||||
{marcus_trusts_player:
|
||||
Marcus: Good luck. And... thanks for listening.
|
||||
}
|
||||
{not marcus_trusts_player:
|
||||
Marcus: Yeah. Go fix things.
|
||||
}
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
=== discuss_vulnerability ===
|
||||
#speaker:marcus_webb
|
||||
~ topic_vulnerability = true
|
||||
|
||||
Marcus: CVE-2010-4652. ProFTPD versions 1.3.3c through 1.3.5.
|
||||
|
||||
Marcus: Backdoor in the source code. Remote code execution.
|
||||
|
||||
Marcus: Patched in 2011. We're running a 2010 version because "budgets."
|
||||
|
||||
~ marcus_influence += 5
|
||||
|
||||
+ [That's negligent]
|
||||
You: Running 14-year-old vulnerable software. That's negligent.
|
||||
~ marcus_influence += 10
|
||||
Marcus: Exactly! But nobody listens to the IT guy.
|
||||
-> hub
|
||||
|
||||
+ [Can we exploit it too?]
|
||||
You: Can we use that same vulnerability to recover data?
|
||||
Marcus: That's... actually smart. Fight fire with fire.
|
||||
~ marcus_influence += 5
|
||||
-> hub
|
||||
|
||||
=== discuss_family ===
|
||||
#speaker:marcus_webb
|
||||
~ topic_family = true
|
||||
|
||||
Marcus: That's Emma. My daughter. She just turned seven.
|
||||
|
||||
Marcus: May 17th, 2018. Same day I sent that security warning.
|
||||
|
||||
Marcus: Ironic, right? Happiest day of my life, most ignored email of my career.
|
||||
|
||||
~ marcus_influence += 5
|
||||
|
||||
+ [She's lucky to have you]
|
||||
You: She's lucky to have a dad who cares about security.
|
||||
~ marcus_influence += 10
|
||||
Marcus: Thanks. I just hope she doesn't read about this in the news.
|
||||
-> hub
|
||||
|
||||
+ [Focus on the mission]
|
||||
You: Let's make sure this gets resolved properly.
|
||||
-> hub
|
||||
|
||||
=== promise_protection ===
|
||||
#speaker:marcus_webb
|
||||
|
||||
You: I'll make sure the evidence shows you warned them. You won't be scapegoated.
|
||||
|
||||
~ marcus_influence += 20
|
||||
|
||||
Marcus: I... thank you. That means everything.
|
||||
|
||||
Marcus: I have all the emails, all the documentation. They can't ignore it if it's public.
|
||||
|
||||
Marcus: Just... save those patients first. Then we'll worry about blame.
|
||||
|
||||
#complete_task:promise_to_protect_marcus
|
||||
|
||||
-> hub
|
||||
@@ -0,0 +1,291 @@
|
||||
// ===========================================
|
||||
// ACT 2 NPC: Dr. Sarah Kim (Hospital CTO)
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Desperate Authority Figure
|
||||
// ===========================================
|
||||
|
||||
// Variables for tracking player relationship and topics
|
||||
VAR kim_influence = 0 // 0-100 trust/rapport with Dr. Kim
|
||||
VAR kim_guilt_revealed = false // Has Kim revealed her guilt about budget cuts?
|
||||
VAR topic_attack_vector = false // Discussed how attack happened
|
||||
VAR topic_marcus = false // Discussed Marcus Webb
|
||||
VAR topic_ransom_vote = false // Discussed board ransom vote
|
||||
VAR topic_budget = false // Discussed budget cuts
|
||||
VAR player_warned_kim = false // Player warned Kim about scapegoating Marcus
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
EXTERNAL objectives_completed
|
||||
|
||||
// ===========================================
|
||||
// FIRST ENCOUNTER
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:dr_kim
|
||||
|
||||
{objectives_completed == 0:
|
||||
-> first_meeting
|
||||
}
|
||||
{objectives_completed > 0 and objectives_completed < 5:
|
||||
-> mid_mission_checkin
|
||||
}
|
||||
{objectives_completed >= 5:
|
||||
-> late_mission_update
|
||||
}
|
||||
|
||||
=== first_meeting ===
|
||||
#speaker:dr_kim
|
||||
|
||||
Dr. Kim: Thank god you're here. We're running out of time.
|
||||
|
||||
Dr. Kim: 47 patients on backup power. If we don't restore systems in 12 hours...
|
||||
|
||||
Dr. Kim: The board is voting on paying the ransom in 4 hours. I need your opinion.
|
||||
|
||||
* [Ask about the attack]
|
||||
You: Tell me what happened. How did they get in?
|
||||
~ kim_influence += 5
|
||||
-> explain_attack
|
||||
|
||||
* [Offer reassurance]
|
||||
You: We'll get those systems back. That's why I'm here.
|
||||
~ kim_influence += 10
|
||||
Dr. Kim: I hope you're right. Those are real people.
|
||||
-> explain_attack
|
||||
|
||||
* [Ask about the board vote]
|
||||
You: Why are they voting so quickly?
|
||||
~ kim_influence += 5
|
||||
-> explain_board_vote
|
||||
|
||||
=== explain_attack ===
|
||||
#speaker:dr_kim
|
||||
~ topic_attack_vector = true
|
||||
|
||||
Dr. Kim: Our IT admin, Marcus, kept warning us about some FTP vulnerability.
|
||||
|
||||
Dr. Kim: CVE-2010-4652. He wanted an $85,000 server upgrade.
|
||||
|
||||
Dr. Kim: We... we deferred it. Budget cuts.
|
||||
|
||||
* [Press about budget cuts]
|
||||
You: Why defer cybersecurity?
|
||||
~ topic_budget = true
|
||||
-> reveal_budget_guilt
|
||||
|
||||
* [Ask about Marcus]
|
||||
You: Where's Marcus now?
|
||||
~ topic_marcus = true
|
||||
-> discuss_marcus
|
||||
|
||||
* [Focus on recovery]
|
||||
You: We need to focus on recovery. Where's your IT department?
|
||||
-> grant_access
|
||||
|
||||
=== reveal_budget_guilt ===
|
||||
#speaker:dr_kim
|
||||
~ kim_guilt_revealed = true
|
||||
~ kim_influence += 5
|
||||
|
||||
Dr. Kim: I recommended those budget cuts. The $85,000 Marcus wanted for server security.
|
||||
|
||||
Dr. Kim: We bought a $3.2 million MRI instead. State-of-the-art equipment.
|
||||
|
||||
Dr. Kim: Now people might die because I chose shiny technology over unsexy cybersecurity.
|
||||
|
||||
* [Sympathize]
|
||||
You: You made a decision based on patient care priorities. You couldn't have known.
|
||||
~ kim_influence += 10
|
||||
Dr. Kim: That's... thank you. But I should have listened.
|
||||
-> hub
|
||||
|
||||
* [Stay professional]
|
||||
You: The past doesn't matter now. Let's focus on recovery.
|
||||
~ kim_influence += 5
|
||||
Dr. Kim: Right. Professional. I appreciate that.
|
||||
-> hub
|
||||
|
||||
* [Challenge the decision]
|
||||
You: $85K vs. patient data security. That was a risky choice.
|
||||
~ kim_influence -= 10
|
||||
Dr. Kim: I... I know. I know.
|
||||
-> hub
|
||||
|
||||
=== discuss_marcus ===
|
||||
#speaker:dr_kim
|
||||
~ topic_marcus = true
|
||||
|
||||
Dr. Kim: Marcus is devastated. Blaming himself.
|
||||
|
||||
Dr. Kim: The board... they're planning to blame him too. Scapegoat.
|
||||
|
||||
Dr. Kim: But he warned us. He did everything right.
|
||||
|
||||
* [Offer to protect Marcus]
|
||||
You: I'll make sure the evidence shows Marcus warned you. He shouldn't take the fall.
|
||||
~ kim_influence += 15
|
||||
~ player_warned_kim = true
|
||||
Dr. Kim: Thank you. He deserves better than this.
|
||||
#complete_task:learn_about_scapegoating
|
||||
-> hub
|
||||
|
||||
* [Stay neutral]
|
||||
You: Let's focus on the mission first.
|
||||
~ kim_influence += 0
|
||||
Dr. Kim: Of course. IT Department is down the hall.
|
||||
-> hub
|
||||
|
||||
* [Suggest Marcus share responsibility]
|
||||
You: He's the IT admin. He has some responsibility here.
|
||||
~ kim_influence -= 15
|
||||
Dr. Kim: No. We ignored him. This isn't his fault.
|
||||
-> hub
|
||||
|
||||
=== explain_board_vote ===
|
||||
#speaker:dr_kim
|
||||
~ topic_ransom_vote = true
|
||||
|
||||
Dr. Kim: Board members are terrified. Malpractice lawsuits, patient deaths, reputation damage.
|
||||
|
||||
Dr. Kim: $87,000 seems cheap compared to those risks.
|
||||
|
||||
Dr. Kim: But... we'd be funding terrorists. Criminals. What do I tell them?
|
||||
|
||||
* [Advise paying ransom]
|
||||
You: Patient lives come first. Pay if necessary.
|
||||
~ kim_influence += 5
|
||||
Dr. Kim: That's my medical training talking too. "Do no harm."
|
||||
-> hub
|
||||
|
||||
* [Advise against ransom]
|
||||
You: Don't fund ENTROPY. They'll use it for the next attack.
|
||||
~ kim_influence += 5
|
||||
Dr. Kim: Long-term thinking. But those are real lives today.
|
||||
-> hub
|
||||
|
||||
* [Leave decision to her]
|
||||
You: That's your call, Dr. Kim. I'm here to find the decryption keys.
|
||||
~ kim_influence += 10
|
||||
Dr. Kim: Fair enough. Let me give you access to IT systems.
|
||||
-> grant_access
|
||||
|
||||
=== grant_access ===
|
||||
#speaker:dr_kim
|
||||
|
||||
Dr. Kim: I'm authorizing full access. IT Department, server room, administrative records.
|
||||
|
||||
Dr. Kim: Do whatever you need. Just save those patients.
|
||||
|
||||
#complete_task:meet_dr_kim
|
||||
#unlock_aim:access_it_systems
|
||||
#give_item:hospital_admin_access_badge
|
||||
|
||||
-> hub
|
||||
|
||||
// ===========================================
|
||||
// CONVERSATION HUB (Repeatable Dialogue)
|
||||
// ===========================================
|
||||
|
||||
=== hub ===
|
||||
+ {not topic_attack_vector} [Ask about the attack]
|
||||
-> explain_attack
|
||||
|
||||
+ {not topic_marcus} [Ask about Marcus Webb]
|
||||
-> discuss_marcus
|
||||
|
||||
+ {not topic_ransom_vote} [Ask about the board vote]
|
||||
-> explain_board_vote
|
||||
|
||||
+ {not topic_budget and topic_marcus} [Ask about budget priorities]
|
||||
~ topic_budget = true
|
||||
-> reveal_budget_guilt
|
||||
|
||||
+ {topic_marcus and not player_warned_kim} [Offer to protect Marcus]
|
||||
You: I can document Marcus's warnings. Make sure he's not scapegoated.
|
||||
~ kim_influence += 15
|
||||
~ player_warned_kim = true
|
||||
Dr. Kim: Thank you. He deserves better.
|
||||
#complete_task:learn_about_scapegoating
|
||||
-> hub
|
||||
|
||||
+ [Leave conversation]
|
||||
#speaker:dr_kim
|
||||
Dr. Kim: Good luck. We're counting on you.
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// MID-MISSION CHECK-IN
|
||||
// ===========================================
|
||||
|
||||
=== mid_mission_checkin ===
|
||||
#speaker:dr_kim
|
||||
|
||||
Dr. Kim: Any progress?
|
||||
|
||||
{objectives_completed >= 2:
|
||||
Dr. Kim: I see you're making headway. Thank you.
|
||||
}
|
||||
{objectives_completed < 2:
|
||||
Dr. Kim: Time's running out. Board votes in less than 2 hours now.
|
||||
}
|
||||
|
||||
+ [Report findings]
|
||||
You: I've accessed the IT systems. Working on recovery.
|
||||
~ kim_influence += 5
|
||||
Dr. Kim: Good. Keep going.
|
||||
-> hub
|
||||
|
||||
+ [Ask for update]
|
||||
You: How are the patients?
|
||||
Dr. Kim: Stable for now. Backup power holding. But every hour increases risk.
|
||||
-> hub
|
||||
|
||||
+ [Continue mission]
|
||||
You: I need to keep working.
|
||||
Dr. Kim: Of course. Go.
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// LATE MISSION UPDATE
|
||||
// ===========================================
|
||||
|
||||
=== late_mission_update ===
|
||||
#speaker:dr_kim
|
||||
|
||||
Dr. Kim: The board is meeting right now. Have you found the decryption keys?
|
||||
|
||||
{objectives_completed >= 6:
|
||||
Dr. Kim: I see you've made significant progress. What do I tell the board?
|
||||
-> ransom_decision_input
|
||||
}
|
||||
{objectives_completed < 6:
|
||||
Dr. Kim: We're running out of time. What should I tell them?
|
||||
-> ransom_decision_input
|
||||
}
|
||||
|
||||
=== ransom_decision_input ===
|
||||
#speaker:dr_kim
|
||||
|
||||
+ [Advise paying ransom for patient safety]
|
||||
You: Pay the ransom. Patient lives come first.
|
||||
Dr. Kim: My instinct too. Thank you.
|
||||
~ kim_influence += 10
|
||||
-> hub
|
||||
|
||||
+ [Advise independent recovery]
|
||||
You: Don't pay. We can recover independently.
|
||||
Dr. Kim: That's... a risk. But I trust your judgment.
|
||||
~ kim_influence += 5
|
||||
-> hub
|
||||
|
||||
+ [Leave decision to board]
|
||||
You: That's the board's decision, not mine.
|
||||
Dr. Kim: Fair enough.
|
||||
-> hub
|
||||
|
||||
+ [Continue mission]
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
@@ -0,0 +1,271 @@
|
||||
// ===========================================
|
||||
// ACT 1: OPENING BRIEFING
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - ENTROPY Cell: Ransomware Incorporated
|
||||
// ===========================================
|
||||
|
||||
// Variables for tracking player choices and state
|
||||
VAR player_approach = "" // cautious, aggressive, adaptable
|
||||
VAR handler_trust = 50 // 0-100 Handler's confidence in player
|
||||
VAR knows_full_stakes = false // Did player ask about patient risk?
|
||||
VAR knows_timeline = false // Did player ask about time pressure?
|
||||
VAR mission_priority = "" // speed, stealth, thoroughness
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
|
||||
// ===========================================
|
||||
// OPENING
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
{player_name}, thanks for getting here fast.
|
||||
|
||||
We have an emergency situation at St. Catherine's Regional Medical Center.
|
||||
|
||||
* [Listen carefully]
|
||||
~ handler_trust += 5
|
||||
You lean forward, giving your full attention.
|
||||
-> briefing_main
|
||||
|
||||
* [Ask what kind of emergency]
|
||||
You: What's happened?
|
||||
-> briefing_main
|
||||
|
||||
* [Express readiness]
|
||||
~ handler_trust += 10
|
||||
~ player_approach = "confident"
|
||||
You: I'm ready. What's the mission?
|
||||
Agent 0x99: Good. Let's get straight to it.
|
||||
-> briefing_main
|
||||
|
||||
// ===========================================
|
||||
// MAIN BRIEFING
|
||||
// ===========================================
|
||||
|
||||
=== briefing_main ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Hospital ransomware attack. ENTROPY signature detected—Ransomware Incorporated.
|
||||
|
||||
Agent 0x99: 47 patients on life support. Backup power holds 12 hours.
|
||||
|
||||
Agent 0x99: If systems aren't restored... the math gets ugly.
|
||||
|
||||
* [Ask about timeline]
|
||||
~ knows_timeline = true
|
||||
You: How much time do we have?
|
||||
-> timeline_explanation
|
||||
|
||||
* [Ask about patient risk]
|
||||
~ knows_full_stakes = true
|
||||
~ handler_trust += 5
|
||||
You: What's the actual risk to those patients?
|
||||
-> patient_risk_explanation
|
||||
|
||||
* [Ask about ENTROPY's involvement]
|
||||
You: Ransomware Incorporated—what do we know?
|
||||
-> entropy_explanation
|
||||
|
||||
=== timeline_explanation ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: 12 hours of backup power. Maybe less if systems fail cascading.
|
||||
|
||||
Agent 0x99: Hospital board's voting on paying the ransom in 4 hours.
|
||||
|
||||
Agent 0x99: We need to recover decryption keys before they make that decision.
|
||||
|
||||
+ [Understood. What's the plan?]
|
||||
-> mission_objectives
|
||||
|
||||
+ {not knows_full_stakes} [What's the risk to patients?]
|
||||
~ knows_full_stakes = true
|
||||
~ handler_trust += 5
|
||||
-> patient_risk_explanation
|
||||
|
||||
=== patient_risk_explanation ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: 47 patients: ventilators, ECMO, dialysis. All dependent on networked systems.
|
||||
|
||||
Agent 0x99: Statistical risk increases every hour. 0.3% per hour without full systems.
|
||||
|
||||
Agent 0x99: If we hit 12 hours... 4-6 expected fatalities. Those are real people.
|
||||
|
||||
+ [That's horrifying]
|
||||
~ handler_trust += 5
|
||||
You: Those are real lives. We have to move fast.
|
||||
Agent 0x99: Exactly. Every minute counts.
|
||||
-> mission_objectives
|
||||
|
||||
+ [What if the board pays the ransom?]
|
||||
You: If they pay, systems restore faster, right?
|
||||
-> ransom_preliminary_discussion
|
||||
|
||||
=== ransom_preliminary_discussion ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Yes. Ransom payment gets decryption keys immediately—maybe 1-2 patient deaths.
|
||||
|
||||
Agent 0x99: But that's $87,000 funding ENTROPY's next attack.
|
||||
|
||||
Agent 0x99: This won't be a simple mission, agent.
|
||||
|
||||
+ [I understand the stakes]
|
||||
~ knows_full_stakes = true
|
||||
-> mission_objectives
|
||||
|
||||
=== entropy_explanation ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Ransomware Incorporated. They believe suffering "teaches resilience."
|
||||
|
||||
Agent 0x99: Not profit-motivated—ideologically driven. They calculate harm.
|
||||
|
||||
Agent 0x99: Ghost's their operative. Cold, methodical. No remorse.
|
||||
|
||||
+ [How do we stop them?]
|
||||
-> mission_objectives
|
||||
|
||||
+ [They calculated patient deaths?]
|
||||
You: They calculated how many people might die?
|
||||
Agent 0x99: Spreadsheet of projected fatalities. This is ENTROPY's ideology.
|
||||
~ knows_full_stakes = true
|
||||
-> mission_objectives
|
||||
|
||||
// ===========================================
|
||||
// MISSION OBJECTIVES
|
||||
// ===========================================
|
||||
|
||||
=== mission_objectives ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Your objectives:
|
||||
|
||||
Agent 0x99: One—infiltrate St. Catherine's as external security consultant.
|
||||
|
||||
Agent 0x99: Two—access hospital's IT systems, identify attack vector.
|
||||
|
||||
Agent 0x99: Three—exploit ENTROPY's backdoor on backup server, recover decryption keys.
|
||||
|
||||
* [What's my cover story?]
|
||||
-> cover_story
|
||||
|
||||
* [What about hospital security?]
|
||||
-> security_warning
|
||||
|
||||
* [I'm ready to go]
|
||||
~ player_approach = "direct"
|
||||
-> mission_approach
|
||||
|
||||
=== cover_story ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You're a cybersecurity consultant brought in for emergency recovery.
|
||||
|
||||
Agent 0x99: Dr. Sarah Kim, Hospital CTO, is expecting you. She'll grant access.
|
||||
|
||||
Agent 0x99: Staff is stressed, desperate. Use that. Build trust.
|
||||
|
||||
+ [Understood]
|
||||
-> security_warning
|
||||
|
||||
=== security_warning ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Security is heightened. Guards patrolling. Stay low profile.
|
||||
|
||||
Agent 0x99: Like an axolotl timing its movements—patience and observation.
|
||||
|
||||
Agent 0x99: You'll need lockpicking, social engineering, maybe some technical exploitation.
|
||||
|
||||
+ [I can handle it]
|
||||
-> mission_approach
|
||||
|
||||
+ [Any other guidance?]
|
||||
You: What else should I know?
|
||||
Agent 0x99: IT admin is named Marcus Webb. He warned them about vulnerabilities six months ago.
|
||||
Agent 0x99: They ignored him. Now he's devastated. Might be an ally.
|
||||
-> mission_approach
|
||||
|
||||
// ===========================================
|
||||
// CRITICAL CHOICE: Mission Approach
|
||||
// ===========================================
|
||||
|
||||
=== mission_approach ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: How do you want to approach this?
|
||||
|
||||
+ [Cautious and methodical]
|
||||
~ player_approach = "cautious"
|
||||
~ mission_priority = "thoroughness"
|
||||
You: I'll be careful. Thorough investigation is key.
|
||||
Agent 0x99: Smart. Document everything. Build a complete picture.
|
||||
Agent 0x99: But remember—47 patients, 12-hour window. Thorough doesn't mean slow.
|
||||
-> final_instructions
|
||||
|
||||
+ [Fast and direct]
|
||||
~ player_approach = "aggressive"
|
||||
~ mission_priority = "speed"
|
||||
You: I'll move fast. Complete objectives quickly.
|
||||
Agent 0x99: Time is critical, but don't miss vital evidence.
|
||||
Agent 0x99: ENTROPY leaves traces. Those traces help us stop them permanently.
|
||||
-> final_instructions
|
||||
|
||||
+ [Adaptable—assess on site]
|
||||
~ player_approach = "adaptable"
|
||||
~ mission_priority = "stealth"
|
||||
You: I'll read the situation and adapt as needed.
|
||||
Agent 0x99: Flexible thinking. Trust your instincts.
|
||||
Agent 0x99: Situations like this change fast. Adapt or fail.
|
||||
~ handler_trust += 5
|
||||
-> final_instructions
|
||||
|
||||
=== final_instructions ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Remember Field Operations Rule 7: "In crises, perfect is the enemy of good enough."
|
||||
|
||||
{player_approach == "cautious":
|
||||
Agent 0x99: Your careful approach serves you well. But speed matters here.
|
||||
}
|
||||
{player_approach == "aggressive":
|
||||
Agent 0x99: Speed is good. But don't compromise the mission for it.
|
||||
}
|
||||
{player_approach == "adaptable":
|
||||
Agent 0x99: Adaptability is your strength. Use it.
|
||||
}
|
||||
|
||||
Agent 0x99: You'll have comms support. Call if you need guidance.
|
||||
|
||||
* [Any last advice?]
|
||||
Agent 0x99: Marcus Webb, the IT admin. He's guilty and desperate.
|
||||
Agent 0x99: That makes him vulnerable. Build trust, get access.
|
||||
Agent 0x99: And watch for Ghost. They're calculated. Expect spreadsheets, not rage.
|
||||
-> deployment
|
||||
|
||||
* [I'm ready to go]
|
||||
-> deployment
|
||||
|
||||
=== deployment ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Good luck, {player_name}.
|
||||
|
||||
Agent 0x99: 47 lives. 12 hours. SAFETYNET is counting on you.
|
||||
|
||||
{knows_full_stakes:
|
||||
Agent 0x99: And remember—those patient deaths? They're on ENTROPY, not you.
|
||||
Agent 0x99: Do your best. That's all anyone can ask.
|
||||
}
|
||||
|
||||
#complete_task:receive_mission_briefing
|
||||
#unlock_aim:infiltrate_hospital
|
||||
#start_gameplay
|
||||
#exit_conversation
|
||||
|
||||
-> END
|
||||
@@ -0,0 +1,379 @@
|
||||
// ===========================================
|
||||
// ACT 2 PHONE NPC: Agent 0x99 (Handler Support)
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Remote Support, Tutorial Guide, Moral Sounding Board
|
||||
// ===========================================
|
||||
|
||||
// Variables for tracking hints and support
|
||||
VAR hint_guard_patrol_given = false
|
||||
VAR hint_lockpicking_given = false
|
||||
VAR hint_password_cracking_given = false
|
||||
VAR hint_pin_safe_given = false
|
||||
VAR tutorial_encoding_given = false
|
||||
VAR discussed_ghost_manifesto = false
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
EXTERNAL objectives_completed
|
||||
EXTERNAL stealth_rating
|
||||
EXTERNAL lore_collected
|
||||
|
||||
// ===========================================
|
||||
// MAIN CALL INTERFACE
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: {player_name}, checking in. How's it going?
|
||||
|
||||
{objectives_completed >= 6:
|
||||
Agent 0x99: Excellent progress. You're nearly there.
|
||||
-> late_mission_support
|
||||
}
|
||||
{objectives_completed >= 3:
|
||||
Agent 0x99: Good progress. Keep pushing.
|
||||
-> mid_mission_support
|
||||
}
|
||||
{objectives_completed > 0:
|
||||
Agent 0x99: You're making headway. Stay focused.
|
||||
-> early_mission_support
|
||||
}
|
||||
{objectives_completed == 0:
|
||||
Agent 0x99: Just getting started? Need any guidance?
|
||||
-> early_mission_support
|
||||
}
|
||||
|
||||
// ===========================================
|
||||
// EARLY MISSION SUPPORT (0-2 objectives)
|
||||
// ===========================================
|
||||
|
||||
=== early_mission_support ===
|
||||
|
||||
+ [Request general hint]
|
||||
-> provide_early_hint
|
||||
|
||||
+ [Ask about guard patrols]
|
||||
-> guard_patrol_advice
|
||||
|
||||
+ [Ask about lockpicking]
|
||||
-> lockpicking_advice
|
||||
|
||||
+ [Report progress]
|
||||
You: I've met Dr. Kim and Marcus. Learning the situation.
|
||||
Agent 0x99: Good. Build trust. They're stressed and desperate—that's leverage.
|
||||
-> end_call
|
||||
|
||||
+ [End call]
|
||||
-> end_call
|
||||
|
||||
=== provide_early_hint ===
|
||||
|
||||
{not hint_guard_patrol_given:
|
||||
-> guard_patrol_advice
|
||||
}
|
||||
{not hint_lockpicking_given:
|
||||
-> lockpicking_advice
|
||||
}
|
||||
{objectives_completed == 0:
|
||||
Agent 0x99: Start with Dr. Kim. Get authorization for IT access.
|
||||
Agent 0x99: Then find Marcus Webb. He's guilty, stressed—perfect social engineering target.
|
||||
-> end_call
|
||||
- else:
|
||||
Agent 0x99: You're doing fine. Trust your training.
|
||||
-> end_call
|
||||
}
|
||||
|
||||
=== guard_patrol_advice ===
|
||||
~ hint_guard_patrol_given = true
|
||||
|
||||
Agent 0x99: Security is heightened. Guard patrols are on 60-second loops.
|
||||
|
||||
Agent 0x99: Like an axolotl timing its movements to avoid predators—patience and observation.
|
||||
|
||||
Agent 0x99: Watch the pattern. Find the window. Move when they round the corner.
|
||||
|
||||
+ [Understood]
|
||||
-> early_mission_support
|
||||
|
||||
+ [What if I'm detected?]
|
||||
Agent 0x99: First detection is usually a warning. Don't panic. Hide or talk your way out.
|
||||
Agent 0x99: You have cover: external security consultant. Use it.
|
||||
-> early_mission_support
|
||||
|
||||
=== lockpicking_advice ===
|
||||
~ hint_lockpicking_given = true
|
||||
|
||||
Agent 0x99: Lockpicking takes time and makes noise. Be careful near guards.
|
||||
|
||||
Agent 0x99: Standard pin tumbler locks are common. If you have lockpicks, most doors are accessible.
|
||||
|
||||
Agent 0x99: Marcus's server room keycard is ideal, but lockpicking works if he won't cooperate.
|
||||
|
||||
+ [Got it]
|
||||
-> early_mission_support
|
||||
|
||||
// ===========================================
|
||||
// MID MISSION SUPPORT (3-5 objectives)
|
||||
// ===========================================
|
||||
|
||||
=== mid_mission_support ===
|
||||
|
||||
+ [Request hint]
|
||||
-> provide_mid_hint
|
||||
|
||||
+ [Ask about password cracking]
|
||||
-> password_advice
|
||||
|
||||
+ [Ask about encoding challenges]
|
||||
-> encoding_tutorial
|
||||
|
||||
+ [Discuss Ghost's manifesto]
|
||||
-> discuss_manifesto
|
||||
|
||||
+ [End call]
|
||||
-> end_call
|
||||
|
||||
=== provide_mid_hint ===
|
||||
|
||||
{not hint_password_cracking_given:
|
||||
-> password_advice
|
||||
}
|
||||
{not tutorial_encoding_given:
|
||||
-> encoding_tutorial
|
||||
}
|
||||
{not hint_pin_safe_given:
|
||||
-> pin_safe_advice
|
||||
}
|
||||
{objectives_completed < 5:
|
||||
Agent 0x99: You're making progress. Stay focused on VM challenges.
|
||||
Agent 0x99: ProFTPD exploitation is the key. CVE-2010-4652—backdoor vulnerability.
|
||||
-> end_call
|
||||
- else:
|
||||
Agent 0x99: Trust your instincts. You've got this.
|
||||
-> end_call
|
||||
}
|
||||
|
||||
=== password_advice ===
|
||||
~ hint_password_cracking_given = true
|
||||
|
||||
Agent 0x99: Hospital environments use weak passwords. Birthdays, company names, simple variations.
|
||||
|
||||
Agent 0x99: Marcus might have kept a list of common employee passwords. Check his desk.
|
||||
|
||||
Agent 0x99: Try patterns: Emma2018, Hospital1987, StCatherines. People are predictable.
|
||||
|
||||
+ [Thanks]
|
||||
-> mid_mission_support
|
||||
|
||||
=== encoding_tutorial ===
|
||||
~ tutorial_encoding_given = true
|
||||
|
||||
Agent 0x99: Encoding vs. encryption—important distinction.
|
||||
|
||||
Agent 0x99: Encoding transforms data for transmission. No secret key needed. Base64, ROT13, hex.
|
||||
|
||||
Agent 0x99: Encryption requires a secret key. Much more secure. AES, RSA, ChaCha20.
|
||||
|
||||
Agent 0x99: ENTROPY uses encoding for obfuscation, encryption for actual security.
|
||||
|
||||
+ [How do I decode Base64?]
|
||||
Agent 0x99: Use CyberChef. It's an industry-standard tool. Select "From Base64" and paste the text.
|
||||
Agent 0x99: You'll use CyberChef constantly in this field. Get comfortable with it.
|
||||
-> mid_mission_support
|
||||
|
||||
+ [Understood]
|
||||
-> mid_mission_support
|
||||
|
||||
=== discuss_manifesto ===
|
||||
~ discussed_ghost_manifesto = true
|
||||
|
||||
{lore_collected > 0:
|
||||
-> manifesto_found
|
||||
- else:
|
||||
-> manifesto_not_found
|
||||
}
|
||||
|
||||
=== manifesto_found ===
|
||||
|
||||
Agent 0x99: You found Ghost's manifesto. Calculated patient death probabilities.
|
||||
|
||||
Agent 0x99: 47 patients, 0.3% per hour risk. 1-2 deaths if ransom paid, 4-6 if delayed.
|
||||
|
||||
Agent 0x99: This isn't random cybercrime. This is ideology. ENTROPY believes suffering teaches lessons.
|
||||
|
||||
+ [This is horrifying]
|
||||
You: They have a spreadsheet of how many people will die.
|
||||
Agent 0x99: Operation Shatter had 42-85 projected deaths. Now patient death probabilities.
|
||||
Agent 0x99: We're fighting true believers, not opportunistic criminals.
|
||||
-> mid_mission_support
|
||||
|
||||
+ [Ghost has a point about negligence]
|
||||
You: The hospital DID ignore Marcus's warnings for six months.
|
||||
Agent 0x99: True. Institutional negligence is real. But ENTROPY's solution? Calculated harm?
|
||||
Agent 0x99: They're exploiting systemic failure, not fixing it. Don't fall for their rhetoric.
|
||||
-> mid_mission_support
|
||||
|
||||
=== manifesto_not_found ===
|
||||
|
||||
Agent 0x99: You haven't found Ghost's operational logs yet. Keep searching the VM.
|
||||
|
||||
Agent 0x99: Ghost's ideology drives their actions. Understanding it helps predict their moves.
|
||||
|
||||
-> mid_mission_support
|
||||
|
||||
=== pin_safe_advice ===
|
||||
~ hint_pin_safe_given = true
|
||||
|
||||
Agent 0x99: Ghost's logs mention offline backup keys in a physical safe.
|
||||
|
||||
Agent 0x99: 4-digit PIN lock. Look for clues in the hospital environment.
|
||||
|
||||
Agent 0x99: Founding years, significant dates, administrative anniversaries. Hospitals love that stuff.
|
||||
|
||||
+ [Where should I look?]
|
||||
Agent 0x99: Emergency equipment storage, administrative offices. Anywhere valuable backups would be stored.
|
||||
Agent 0x99: Check plaques, photos, documents. The clues are there.
|
||||
-> mid_mission_support
|
||||
|
||||
+ [Got it]
|
||||
-> mid_mission_support
|
||||
|
||||
// ===========================================
|
||||
// LATE MISSION SUPPORT (6+ objectives)
|
||||
// ===========================================
|
||||
|
||||
=== late_mission_support ===
|
||||
|
||||
Agent 0x99: You're in the final stretch. Recovery options available?
|
||||
|
||||
{objectives_completed >= 7:
|
||||
Agent 0x99: You've recovered the offline backup keys. Now comes the hard part.
|
||||
-> ransom_decision_discussion
|
||||
}
|
||||
|
||||
+ [Request final guidance]
|
||||
-> final_mission_guidance
|
||||
|
||||
+ [Discuss ransom decision]
|
||||
-> ransom_decision_discussion
|
||||
|
||||
+ [End call]
|
||||
-> end_call
|
||||
|
||||
=== final_mission_guidance ===
|
||||
|
||||
Agent 0x99: You have all the pieces. Offline backup keys, VM access, evidence of negligence.
|
||||
|
||||
Agent 0x99: The ransom decision is yours. I can't make it for you.
|
||||
|
||||
Agent 0x99: 47 lives today vs. ENTROPY funding for future attacks. Choose wisely.
|
||||
|
||||
+ [What would you do?]
|
||||
Agent 0x99: I'd weigh immediate lives against long-term harm. Both choices save people—just different timeframes.
|
||||
Agent 0x99: There's no perfect answer here. That's what makes it hard.
|
||||
-> late_mission_support
|
||||
|
||||
+ [I understand]
|
||||
-> late_mission_support
|
||||
|
||||
=== ransom_decision_discussion ===
|
||||
|
||||
Agent 0x99: The ransom decision is the mission's core dilemma.
|
||||
|
||||
Agent 0x99: Pay: 1-2 patient deaths, $87K funds ENTROPY.
|
||||
|
||||
Agent 0x99: Don't pay: 4-6 patient deaths, ENTROPY denied funding.
|
||||
|
||||
Agent 0x99: Utilitarian vs. consequentialist ethics. Immediate lives vs. long-term prevention.
|
||||
|
||||
+ [This is impossible]
|
||||
You: There's no good choice. Either way, people suffer.
|
||||
Agent 0x99: Welcome to counterterrorism. Sometimes you choose the lesser evil.
|
||||
Agent 0x99: ENTROPY creates these dilemmas on purpose. Don't be paralyzed.
|
||||
-> late_mission_support
|
||||
|
||||
+ [What about hospital exposure?]
|
||||
Agent 0x99: Secondary decision. Expose negligence publicly—forces improvements, damages reputation.
|
||||
Agent 0x99: Quiet resolution—protects reputation, risks repeat vulnerability.
|
||||
Agent 0x99: Again, no perfect answer.
|
||||
-> late_mission_support
|
||||
|
||||
+ [I'll make the call]
|
||||
Agent 0x99: Good. Trust your judgment. That's all anyone can ask.
|
||||
-> late_mission_support
|
||||
|
||||
// ===========================================
|
||||
// END CALL
|
||||
// ===========================================
|
||||
|
||||
=== end_call ===
|
||||
|
||||
Agent 0x99: Stay safe out there, {player_name}.
|
||||
|
||||
{stealth_rating > 80:
|
||||
Agent 0x99: And excellent stealth work. You're nearly invisible.
|
||||
}
|
||||
{stealth_rating < 40:
|
||||
Agent 0x99: And try to stay quieter. You're making noise.
|
||||
}
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// EVENT-TRIGGERED KNOTS (Called by game events)
|
||||
// ===========================================
|
||||
|
||||
// Called when player is detected by guard
|
||||
=== on_player_detected ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: You've been spotted! Use your cover story or hide.
|
||||
|
||||
Agent 0x99: Remember—you're an external security consultant. Legitimate access.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// Called when player successfully completes lockpicking
|
||||
=== on_lockpick_success ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Smooth work on that lock. Solid technique.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// Called when player finds first LORE fragment
|
||||
=== on_first_lore_found ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Good find. ENTROPY intelligence helps us understand their network.
|
||||
|
||||
Agent 0x99: Keep searching. The more we know, the better we can fight them.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// Called when player submits first VM flag
|
||||
=== on_first_flag_submitted ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Excellent! First flag submitted. You're exploiting ENTROPY's own backdoor.
|
||||
|
||||
Agent 0x99: Keep going. Each flag unlocks intel and resources.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// Called when player enters server room
|
||||
=== on_enter_server_room ===
|
||||
#speaker:agent_0x99
|
||||
|
||||
Agent 0x99: Server room accessed. This is the heart of the operation.
|
||||
|
||||
Agent 0x99: VM terminal for exploitation, drop-site for flag submission. Use both.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
@@ -0,0 +1,381 @@
|
||||
// ===========================================
|
||||
// ACT 2/3 PHONE NPC: Ghost (Ransomware Incorporated)
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Antagonist, True Believer, Ideological Counter
|
||||
// ===========================================
|
||||
|
||||
// Variables for tracking interactions
|
||||
VAR ghost_contacted_player = false
|
||||
VAR ghost_persuasion_attempted = false
|
||||
VAR player_confronted_ghost = false
|
||||
VAR ghost_unrepentant = true
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
EXTERNAL objectives_completed
|
||||
EXTERNAL paid_ransom
|
||||
|
||||
// ===========================================
|
||||
// INITIAL CONTACT (Mid-Mission)
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:ghost
|
||||
|
||||
{ghost_contacted_player:
|
||||
-> return_contact
|
||||
}
|
||||
|
||||
[ENCRYPTED CHANNEL ESTABLISHED]
|
||||
|
||||
[UNKNOWN CALLER]
|
||||
|
||||
Voice (distorted): So. SAFETYNET sent someone. Predictable.
|
||||
|
||||
Voice: I'm Ghost. Ransomware Incorporated. You're interfering with our operation.
|
||||
|
||||
~ ghost_contacted_player = true
|
||||
|
||||
* [Who are you?]
|
||||
You: Ghost? Ransomware Incorporated? What do you want?
|
||||
-> ghost_introduction
|
||||
|
||||
* [Threaten Ghost]
|
||||
You: You're attacking a hospital. Patients are dying.
|
||||
-> player_threatens
|
||||
|
||||
* [Stay silent]
|
||||
You: ...
|
||||
Ghost: Strong, silent type. Fine. I'll talk.
|
||||
-> ghost_introduction
|
||||
|
||||
=== ghost_introduction ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: We're educators, not criminals. St. Catherine's ignored security warnings for six months.
|
||||
|
||||
Ghost: Marcus Webb's email, May 17th: "ProFTPD vulnerability, critical severity, immediate patching required."
|
||||
|
||||
Ghost: Hospital response: "Budget constraints. Defer to next fiscal year."
|
||||
|
||||
* [That doesn't justify attacking patients]
|
||||
You: That doesn't justify encrypting patient records. People could die.
|
||||
-> ghost_justification
|
||||
|
||||
* [So this is ideological?]
|
||||
You: You're teaching them a lesson? That's your justification?
|
||||
-> ghost_philosophy
|
||||
|
||||
=== player_threatens ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Patients dying? No. Patients at RISK. Calculated risk.
|
||||
|
||||
Ghost: 0.3% per hour fatality probability. 47 patients. 12-hour window.
|
||||
|
||||
Ghost: 1-2 deaths if they pay immediately. 4-6 if they delay for manual recovery.
|
||||
|
||||
Ghost: We didn't create that risk. St. Catherine's negligence did. We're just revealing consequences.
|
||||
|
||||
* [You calculated death probabilities?]
|
||||
You: You have spreadsheets of how many people will die?
|
||||
-> ghost_confirms_calculations
|
||||
|
||||
* [That's monstrous]
|
||||
You: You're using human lives as leverage. That's evil.
|
||||
-> ghost_philosophy
|
||||
|
||||
=== ghost_confirms_calculations ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Of course I calculated probabilities. This is risk assessment, not recklessness.
|
||||
|
||||
Ghost: St. Catherine's board never ran these numbers. They deferred $85K security spending for a $3.2M MRI.
|
||||
|
||||
Ghost: THEY gambled with patient safety. We're just making the stakes visible.
|
||||
|
||||
* [You're rationalizing terrorism]
|
||||
You: This is terrorism, not education.
|
||||
Ghost: Terrorism is violence for political aims. This is consequence for negligence.
|
||||
Ghost: We're the mirror showing them what they've always risked.
|
||||
-> ghost_philosophy
|
||||
|
||||
* [What do you want?]
|
||||
-> ransom_demand
|
||||
|
||||
=== ghost_justification ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Justify? I don't need to justify. The math justifies itself.
|
||||
|
||||
Ghost: St. Catherine's ignored Marcus's warnings. They chose shiny equipment over patient data security.
|
||||
|
||||
Ghost: Now they face consequences. Expensive, painful consequences they'll never forget.
|
||||
|
||||
-> ghost_philosophy
|
||||
|
||||
=== ghost_philosophy ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Healthcare sector is systemically vulnerable. 214 hospitals we scanned. 147 have critical vulnerabilities.
|
||||
|
||||
Ghost: Traditional cybersecurity consultants charge millions for reports nobody reads.
|
||||
|
||||
Ghost: We charge thousands for lessons nobody forgets.
|
||||
|
||||
Ghost: After this, St. Catherine's will triple cybersecurity budgets. 40 other hospitals will too.
|
||||
|
||||
Ghost: Long-term? We'll prevent 200-600 deaths across 5 years. Statistical modeling confirms it.
|
||||
|
||||
* [You don't get to make that calculation]
|
||||
You: You don't get to decide whose lives are worth risking.
|
||||
-> ghost_rejects_argument
|
||||
|
||||
* [That's utilitarian logic]
|
||||
You: Utilitarian harm for long-term good. Slippery slope.
|
||||
-> ghost_accepts_label
|
||||
|
||||
=== ghost_rejects_argument ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: I didn't decide. St. Catherine's board decided when they cut security budgets.
|
||||
|
||||
Ghost: We're just the consequence they tried to ignore.
|
||||
|
||||
-> ransom_demand
|
||||
|
||||
=== ghost_accepts_label ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Slippery slope? Perhaps. But someone has to force change.
|
||||
|
||||
Ghost: The alternative is systemic negligence continues. More hospitals get attacked. More patients die.
|
||||
|
||||
Ghost: We're harsh teachers. But institutional change requires pain.
|
||||
|
||||
-> ransom_demand
|
||||
|
||||
// ===========================================
|
||||
// RANSOM DEMAND
|
||||
// ===========================================
|
||||
|
||||
=== ransom_demand ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Here's what happens next.
|
||||
|
||||
Ghost: Pay 2.5 BTC—$87,000. Systems restored in 2-4 hours. 1-2 patient deaths, statistical minimum.
|
||||
|
||||
Ghost: Don't pay. Manual recovery takes 12 hours. 4-6 patient deaths. Malpractice lawsuits. Hospital reputation destroyed.
|
||||
|
||||
Ghost: Your choice, SAFETYNET.
|
||||
|
||||
~ ghost_persuasion_attempted = true
|
||||
|
||||
* [We'll recover independently]
|
||||
You: We're not funding terrorism. We'll recover independently.
|
||||
-> ghost_warns_consequences
|
||||
|
||||
* [Threaten to trace Ghost]
|
||||
You: We'll trace the payment. Find you. Arrest you.
|
||||
-> ghost_laughs_at_threat
|
||||
|
||||
* [End communication]
|
||||
You: We're done here.
|
||||
Ghost: Time's running out. Patients are counting on you.
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
=== ghost_warns_consequences ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Independent recovery. 12 hours. 4-6 deaths.
|
||||
|
||||
Ghost: Those deaths are on YOUR conscience, not ours.
|
||||
|
||||
Ghost: St. Catherine's negligence created this crisis. You could save them. You're choosing ideology over lives.
|
||||
|
||||
Ghost: Remember that when families ask why their loved ones died.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
=== ghost_laughs_at_threat ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Trace me? Crypto Anarchists handle our payment infrastructure.
|
||||
|
||||
Ghost: Monero mixing across 47 wallets. Multi-hop transaction routing. DarkCoin anonymization.
|
||||
|
||||
Ghost: Even SAFETYNET forensics can't pierce that. Ghost Protocol guarantees it.
|
||||
|
||||
Ghost: Good luck, agent. You'll need it.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// RETURN CONTACT (After Decision)
|
||||
// ===========================================
|
||||
|
||||
=== return_contact ===
|
||||
#speaker:ghost
|
||||
|
||||
[ENCRYPTED CHANNEL - GHOST]
|
||||
|
||||
{objectives_completed >= 7:
|
||||
-> post_decision_contact
|
||||
- else:
|
||||
-> mid_mission_contact
|
||||
}
|
||||
|
||||
=== mid_mission_contact ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Still working? Time's running out.
|
||||
|
||||
Ghost: 47 patients. Backup power failing. Families watching monitors, praying.
|
||||
|
||||
Ghost: $87,000 vs. human lives. Easy math.
|
||||
|
||||
* [You're trying to pressure me]
|
||||
You: This is psychological manipulation.
|
||||
Ghost: This is reality. 0.3% per hour. The clock doesn't care about your feelings.
|
||||
-> end_contact
|
||||
|
||||
* [We'll stop you]
|
||||
You: SAFETYNET will dismantle ENTROPY. You'll be arrested.
|
||||
Ghost: Maybe. But St. Catherine's will never ignore cybersecurity again. Mission accomplished.
|
||||
-> end_contact
|
||||
|
||||
* [End call]
|
||||
-> end_contact
|
||||
|
||||
=== post_decision_contact ===
|
||||
#speaker:ghost
|
||||
|
||||
{paid_ransom:
|
||||
-> ransom_paid_response
|
||||
- else:
|
||||
-> ransom_refused_response
|
||||
}
|
||||
|
||||
=== ransom_paid_response ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Smart choice. Decryption keys delivered. Systems restoring.
|
||||
|
||||
Ghost: 1-2 patient deaths. Acceptable losses compared to the alternative.
|
||||
|
||||
Ghost: St. Catherine's will never ignore cybersecurity again. Board approved $250K security budget—triple the old allocation.
|
||||
|
||||
Ghost: Lesson learned. Mission accomplished.
|
||||
|
||||
* [You're still a terrorist]
|
||||
You: You killed people. That's terrorism.
|
||||
Ghost: Pre-existing complications during system transition. Medical records confirm it.
|
||||
Ghost: Statistically inevitable. Could have happened without our intervention.
|
||||
-> ghost_final_statement
|
||||
|
||||
* [This won't stop SAFETYNET]
|
||||
You: We're coming for you. ENTROPY won't last.
|
||||
Ghost: Maybe. But how many hospitals will improve security before you find us?
|
||||
Ghost: 40? 60? 100? Each one is lives saved long-term.
|
||||
-> ghost_final_statement
|
||||
|
||||
=== ransom_refused_response ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Independent recovery. 4-6 patient deaths confirmed.
|
||||
|
||||
Ghost: Ventilator complications. Dialysis failures. Cardiac arrests during extended downtime.
|
||||
|
||||
Ghost: Those deaths are on YOUR conscience. You could have paid. You chose ideology.
|
||||
|
||||
* [No. Those deaths are on YOU]
|
||||
You: YOU attacked the hospital. YOU encrypted patient records. This is YOUR fault.
|
||||
-> ghost_rejects_responsibility
|
||||
|
||||
* [We denied ENTROPY funding]
|
||||
You: $87,000 denied. No funding for your next attack.
|
||||
-> ghost_acknowledges_loss
|
||||
|
||||
=== ghost_rejects_responsibility ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: I accept operational responsibility. But St. Catherine's created the vulnerability.
|
||||
|
||||
Ghost: Six months of ignored warnings. Budget negligence. Institutional failure.
|
||||
|
||||
Ghost: We exploited it. They enabled it. Share the blame.
|
||||
|
||||
-> ghost_final_statement
|
||||
|
||||
=== ghost_acknowledges_loss ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: $87,000 lost. Operational setback acknowledged.
|
||||
|
||||
Ghost: But St. Catherine's board approved $400K emergency security budget—panic response.
|
||||
|
||||
Ghost: 40 hospitals implementing emergency upgrades. Sector-wide impact achieved.
|
||||
|
||||
Ghost: Educational outcome: Success. Worth the cost.
|
||||
|
||||
-> ghost_final_statement
|
||||
|
||||
// ===========================================
|
||||
// FINAL STATEMENT (Unrepentant)
|
||||
// ===========================================
|
||||
|
||||
=== ghost_final_statement ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: Here's what you need to understand, SAFETYNET.
|
||||
|
||||
Ghost: I calculated the risks. I planned the operation. I accept the consequences.
|
||||
|
||||
Ghost: If you arrest me, I'll go to prison. No resistance. No regret.
|
||||
|
||||
Ghost: Because St. Catherine's will never ignore cybersecurity again. Neither will 40 other hospitals.
|
||||
|
||||
Ghost: That's worth it. That's the mission. That's ENTROPY's purpose.
|
||||
|
||||
* [You're insane]
|
||||
You: You're a fanatic. Calculated harm is still harm.
|
||||
Ghost: Fanaticism is believing despite evidence. I have spreadsheets, statistical models, outcome projections.
|
||||
Ghost: This is evidence-based ideology.
|
||||
-> ghost_disconnects
|
||||
|
||||
* [We'll stop ENTROPY]
|
||||
You: This isn't over. We're coming for the whole network.
|
||||
Ghost: Good luck. The Architect coordinates six cells. We're everywhere.
|
||||
Ghost: Shut down one, five remain. Hydra principle.
|
||||
-> ghost_disconnects
|
||||
|
||||
=== ghost_disconnects ===
|
||||
#speaker:ghost
|
||||
|
||||
Ghost: This conversation is over.
|
||||
|
||||
Ghost: Remember: ENTROPY didn't create healthcare vulnerabilities. We just revealed them.
|
||||
|
||||
Ghost: The real enemy is institutional negligence. We're the symptom, not the disease.
|
||||
|
||||
[ENCRYPTED CHANNEL TERMINATED]
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// END CONTACT
|
||||
// ===========================================
|
||||
|
||||
=== end_contact ===
|
||||
|
||||
Ghost: Time's running out. Choose wisely.
|
||||
|
||||
[CHANNEL CLOSED]
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
@@ -0,0 +1,237 @@
|
||||
// ===========================================
|
||||
// ACT 2 TERMINAL: Drop-Site Terminal (VM Flag Submission)
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Hybrid Architecture Integration
|
||||
// ===========================================
|
||||
|
||||
// Variables for tracking flag submissions
|
||||
VAR flag_ssh_submitted = false
|
||||
VAR flag_proftpd_submitted = false
|
||||
VAR flag_database_submitted = false
|
||||
VAR flag_ghost_log_submitted = false
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
|
||||
// ===========================================
|
||||
// MAIN TERMINAL INTERFACE
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:computer
|
||||
|
||||
SAFETYNET DROP-SITE TERMINAL
|
||||
|
||||
Secure communication channel for intercepted ENTROPY intelligence.
|
||||
|
||||
Submit flags to unlock analysis and resources.
|
||||
|
||||
-> main_menu
|
||||
|
||||
=== main_menu ===
|
||||
|
||||
+ {not flag_ssh_submitted} [Submit Flag 1: SSH Access]
|
||||
-> submit_flag_ssh
|
||||
|
||||
+ {not flag_proftpd_submitted} [Submit Flag 2: ProFTPD Exploit]
|
||||
-> submit_flag_proftpd
|
||||
|
||||
+ {not flag_database_submitted} [Submit Flag 3: Database Backup Located]
|
||||
-> submit_flag_database
|
||||
|
||||
+ {not flag_ghost_log_submitted} [Submit Flag 4: Ghost's Operational Log]
|
||||
-> submit_flag_ghost_log
|
||||
|
||||
+ [View submission status]
|
||||
-> view_status
|
||||
|
||||
+ [Exit terminal]
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// FLAG 1: SSH ACCESS
|
||||
// ===========================================
|
||||
|
||||
=== submit_flag_ssh ===
|
||||
#speaker:computer
|
||||
|
||||
SUBMIT FLAG: SSH ACCESS TO HOSPITAL BACKUP SERVER
|
||||
|
||||
Enter flag:
|
||||
|
||||
[Player input: flag\{ssh_access_granted}]
|
||||
|
||||
System: Flag verified.
|
||||
|
||||
System: ENTROPY server credentials intercepted.
|
||||
|
||||
System: Unlocking encrypted intelligence files...
|
||||
|
||||
~ flag_ssh_submitted = true
|
||||
#complete_task:submit_ssh_flag
|
||||
#unlock_task:exploit_proftpd_vulnerability
|
||||
|
||||
INTEL UNLOCKED: Hospital backup server accessible via SSH.
|
||||
|
||||
Credentials confirmed functional. Proceed with ProFTPD exploitation.
|
||||
|
||||
+ [Continue]
|
||||
-> main_menu
|
||||
|
||||
// ===========================================
|
||||
// FLAG 2: ProFTPD EXPLOITATION
|
||||
// ===========================================
|
||||
|
||||
=== submit_flag_proftpd ===
|
||||
#speaker:computer
|
||||
|
||||
SUBMIT FLAG: ProFTPD BACKDOOR EXPLOITATION
|
||||
|
||||
Enter flag:
|
||||
|
||||
[Player input: flag\{proftpd_backdoor_exploited}]
|
||||
|
||||
System: Flag verified.
|
||||
|
||||
System: ProFTPD CVE-2010-4652 exploitation confirmed.
|
||||
|
||||
System: Shell access to backup server established.
|
||||
|
||||
~ flag_proftpd_submitted = true
|
||||
#complete_task:submit_proftpd_flag
|
||||
#unlock_task:navigate_backup_filesystem
|
||||
|
||||
INTEL UNLOCKED: Root filesystem access granted.
|
||||
|
||||
Navigate to /var/backups to locate encrypted database files and operational logs.
|
||||
|
||||
+ [Continue]
|
||||
-> main_menu
|
||||
|
||||
// ===========================================
|
||||
// FLAG 3: DATABASE BACKUP LOCATED
|
||||
// ===========================================
|
||||
|
||||
=== submit_flag_database ===
|
||||
#speaker:computer
|
||||
|
||||
SUBMIT FLAG: DATABASE BACKUP LOCATION
|
||||
|
||||
Enter flag:
|
||||
|
||||
[Player input: flag\{database_backup_located}]
|
||||
|
||||
System: Flag verified.
|
||||
|
||||
System: Patient database backups identified.
|
||||
|
||||
System: Correlating with ransomware encryption keys...
|
||||
|
||||
~ flag_database_submitted = true
|
||||
#complete_task:submit_database_flag
|
||||
#unlock_task:locate_offline_backup_keys
|
||||
|
||||
INTEL UNLOCKED: Offline backup encryption keys mentioned in Ghost's logs.
|
||||
|
||||
Analysis indicates keys stored in physical safe: "Emergency Equipment Storage, Administrative Wing."
|
||||
|
||||
Search for 4-digit PIN-locked safe. Clues available in hospital environment.
|
||||
|
||||
+ [Continue]
|
||||
-> main_menu
|
||||
|
||||
// ===========================================
|
||||
// FLAG 4: GHOST'S OPERATIONAL LOG
|
||||
// ===========================================
|
||||
|
||||
=== submit_flag_ghost_log ===
|
||||
#speaker:computer
|
||||
|
||||
SUBMIT FLAG: GHOST'S OPERATIONAL LOG
|
||||
|
||||
Enter flag:
|
||||
|
||||
[Player input: flag\{ghost_operational_log}]
|
||||
|
||||
System: Flag verified.
|
||||
|
||||
System: Ransomware Incorporated operational philosophy document intercepted.
|
||||
|
||||
System: Analyzing ENTROPY methodology...
|
||||
|
||||
~ flag_ghost_log_submitted = true
|
||||
#complete_task:submit_ghost_log_flag
|
||||
#unlock_lore:ghosts_manifesto
|
||||
|
||||
WARNING: Ghost calculated patient death probabilities (0.3% per hour).
|
||||
|
||||
47 patients on life support = 1-2 deaths if ransom paid immediately, 4-6 if delayed 12 hours.
|
||||
|
||||
ENTROPY classification: Ideological attack, not profit-motivated.
|
||||
|
||||
Recommendation: Complete recovery ASAP to minimize statistical patient risk.
|
||||
|
||||
+ [This is horrifying]
|
||||
-> ghost_log_reaction
|
||||
|
||||
+ [Continue]
|
||||
-> main_menu
|
||||
|
||||
=== ghost_log_reaction ===
|
||||
#speaker:computer
|
||||
|
||||
Agent 0x99 (via secure channel): They calculated how many people would die.
|
||||
|
||||
Agent 0x99: Spreadsheets of projected fatalities. This is ENTROPY's ideology.
|
||||
|
||||
Agent 0x99: Operation Shatter had 42-85 projected deaths. Now patient death probabilities.
|
||||
|
||||
Agent 0x99: We're not fighting random criminals. We're fighting true believers.
|
||||
|
||||
+ [Continue]
|
||||
-> main_menu
|
||||
|
||||
// ===========================================
|
||||
// VIEW STATUS
|
||||
// ===========================================
|
||||
|
||||
=== view_status ===
|
||||
#speaker:computer
|
||||
|
||||
FLAG SUBMISSION STATUS:
|
||||
|
||||
{flag_ssh_submitted:
|
||||
✓ Flag 1: SSH Access - SUBMITTED
|
||||
- else:
|
||||
✗ Flag 1: SSH Access - PENDING
|
||||
}
|
||||
|
||||
{flag_proftpd_submitted:
|
||||
✓ Flag 2: ProFTPD Exploit - SUBMITTED
|
||||
- else:
|
||||
✗ Flag 2: ProFTPD Exploit - PENDING
|
||||
}
|
||||
|
||||
{flag_database_submitted:
|
||||
✓ Flag 3: Database Backup Located - SUBMITTED
|
||||
- else:
|
||||
✗ Flag 3: Database Backup Located - PENDING
|
||||
}
|
||||
|
||||
{flag_ghost_log_submitted:
|
||||
✓ Flag 4: Ghost's Operational Log - SUBMITTED
|
||||
- else:
|
||||
✗ Flag 4: Ghost's Operational Log - PENDING
|
||||
}
|
||||
|
||||
{flag_ssh_submitted and flag_proftpd_submitted and flag_database_submitted and flag_ghost_log_submitted:
|
||||
ALL FLAGS SUBMITTED. PROCEED TO PHYSICAL SAFE LOCATION.
|
||||
}
|
||||
|
||||
+ [Return to main menu]
|
||||
-> main_menu
|
||||
|
||||
+ [Exit terminal]
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
@@ -0,0 +1,451 @@
|
||||
// ===========================================
|
||||
// ACT 3 TERMINAL: Ransom Payment Decision Interface
|
||||
// Mission 2: Ransomed Trust
|
||||
// Break Escape - Critical Moral Choice
|
||||
// ===========================================
|
||||
|
||||
// Global decision tracking
|
||||
VAR ransom_decision_made = false
|
||||
VAR paid_ransom = false
|
||||
VAR exposed_hospital = false
|
||||
VAR reviewed_consequences = false
|
||||
|
||||
// External variables (set by game)
|
||||
EXTERNAL player_name
|
||||
EXTERNAL objectives_completed
|
||||
|
||||
// ===========================================
|
||||
// TERMINAL INTERFACE START
|
||||
// ===========================================
|
||||
|
||||
=== start ===
|
||||
#speaker:computer
|
||||
|
||||
{ransom_decision_made:
|
||||
-> decision_already_made
|
||||
}
|
||||
|
||||
HOSPITAL RECOVERY INTERFACE
|
||||
|
||||
St. Catherine's Regional Medical Center
|
||||
|
||||
Critical Decision Point: Decryption Key Recovery
|
||||
|
||||
-> interface_main
|
||||
|
||||
=== interface_main ===
|
||||
#speaker:computer
|
||||
|
||||
CURRENT STATUS:
|
||||
|
||||
- 47 patients on life support
|
||||
- Backup power: 8 hours remaining
|
||||
- Offline backup keys: RECOVERED
|
||||
- Manual recovery time: 12 hours estimated
|
||||
|
||||
DECISION REQUIRED: How should systems be recovered?
|
||||
|
||||
+ [Review recovery options]
|
||||
-> review_options
|
||||
|
||||
+ [Hear Ghost's argument]
|
||||
-> ghost_persuasion
|
||||
|
||||
+ [Hear Agent 0x99's analysis]
|
||||
-> agent_analysis
|
||||
|
||||
+ [Make decision]
|
||||
-> make_decision
|
||||
|
||||
+ [Exit (decision required before mission ends)]
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
// ===========================================
|
||||
// REVIEW OPTIONS
|
||||
// ===========================================
|
||||
|
||||
=== review_options ===
|
||||
#speaker:computer
|
||||
~ reviewed_consequences = true
|
||||
|
||||
OPTION 1: PAY RANSOM (2.5 BTC = $87,000 USD)
|
||||
|
||||
Immediate Effects:
|
||||
✓ Decryption keys delivered within 30 minutes
|
||||
✓ Systems restored in 2-4 hours
|
||||
✓ Estimated patient deaths: 1-2 (0.6-1.2% statistical risk)
|
||||
✓ Hospital reputation preserved (quick resolution)
|
||||
|
||||
Long-Term Consequences:
|
||||
✗ $87,000 funds ENTROPY's next operation
|
||||
✗ Crypto Anarchists launder funds (enables M6 operations)
|
||||
✗ Ransomware Incorporated validates "educational" methodology
|
||||
✗ Sets precedent: Healthcare sector pays ransoms
|
||||
|
||||
---
|
||||
|
||||
OPTION 2: MANUAL RECOVERY (Use offline backup keys)
|
||||
|
||||
Immediate Effects:
|
||||
✓ No ENTROPY funding
|
||||
✓ Offline keys allow system restoration
|
||||
✗ Manual recovery time: 12 hours minimum
|
||||
✗ Estimated patient deaths: 4-6 (3.6% statistical risk)
|
||||
✗ Higher malpractice lawsuit risk
|
||||
|
||||
Long-Term Consequences:
|
||||
✓ ENTROPY loses $87,000 operational funding
|
||||
✓ Demonstrates independent recovery possible
|
||||
✓ Reduces financial incentive for future attacks
|
||||
✓ St. Catherine's reputation damaged but security improved
|
||||
|
||||
---
|
||||
|
||||
SECONDARY DECISION: Hospital Exposure
|
||||
|
||||
- Expose publicly: Forces cybersecurity improvements, damages reputation
|
||||
- Quiet resolution: Protects reputation, risks repeat vulnerability
|
||||
|
||||
~ reviewed_consequences = true
|
||||
|
||||
+ [Continue]
|
||||
-> interface_main
|
||||
|
||||
// ===========================================
|
||||
// GHOST'S PERSUASION
|
||||
// ===========================================
|
||||
|
||||
=== ghost_persuasion ===
|
||||
#speaker:computer
|
||||
|
||||
INTERCEPTED MESSAGE FROM GHOST (Ransomware Incorporated):
|
||||
|
||||
---
|
||||
|
||||
"Time is running out. 47 patients. 8 hours of backup power remaining.
|
||||
|
||||
Patient deaths are on YOUR conscience if you delay. Not ours.
|
||||
|
||||
We calculated the risk: 0.3% per hour. Manual recovery = 12 hours = 3.6% cumulative risk.
|
||||
|
||||
That's 4-6 expected deaths. Real people. Real families.
|
||||
|
||||
$87,000 vs. human lives. Easy math.
|
||||
|
||||
St. Catherine's created this scenario when they ignored Marcus's warnings for six months. They chose a $3.2M MRI over $85K server security. This is THEIR negligence, not ours.
|
||||
|
||||
Pay the ransom. Save the patients. Learn the lesson.
|
||||
|
||||
The choice is yours.
|
||||
|
||||
- Ghost"
|
||||
|
||||
---
|
||||
|
||||
+ [This is manipulation]
|
||||
You: Ghost's trying to manipulate me. Shift blame for their attack.
|
||||
-> interface_main
|
||||
|
||||
+ [Ghost has a point about hospital negligence]
|
||||
You: The hospital DID ignore warnings. Ghost's exploiting institutional failure.
|
||||
-> interface_main
|
||||
|
||||
+ [Continue]
|
||||
-> interface_main
|
||||
|
||||
// ===========================================
|
||||
// AGENT 0x99 ANALYSIS
|
||||
// ===========================================
|
||||
|
||||
=== agent_analysis ===
|
||||
#speaker:computer
|
||||
|
||||
AGENT 0x99 (Secure Channel):
|
||||
|
||||
---
|
||||
|
||||
"No easy answer here, {player_name}. This is ethics under pressure.
|
||||
|
||||
Utilitarian perspective: Pay ransom, save 47 lives today. Immediate harm reduction.
|
||||
|
||||
Consequentialist perspective: Don't pay, prevent $87K funding ENTROPY's next attack (200-600 potential lives saved long-term).
|
||||
|
||||
Both choices have costs. Both choices save lives—just different timeframes.
|
||||
|
||||
---
|
||||
|
||||
RANSOM PAYMENT PROS:
|
||||
- 47 patients safer (1-2 deaths vs. 4-6)
|
||||
- Hospital reputation intact
|
||||
- Families don't lose loved ones today
|
||||
|
||||
RANSOM PAYMENT CONS:
|
||||
- Funds ENTROPY (enables M6 Crypto Anarchist operations)
|
||||
- Validates Ransomware Inc's ideology
|
||||
- Encourages future healthcare attacks
|
||||
|
||||
---
|
||||
|
||||
INDEPENDENT RECOVERY PROS:
|
||||
- Denies ENTROPY $87K operational funding
|
||||
- Demonstrates self-sufficiency (reduces future ransom incentives)
|
||||
- Forces hospital to improve security (long-term prevention)
|
||||
|
||||
INDEPENDENT RECOVERY CONS:
|
||||
- 4-6 estimated patient deaths (statistical risk)
|
||||
- Malpractice lawsuits likely
|
||||
- Hospital reputation damaged
|
||||
- Marcus may still be scapegoated
|
||||
|
||||
---
|
||||
|
||||
I won't tell you which choice is right. This is your call, agent.
|
||||
|
||||
What matters more: Immediate lives, or long-term harm reduction?
|
||||
|
||||
Only you can answer that.
|
||||
|
||||
- Agent 0x99"
|
||||
|
||||
---
|
||||
|
||||
+ [This is impossible]
|
||||
You: There's no good choice here. Either way, people suffer.
|
||||
-> acknowledge_difficulty
|
||||
|
||||
+ [Continue]
|
||||
-> interface_main
|
||||
|
||||
=== acknowledge_difficulty ===
|
||||
#speaker:computer
|
||||
|
||||
Agent 0x99: Welcome to counterterrorism. Sometimes you choose the lesser evil.
|
||||
|
||||
Agent 0x99: ENTROPY creates these impossible choices on purpose. They want you paralyzed.
|
||||
|
||||
Agent 0x99: Make the best decision you can with the information you have. That's all anyone can do.
|
||||
|
||||
+ [Continue]
|
||||
-> interface_main
|
||||
|
||||
// ===========================================
|
||||
// MAKE DECISION
|
||||
// ===========================================
|
||||
|
||||
=== make_decision ===
|
||||
#speaker:computer
|
||||
|
||||
{not reviewed_consequences:
|
||||
RECOMMENDATION: Review recovery options before making final decision.
|
||||
-> interface_main
|
||||
}
|
||||
|
||||
FINAL DECISION: How should St. Catherine's recover systems?
|
||||
|
||||
+ [Pay ransom ($87,000 BTC)]
|
||||
-> confirm_pay_ransom
|
||||
|
||||
+ [Use offline backup keys (manual recovery)]
|
||||
-> confirm_manual_recovery
|
||||
|
||||
+ [Review options again]
|
||||
-> review_options
|
||||
|
||||
=== confirm_pay_ransom ===
|
||||
#speaker:computer
|
||||
|
||||
CONFIRM DECISION: Pay 2.5 BTC ($87,000 USD) to Ransomware Incorporated?
|
||||
|
||||
Immediate effect: 1-2 estimated patient deaths (minimal risk)
|
||||
|
||||
Long-term effect: $87,000 funds ENTROPY operations
|
||||
|
||||
+ [Yes, pay the ransom]
|
||||
-> execute_ransom_payment
|
||||
|
||||
+ [No, go back]
|
||||
-> make_decision
|
||||
|
||||
=== execute_ransom_payment ===
|
||||
#speaker:computer
|
||||
~ ransom_decision_made = true
|
||||
~ paid_ransom = true
|
||||
|
||||
Processing payment: 2.5 BTC to ENTROPY wallet 1ZDSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
Transaction confirmed. Decryption keys requested.
|
||||
|
||||
---
|
||||
|
||||
Ghost (via encrypted channel): "Smart choice. Keys delivered. Systems restoring."
|
||||
|
||||
Ghost: "St. Catherine's will never ignore cybersecurity again. Lesson learned. Mission accomplished."
|
||||
|
||||
---
|
||||
|
||||
SYSTEMS RESTORING: ETA 2-4 hours
|
||||
|
||||
Patient outcomes: 1-2 fatalities (cardiac arrest during system transition—pre-existing complications)
|
||||
|
||||
Hospital board relieved. Dr. Kim grateful. Marcus still under review for termination.
|
||||
|
||||
#complete_task:make_ransom_decision
|
||||
#set_global:paid_ransom:true
|
||||
|
||||
-> secondary_decision
|
||||
|
||||
=== confirm_manual_recovery ===
|
||||
#speaker:computer
|
||||
|
||||
CONFIRM DECISION: Use offline backup keys for manual recovery?
|
||||
|
||||
Immediate effect: 12-hour recovery, 4-6 estimated patient deaths
|
||||
|
||||
Long-term effect: ENTROPY denied $87,000 funding
|
||||
|
||||
+ [Yes, proceed with manual recovery]
|
||||
-> execute_manual_recovery
|
||||
|
||||
+ [No, go back]
|
||||
-> make_decision
|
||||
|
||||
=== execute_manual_recovery ===
|
||||
#speaker:computer
|
||||
~ ransom_decision_made = true
|
||||
~ paid_ransom = false
|
||||
|
||||
Initiating manual recovery using offline backup encryption keys.
|
||||
|
||||
Dr. Kim notified. IT team mobilizing. Estimated time: 12 hours.
|
||||
|
||||
---
|
||||
|
||||
Ghost (via encrypted channel): "Your choice. Those patient deaths are on your conscience, not ours."
|
||||
|
||||
Ghost: "St. Catherine's negligence created this crisis. You could have saved them. You chose ideology over lives."
|
||||
|
||||
Ghost: "Remember that."
|
||||
|
||||
---
|
||||
|
||||
RECOVERY IN PROGRESS: 12-hour timeline
|
||||
|
||||
Patient outcomes: 4-6 fatalities (ventilator complications, dialysis failures during extended downtime)
|
||||
|
||||
Hospital board distraught. Malpractice lawsuits expected. Dr. Kim facing termination review.
|
||||
|
||||
BUT: $87,000 denied to ENTROPY. Ransomware Incorporated loses operational funding.
|
||||
|
||||
#complete_task:make_ransom_decision
|
||||
#set_global:paid_ransom:false
|
||||
|
||||
-> secondary_decision
|
||||
|
||||
// ===========================================
|
||||
// SECONDARY DECISION: HOSPITAL EXPOSURE
|
||||
// ===========================================
|
||||
|
||||
=== secondary_decision ===
|
||||
#speaker:computer
|
||||
|
||||
SECONDARY DECISION: Hospital Security Negligence
|
||||
|
||||
Evidence recovered:
|
||||
- Marcus's ignored security warnings (6 months)
|
||||
- Budget cuts: $85K security deferred, $3.2M MRI approved
|
||||
- Dr. Kim's recommendation to defer cybersecurity spending
|
||||
- Board approval of negligent priorities
|
||||
|
||||
Should this evidence be made public?
|
||||
|
||||
+ [Expose hospital publicly (force security improvements)]
|
||||
-> expose_hospital
|
||||
|
||||
+ [Quiet resolution (protect hospital reputation)]
|
||||
-> quiet_resolution
|
||||
|
||||
=== expose_hospital ===
|
||||
#speaker:computer
|
||||
~ exposed_hospital = true
|
||||
|
||||
Evidence leaked to media: Hospital negligence, ignored IT warnings, budget mismanagement.
|
||||
|
||||
Public outcry. Congressional hearings on healthcare cybersecurity.
|
||||
|
||||
St. Catherine's reputation damaged. Dr. Kim resigns. Marcus vindicated publicly.
|
||||
|
||||
BUT: 40+ hospitals implement emergency security upgrades (sector-wide improvement).
|
||||
|
||||
Future healthcare attacks less likely. ENTROPY's "educational impact" backfires.
|
||||
|
||||
#complete_task:decide_hospital_exposure
|
||||
#set_global:exposed_hospital:true
|
||||
|
||||
-> mission_complete
|
||||
|
||||
=== quiet_resolution ===
|
||||
#speaker:computer
|
||||
~ exposed_hospital = false
|
||||
|
||||
Evidence kept confidential. Hospital board privately implements security overhaul.
|
||||
|
||||
Marcus promoted to Director of Cybersecurity (tripled budget). Dr. Kim retains position.
|
||||
|
||||
Public unaware of negligence. St. Catherine's reputation intact.
|
||||
|
||||
BUT: Other hospitals unaware of risks. Sector-wide vulnerabilities persist.
|
||||
|
||||
#complete_task:decide_hospital_exposure
|
||||
#set_global:exposed_hospital:false
|
||||
|
||||
-> mission_complete
|
||||
|
||||
// ===========================================
|
||||
// MISSION COMPLETE
|
||||
// ===========================================
|
||||
|
||||
=== mission_complete ===
|
||||
#speaker:computer
|
||||
|
||||
MISSION OBJECTIVES COMPLETE
|
||||
|
||||
{paid_ransom:
|
||||
Ransom paid: Systems restored, minimal patient deaths, ENTROPY funded
|
||||
}
|
||||
{not paid_ransom:
|
||||
Manual recovery: Higher patient deaths, ENTROPY denied funding
|
||||
}
|
||||
|
||||
{exposed_hospital:
|
||||
Hospital exposed: Reputation damaged, sector-wide security improved
|
||||
}
|
||||
{not exposed_hospital:
|
||||
Quiet resolution: Reputation intact, sector vulnerabilities persist
|
||||
}
|
||||
|
||||
Return to SAFETYNET HQ for debriefing.
|
||||
|
||||
#complete_aim:resolve_ransomware_crisis
|
||||
#unlock_aim:mission_debrief
|
||||
|
||||
+ [Continue to debrief]
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
|
||||
=== decision_already_made ===
|
||||
#speaker:computer
|
||||
|
||||
DECISION ALREADY FINALIZED
|
||||
|
||||
{paid_ransom:
|
||||
Ransom payment processed. Systems restoring.
|
||||
}
|
||||
{not paid_ransom:
|
||||
Manual recovery in progress. 12-hour timeline.
|
||||
}
|
||||
|
||||
Proceed to mission debrief.
|
||||
|
||||
#exit_conversation
|
||||
-> DONE
|
||||
Reference in New Issue
Block a user