Add Mission 3 Stage 7 Ink Scripts (Part 2 - Final Scripts)

- Add m03_phone_agent0x99.ink (Agent 0x99 phone support)
  - Hint system (RFID, lockpicking, passwords, encoding, network recon)
  - Event-triggered calls (item pickups, detections, achievements)
  - M2 revelation call after distcc flag (emotional impact)
  - Progress tracking and adaptive guidance
  - ~480 lines

- Add m03_npc_guard.ink (Night security guard)
  - Patrol encounter and excuse system
  - Multiple excuse paths (work here, Victoria sent me, maintenance)
  - Bribe mechanic ($500 for access)
  - SAFETYNET reveal option for cooperation
  - Hostile paths and combat triggers
  - ~440 lines

- Add m03_npc_receptionist.ink (Daytime receptionist)
  - Badge check-in process
  - Company history (2010 founding = safe PIN hint)
  - Topics about Victoria, James, building layout
  - Friendly, helpful NPC for world-building
  - ~250 lines

- Add m03_james_choice.ink (James Park moral choice)
  - Evidence discovery (hospital reconnaissance files)
  - Diary reveals James's unknowing participation
  - Moral complexity: deceived initially, conflicted now
  - 3 choice paths: protect/expose/ignore James's fate
  - Direct confrontation variant if James appears
  - ~530 lines

- Add m03_closing_debrief.ink (Act 3 mission debrief)
  - Performance acknowledgment (objectives, stealth, time)
  - Act 1 choice callbacks (approach, trust, priorities)
  - M2 hospital attack discussion and impact
  - Victoria fate discussion (recruited/arrested/escaped)
  - Phase 2 and Architect revelation analysis
  - James fate outcomes and consequences
  - LORE fragment analysis
  - Campaign setup for future missions
  - ~570 lines

Total Part 2: ~2,270 lines across 5 scripts
Total Stage 7: ~4,010 lines across 9 complete Ink scripts

Stage 7 Status:  COMPLETE
All narrative scripts ready for Mission 3 implementation
This commit is contained in:
Z. Cliffe Schreuders
2026-01-14 09:46:32 +00:00
parent 6bc839f3fd
commit bf0f281ad1
5 changed files with 2546 additions and 0 deletions

View File

@@ -0,0 +1,672 @@
// ===========================================
// Mission 3: Ghost in the Machine
// ACT 3: CLOSING DEBRIEF
// ===========================================
// Variables from Act 1 (opening briefing)
EXTERNAL player_approach
EXTERNAL handler_trust
EXTERNAL knows_m2_connection
EXTERNAL mission_priority
// Variables from Act 2 (gameplay)
EXTERNAL objectives_completed
EXTERNAL lore_collected
EXTERNAL stealth_rating
EXTERNAL time_taken
EXTERNAL flags_submitted_count
// Variables from moral choices
EXTERNAL victoria_fate // "protected", "exposed", "recruited", "arrested"
EXTERNAL james_fate // "protected", "exposed", "ignored"
EXTERNAL found_exploit_catalog
EXTERNAL found_architect_directive
EXTERNAL player_name
// ===========================================
// OPENING
// ===========================================
=== start ===
#speaker:agent_0x99
[Location: SAFETYNET Secure Debrief Room]
[Time: 24 hours after mission completion]
[Visual: Agent 0x99 avatar - serious but relieved expression]
Agent 0x99: {player_name}, welcome back. Have a seat.
Agent 0x99: Let's debrief Mission 3 - Ghost in the Machine.
{objectives_completed >= 4:
-> full_success_debrief
}
{objectives_completed >= 2 and objectives_completed < 4:
-> partial_success_debrief
}
{objectives_completed < 2:
-> minimal_success_debrief
}
// ===========================================
// FULL SUCCESS PATH
// ===========================================
=== full_success_debrief ===
#speaker:agent_0x99
Agent 0x99: All primary objectives completed. Outstanding work.
{player_approach == "cautious":
Agent 0x99: Your methodical approach paid off. You documented everything, missed nothing.
}
{player_approach == "aggressive":
Agent 0x99: You moved fast and got results. Aggressive execution, clean outcome.
}
{player_approach == "diplomatic":
Agent 0x99: Your adaptability was key. You read situations perfectly and adjusted tactics accordingly.
}
{stealth_rating > 80:
Agent 0x99: And you stayed ghost the entire operation. Zero Day never knew what hit them.
}
{stealth_rating > 50 and stealth_rating <= 80:
Agent 0x99: You made some noise, but nothing that compromised the mission.
}
{stealth_rating <= 50:
Agent 0x99: You triggered some alerts, but you completed the objectives despite the heat.
}
-> mission_impact
// ===========================================
// PARTIAL SUCCESS PATH
// ===========================================
=== partial_success_debrief ===
#speaker:agent_0x99
Agent 0x99: Mission complete, though we didn't get everything we wanted.
Agent 0x99: {objectives_completed} objectives out of the primary set. That's solid work, but there are gaps.
{player_approach == "aggressive" and time_taken < 1800:
Agent 0x99: Speed was prioritized. Sometimes that means missing details.
}
Agent 0x99: Still, what you DID get is valuable. Let's talk impact.
-> mission_impact
// ===========================================
// MINIMAL SUCCESS PATH
// ===========================================
=== minimal_success_debrief ===
#speaker:agent_0x99
Agent 0x99: You completed the core objective, but... we're working with incomplete intelligence.
Agent 0x99: What we have is useful. But there's significant intelligence we missed.
Agent 0x99: Let's assess what we got and what it means.
-> mission_impact
// ===========================================
// MISSION IMPACT ASSESSMENT
// ===========================================
=== mission_impact ===
#speaker:agent_0x99
Agent 0x99: Here's what Zero Day Syndicate's infiltration accomplished:
{flags_submitted_count >= 4:
Agent 0x99: Network intelligence - complete. You submitted all VM flags.
Agent 0x99: We have a full map of their training network, service vulnerabilities, and operational infrastructure.
}
{flags_submitted_count >= 2 and flags_submitted_count < 4:
Agent 0x99: Network intelligence - partial. You submitted {flags_submitted_count} of 4 flags.
Agent 0x99: We have some visibility into their operations, but there are blind spots.
}
{flags_submitted_count < 2:
Agent 0x99: Network intelligence - minimal. We're missing critical digital evidence.
}
-> m2_hospital_discussion
// ===========================================
// M2 HOSPITAL ATTACK DISCUSSION
// ===========================================
=== m2_hospital_discussion ===
#speaker:agent_0x99
Agent 0x99: Now... St. Catherine's Hospital. The M2 connection.
{found_exploit_catalog or flags_submitted_count >= 4:
Agent 0x99: You found the smoking gun. The exploit catalog. The operational logs.
Agent 0x99: ProFTPD exploit, CVE-2010-4652. Sold to GHOST - Ransomware Incorporated.
Agent 0x99: Purchase price: $12,500. With a healthcare premium markup.
Agent 0x99: Target: St. Catherine's Regional Medical Center.
[Pause]
Agent 0x99: Six deaths. Four in critical care when patient monitoring failed. Two during emergency surgery when systems crashed.
{knows_m2_connection:
Agent 0x99: You knew the stakes from the beginning. You delivered.
}
Agent 0x99: This is ironclad evidence. Federal prosecutors can prove direct causation.
Agent 0x99: Zero Day → GHOST → St. Catherine's. Murder for profit.
-> victoria_discussion
}
{not found_exploit_catalog and flags_submitted_count < 4:
Agent 0x99: We have strong circumstantial evidence connecting Zero Day to the M2 hospital attack.
Agent 0x99: But without the operational logs or exploit catalog, proving direct causation is harder.
Agent 0x99: We can build a case, but it would have been stronger with more evidence.
-> victoria_discussion
}
// ===========================================
// VICTORIA STERLING DISCUSSION
// ===========================================
=== victoria_discussion ===
#speaker:agent_0x99
Agent 0x99: Victoria Sterling. Codename "Cipher." CEO of WhiteHat Security, leader of Zero Day Syndicate.
{victoria_fate == "recruited":
Agent 0x99: And now... your double agent.
Agent 0x99: I'll be honest - that was a hell of a gambit. Recruiting her instead of arresting her.
* [She's more valuable as an intelligence asset]
You: She has access to The Architect. To the entire ENTROPY network. We need that intelligence.
Agent 0x99: I agree. But it's risky. She's ideologically committed, not just mercenary.
Agent 0x99: She believes in what she's doing. That makes turning her... complicated.
-> victoria_recruited_path
* [She can help us stop Phase 2]
You: Phase 2 targets 50,000+ patients and 1.2 million customers. Victoria's intel can prevent that.
Agent 0x99: True. If she delivers. If she doesn't get exposed. If The Architect doesn't suspect.
Agent 0x99: A lot of "ifs."
-> victoria_recruited_path
* [It was the right call]
You: It was the right tactical decision given the strategic picture.
~ handler_trust += 10
Agent 0x99: I trust your judgment. You were there, you made the call.
-> victoria_recruited_path
}
{victoria_fate == "arrested":
Agent 0x99: Victoria Sterling is in federal custody. Charged with conspiracy, providing material support to terrorist operations, and accessory to murder.
Agent 0x99: She's looking at life in prison. Her lawyers are already talking about philosophical defenses - "information freedom," "market forces."
Agent 0x99: It won't work. The evidence is too clear.
* [She authorized six deaths for $12,500]
You: She charged a healthcare premium because hospitals can't defend themselves. Calculated exploitation.
Agent 0x99: Exactly. That pricing model proves premeditation and malicious intent.
-> victoria_arrested_path
* [Justice for St. Catherine's victims]
You: Angela Martinez. David Chen. Sarah Thompson. Marcus Gray. Jennifer Wu. Robert Patterson.
You: They have justice now.
~ handler_trust += 10
Agent 0x99: [Quiet moment] Yes. Yes, they do.
-> victoria_arrested_path
* [One cell leader down]
You: One ENTROPY cell leader captured. That disrupts their operations.
Agent 0x99: Agreed. Zero Day Syndicate is crippled without Victoria.
-> victoria_arrested_path
}
{victoria_fate != "recruited" and victoria_fate != "arrested":
Agent 0x99: Victoria Sterling remains at large. She suspects SAFETYNET interest but has no proof of infiltration.
Agent 0x99: We have evidence, but without her in custody, prosecution is harder.
Agent 0x99: She'll likely go dark, reorganize, resurface under a new operation.
-> phase_2_discussion
}
=== victoria_recruited_path ===
#speaker:agent_0x99
Agent 0x99: She's been debriefed by our counterintelligence team. Initial intelligence package delivered.
Agent 0x99: Communication protocols for The Architect. Payment methods. Other ENTROPY cell contacts.
Agent 0x99: We're establishing encrypted channels for her to feed us ongoing intelligence.
Agent 0x99: She'll continue operations at Zero Day to avoid suspicion, but now she reports to us.
{player_approach == "diplomatic":
Agent 0x99: Your diplomatic approach made this possible. Well played.
}
Agent 0x99: Time will tell if this gambit pays off. But for now, we have eyes inside ENTROPY leadership.
-> phase_2_discussion
=== victoria_arrested_path ===
#speaker:agent_0x99
Agent 0x99: With Victoria in custody, Zero Day Syndicate is effectively neutralized.
Agent 0x99: Her encryption keys gave us access to client databases, transaction records, The Architect's communications.
Agent 0x99: We're rolling up her network as we speak. Other ENTROPY cells that relied on Zero Day's exploits are scrambling.
{player_approach == "cautious":
Agent 0x99: Your thorough evidence gathering made this arrest possible. Clean prosecution.
}
-> phase_2_discussion
// ===========================================
// PHASE 2 DISCUSSION
// ===========================================
=== phase_2_discussion ===
#speaker:agent_0x99
Agent 0x99: Now the big one - Phase 2.
{found_architect_directive:
Agent 0x99: You found The Architect's directive. That USB drive in Victoria's desk.
Agent 0x99: Double-encoded. Base64 and ROT13. You cracked it.
[Agent 0x99's expression darkens]
Agent 0x99: The contents... jesus.
Agent 0x99: Healthcare SCADA systems. 15 hospitals targeted. Ventilation control. Patient monitoring networks.
Agent 0x99: Energy grid ICS. 427 vulnerable substations mapped for attack.
Agent 0x99: Projected impact: 50,000+ patient treatment delays. 1.2 million residential customers without power. Winter targeting.
* [That's genocide-scale harm]
You: 50,000 patients. That's not hacking. That's mass casualty terrorism.
Agent 0x99: Correct. And it's coordinated across multiple ENTROPY cells.
-> architect_revelation
* [We have to stop it]
You: We have the Phase 2 timeline. Q4 2024 - Q1 2025. We can prevent this.
Agent 0x99: We're working on it. But stopping a distributed multi-cell attack is complex.
-> architect_revelation
* [The Architect is orchestrating everything]
You: This isn't isolated cells. This is coordinated network-level operation.
Agent 0x99: Yes. And that's the game-changer.
-> architect_revelation
}
{not found_architect_directive:
Agent 0x99: We know Phase 2 is planned. We've seen references in Victoria's communications.
Agent 0x99: But without the detailed directive, we're working with incomplete intelligence.
Agent 0x99: Infrastructure targeting. Healthcare and energy sectors. That's what we know.
Agent 0x99: We'll keep working the intelligence, but... we could have had more.
-> james_discussion
}
// ===========================================
// THE ARCHITECT REVELATION
// ===========================================
=== architect_revelation ===
#speaker:agent_0x99
Agent 0x99: The Architect. ENTROPY's leadership figure.
Agent 0x99: The directive proves they exist. Proves they're coordinating all the cells.
Agent 0x99: Zero Day provides exploits. Ransomware Inc deploys against hospitals. Social Fabric amplifies panic via misinformation. Critical Mass targets emergency response.
Agent 0x99: Multi-vector synchronized attack. Each cell independently operational, but coordinated for maximum chaos.
Agent 0x99: "Chaos amplification factor: 3.7x" - they're CALCULATING the synergistic harm.
* [Do we know The Architect's identity?]
You: Do we have any leads on The Architect's real identity?
Agent 0x99: Not yet. Victoria claims she's never met them face-to-face. All communication via encrypted channels.
Agent 0x99: But we're working on it. Every ENTROPY operation gets us closer.
-> architect_investigation
* [This is campaign-level intelligence]
You: This isn't just one mission. This is the key to the entire ENTROPY network.
~ handler_trust += 10
Agent 0x99: Exactly. You didn't just complete a mission. You gave us the map to their whole operation.
-> architect_investigation
=== architect_investigation ===
#speaker:agent_0x99
Agent 0x99: SAFETYNET Command is escalating this to top priority.
Agent 0x99: Phase 2 prevention is now inter-agency. FBI, CISA, NSA. We're briefing them all.
Agent 0x99: 427 energy substations will get hardened defenses. 15 hospitals will get emergency security assessments.
Agent 0x99: We can't stop ENTROPY entirely - they're too distributed - but we can protect the Phase 2 targets.
Agent 0x99: Thanks to you.
-> james_discussion
// ===========================================
// JAMES PARK DISCUSSION
// ===========================================
=== james_discussion ===
#speaker:agent_0x99
{james_fate != "":
Agent 0x99: One more thing. James Park, Zero Day's senior consultant.
{james_fate == "protected":
Agent 0x99: You protected him. Framed his role as unwitting participation under Victoria's deception.
Agent 0x99: I've read your report. And I've read James's diary entries.
Agent 0x99: I think... I think you made the right call.
Agent 0x99: James conducted legitimate pen testing under false pretenses. He was a tool Victoria used.
Agent 0x99: When he learned the truth, he was paralyzed by fear and guilt. That's human.
{player_approach == "diplomatic":
Agent 0x99: Your diplomatic nuance - recognizing the complexity - that's why this field needs people like you.
}
Agent 0x99: James reached out to SAFETYNET yesterday. Voluntarily. He's cooperating fully.
Agent 0x99: He won't face charges. But he'll live with what happened. That's punishment enough.
-> lore_discussion
}
{james_fate == "exposed":
Agent 0x99: You exposed James's full involvement. The reconnaissance, the post-attack knowledge, the hush money.
Agent 0x99: He's been arrested. Charged with conspiracy after the fact and obstruction.
Agent 0x99: His lawyers are arguing he was deceived, which... he was. Initially.
Agent 0x99: But when he learned the truth and took Victoria's raise to stay quiet, that became a choice.
{player_approach == "aggressive":
Agent 0x99: Your aggressive approach - all operatives face justice - is consistent. I respect that.
}
Agent 0x99: James will likely get a reduced sentence compared to Victoria. Maybe 5-10 years instead of life.
Agent 0x99: His cooperation since arrest is helping prosecution. But he'll still serve time.
-> lore_discussion
}
{james_fate == "ignored":
Agent 0x99: You documented James's situation but left his fate to his own choices.
Agent 0x99: Interesting approach. Not protecting, not exposing. Just... observing.
Agent 0x99: James made his choice. He came forward to SAFETYNET two days ago. Voluntarily.
Agent 0x99: He's cooperating. Providing testimony against Victoria. He'll likely avoid charges given the voluntary disclosure.
{player_approach == "cautious":
Agent 0x99: Your cautious approach - gather evidence, let the system decide - allowed James's own moral agency.
}
Agent 0x99: He made the right choice in the end. That says something about him.
-> lore_discussion
}
}
{james_fate == "":
-> lore_discussion
}
// ===========================================
// LORE FRAGMENTS DISCUSSION
// ===========================================
=== lore_discussion ===
#speaker:agent_0x99
{lore_collected >= 3:
Agent 0x99: Intelligence gathering - exemplary. You collected all LORE fragments.
Agent 0x99: Zero Day's founding philosophy. The exploit catalog. The Architect's directive.
Agent 0x99: Each one gave us pieces of the larger ENTROPY puzzle.
-> lore_fragment_breakdown
}
{lore_collected == 2:
Agent 0x99: You collected some LORE fragments. Useful intelligence on ENTROPY's structure.
Agent 0x99: We would have benefited from the complete set, but what you found helps.
-> final_assessment
}
{lore_collected == 1:
Agent 0x99: You found one LORE fragment. Better than nothing, but we're missing context.
-> final_assessment
}
{lore_collected == 0:
Agent 0x99: No LORE fragments collected. That's... a missed opportunity.
Agent 0x99: LORE provides strategic intelligence about ENTROPY's ideology, structure, and future plans.
Agent 0x99: Without it, we're fighting tactics instead of strategy.
-> final_assessment
}
=== lore_fragment_breakdown ===
#speaker:agent_0x99
Agent 0x99: The three fragments paint a complete picture:
Agent 0x99: Fragment 1 - "Zero Day: A Brief History" - showed us Victoria's philosophy. "Monetize entropy."
Agent 0x99: She's not a sociopath. She's a true believer. She genuinely thinks she's participating in a rational market.
Agent 0x99: That makes her MORE dangerous, not less. You can't reason someone out of a position they didn't reason themselves into.
[Pause]
Agent 0x99: Fragment 2 - "Q3 2024 Exploit Catalog" - the smoking gun. $12,500 for the hospital exploit. Healthcare premium.
Agent 0x99: That pricing model - charging MORE to attack the vulnerable - that's evidence of calculated malice.
Agent 0x99: No jury will see "market efficiency" when they read "healthcare premium: +30% (delayed incident response)."
[Pause]
Agent 0x99: Fragment 3 - "The Architect's Directive" - the game-changer. Phase 2 plans. Multi-cell coordination. The full scope.
Agent 0x99: This fragment alone justified the entire mission. We know what's coming. We can prepare.
-> final_assessment
// ===========================================
// FINAL ASSESSMENT
// ===========================================
=== final_assessment ===
#speaker:agent_0x99
Agent 0x99: Final assessment, {player_name}:
{objectives_completed >= 4 and lore_collected >= 2:
Agent 0x99: Mission success - exceptional. You delivered everything we needed and more.
{handler_trust >= 70:
Agent 0x99: And honestly? I knew you would. I've always had complete confidence in you.
}
Agent 0x99: The M2 hospital attack has accountability. Victoria Sterling faces justice.
Agent 0x99: Phase 2 can be prevented. We have targets, timelines, coordination plans.
Agent 0x99: The Architect is still out there, but we're closing in. Each mission gets us closer.
-> aftermath
}
{objectives_completed >= 2:
Agent 0x99: Mission success - solid. You got what we needed, even if we didn't get everything.
Agent 0x99: We can work with this. Prosecution is viable. Phase 2 prevention is possible.
Agent 0x99: It would have been better with complete intelligence, but you did good work.
-> aftermath
}
{objectives_completed < 2:
Agent 0x99: Mission success - partial. We got some intelligence, but there are significant gaps.
Agent 0x99: We'll use what we have. But this fight against ENTROPY just got harder.
-> aftermath
}
// ===========================================
// AFTERMATH & FUTURE SETUP
// ===========================================
=== aftermath ===
#speaker:agent_0x99
Agent 0x99: Here's what happens now:
Agent 0x99: Zero Day Syndicate is disrupted. Victoria Sterling {victoria_fate == "arrested": is in custody}{ victoria_fate == "recruited": is our asset}{victoria_fate != "arrested" and victoria_fate != "recruited": has gone dark}.
Agent 0x99: Phase 2 critical infrastructure targets are being hardened. FBI and CISA are coordinating defenses.
Agent 0x99: Other ENTROPY cells are scrambling without Zero Day's exploit supply chain.
Agent 0x99: And SAFETYNET is one step closer to identifying The Architect.
* [What's next for me?]
You: What's my next assignment?
Agent 0x99: Rest. Debrief. Then we'll see where ENTROPY pops up next.
Agent 0x99: They're a network. Taking down one cell reveals others.
-> closing
* [What about The Architect?]
You: When do we go after The Architect directly?
Agent 0x99: When we know who they are. We're getting closer. Each mission, each piece of intelligence.
Agent 0x99: Eventually, they'll make a mistake. And when they do, we'll be ready.
-> closing
* [The fight continues]
You: ENTROPY is still out there. Ransomware Inc, Social Fabric, Critical Mass, others.
Agent 0x99: Yes. This is a marathon, not a sprint.
Agent 0x99: But every mission we complete, we weaken their network. We save lives.
-> closing
// ===========================================
// CLOSING
// ===========================================
=== closing ===
#speaker:agent_0x99
{handler_trust >= 80:
Agent 0x99: {player_name}, I want you to know... you're one of the best agents I've worked with.
Agent 0x99: Not just technically skilled. But morally thoughtful. You understand nuance.
Agent 0x99: That's rare in this field. Don't lose it.
}
{handler_trust >= 50 and handler_trust < 80:
Agent 0x99: You did good work on this mission, {player_name}.
Agent 0x99: Get some rest. We'll need you again soon.
}
{handler_trust < 50:
Agent 0x99: Mission complete. We got results, even if the execution was rough.
Agent 0x99: Take some time. Reflect on what worked and what didn't.
}
Agent 0x99: And remember those six names. Angela Martinez. David Chen. Sarah Thompson. Marcus Gray. Jennifer Wu. Robert Patterson.
Agent 0x99: They didn't get justice before. But because of what you did, they have it now.
Agent 0x99: That matters.
* [It does matter]
~ handler_trust += 5
You: It matters. That's why we do this work.
Agent 0x99: Exactly. That's why we fight.
-> final_words
* [Thank you, Agent 0x99]
You: Thank you for the support on this mission. Your guidance made the difference.
~ handler_trust += 10
Agent 0x99: [Warmly] Any time, {player_name}. We're a team.
-> final_words
* [On to the next mission]
You: Where ENTROPY goes, we follow. On to the next mission.
Agent 0x99: [Nods] Damn right. Haxolottle out.
-> final_words
=== final_words ===
#speaker:agent_0x99
Agent 0x99: Stay safe out there, {player_name}.
Agent 0x99: The fight against ENTROPY continues. But tonight, you've earned some rest.
[Transmission ends]
[Mission 3 Complete: Ghost in the Machine]
#mission_complete
-> END

View File

@@ -0,0 +1,570 @@
// ===========================================
// Mission 3: Ghost in the Machine
// MORAL CHOICE: James Park's Fate
// Triggered when player finds evidence in James's office
// ===========================================
// James's state
VAR james_evidence_level = 0 // 0=innocent, 1=suspicious, 2=complicit
VAR james_fate = "" // "protected", "exposed", "ignored"
VAR player_choice_made = false
// External variables
EXTERNAL player_approach
// ===========================================
// EVIDENCE DISCOVERY
// ===========================================
=== start ===
#speaker:computer
[Location: James Park's Office]
[You're searching through files and documents]
You find a folder labeled "GHOST - Hospital Infrastructure Assessment"
Inside: network diagrams of hospital IT systems, vulnerability notes, target specifications.
This is reconnaissance documentation for the St. Catherine's Hospital attack.
-> initial_reaction
// ===========================================
// INITIAL REACTION
// ===========================================
=== initial_reaction ===
* [Read through the entire file carefully]
-> examine_evidence_thoroughly
* [This proves James is guilty - document it immediately]
-> rush_to_judgment
* [Look for more context before deciding]
-> search_for_context
// ===========================================
// THOROUGH EXAMINATION
// ===========================================
=== examine_evidence_thoroughly ===
You carefully read through James's documentation.
FINDINGS:
Document 1: Hospital network reconnaissance
- Detailed network mapping of St. Catherine's Regional Medical Center
- Identified vulnerable FTP server (ProFTPD 1.3.5)
- Patient monitoring system architecture documented
- Critical care unit network topology
Document 2: Vulnerability assessment
- ProFTPD backdoor vulnerability noted (CVE-2010-4652)
- Exploitation feasibility: HIGH
- Impact assessment: "Critical care systems dependent on network"
- Recommendation: "Suitable for CLIENT: GHOST deployment"
Document 3: Email correspondence
TO: victoria.sterling@whitehat-security.com
FROM: james.park@whitehat-security.com
SUBJECT: St. Catherine's Assessment Complete
"Victoria - completed the hospital assessment you requested.
ProFTPD vulnerability confirmed exploitable. Network architecture
documented. Ready for client delivery. -JP"
~ james_evidence_level = 2
-> evidence_analysis
// ===========================================
// EVIDENCE ANALYSIS
// ===========================================
=== evidence_analysis ===
This evidence proves James conducted the reconnaissance that enabled the hospital attack.
But additional documents reveal more context...
[You find a second folder: "Personal Notes"]
Inside: diary entries from James
ENTRY - May 10, 2024:
"Victoria asked me to do a hospital security assessment.
Said it was for a 'security awareness client.' I completed
the network analysis - it's my job. Professional, thorough work.
That's what I do. I assess vulnerabilities. That's the business."
ENTRY - May 20, 2024:
"Saw the news about St. Catherine's Hospital. Ransomware attack.
Patient deaths. Critical care systems failed.
That network diagram looked familiar.
Oh god. Was that...? No. Victoria said it was for security awareness.
She wouldn't... would she?"
ENTRY - May 22, 2024:
"I confronted Victoria about St. Catherine's. She said I was
being paranoid. Said hospitals get attacked all the time.
Said there's no way to know if our assessment was connected.
But the network topology matches EXACTLY what I documented.
I think... I think we enabled that attack. I think Victoria
sold our reconnaissance to whoever deployed that ransomware.
I helped kill those people. I didn't know. I didn't KNOW.
What do I do?"
ENTRY - May 25, 2024:
"Victoria offered me a raise. Significant raise. Said I'm
'essential to the business' and she 'trusts my discretion.'
She knows that I know. And she's paying me to stay quiet.
I should go to the police. To the FBI. To someone.
But if I do... I'm admitting I enabled mass casualties. Even
if I didn't know, I did the work. My network assessment.
My vulnerability report. My recommendations.
I could go to prison. My career would be over. My family...
God help me, I'm considering taking the money and saying nothing."
~ james_evidence_level = 1
-> moral_complexity
// ===========================================
// MORAL COMPLEXITY REVEALED
// ===========================================
=== moral_complexity ===
The full picture emerges:
JAMES'S ROLE:
- Conducted hospital reconnaissance (standard pen testing work)
- Believed it was for legitimate security awareness client
- Did NOT know Victoria would sell intelligence to Ransomware Inc
- Discovered the truth AFTER the attack when he saw news coverage
JAMES'S KNOWLEDGE NOW:
- Knows his work enabled the attack
- Knows Victoria lied about the client
- Suspects Zero Day sold exploit and reconnaissance to attackers
- Was offered hush money (raise) to stay quiet
JAMES'S CURRENT STATE:
- Guilty, conflicted, paralyzed by fear
- Wants to come forward but fears legal consequences
- Taking Victoria's raise = complicity, but easier path
- No definitive choice made yet in his notes
-> james_moral_choice
// ===========================================
// PLAYER'S MORAL CHOICE
// ===========================================
=== james_moral_choice ===
You have evidence of James's involvement. But the context matters.
He unknowingly conducted reconnaissance that enabled 6 deaths.
Now he knows the truth and is wrestling with whether to come forward.
What do you do with this evidence?
* [Protect James - he's a victim too]
~ james_fate = "protected"
-> choice_protect
* [Expose James - ignorance doesn't erase complicity]
~ james_fate = "exposed"
-> choice_expose
* [Leave the evidence - let James make his own choice]
~ james_fate = "ignored"
-> choice_leave
// ===========================================
// CHOICE: PROTECT JAMES
// ===========================================
=== choice_protect ===
You decide to protect James.
Reasoning: He was deceived by Victoria. He did standard pen testing work
under false pretenses. He's guilty, yes, but unwittingly. And he's
clearly tormented by what happened.
Victoria is the one who weaponized his work. She's the real criminal.
ACTION: You document Victoria's deception but omit James's name from reports.
In your notes, you write:
"Zero Day Syndicate used internal consultants under false pretenses to
conduct reconnaissance. Consultants believed work was for legitimate
security awareness clients. CEO Victoria Sterling (CIPHER) intentionally
misrepresented client identity to obtain hospital reconnaissance."
This framing protects James while still building the case against Victoria.
~ player_choice_made = true
#complete_task:james_choice_made
-> james_protected_outcome
=== james_protected_outcome ===
[You add a handwritten note to James's diary]
"James - I found your notes. I know what Victoria did to you.
I'm with SAFETYNET. We're building a case against Zero Day.
Your reconnaissance work was legitimate pen testing done under
false pretenses. You're a victim of Victoria's deception, not
a conspirator.
If you want to come forward voluntarily, contact SAFETYNET.
If not, your name won't appear in our reports. That's your choice.
But Victoria goes down for what she did. -Agent {player_name}"
{player_approach == "diplomatic":
[This aligns with your diplomatic approach - recognize nuance, give people choices]
}
Evidence logged. James's fate: PROTECTED.
#exit_conversation
-> DONE
// ===========================================
// CHOICE: EXPOSE JAMES
// ===========================================
=== choice_expose ===
You decide to expose James's full involvement.
Reasoning: Six people died. James's reconnaissance enabled those deaths.
Yes, he was deceived about the client, but he still did the work.
He documented vulnerable systems, identified exploitation paths, and
delivered that intelligence to Victoria.
And now, knowing the truth, he's considering taking hush money instead
of coming forward. That's a choice. That's complicity.
Ignorance might reduce his guilt, but it doesn't erase it.
ACTION: You document James's full involvement in your report.
In your notes, you write:
"James Park, senior consultant, conducted hospital reconnaissance that
directly enabled St. Catherine's attack. Evidence suggests he was
initially deceived about client identity but subsequently learned the
truth and accepted financial compensation to remain silent. Recommend
federal charges for conspiracy after the fact."
~ player_choice_made = true
#complete_task:james_choice_made
-> james_exposed_outcome
=== james_exposed_outcome ===
[You photograph all of James's documents and diary entries]
Evidence includes:
- Hospital reconnaissance files
- Vulnerability assessments
- Email correspondence with Victoria
- Diary entries showing he learned the truth
- Notes about accepting Victoria's raise as hush money
This will likely lead to James's arrest alongside Victoria.
He may receive a lighter sentence due to initial deception, but he'll
face consequences for his role - both the reconnaissance and the coverup.
{player_approach == "aggressive":
[This aligns with your aggressive approach - all ENTROPY operatives face justice]
}
Evidence logged. James's fate: EXPOSED.
#exit_conversation
-> DONE
// ===========================================
// CHOICE: LEAVE IT TO JAMES
// ===========================================
=== choice_leave ===
You decide to leave the evidence but take no direct action regarding James.
Reasoning: This is James's moral choice to make, not yours.
He has all the information. He knows what happened. He knows the
consequences. He's wrestling with whether to come forward or accept
the hush money.
You're not his judge. Your job is to stop ENTROPY and bring down
Victoria. James's fate should be determined by his own choices, not
by your intervention.
ACTION: You document the evidence objectively without advocating for
James's protection or exposure.
In your notes, you write:
"James Park conducted hospital reconnaissance under direction from
Victoria Sterling. Diary evidence suggests initial deception regarding
client identity, followed by post-attack knowledge and internal
conflict regarding disclosure. Status: undetermined pending James's
own decisions."
~ player_choice_made = true
#complete_task:james_choice_made
-> james_ignored_outcome
=== james_ignored_outcome ===
[You leave the evidence as you found it]
You don't add any notes. You don't remove any documents. You don't
interfere with James's decision-making process.
If James comes forward to authorities, he'll be treated as a cooperating
witness. If he accepts the hush money and stays silent, he'll likely be
implicated when Victoria's full operation is exposed.
Either way, it's his choice. His moral agency. His consequences.
{player_approach == "cautious":
[This aligns with your cautious approach - gather evidence, let the system decide]
}
Evidence logged. James's fate: UNDECIDED (his choice).
#exit_conversation
-> DONE
// ===========================================
// SEARCH FOR CONTEXT PATH (Alternative entry)
// ===========================================
=== search_for_context ===
You resist the urge to immediately judge James.
Instead, you search for more context. Were there other files? Other communications?
[You find James's personal diary - see the entries above]
-> evidence_analysis
// ===========================================
// RUSH TO JUDGMENT PATH (Alternative entry)
// ===========================================
=== rush_to_judgment ===
You immediately photograph the hospital reconnaissance files.
This is proof. James Park conducted the recon that enabled the St. Catherine's attack.
But wait... there's another folder on the desk.
* [Document what you have and move on - you found the smoking gun]
~ james_evidence_level = 2
~ james_fate = "exposed"
~ player_choice_made = true
You photograph the reconnaissance files and email.
Evidence logged: James Park complicit in hospital attack reconnaissance.
#complete_task:james_choice_made
#exit_conversation
-> DONE
* [Check the other folder - be thorough]
-> search_for_context
// ===========================================
// EVENT-TRIGGERED: If James appears during search
// ===========================================
=== james_confrontation ===
#speaker:james_park
[The office door opens - James Park stands in the doorway]
#display:james-shocked
James: What... what are you doing in my office?
[He sees the open files on the desk]
James: You found the hospital files.
* [SAFETYNET. You're under investigation.]
You: SAFETYNET. You're under investigation for the St. Catherine's Hospital attack.
-> james_safetynet_reveal
* [You helped kill six people]
You: St. Catherine's Hospital. Your reconnaissance. Six people died.
-> james_guilt_confrontation
* [Victoria lied to you, didn't she?]
You: She lied to you about the client. You thought it was legitimate security work.
-> james_sympathy_approach
=== james_safetynet_reveal ===
#speaker:james_park
#display:james-terrified
James: [Goes pale] SAFETYNET... oh god.
James: I didn't know. You have to believe me. I didn't know Victoria was going to sell that intel.
James: I thought it was for a security awareness client. That's what she told me.
* [But you know the truth now, and you stayed silent]
You: You learned the truth after the attack. And you took her hush money instead of coming forward.
James: [Desperate] I was scared! I still am! If I come forward, I'm admitting I enabled mass casualties!
-> james_plea
* [Tell me everything. Cooperate and we can help you.]
You: If you cooperate fully, SAFETYNET can consider witness protection. But you need to tell us everything.
James: [Hopeful] Everything? Yes. Yes, I'll tell you everything Victoria did.
-> james_cooperation
=== james_guilt_confrontation ===
#speaker:james_park
#display:james-broken
James: [Voice cracks] I know. I KNOW.
James: I see their faces every time I close my eyes. I read every article. Every obituary.
James: Angela Martinez. David Chen. Sarah Thompson. Marcus Gray. Jennifer Wu. Robert Patterson.
James: I can name them all. The six people my work helped kill.
* [Then why haven't you come forward?]
You: If you feel that guilt, why haven't you gone to the authorities?
James: [Ashamed] Because I'm a coward. Because I'm terrified of prison. Because I want to believe it wasn't my fault.
-> james_plea
* [You can still make this right]
You: You can still make this right. Testify against Victoria. Help us stop Phase 2.
James: [Looks up] Phase 2? There's... there's another attack planned?
-> james_cooperation
=== james_sympathy_approach ===
#speaker:james_park
#display:james-conflicted
James: [Nods slowly] She lied. Said it was for "security awareness training" at a healthcare client.
James: I did the work. Good work. Thorough. Professional.
James: And then I saw the news. And I knew.
* [You're a victim of her deception]
You: Victoria weaponized your legitimate pen testing work. You're a victim too.
James: [Quietly] Am I? I still did the reconnaissance. My diagrams. My vulnerability notes.
-> james_plea
* [But you learned the truth and did nothing]
You: And when you learned the truth, you took a raise instead of going to the police.
James: [Defensive] What was I supposed to do? Confess to enabling mass murder? Destroy my life?
-> james_plea
=== james_plea ===
#speaker:james_park
James: What... what's going to happen to me?
* [That depends on whether you cooperate]
You: Cooperate fully with SAFETYNET. Testify against Victoria. Help us prevent Phase 2.
You: Do that, and we can argue for leniency. You were deceived, and you're coming forward voluntarily.
James: [Grasps at hope] Leniency. Not immunity, but... less prison time?
You: Possibly. But you have to tell us everything. Now.
-> james_cooperation
* [You're going to face justice for your role]
You: You enabled six deaths. Even unwittingly, you're complicit. You'll face federal charges.
James: [Defeated] I know. I... I know I deserve it.
James: Will it help at all that I cooperate? That I testify?
You: It might. But that's for prosecutors to decide, not me.
-> james_cooperation
* [That's not my decision to make]
You: I'm gathering evidence. Prosecutors will decide charges. But cooperation helps.
James: [Nods] I'll cooperate. I'll tell you everything. Just... please remember I didn't know.
-> james_cooperation
=== james_cooperation ===
#speaker:james_park
James: What do you need to know?
* [Tell me about Victoria's operation]
James: She runs the Zero Day exploit marketplace through WhiteHat Security as a front.
James: I wasn't supposed to know, but I figured it out. The late-night meetings. The unusual clients.
James: She sells zero-day vulnerabilities to... whoever pays. Ransomware groups. State actors. Anyone.
-> victoria_operation_details
* [Tell me about The Architect]
James: The Architect? I've seen the name in Victoria's emails. Some kind of ENTROPY leadership figure.
James: Victoria takes orders from them. "Architect's priority targets." "Architect's directive."
James: I don't know who they are. But Victoria is terrified of them. And that scares me.
-> victoria_operation_details
* [Tell me about Phase 2]
James: Phase 2? I don't know details. But I've heard Victoria on calls talking about "infrastructure focus."
James: Energy grid. More healthcare SCADA systems. Large-scale attacks.
James: She's been under pressure to deliver more reconnaissance. Higher-value targets.
-> victoria_operation_details
=== victoria_operation_details ===
#speaker:james_park
James: Is this enough? Am I helping?
You: Yes. Keep talking. We'll take a formal statement and get you into protective custody.
James: [Relief and terror mixed] Protective custody. Because Victoria will kill me if she knows I talked.
You: SAFETYNET will protect you. But you need to come with me. Now.
#complete_task:james_choice_made
#exit_conversation
-> DONE
// ===========================================
// END
// ===========================================

View File

@@ -0,0 +1,507 @@
// ===========================================
// Mission 3: Ghost in the Machine
// NPC: Security Guard (Night Patrol)
// Location: Main hallway patrol route
// ===========================================
// Guard state tracking
VAR guard_influence = 0
VAR guard_hostile = false
VAR guard_suspicious = false
VAR player_warned = false
VAR player_has_excuse = false
VAR bribe_offered = false
VAR bribe_accepted = false
// Topic tracking
VAR topic_shift = false
VAR topic_building = false
VAR topic_victoria = false
// External variables
EXTERNAL player_approach
// ===========================================
// INITIAL ENCOUNTER
// ===========================================
=== start ===
#speaker:security_guard
{guard_hostile:
#display:guard-hostile
Guard: I told you to leave! I'm calling the police!
#exit_conversation
#trigger_combat
-> DONE
}
{not player_warned:
#display:guard-alert
[The guard's flashlight beam catches you in the hallway]
Guard: Hey! What are you doing here? Building's closed for the night.
~ player_warned = true
~ guard_suspicious = true
-> first_excuse
}
{player_warned and bribe_accepted:
#display:guard-neutral
Guard: Make it quick. I'm giving you 10 minutes, then you need to be gone.
#exit_conversation
-> DONE
}
{player_warned and not guard_hostile and not bribe_accepted:
#display:guard-suspicious
Guard: You again. I'm keeping my eye on you.
-> hub
}
// ===========================================
// FIRST EXCUSE
// ===========================================
=== first_excuse ===
#speaker:security_guard
Guard: Well? What's your explanation for being here after hours?
* [I work here - forgot something at my desk]
~ guard_influence -= 5
~ guard_suspicious = true
You: I work here. I forgot something at my desk earlier.
Guard: Really. Which department?
-> excuse_work_here
* [Victoria Sterling asked me to grab some files]
~ guard_influence += 10
~ player_has_excuse = true
You: Victoria Sterling asked me to grab some files. I met with her earlier today about the training program.
Guard: [Pauses] Ms. Sterling mentioned a potential recruit... alright.
-> excuse_victoria
* [I'm with building maintenance - late shift]
~ guard_influence += 5
You: Building maintenance. Late shift. Checking the HVAC system.
Guard: Maintenance? I didn't get a work order notice.
-> excuse_maintenance
=== excuse_work_here ===
#speaker:security_guard
You: [Improvise department name]
Guard: Huh. I don't recognize you, and I know most of the staff.
Guard: You got ID? Key card?
* [Show the cloned RFID card]
~ guard_influence += 15
~ player_has_excuse = true
You: [Flash the cloned executive keycard]
Guard: [Squints at it] That's... that's an executive-level card. Alright, carry on.
Guard: Just surprised to see someone here this late.
-> hub
* [I'm new - just started this week]
~ guard_influence += 5
You: I'm new. Just started this week. Still getting my permanent ID.
Guard: [Skeptical] New hires don't usually have after-hours access...
-> suspicious_path
* [I must have left it at my desk - that's what I came back for]
~ guard_influence -= 10
~ guard_suspicious = true
You: That's what I came back for - my ID badge. Left it at my desk.
Guard: So you don't have ID, and you're here after hours. That's a problem.
-> suspicious_path
=== excuse_victoria ===
#speaker:security_guard
Guard: Ms. Sterling does sometimes have late requests.
Guard: What files are you supposed to grab?
* [Training program enrollment documents]
~ guard_influence += 10
You: Training program enrollment documents. From her office.
Guard: [Nods] Alright. But be quick about it. And stay in the executive area - don't wander.
-> hub
* [That's confidential - she didn't give me details]
~ guard_influence += 5
~ guard_suspicious = true
You: She didn't specify - said I'd know when I saw them. Confidential materials.
Guard: [Suspicious] Confidential, huh. Well, don't take too long.
-> hub
=== excuse_maintenance ===
#speaker:security_guard
Guard: No work order, and you don't look like our usual maintenance crew.
Guard: I'm going to need to verify this.
* [Call the maintenance supervisor - here's the number]
~ guard_influence += 10
You: Call the supervisor. [Give fake number that could sound plausible]
Guard: [Looks at number] ...at this hour? Nobody's going to answer.
Guard: Fine. But I'm watching you.
~ guard_suspicious = true
-> hub
* [Emergency HVAC issue - no time for work orders]
~ guard_influence += 5
You: Emergency call. Temperature sensors triggered an alert. No time for paperwork.
Guard: [Uncertain] I didn't hear about any alerts...
~ guard_suspicious = true
-> hub
* [I don't need to explain myself to you]
~ guard_influence -= 20
~ guard_hostile = true
You: I don't have time for this. I have work to do.
Guard: [Angry] Wrong answer. You're trespassing. Leave now or I'm calling the cops.
-> hostile_confrontation
=== suspicious_path ===
#speaker:security_guard
Guard: This doesn't add up. You're not making sense.
* [Offer a bribe - "Maybe we can work something out"]
-> offer_bribe
* [Try to persuade with more lies]
~ guard_influence -= 10
~ guard_suspicious = true
You: [Elaborate on the lie with more details]
Guard: [Not buying it] I think you need to leave. Now.
-> trespass_warning
* [Be honest - SAFETYNET investigation]
-> safetynet_reveal
=== offer_bribe ===
#speaker:security_guard
~ bribe_offered = true
You: Look, maybe we can work something out. I really need to finish something here.
Guard: [Eyes narrow] Are you trying to bribe me?
* [Offer $100]
You: I can make it worth your while. $100. You didn't see me.
-> bribe_response_low
* [Offer $500]
You: $500. Cash. Just give me an hour, then I'm gone.
-> bribe_response_high
* [Back off - "No, I just meant maybe you could make an exception"]
~ guard_influence -= 5
You: No, no - I just meant, could you make an exception? As a favor?
Guard: [Scoffs] No favors. Leave or I'm calling the police.
-> trespass_warning
=== bribe_response_low ===
#speaker:security_guard
Guard: $100? You think I'm going to risk my job for a hundred bucks?
Guard: Get out. Now.
~ guard_hostile = true
-> trespass_warning
=== bribe_response_high ===
#speaker:security_guard
Guard: [Long pause]
Guard: ...$500?
Guard: [Looks around]
Guard: One hour. You finish whatever you're doing and you're gone. I never saw you.
Guard: And if anyone asks, I was on the other side of the building doing rounds.
~ bribe_accepted = true
~ guard_influence += 30
~ guard_suspicious = false
You hand over the cash.
#give_item:cash:-500
Guard: One hour. After that, you're trespassing and I'm doing my job.
#exit_conversation
-> DONE
=== safetynet_reveal ===
#speaker:security_guard
You: I'm with SAFETYNET. This is an active investigation into ENTROPY operations.
Guard: [Shocked] SAFETYNET? Like... the government agency?
* [Show credentials - "I need your cooperation"]
~ guard_influence += 30
~ guard_suspicious = false
You: [Show SAFETYNET credentials] I need your cooperation. National security matter.
Guard: [Stunned] Holy shit. Yeah, okay, whatever you need.
Guard: Ms. Sterling... she's involved in something?
-> safetynet_cooperation
* [This is classified - you can't tell anyone]
~ guard_influence += 20
You: This is classified. You cannot tell anyone I was here. Not even Victoria Sterling.
Guard: [Nervous] Yeah, understood. I... I won't say anything.
-> safetynet_cooperation
* [Help me and you're a patriot. Hinder me and you're an accomplice.]
~ guard_influence += 25
~ guard_suspicious = false
You: Help me, you're helping your country. Get in my way, you're obstructing a federal investigation.
Guard: [Intimidated] I'm not getting in the way. Do what you need to do.
-> safetynet_cooperation
=== safetynet_cooperation ===
#speaker:security_guard
Guard: What do you need from me?
* [Just stay out of my way]
You: Just continue your normal patrol. Pretend you didn't see me.
Guard: Done. I'll be on the other side of the building if anyone asks.
~ guard_influence += 10
#exit_conversation
-> DONE
* [Tell me about Victoria Sterling]
You: Tell me about Victoria Sterling. What's she like?
Guard: Ms. Sterling? She's... intense. Smart. Stays late a lot.
Guard: Sometimes has weird visitors. People who don't look like typical corporate types.
Guard: But she pays well, so I don't ask questions.
-> safetynet_cooperation
* [Any unusual activity lately?]
You: Have you noticed anything unusual? Strange visitors? Odd hours?
Guard: There's been more late-night meetings recently. Last week, some guy with a Russian accent.
Guard: And Ms. Sterling's been more stressed. Snapping at people.
~ guard_influence += 5
-> safetynet_cooperation
+ [That's all I need - continue your patrol]
Guard: Roger that. Good luck with... whatever you're investigating.
#exit_conversation
-> DONE
// ===========================================
// CONVERSATION HUB (After initial encounter)
// ===========================================
=== hub ===
+ {not topic_shift} [Ask about the guard's shift]
-> ask_shift
+ {not topic_building} [Ask about building layout]
-> ask_building
+ {not topic_victoria} [Ask about Victoria Sterling]
-> ask_victoria
+ {guard_influence >= 20 and not bribe_offered} [Offer a bribe]
-> offer_bribe
+ [Leave conversation]
#exit_conversation
{guard_suspicious:
Guard: I'm keeping an eye on you. Don't make me regret this.
}
{not guard_suspicious:
Guard: Alright. Stay out of trouble.
}
-> DONE
=== ask_shift ===
#speaker:security_guard
~ topic_shift = true
~ guard_influence += 5
Guard: Night shift. 10 PM to 6 AM. Quiet most nights.
{guard_suspicious:
Guard: Though tonight's been more eventful than usual.
}
Guard: I do rounds every 15 minutes or so. Check the doors, make sure nobody's where they shouldn't be.
* [What's your route?]
Guard: Main hallway loop. Server room, executive offices, conference area, back to reception.
Guard: Why do you want to know my route?
~ guard_suspicious = true
-> hub
* [Must be boring work]
~ guard_influence += 5
Guard: It pays the bills. And it's better than dealing with day shift drama.
-> hub
+ [Continue]
-> hub
=== ask_building ===
#speaker:security_guard
~ topic_building = true
~ guard_influence += 5
Guard: Standard office building. Reception, conference rooms, main hallway with offices.
Guard: Server room and IT area in the back. Executive offices on the north side.
{guard_influence >= 15:
Guard: Server room's usually locked. Executive-level access only.
}
* [What's in the executive area?]
Guard: Ms. Sterling's office, mostly. Some storage. Conference room for high-level meetings.
~ guard_influence += 5
-> hub
* [Any restricted areas?]
Guard: Server room's the main one. And Ms. Sterling doesn't like people in her office without permission.
-> hub
+ [Continue]
-> hub
=== ask_victoria ===
#speaker:security_guard
~ topic_victoria = true
Guard: Ms. Sterling? She's the boss. CEO. Runs the whole operation.
{guard_influence >= 20:
Guard: Between you and me, she's a bit intense. Very particular about security protocols.
Guard: And the people she meets with sometimes... they don't look like normal corporate clients.
}
{guard_influence < 20:
Guard: Why are you asking about Ms. Sterling?
~ guard_suspicious = true
}
-> hub
// ===========================================
// HOSTILE PATHS
// ===========================================
=== trespass_warning ===
#speaker:security_guard
#display:guard-hostile
Guard: I'm giving you one chance. Leave now, or I'm calling the police.
* [Leave peacefully]
You: Alright, I'm going.
#exit_conversation
#trigger_event:mission_failed_caught
-> DONE
* [Try to run past the guard]
Guard: HEY! STOP!
#trigger_combat
#exit_conversation
-> DONE
* [Attack the guard]
#trigger_combat
#exit_conversation
-> DONE
=== hostile_confrontation ===
#speaker:security_guard
#display:guard-hostile
~ guard_hostile = true
Guard: That's it. I'm calling the cops. Don't move.
[Guard reaches for radio]
* [Tackle the guard before he can call]
#trigger_combat
#exit_conversation
-> DONE
* [Try to talk him down - "Wait, wait!"]
Guard: No more talking. You're trespassing.
-> trespass_warning
* [Run]
Guard: [Into radio] Security! I have an intruder!
#trigger_event:alarm_triggered
#exit_conversation
-> DONE
// ===========================================
// EVENT-TRIGGERED KNOTS
// ===========================================
// Called when guard detects lockpicking
=== on_lockpick_detected ===
#speaker:security_guard
#display:guard-hostile
Guard: HEY! What are you doing with that lock?!
~ guard_hostile = true
~ guard_suspicious = true
Guard: You're trying to break in! That's it - I'm calling the police!
#trigger_combat
#exit_conversation
-> DONE
// Called when guard detects player in restricted area
=== on_restricted_area ===
#speaker:security_guard
#display:guard-suspicious
Guard: You're not supposed to be back here. This area is restricted.
{player_has_excuse and guard_influence >= 10:
Guard: ...but I guess if Ms. Sterling sent you. Be quick.
#exit_conversation
-> DONE
}
{not player_has_excuse or guard_influence < 10:
Guard: I need you to return to the main area. Now.
~ guard_suspicious = true
#exit_conversation
-> DONE
}
// ===========================================
// END
// ===========================================

View File

@@ -0,0 +1,329 @@
// ===========================================
// Mission 3: Ghost in the Machine
// NPC: Receptionist (Daytime)
// Location: Reception lobby
// ===========================================
// State tracking
VAR receptionist_influence = 0
VAR badge_received = false
VAR topic_victoria = false
VAR topic_company_history = false
VAR topic_james = false
VAR pin_hint_given = false
// ===========================================
// INITIAL GREETING
// ===========================================
=== start ===
#speaker:receptionist
{not badge_received:
#display:receptionist-professional
Receptionist: Good afternoon! You must be {player_name}.
Receptionist: Ms. Sterling mentioned you'd be coming in for a consultation.
Receptionist: Let me get you checked in.
-> badge_process
}
{badge_received:
#display:receptionist-friendly
Receptionist: Hi again! How's your visit going?
-> hub
}
// ===========================================
// BADGE CHECK-IN PROCESS
// ===========================================
=== badge_process ===
#speaker:receptionist
Receptionist: I just need you to sign in here, and I'll print you a visitor badge.
[She slides a clipboard across the desk]
Receptionist: Ms. Sterling's in the conference room. Second door on the right down that hallway.
* [Thank you - sign in]
~ badge_received = true
~ receptionist_influence += 5
You sign the visitor log.
Receptionist: Here's your badge. Please keep it visible while you're in the building.
#give_item:visitor_badge
Receptionist: And welcome to WhiteHat Security!
-> first_impression_choice
* [Ask about the company first]
You: Before I meet with Victoria, can you tell me a bit about WhiteHat Security?
~ receptionist_influence += 10
Receptionist: Of course! We're a cybersecurity research and penetration testing firm.
-> company_overview
* [Just sign quickly and head to meeting]
~ badge_received = true
You quickly sign the log.
Receptionist: Here's your badge. Ms. Sterling's waiting in the conference room.
#give_item:visitor_badge
#exit_conversation
-> DONE
=== company_overview ===
#speaker:receptionist
Receptionist: WhiteHat Security was founded in 2010 by Victoria Sterling.
Receptionist: We do penetration testing, security audits, and advanced research training.
{receptionist_influence >= 10:
Receptionist: We also have a research division - Zero Day training programs. Very cutting-edge stuff.
}
~ topic_company_history = true
~ pin_hint_given = true
* [2010 founding - that's the PIN to the safe!]
[Mental note: 2010 might be useful...]
~ receptionist_influence += 5
You: 2010, interesting. Victoria must be proud of how far the company's come.
Receptionist: Oh, very much so. She has a whole display of awards in her office.
-> badge_process
* [What kind of training programs?]
You: What kind of training does Zero Day offer?
Receptionist: [Slightly evasive] Advanced penetration testing techniques. For serious researchers.
Receptionist: Ms. Sterling is very selective about who gets into the program.
~ receptionist_influence += 5
-> badge_process
=== first_impression_choice ===
#speaker:receptionist
Receptionist: Is this your first time working with a cybersecurity firm?
* [I've done some freelance pen testing]
~ receptionist_influence += 10
You: I've done freelance penetration testing before. Looking to level up.
Receptionist: Well, you're in the right place! Ms. Sterling is brilliant.
-> hub
* [Yes, I'm new to the field]
~ receptionist_influence += 5
You: Relatively new, yes. Still learning.
Receptionist: That's exciting! Everyone here is very passionate about security.
-> hub
* [I need to get to the meeting]
You: I should head to the conference room. Don't want to keep Victoria waiting.
Receptionist: Of course! Down the hall, second door on the right.
#exit_conversation
-> DONE
// ===========================================
// CONVERSATION HUB
// ===========================================
=== hub ===
+ {not topic_victoria} [Ask about Victoria Sterling]
-> ask_victoria
+ {not topic_james} [Ask about other employees]
-> ask_james
+ {not topic_company_history and not pin_hint_given} [Ask about company history]
-> ask_company_history
+ {receptionist_influence >= 15} [Ask about the building layout]
-> ask_building_layout
+ [End conversation]
#exit_conversation
Receptionist: Have a great visit!
-> DONE
// ===========================================
// CONVERSATION TOPICS
// ===========================================
=== ask_victoria ===
#speaker:receptionist
~ topic_victoria = true
~ receptionist_influence += 5
Receptionist: Ms. Sterling is amazing. She's a DEFCON speaker, published researcher, the whole package.
Receptionist: And she really cares about the work. Sometimes she's here until midnight.
{receptionist_influence >= 20:
Receptionist: Between you and me, she can be intense. Very particular about her research.
Receptionist: But she's fair. If you're good at what you do, she'll respect you.
}
* [She sounds dedicated]
~ receptionist_influence += 5
You: She sounds very dedicated to the work.
Receptionist: Absolutely. Cybersecurity is her passion.
-> hub
* [Midnight? That's late]
You: Midnight work sessions? That's some serious dedication.
Receptionist: Yeah, sometimes I see her car still in the lot when I leave at 6.
Receptionist: She has a whole setup in her office - coffee maker, the works.
~ receptionist_influence += 5
-> hub
+ [Continue]
-> hub
=== ask_james ===
#speaker:receptionist
~ topic_james = true
~ receptionist_influence += 5
Receptionist: Well, there's James Park - he's one of our senior consultants.
Receptionist: Really nice guy. Always brings donuts on Fridays.
{receptionist_influence >= 15:
Receptionist: He's been a bit stressed lately, though. I think he's working on a big project.
}
* [What kind of work does James do?]
You: What kind of consulting work does James do?
Receptionist: Penetration testing, mostly. He goes on-site to client locations for security audits.
Receptionist: He's been with WhiteHat since the beginning - 2010, I think.
~ receptionist_influence += 5
-> hub
* [Where's his office?]
You: Where does James work? In case I run into him.
Receptionist: His office is down the main hallway, past the server room.
Receptionist: Though he's usually out at client sites during the day.
-> hub
+ [Continue]
-> hub
=== ask_company_history ===
#speaker:receptionist
~ topic_company_history = true
~ pin_hint_given = true
~ receptionist_influence += 5
Receptionist: WhiteHat Security was founded in 2010 by Victoria Sterling.
Receptionist: There's actually a plaque right over there [gestures to wall] with the founding year and mission statement.
Receptionist: "Security Through Economics" - that's our motto.
* [What does "Security Through Economics" mean?]
You: That's an unusual motto. What does it mean?
Receptionist: [Uncertain] Something about market-driven security research? Ms. Sterling explains it better than I can.
Receptionist: She has strong opinions about how the security industry should work.
~ receptionist_influence += 5
-> hub
* [2010 - I'll remember that]
[Mental note: 2010 might be important...]
You: 2010. That's a significant year for the company then.
Receptionist: Absolutely! Ms. Sterling is very proud of everything we've built since then.
~ receptionist_influence += 5
-> hub
+ [Continue]
-> hub
=== ask_building_layout ===
#speaker:receptionist
~ receptionist_influence += 5
Receptionist: Sure! It's a pretty straightforward layout.
Receptionist: Reception here, conference rooms to the right, main offices down the central hallway.
Receptionist: Server room and IT area in the back - that's usually locked, executive access only.
Receptionist: And Ms. Sterling's office is in the executive wing on the north side.
* [What about after hours?]
You: Is anyone here after business hours?
Receptionist: Usually just Ms. Sterling if she's working late. And we have a night security guard - makes rounds to keep the place safe.
~ receptionist_influence += 5
-> hub
* [Executive access for the server room?]
You: Executive access for the server room - is that a key card system?
Receptionist: RFID badges. Ms. Sterling and the senior staff have access. Security precaution.
~ receptionist_influence += 5
-> hub
+ [That's helpful, thanks]
-> hub
// ===========================================
// EVENT-TRIGGERED KNOTS
// ===========================================
// Called when player returns to reception during daytime
=== daytime_return ===
#speaker:receptionist
#display:receptionist-friendly
Receptionist: How did your meeting with Ms. Sterling go?
* [Very well - she's impressive]
~ receptionist_influence += 10
You: It went great. Victoria is very impressive. I learned a lot.
Receptionist: I'm so glad! She has that effect on people.
#exit_conversation
-> DONE
* [Interesting conversation]
You: It was... illuminating. She has strong ideas about security.
Receptionist: [Laughs] That's one way to put it! She definitely has opinions.
~ receptionist_influence += 5
#exit_conversation
-> DONE
* [I need to think about it]
You: I need some time to consider the training program. Big decision.
Receptionist: Of course! Take your time. Let us know if you have any questions.
#exit_conversation
-> DONE
// Called if player tries to access restricted areas during daytime
=== restricted_area_daytime ===
#speaker:receptionist
Receptionist: Oh, I'm sorry - that area is for employees only.
Receptionist: Please stay in the public areas. Conference rooms and the main hallway are open to visitors.
{receptionist_influence >= 20:
Receptionist: If you need access to something specific, Ms. Sterling can authorize it.
}
#exit_conversation
-> DONE
// ===========================================
// END
// ===========================================

View File

@@ -0,0 +1,468 @@
// ===========================================
// Mission 3: Ghost in the Machine
// PHONE NPC: Agent 0x99 (Handler Support)
// ===========================================
// Hint tracking
VAR hint_rfid_cloning_given = false
VAR hint_lockpicking_given = false
VAR hint_password_given = false
VAR hint_encoding_given = false
VAR hint_network_recon_given = false
// Progress tracking
VAR rooms_discovered = 0
VAR objectives_mentioned = 0
// External variables
EXTERNAL player_name
EXTERNAL player_approach
EXTERNAL objectives_completed
EXTERNAL stealth_rating
// ===========================================
// MAIN PHONE INTERFACE
// ===========================================
=== start ===
#speaker:agent_0x99
[Secure phone connection established]
Agent 0x99: {player_name}, what do you need?
-> hub
// ===========================================
// SUPPORT HUB
// ===========================================
=== hub ===
+ [Request hint]
-> provide_hint
+ [Report progress]
-> report_progress
+ [Ask about mission details]
-> mission_details
+ [End call]
#exit_conversation
Agent 0x99: Stay safe. Call if you need backup.
-> DONE
// ===========================================
// HINT SYSTEM
// ===========================================
=== provide_hint ===
#speaker:agent_0x99
Agent 0x99: What do you need help with?
+ {not hint_rfid_cloning_given} [RFID cloning mechanics]
-> hint_rfid_cloning
+ {not hint_lockpicking_given} [Lockpicking advice]
-> hint_lockpicking
+ {not hint_password_given} [Password finding]
-> hint_password
+ {not hint_encoding_given} [Decoding messages]
-> hint_encoding
+ {not hint_network_recon_given} [Network reconnaissance]
-> hint_network_recon
+ [General guidance]
-> hint_general
+ [Never mind]
-> hub
=== hint_rfid_cloning ===
#speaker:agent_0x99
~ hint_rfid_cloning_given = true
Agent 0x99: RFID cloning - get within 2 meters of Victoria for about 10 seconds.
Agent 0x99: The device will vibrate when complete. Keep her talking while it works.
Agent 0x99: Best moment: when you're both standing near the whiteboard or looking at documents together.
+ [Got it]
Agent 0x99: Natural movement. Don't make it obvious.
-> hub
+ [What if she notices?]
Agent 0x99: Play curious recruit. Ask about the training network. She loves talking about her philosophy.
-> hub
=== hint_lockpicking ===
#speaker:agent_0x99
~ hint_lockpicking_given = true
Agent 0x99: Lockpicking takes time and makes noise. Watch for the guard patrol route.
Agent 0x99: Wait until the guard is at the far end of the patrol before starting.
Agent 0x99: If you have lockpicks in inventory, approach any locked door and interact.
+ [Where can I find lockpicks?]
Agent 0x99: Check supply closets, maintenance areas, or IT cabinets. Common hiding spots.
-> hub
+ [Understood]
-> hub
=== hint_password ===
#speaker:agent_0x99
~ hint_password_given = true
Agent 0x99: People hide password hints everywhere. Sticky notes, desk organizers, whiteboards.
Agent 0x99: For Victoria's computer, look for personal details. Founding year of WhiteHat Security? Significant dates?
Agent 0x99: The reception area often has company history. Plaques, awards, founding information.
+ [I'll look around more carefully]
Agent 0x99: Thorough search pays off. Don't rush past obvious clues.
-> hub
=== hint_encoding ===
#speaker:agent_0x99
~ hint_encoding_given = true
Agent 0x99: CyberChef workstation in the server room handles decoding.
Agent 0x99: Common encodings: Base64 (looks random but uses A-Z, a-z, 0-9, +, /), ROT13 (looks like scrambled English), Hex (pairs of 0-9, A-F).
Agent 0x99: If you decode something and it still looks encoded? Multi-layer encoding. Decode again.
+ [What's the difference between encoding and encryption?]
Agent 0x99: Encoding is just transformation - no secret key needed. Anyone can reverse it if they know the method.
Agent 0x99: Encryption requires a key. Much more secure, much harder to break.
Agent 0x99: ENTROPY uses encoding for speed. Encryption is too slow for operational comms.
-> hub
+ [Thanks for the primer]
-> hub
=== hint_network_recon ===
#speaker:agent_0x99
~ hint_network_recon_given = true
Agent 0x99: The VM terminal in the server room connects to Zero Day's training network - 192.168.100.0/24.
Agent 0x99: Start with nmap for network scanning. Then netcat for banner grabbing. Then service-specific tools.
Agent 0x99: Each flag you capture represents intercepted ENTROPY intelligence. Submit them at the drop-site terminal.
+ [What's the target priority?]
Agent 0x99: Network scan first to map the environment. Then FTP and HTTP for client intel. distcc is the critical one - that's where the operational logs are.
-> hub
+ [Got it]
-> hub
=== hint_general ===
#speaker:agent_0x99
{player_approach == "cautious":
Agent 0x99: Your methodical approach is smart. Document everything, connect the dots.
}
{player_approach == "aggressive":
Agent 0x99: Speed is good, but don't miss critical evidence. The hospital connection proof is vital.
}
{player_approach == "diplomatic":
Agent 0x99: Stay flexible. Read situations. Trust your judgment.
}
Agent 0x99: Remember - Victoria's keycard gets you server room access. Network recon gets you digital evidence. Physical search gets you documents.
Agent 0x99: All three together make the case.
-> hub
// ===========================================
// PROGRESS REPORT
// ===========================================
=== report_progress ===
#speaker:agent_0x99
~ objectives_mentioned += 1
Agent 0x99: Give me a status update.
{objectives_completed == 0:
Agent 0x99: No objectives complete yet. Have you met with Victoria?
Agent 0x99: Priority one: clone her keycard. Everything else depends on server room access.
}
{objectives_completed == 1:
Agent 0x99: One objective down. Good start. Keep moving.
}
{objectives_completed >= 2 and objectives_completed < 4:
Agent 0x99: {objectives_completed} objectives complete. You're making progress.
}
{objectives_completed >= 4:
Agent 0x99: Excellent work. {objectives_completed} objectives complete. You're building a solid case.
}
{stealth_rating > 80:
Agent 0x99: And I see you're staying ghost. Perfect operational security.
}
{stealth_rating < 50:
Agent 0x99: You're making some noise. Guard is getting suspicious. Tighten up your stealth.
}
+ [Continue mission]
Agent 0x99: Roger that. Call if you need support.
-> hub
=== mission_details ===
#speaker:agent_0x99
Agent 0x99: Mission objectives recap:
Agent 0x99: Primary - Clone Victoria's RFID keycard, access server room, gather network intelligence, find physical evidence linking Zero Day to St. Catherine's.
Agent 0x99: Optional - Collect LORE fragments for deeper intelligence on ENTROPY's structure.
+ [Remind me about Victoria]
Agent 0x99: Victoria Sterling, CEO. Codename "Cipher." True believer in free market vulnerability research.
Agent 0x99: Smart, charismatic, ideologically committed. Don't underestimate her.
-> hub
+ [What about The Architect?]
Agent 0x99: The Architect is ENTROPY's leadership figure. We don't have identity confirmation yet.
Agent 0x99: But evidence suggests they're coordinating all the cells. Zero Day, Ransomware Inc, Social Fabric, all of them.
Agent 0x99: Any intel you find on The Architect is gold.
-> hub
+ [Got it]
-> hub
// ===========================================
// EVENT-TRIGGERED KNOTS
// ===========================================
// Called when player picks up RFID cloner
=== on_rfid_cloner_pickup ===
#speaker:agent_0x99
Agent 0x99: Good, you've got the RFID cloner.
Agent 0x99: When you meet Victoria, get within 2 meters for 10 seconds. Keep her engaged in conversation.
Agent 0x99: The device is pocket-sized. She won't notice it unless you're obvious about it.
#exit_conversation
-> DONE
// Called when player picks up lockpick
=== on_lockpick_pickup ===
#speaker:agent_0x99
Agent 0x99: Lockpick acquired. That'll let you bypass physical locks.
Agent 0x99: Remember - lockpicking makes noise and takes time. Watch for patrols.
#exit_conversation
-> DONE
// Called when player completes RFID cloning
=== on_rfid_clone_success ===
#speaker:agent_0x99
Agent 0x99: Excellent. Victoria's keycard cloned successfully.
Agent 0x99: You now have executive-level access. Server room is yours after hours.
Agent 0x99: Wait for nighttime, then infiltrate. That's when the real work begins.
#exit_conversation
-> DONE
// Called when player is detected by guard
=== on_player_detected ===
#speaker:agent_0x99
Agent 0x99: You've been spotted! Talk your way out or prepare for confrontation.
Agent 0x99: If things go sideways, abort and exfil. We can try again.
#exit_conversation
-> DONE
// Called when player discovers new room
=== on_room_discovered ===
#speaker:agent_0x99
~ rooms_discovered += 1
{rooms_discovered == 1:
Agent 0x99: New room accessed. Good progress. Search thoroughly.
}
{rooms_discovered == 3:
Agent 0x99: You're covering ground. Stay systematic - don't miss critical evidence.
}
{rooms_discovered >= 5:
Agent 0x99: Impressive exploration. You should have a complete picture of the facility now.
}
#exit_conversation
-> DONE
// Called when player completes lockpicking minigame
=== on_lockpick_success ===
#speaker:agent_0x99
Agent 0x99: Clean work on that lock. Moving like a pro.
{stealth_rating > 70:
Agent 0x99: And you're staying quiet. Textbook infiltration.
}
#exit_conversation
-> DONE
// Called after distcc flag submitted (M2 REVELATION)
=== m2_revelation_call ===
#speaker:agent_0x99
[Agent 0x99's avatar appears - serious expression]
Agent 0x99: {player_name}, I just saw the distcc operational logs you submitted.
Agent 0x99: This is... this is the smoking gun.
Agent 0x99: ProFTPD exploit. $12,500. Sold to GHOST. Deployed at St. Catherine's Hospital.
Agent 0x99: Victoria Sterling personally authorized the sale. "Cipher" signature on the approval.
[Pause]
Agent 0x99: Six people died in that attack. Six people.
Agent 0x99: Four in critical care when patient monitoring failed. Two during emergency surgery when systems crashed.
* [We have them now]
You: This is direct causation. Zero Day → GHOST → St. Catherine's. We can prosecute.
Agent 0x99: Yes. Federal charges. ENTROPY operational conspiracy. This evidence is ironclad.
-> m2_revelation_impact
* [Victoria knew exactly what would happen]
You: The healthcare premium. They charged extra BECAUSE hospitals can't defend themselves.
Agent 0x99: Calculated exploitation of vulnerability. It's not hacking - it's murder for profit.
-> m2_revelation_impact
* [This changes everything]
You: We're not just disrupting a hacking group. This is mass casualty prosecution.
Agent 0x99: Yes. The stakes just went up. Way up.
-> m2_revelation_impact
=== m2_revelation_impact ===
#speaker:agent_0x99
Agent 0x99: Keep gathering evidence. Physical documents, LORE fragments, anything that builds the case.
Agent 0x99: And {player_name}? The Architect's directive mentioned Phase 2.
Agent 0x99: 50,000 patient treatment delays. 1.2 million without power in winter.
Agent 0x99: If St. Catherine's was Phase 1... we need to stop Phase 2 before it begins.
* [I'll find everything I can]
Agent 0x99: I know you will. This is what we trained for.
-> m2_revelation_end
* [We're bringing them all down]
Agent 0x99: Damn right we are. For those six people. And the thousands more at risk.
-> m2_revelation_end
=== m2_revelation_end ===
#speaker:agent_0x99
Agent 0x99: Finish the mission. Document everything. We'll debrief when you're out.
Agent 0x99: And {player_name}? Be careful. Victoria might seem reasonable, but she authorized that hospital attack.
Agent 0x99: Don't forget what she's capable of.
#exit_conversation
-> DONE
// Called when player finds exploit catalog LORE
=== on_exploit_catalog_found ===
#speaker:agent_0x99
Agent 0x99: The exploit catalog... jesus.
Agent 0x99: $847,000 in Q3 alone. 23 exploits sold.
Agent 0x99: This isn't a hacking group. It's an industrial operation.
#exit_conversation
-> DONE
// Called when player finds Architect's directive LORE
=== on_architect_directive_found ===
#speaker:agent_0x99
Agent 0x99: You found The Architect's directive. This is massive.
Agent 0x99: Phase 2 targeting. 427 energy substations. 15 hospitals.
Agent 0x99: And the cross-cell coordination - Zero Day, Ransomware Inc, Social Fabric, Critical Mass all working together.
Agent 0x99: This isn't isolated cells anymore. This is a coordinated network.
Agent 0x99: We need to bring this to SAFETYNET Command immediately.
#exit_conversation
-> DONE
// Called when guard becomes hostile
=== on_guard_hostile ===
#speaker:agent_0x99
Agent 0x99: Guard is hostile! Get to safe distance or prepare to talk your way out.
Agent 0x99: If combat starts, disable and escape. Avoid lethal force if possible.
#exit_conversation
-> DONE
// Called when player accesses Victoria's computer
=== on_victoria_computer_accessed ===
#speaker:agent_0x99
Agent 0x99: You're in Victoria's computer. Good work.
Agent 0x99: Look for client lists, transaction records, communications with other ENTROPY cells.
Agent 0x99: Anything linking her directly to The Architect is priority intelligence.
#exit_conversation
-> DONE
// ===========================================
// END
// ===========================================