diff --git a/scenarios/m01_first_contact/ink/m01_closing_debrief.json b/scenarios/m01_first_contact/ink/m01_closing_debrief.json index b9a2490..cbbc079 100644 --- a/scenarios/m01_first_contact/ink/m01_closing_debrief.json +++ b/scenarios/m01_first_contact/ink/m01_closing_debrief.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":[["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, return to HQ for debrief.","\n","^Agent 0x99: Operation Shatter is neutralized. Let's review what happened.","\n","ev","str","^On my way","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"debrief_location"},null]}],null],"debrief_location":[["^[SAFETYNET HQ - Agent 0x99's Office]","\n","#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^. First, I need you to understand what you accomplished today.","\n","^Agent 0x99: Those casualty projections—42 to 85 people. Diabetics. Elderly. People with anxiety disorders.","\n","^Agent 0x99: They're going to live. Because of you.","\n","ev","str","^That's what matters","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^It was close. Too close.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"evidence_review"},null],"c-1":["\n",{"->":"close_call"},null]}],null],"close_call":["^Agent 0x99: 72 hours. That's how close we cut it.","\n","^Agent 0x99: If our AI hadn't flagged those data collection patterns, if you hadn't found the documentation...","\n","^Agent 0x99: But you did. And those people will never know how close they came.","\n",{"->":"evidence_review"},null],"evidence_review":["^Agent 0x99: Let's review what you recovered.","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_complete"},{"->":".^.^.^.8"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_partial_projections"},{"->":".^.^.^.17"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_partial_database"},{"->":".^.^.^.26"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_minimal"},{"->":".^.^.^.36"},null]}],"nop","\n",null],"evidence_complete":[["^Agent 0x99: You found everything. The casualty projections. The target demographics database. The complete Operation Shatter documentation.","\n","^Agent 0x99: This is exactly what prosecutors need. Derek's signature on the death calculations. The Architect's approval. The targeting methodology.","\n","^Agent 0x99: Thorough work. You didn't rush past the evidence.","\n","ev","str","^I wanted to make sure we had enough to convict","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The more I found, the worse it got","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: You do. There's no walking away from this for Derek.","\n",{"->":"npc_interactions"},null],"c-1":["\n","^Agent 0x99: Yeah. Reading those casualty projections... that stays with you.","\n",{"->":"npc_interactions"},null]}],null],"evidence_partial_projections":["^Agent 0x99: You found the casualty projections—the smoking gun. Derek's death calculations, The Architect's approval.","\n","^Agent 0x99: We're missing the full target demographics database, but that's recoverable from their servers now that we have access.","\n","^Agent 0x99: The critical evidence is secured. That's what matters for prosecution.","\n",{"->":"npc_interactions"},null],"evidence_partial_database":["^Agent 0x99: You found the target demographics database—2.3 million people profiled for vulnerability.","\n","^Agent 0x99: We're still missing the casualty projections document, but the database alone proves intent. They were targeting vulnerable populations deliberately.","\n","^Agent 0x99: Our forensics team is recovering the rest from their systems.","\n",{"->":"npc_interactions"},null],"evidence_minimal":["^Agent 0x99: The core Operation Shatter documentation is still being recovered by our forensics team.","\n","^Agent 0x99: The operation is stopped, but we're relying on digital forensics for the prosecution evidence.","\n","^Agent 0x99: Next time, prioritize document recovery. Physical evidence is harder to deny in court.","\n",{"->":"npc_interactions"},null],"npc_interactions":["ev",{"VAR?":"talked_to_kevin"},{"VAR?":"talked_to_maya"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_with_both"},{"->":".^.^.^.6"},null]}],"nop","\n","ev",{"VAR?":"talked_to_kevin"},{"VAR?":"talked_to_maya"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_with_kevin"},{"->":".^.^.^.15"},null]}],"nop","\n","ev",{"VAR?":"talked_to_kevin"},"!",{"VAR?":"talked_to_maya"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_with_maya"},{"->":".^.^.^.24"},null]}],"nop","\n","ev",{"VAR?":"talked_to_kevin"},"!",{"VAR?":"talked_to_maya"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_alone"},{"->":".^.^.^.34"},null]}],"nop","\n",null],"worked_with_both":["^Agent 0x99: I noticed you worked with both Kevin and Maya.","\n","^Agent 0x99: Kevin gave you legitimate access—that's the IT contractor cover working as intended.","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: And Maya... you protected her identity. She's safe. She can continue her journalism without looking over her shoulder.","\n","^Agent 0x99: That matters. She took a risk contacting us.","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Maya's identity was compromised during the operation. We're relocating her for safety.","\n","^Agent 0x99: She'll be okay, but her career at Viral Dynamics is over. Collateral damage.","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"kevin_frame_discussion"},null],"worked_with_kevin":["^Agent 0x99: Kevin's cooperation was valuable. The IT contractor cover worked perfectly.","\n","^Agent 0x99: You got legitimate access without raising suspicion. That's clean infiltration.","\n",{"->":"kevin_frame_discussion"},null],"worked_with_maya":["^Agent 0x99: Maya was taking a risk talking to you. I hope you appreciated that.","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Her identity stayed protected. She can continue investigating on her own terms now.","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Unfortunately, her identity was compromised. We're handling her protection.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":"kevin_frame_discussion"},null],"worked_alone":["^Agent 0x99: You handled this mostly solo. Independent approach.","\n","^Agent 0x99: Sometimes that's the right call. Fewer people involved means fewer potential leaks.","\n",{"->":"kevin_frame_discussion"},null],"kevin_frame_discussion":["ev",{"VAR?":"kevin_choice"},"str","^","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"security_audit_review"},{"->":".^.^.^.8"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^warn","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"kevin_warned"},{"->":".^.^.^.18"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^evidence","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"kevin_evidence"},{"->":".^.^.^.28"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^ignore","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"kevin_ignored"},{"->":".^.^.^.38"},null]}],"nop","\n",null],"kevin_warned":[["^Agent 0x99: I saw in your report that you warned Kevin about the frame-up.","\n","^Agent 0x99: That was risky. If he'd panicked, if Derek had noticed...","\n","ev","str","^He deserved to know","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I couldn't just let Derek destroy him","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: He did. And now he's lawyered up, documented everything. When the prosecutors came for him, he was ready.","\n","^Agent 0x99: His career is intact. His life isn't ruined. Because you took five minutes to be decent.","\n",{"->":"kevin_outcome_positive"},null],"c-1":["\n","^Agent 0x99: You're right. Kevin didn't ask to be part of this. He helped you because he's a good person.","\n","^Agent 0x99: Derek would have fed him to the wolves. You didn't let that happen.","\n",{"->":"kevin_outcome_positive"},null]}],null],"kevin_evidence":["^Agent 0x99: The contingency files you left for investigators—that was smart.","\n","^Agent 0x99: When the follow-up team found them, they immediately flagged Kevin as a victim, not a suspect.","\n","^Agent 0x99: He never even knew he was in danger. Woke up, went to work, found out his company was a front for terrorists, and went home to his family.","\n","^Agent 0x99: Clean. Professional. And kind.","\n",{"->":"kevin_outcome_positive"},null],"kevin_outcome_positive":["^Agent 0x99: You know what Derek would have said? \"Kevin is acceptable collateral damage.\"","\n","^Agent 0x99: You disagreed. That matters.","\n","^Agent 0x99: Not every agent would have taken the time. Not every agent would have cared.","\n",{"->":"security_audit_review"},null],"kevin_ignored":[["^Agent 0x99: Kevin Park was arrested this morning.","\n","ev","str","^What?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The frame-up worked?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"kevin_arrest_details"},null],"c-1":["\n",{"->":"kevin_arrest_details"},null]}],null],"kevin_arrest_details":[["^Agent 0x99: Derek's contingency plan activated automatically when Viral Dynamics' systems were seized. Fake logs, forged emails.","\n","^Agent 0x99: Kevin spent six hours in interrogation before our team figured out he was being framed.","\n","^Agent 0x99: He's cleared now. But he's traumatized. His neighbors saw him taken away in handcuffs. His kids watched.","\n","ev","str","^I... I saw the files. I knew.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The mission had to come first","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: I know. It's in Derek's computer logs.","\n","^Agent 0x99: You made a choice. Focus on the mission. Let Kevin be collateral damage.","\n","^Agent 0x99: Sometimes that's the right call. Sometimes the mission really does come first.","\n","^Agent 0x99: But Kevin's going to need therapy. His kids are going to need therapy.","\n","^Agent 0x99: Just... remember that. Next time you're weighing priorities.","\n",{"->":"security_audit_review"},null],"c-1":["\n","^Agent 0x99: Did it? You still stopped Operation Shatter. You still caught Derek.","\n","^Agent 0x99: Would five minutes to warn Kevin have changed that?","\n","^Agent 0x99: I'm not judging. Field decisions are hard. But consequences are real.","\n","^Agent 0x99: Kevin's kids watched him get arrested. That happened because of a choice you made.","\n","^Agent 0x99: Live with it. Learn from it.","\n",{"->":"security_audit_review"},null]}],null],"security_audit_review":["ev",{"VAR?":"security_audit_completed"},"/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"audit_feedback"},{"->":".^.^.^.4"},null]}],"nop","\n","ev",{"VAR?":"security_audit_completed"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"no_audit_feedback"},{"->":".^.^.^.11"},null]}],"nop","\n",null],"audit_feedback":["^Agent 0x99: I noticed you gave Kevin a security assessment during your cover operation.","\n","ev",{"VAR?":"audit_correct_answers"},4,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Your security analysis was excellent. You identified every major vulnerability correctly.","\n","^Agent 0x99: Physical access controls, Derek's suspicious access patterns, predictable passwords, Patricia's firing, and Derek's unjustified network segmentation.","\n","^Agent 0x99: That's professional-grade security consulting. Your cover was completely convincing.","\n","ev","str","^I wanted to maintain my cover properly","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The vulnerabilities were pretty obvious once I looked","/str","/ev",{"*":".^.c-1","flg":4},{"->":".^.^.^.8"},{"c-0":["\n","^Agent 0x99: And you did. Kevin trusted you completely because you demonstrated real expertise.","\n","^Agent 0x99: That kind of authentic tradecraft makes all the difference in deep cover work.","\n",{"->":"derek_discussion"},null],"c-1":["\n","^Agent 0x99: Maybe to you. But recognizing them under pressure, while maintaining cover, while gathering intelligence on Operation Shatter?","\n","^Agent 0x99: That's good work. Don't undersell it.","\n",{"->":"derek_discussion"},null]}]}],"nop","\n","ev",{"VAR?":"audit_correct_answers"},3,"==","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Your security analysis was solid. Three out of five correct assessments.","\n","^Agent 0x99: You identified most of the key vulnerabilities—enough to maintain credibility with Kevin.","\n","^Agent 0x99: A few blind spots, but nothing that compromised your cover or the mission.","\n","ev","str","^Which ones did I miss?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I was focused on the bigger picture","/str","/ev",{"*":".^.c-1","flg":4},{"->":".^.^.^.16"},{"c-0":["\n","ev",{"VAR?":"audit_wrong_answers"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: You underestimated a couple of the vulnerabilities Kevin had already flagged.","\n","^Agent 0x99: In the field, always trust when an insider is telling you something's wrong. They see the patterns we miss.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":"derek_discussion"},null],"c-1":["\n","^Agent 0x99: Fair enough. Your primary mission was Operation Shatter, not a comprehensive security audit.","\n","^Agent 0x99: Kevin bought your cover. That's what mattered.","\n",{"->":"derek_discussion"},null]}]}],"nop","\n","ev",{"VAR?":"audit_correct_answers"},2,"<=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Your security assessment was... rough. Two or fewer correct answers out of five.","\n","^Agent 0x99: Kevin was asking you about obvious vulnerabilities he'd already identified. You dismissed most of them.","\n","ev","str","^I was trying not to alarm him","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Security assessment wasn't my priority","/str","/ev",{"*":".^.c-1","flg":4},{"->":".^.^.^.24"},{"c-0":["\n","^Agent 0x99: Understandable. But when an insider is showing you red flags, validate their concerns.","\n","^Agent 0x99: You're supposed to be a security expert. Kevin needed you to see what he was seeing.","\n","^Agent 0x99: Fortunately, your other actions kept him cooperative. But that assessment almost blew your cover.","\n",{"->":"derek_discussion"},null],"c-1":["\n","^Agent 0x99: It's part of your cover identity. When you're undercover as an expert, you need to be that expert.","\n","^Agent 0x99: Kevin noticed you were missing things he'd already flagged. That could have raised suspicions.","\n","^Agent 0x99: Mission succeeded anyway, but... work on your tradecraft. Deep cover requires authenticity.","\n",{"->":"derek_discussion"},null]}]}],"nop","\n",null],"no_audit_feedback":["^Agent 0x99: I noticed you didn't provide Kevin with a security assessment during your cover operation.","\n","^Agent 0x99: That's fine—it wasn't required for the mission. But it could have strengthened your cover credibility.","\n","^Agent 0x99: Next time you're undercover with a professional identity, look for opportunities to demonstrate authentic expertise.","\n","^Agent 0x99: It builds trust. And trust gives you access.","\n",{"->":"derek_discussion"},null],"derek_discussion":["^Agent 0x99: Now, about Derek Lawson...","\n","ev",{"VAR?":"final_choice"},"str","^arrest","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_arrest"},{"->":".^.^.^.10"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^recruit","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_recruit"},{"->":".^.^.^.20"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^expose","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_expose"},{"->":".^.^.^.30"},null]}],"nop","\n",{"->":"consequence_arrest"},null],"consequence_arrest":[["^Agent 0x99: You chose arrest. Legal prosecution through proper channels.","\n","^Agent 0x99: He's not cooperating—true believers rarely do. But we have the evidence. His signature on the casualty projections.","\n","^Agent 0x99: He'll spend decades in prison explaining why 85 dead people would have been \"educational.\"","\n","ev","str","^Will the charges stick?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^He seemed so certain he was right","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Conspiracy to commit mass murder. Terrorism. Computer crimes.","\n","ev",{"VAR?":"found_casualty_projections"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: With the casualty projections you recovered? He's done.","\n",{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: We're building the evidence case. It'll take longer, but he's not walking free.","\n",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":"phase_3_discussion"},null],"c-1":["\n","^Agent 0x99: That's what makes true believers dangerous. They've rationalized everything.","\n","^Agent 0x99: Derek doesn't think he's a murderer. He thinks he's an educator.","\n","^Agent 0x99: The jury will disagree.","\n",{"->":"phase_3_discussion"},null]}],null],"consequence_recruit":[["^Agent 0x99: You offered him a chance to cooperate. Turn informant.","\n","^Agent 0x99: I heard his answer. \"I will never betray ENTROPY.\"","\n","^Agent 0x99: True believers don't turn, ","ev",{"VAR?":"player_name"},"out","/ev","^. They'd rather go to prison as martyrs.","\n","ev","str","^I had to try","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I thought maybe he'd want to reduce his sentence","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: It was worth asking. His refusal tells us something about ENTROPY's organizational culture.","\n","^Agent 0x99: These aren't mercenaries. They're ideologues. That's useful intelligence.","\n",{"->":"recruit_outcome"},null],"c-1":["\n","^Agent 0x99: A rational person would. Derek isn't rational. He's a believer.","\n","^Agent 0x99: His ideology matters more than his freedom.","\n",{"->":"recruit_outcome"},null]}],null],"recruit_outcome":["^Agent 0x99: He's in custody now. Same outcome as arrest.","\n","^Agent 0x99: But we learned something important: ENTROPY attracts true believers. They won't flip for deals.","\n","^Agent 0x99: We'll need to find other ways to get inside intelligence.","\n",{"->":"phase_3_discussion"},null],"consequence_expose":[["^Agent 0x99: Public disclosure. Full transparency.","\n","^Agent 0x99: The casualty projections are on every news site. Derek's death calculations. The targeting lists.","\n","^Agent 0x99: The world now knows what ENTROPY was willing to do.","\n","ev","str","^People deserve to know","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Let them see who Derek really is","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Maybe. But now ENTROPY knows we're onto Operation Shatter methodology.","\n","^Agent 0x99: They'll adapt. Change tactics. We've lost the element of surprise.","\n",{"->":"expose_outcome"},null],"c-1":["\n","^Agent 0x99: They're seeing. \"Acceptable losses.\" \"Educational deaths.\"","\n","^Agent 0x99: The public is horrified. Good. They should be.","\n",{"->":"expose_outcome"},null]}],null],"expose_outcome":["^Agent 0x99: Director Netherton is... not happy. We don't usually expose methods.","\n","^Agent 0x99: But ENTROPY's tactics are now public knowledge. People know to verify. To question.","\n","^Agent 0x99: In a twisted way, you taught the lesson Derek wanted—just without the deaths.","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: At least Maya's identity stayed protected through all this.","\n",{"->":".^.^.^.11"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Maya's identity came out in the disclosure. She's being handled as a public whistleblower now.","\n",{"->":".^.^.^.11"},null]}],"nop","\n",{"->":"phase_3_discussion"},null],"phase_3_discussion":[["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, I need you to understand what we learned today.","\n","^Agent 0x99: We always thought ENTROPY was sophisticated cybercrime. Data theft. Corporate espionage.","\n","^Agent 0x99: This is different. Derek had casualty projections. He calculated deaths and considered them acceptable.","\n","ev","str","^They're willing to kill for their ideology","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What does that mean for future missions?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"true_nature"},null],"c-1":["\n",{"->":"true_nature"},null]}],null],"true_nature":[["^Agent 0x99: It means we're not fighting criminals. We're fighting true believers.","\n","^Agent 0x99: People who think killing people is \"education.\" Who see deaths as \"acceptable losses.\"","\n","^Agent 0x99: And if Social Fabric was willing to do this... what are the other cells planning?","\n","ev","str","^Who is The Architect?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^How do we stop them?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"architect_mystery"},null],"c-1":["\n",{"->":"stop_entropy"},null]}],null],"architect_mystery":[["^Agent 0x99: We don't know. ENTROPY's leader, strategist, philosopher.","\n","^Agent 0x99: Derek quoted The Architect. Believed every word. Got approval to kill 85 people.","\n","^Agent 0x99: Whoever they are, they've built an organization of true believers.","\n","ev","str","^We have to find them","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^That sounds terrifying","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Every cell we disrupt, every operation we stop, brings us closer.","\n","ev",{"VAR?":"lore_collected"},3,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: The intelligence you collected today gives us new leads. The Architect's communication patterns. Their philosophical fingerprints.","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"mission_end"},null],"c-1":["\n","^Agent 0x99: It is. But that's why SAFETYNET exists.","\n","^Agent 0x99: Today, you stood between ENTROPY and 85 people they'd sacrifice.","\n",{"->":"mission_end"},null]}],null],"stop_entropy":["^Agent 0x99: Cell by cell. Operation by operation.","\n","^Agent 0x99: Today you stopped Operation Shatter. Tomorrow, we stop the next one.","\n",{"->":"mission_end"},null],"mission_end":["^Agent 0x99: First mission complete. Lives saved. True believer in custody.","\n","ev",{"VAR?":"lore_collected"},3,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: And ","ev",{"VAR?":"lore_collected"},"out","/ev","^ intelligence fragments recovered. That's thorough investigative work.","\n",{"->":".^.^.^.8"},null]}],"nop","\n","ev",{"VAR?":"lore_collected"},0,"==","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: You focused on the primary objectives. Efficient.","\n","^Agent 0x99: But next time, look for additional intelligence. Context helps future operations.","\n",{"->":".^.^.^.16"},null]}],"nop","\n","^Agent 0x99: Get some rest. Next briefing is in 48 hours.","\n","^Agent 0x99: And ","ev",{"VAR?":"player_name"},"out","/ev","^? You did more than complete a mission today.","\n","^Agent 0x99: You saved lives. Real people who will never know your name.","\n","^Agent 0x99: That's what SAFETYNET is for.","\n","^[MISSION COMPLETE: FIRST CONTACT]","\n","ev",{"VAR?":"final_choice"},"str","^arrest","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Derek Lawson arrested - Prosecution pending]","\n",{"->":".^.^.^.41"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^recruit","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Derek Lawson arrested - Refused cooperation]","\n",{"->":".^.^.^.51"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^expose","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Full public disclosure - ENTROPY methods exposed]","\n",{"->":".^.^.^.61"},null]}],"nop","\n","^[OPERATION SHATTER: NEUTRALIZED]","\n","^[LIVES SAVED: 42-85 (estimated)]","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: COMPLETE - All critical documents recovered]","\n",{"->":".^.^.^.73"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: SUBSTANTIAL - Casualty projections secured]","\n",{"->":".^.^.^.82"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: SUBSTANTIAL - Target database secured]","\n",{"->":".^.^.^.91"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: PARTIAL - Forensics team recovering additional files]","\n",{"->":".^.^.^.101"},null]}],"nop","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^[MAYA CHEN: Identity protected]","\n",{"->":".^.^.^.108"},null]}],[{"->":".^.b"},{"b":["\n","^[MAYA CHEN: Identity compromised - Under SAFETYNET protection]","\n",{"->":".^.^.^.108"},null]}],"nop","\n","ev",{"VAR?":"kevin_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^[KEVIN PARK: Protected from frame-up - Career intact]","\n",{"->":".^.^.^.114"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^ignore","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[KEVIN PARK: Arrested, later cleared - Traumatized but free]","\n",{"->":".^.^.^.124"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[KEVIN PARK: Status unknown]","\n",{"->":".^.^.^.134"},null]}],"nop","\n","^[The Architect remains at large...]","\n","#","^exit_conversation","/#","end",null],"global decl":["ev","str","^Agent 0x00","/str",{"VAR=":"player_name"},"str","^","/str",{"VAR=":"final_choice"},0,{"VAR=":"objectives_completed"},0,{"VAR=":"lore_collected"},false,{"VAR=":"found_casualty_projections"},false,{"VAR=":"found_target_database"},false,{"VAR=":"talked_to_maya"},false,{"VAR=":"talked_to_kevin"},true,{"VAR=":"maya_identity_protected"},"str","^","/str",{"VAR=":"kevin_choice"},false,{"VAR=":"kevin_protected"},false,{"VAR=":"security_audit_completed"},0,{"VAR=":"audit_correct_answers"},0,{"VAR=":"audit_wrong_answers"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":[["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, return to HQ for debrief.","\n","^Agent 0x99: Operation Shatter is neutralized. Let's review what happened.","\n","ev","str","^On my way","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"debrief_location"},null]}],null],"debrief_location":[["^[SAFETYNET HQ - Agent 0x99's Office]","\n","#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^. First, I need you to understand what you accomplished today.","\n","^Agent 0x99: Those casualty projections—42 to 85 people. Diabetics. Elderly. People with anxiety disorders.","\n","^Agent 0x99: They're going to live. Because of you.","\n","ev","str","^That's what matters","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^It was close. Too close.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"evidence_review"},null],"c-1":["\n",{"->":"close_call"},null]}],null],"close_call":["^Agent 0x99: 72 hours. That's how close we cut it.","\n","^Agent 0x99: If our AI hadn't flagged those data collection patterns, if you hadn't found the documentation...","\n","^Agent 0x99: But you did. And those people will never know how close they came.","\n",{"->":"evidence_review"},null],"evidence_review":["^Agent 0x99: Let's review what you recovered.","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_complete"},{"->":".^.^.^.8"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_partial_projections"},{"->":".^.^.^.17"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_partial_database"},{"->":".^.^.^.26"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"evidence_minimal"},{"->":".^.^.^.36"},null]}],"nop","\n",null],"evidence_complete":[["^Agent 0x99: You found everything. The casualty projections. The target demographics database. The complete Operation Shatter documentation.","\n","^Agent 0x99: This is exactly what prosecutors need. Derek's signature on the death calculations. The Architect's approval. The targeting methodology.","\n","^Agent 0x99: Thorough work. You didn't rush past the evidence.","\n","ev","str","^I wanted to make sure we had enough to convict","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The more I found, the worse it got","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: You do. There's no walking away from this for Derek.","\n",{"->":"npc_interactions"},null],"c-1":["\n","^Agent 0x99: Yeah. Reading those casualty projections... that stays with you.","\n",{"->":"npc_interactions"},null]}],null],"evidence_partial_projections":["^Agent 0x99: You found the casualty projections—the smoking gun. Derek's death calculations, The Architect's approval.","\n","^Agent 0x99: We're missing the full target demographics database, but that's recoverable from their servers now that we have access.","\n","^Agent 0x99: The critical evidence is secured. That's what matters for prosecution.","\n",{"->":"npc_interactions"},null],"evidence_partial_database":["^Agent 0x99: You found the target demographics database—2.3 million people profiled for vulnerability.","\n","^Agent 0x99: We're still missing the casualty projections document, but the database alone proves intent. They were targeting vulnerable populations deliberately.","\n","^Agent 0x99: Our forensics team is recovering the rest from their systems.","\n",{"->":"npc_interactions"},null],"evidence_minimal":["^Agent 0x99: The core Operation Shatter documentation is still being recovered by our forensics team.","\n","^Agent 0x99: The operation is stopped, but we're relying on digital forensics for the prosecution evidence.","\n","^Agent 0x99: Next time, prioritize document recovery. Physical evidence is harder to deny in court.","\n",{"->":"npc_interactions"},null],"npc_interactions":["ev",{"VAR?":"talked_to_kevin"},{"VAR?":"talked_to_maya"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_with_both"},{"->":".^.^.^.6"},null]}],"nop","\n","ev",{"VAR?":"talked_to_kevin"},{"VAR?":"talked_to_maya"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_with_kevin"},{"->":".^.^.^.15"},null]}],"nop","\n","ev",{"VAR?":"talked_to_kevin"},"!",{"VAR?":"talked_to_maya"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_with_maya"},{"->":".^.^.^.24"},null]}],"nop","\n","ev",{"VAR?":"talked_to_kevin"},"!",{"VAR?":"talked_to_maya"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"worked_alone"},{"->":".^.^.^.34"},null]}],"nop","\n",null],"worked_with_both":["^Agent 0x99: I noticed you worked with both Kevin and Maya.","\n","^Agent 0x99: Kevin gave you legitimate access—that's the IT contractor cover working as intended.","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: And Maya... you protected her identity. She's safe. She can continue her journalism without looking over her shoulder.","\n","^Agent 0x99: That matters. She took a risk contacting us.","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Maya's identity was compromised during the operation. We're relocating her for safety.","\n","^Agent 0x99: She'll be okay, but her career at Viral Dynamics is over. Collateral damage.","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"kevin_frame_discussion"},null],"worked_with_kevin":["^Agent 0x99: Kevin's cooperation was valuable. The IT contractor cover worked perfectly.","\n","^Agent 0x99: You got legitimate access without raising suspicion. That's clean infiltration.","\n",{"->":"kevin_frame_discussion"},null],"worked_with_maya":["^Agent 0x99: Maya was taking a risk talking to you. I hope you appreciated that.","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Her identity stayed protected. She can continue investigating on her own terms now.","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Unfortunately, her identity was compromised. We're handling her protection.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":"kevin_frame_discussion"},null],"worked_alone":["^Agent 0x99: You handled this mostly solo. Independent approach.","\n","^Agent 0x99: Sometimes that's the right call. Fewer people involved means fewer potential leaks.","\n",{"->":"kevin_frame_discussion"},null],"kevin_frame_discussion":["ev",{"VAR?":"kevin_choice"},"str","^","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"security_audit_review"},{"->":".^.^.^.8"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^warn","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"kevin_warned"},{"->":".^.^.^.18"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^evidence","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"kevin_evidence"},{"->":".^.^.^.28"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^ignore","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"kevin_ignored"},{"->":".^.^.^.38"},null]}],"nop","\n",null],"kevin_warned":[["^Agent 0x99: I saw in your report that you warned Kevin about the frame-up.","\n","^Agent 0x99: That was risky. If he'd panicked, if Derek had noticed...","\n","ev","str","^He deserved to know","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I couldn't just let Derek destroy him","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: He did. And now he's lawyered up, documented everything. When the prosecutors came for him, he was ready.","\n","^Agent 0x99: His career is intact. His life isn't ruined. Because you took five minutes to be decent.","\n",{"->":"kevin_outcome_positive"},null],"c-1":["\n","^Agent 0x99: You're right. Kevin didn't ask to be part of this. He helped you because he's a good person.","\n","^Agent 0x99: Derek would have fed him to the wolves. You didn't let that happen.","\n",{"->":"kevin_outcome_positive"},null]}],null],"kevin_evidence":["^Agent 0x99: The contingency files you left for investigators—that was smart.","\n","^Agent 0x99: When the follow-up team found them, they immediately flagged Kevin as a victim, not a suspect.","\n","^Agent 0x99: He never even knew he was in danger. Woke up, went to work, found out his company was a front for terrorists, and went home to his family.","\n","^Agent 0x99: Clean. Professional. And kind.","\n",{"->":"kevin_outcome_positive"},null],"kevin_outcome_positive":["^Agent 0x99: You know what Derek would have said? \"Kevin is acceptable collateral damage.\"","\n","^Agent 0x99: You disagreed. That matters.","\n","^Agent 0x99: Not every agent would have taken the time. Not every agent would have cared.","\n",{"->":"security_audit_review"},null],"kevin_ignored":[["^Agent 0x99: Kevin Park was arrested this morning.","\n","ev","str","^What?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The frame-up worked?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"kevin_arrest_details"},null],"c-1":["\n",{"->":"kevin_arrest_details"},null]}],null],"kevin_arrest_details":[["^Agent 0x99: Derek's contingency plan activated automatically when Viral Dynamics' systems were seized. Fake logs, forged emails.","\n","^Agent 0x99: Kevin spent six hours in interrogation before our team figured out he was being framed.","\n","^Agent 0x99: He's cleared now. But he's traumatized. His neighbors saw him taken away in handcuffs. His kids watched.","\n","ev","str","^I... I saw the files. I knew.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The mission had to come first","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: I know. It's in Derek's computer logs.","\n","^Agent 0x99: You made a choice. Focus on the mission. Let Kevin be collateral damage.","\n","^Agent 0x99: Sometimes that's the right call. Sometimes the mission really does come first.","\n","^Agent 0x99: But Kevin's going to need therapy. His kids are going to need therapy.","\n","^Agent 0x99: Just... remember that. Next time you're weighing priorities.","\n",{"->":"security_audit_review"},null],"c-1":["\n","^Agent 0x99: Did it? You still stopped Operation Shatter. You still caught Derek.","\n","^Agent 0x99: Would five minutes to warn Kevin have changed that?","\n","^Agent 0x99: I'm not judging. Field decisions are hard. But consequences are real.","\n","^Agent 0x99: Kevin's kids watched him get arrested. That happened because of a choice you made.","\n","^Agent 0x99: Live with it. Learn from it.","\n",{"->":"security_audit_review"},null]}],null],"security_audit_review":["ev",{"VAR?":"security_audit_completed"},"/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"audit_feedback"},{"->":".^.^.^.4"},null]}],"nop","\n","ev",{"VAR?":"security_audit_completed"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"no_audit_feedback"},{"->":".^.^.^.11"},null]}],"nop","\n",null],"audit_feedback":["^Agent 0x99: I noticed you gave Kevin a security assessment during your cover operation.","\n","ev",{"VAR?":"audit_correct_answers"},4,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Your security analysis was excellent. You identified every major vulnerability correctly.","\n","^Agent 0x99: Physical access controls, Derek's suspicious access patterns, predictable passwords, Patricia's firing, and Derek's unjustified network segmentation.","\n","^Agent 0x99: That's professional-grade security consulting. Your cover was completely convincing.","\n","ev","str","^I wanted to maintain my cover properly","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The vulnerabilities were pretty obvious once I looked","/str","/ev",{"*":".^.c-1","flg":4},{"->":".^.^.^.8"},{"c-0":["\n","^Agent 0x99: And you did. Kevin trusted you completely because you demonstrated real expertise.","\n","^Agent 0x99: That kind of authentic tradecraft makes all the difference in deep cover work.","\n",{"->":"derek_discussion"},null],"c-1":["\n","^Agent 0x99: Maybe to you. But recognizing them under pressure, while maintaining cover, while gathering intelligence on Operation Shatter?","\n","^Agent 0x99: That's good work. Don't undersell it.","\n",{"->":"derek_discussion"},null]}]}],"nop","\n","ev",{"VAR?":"audit_correct_answers"},3,"==","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Your security analysis was solid. Three out of five correct assessments.","\n","^Agent 0x99: You identified most of the key vulnerabilities—enough to maintain credibility with Kevin.","\n","^Agent 0x99: A few blind spots, but nothing that compromised your cover or the mission.","\n","ev","str","^Which ones did I miss?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I was focused on the bigger picture","/str","/ev",{"*":".^.c-1","flg":4},{"->":".^.^.^.16"},{"c-0":["\n","ev",{"VAR?":"audit_wrong_answers"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: You underestimated a couple of the vulnerabilities Kevin had already flagged.","\n","^Agent 0x99: In the field, always trust when an insider is telling you something's wrong. They see the patterns we miss.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":"derek_discussion"},null],"c-1":["\n","^Agent 0x99: Fair enough. Your primary mission was Operation Shatter, not a comprehensive security audit.","\n","^Agent 0x99: Kevin bought your cover. That's what mattered.","\n",{"->":"derek_discussion"},null]}]}],"nop","\n","ev",{"VAR?":"audit_correct_answers"},2,"<=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: Your security assessment was... rough. Two or fewer correct answers out of five.","\n","^Agent 0x99: Kevin was asking you about obvious vulnerabilities he'd already identified. You dismissed most of them.","\n","ev","str","^I was trying not to alarm him","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Security assessment wasn't my priority","/str","/ev",{"*":".^.c-1","flg":4},{"->":".^.^.^.24"},{"c-0":["\n","^Agent 0x99: Understandable. But when an insider is showing you red flags, validate their concerns.","\n","^Agent 0x99: You're supposed to be a security expert. Kevin needed you to see what he was seeing.","\n","^Agent 0x99: Fortunately, your other actions kept him cooperative. But that assessment almost blew your cover.","\n",{"->":"derek_discussion"},null],"c-1":["\n","^Agent 0x99: It's part of your cover identity. When you're undercover as an expert, you need to be that expert.","\n","^Agent 0x99: Kevin noticed you were missing things he'd already flagged. That could have raised suspicions.","\n","^Agent 0x99: Mission succeeded anyway, but... work on your tradecraft. Deep cover requires authenticity.","\n",{"->":"derek_discussion"},null]}]}],"nop","\n",null],"no_audit_feedback":["^Agent 0x99: I noticed you didn't provide Kevin with a security assessment during your cover operation.","\n","^Agent 0x99: That's fine—it wasn't required for the mission. But it could have strengthened your cover credibility.","\n","^Agent 0x99: Next time you're undercover with a professional identity, look for opportunities to demonstrate authentic expertise.","\n","^Agent 0x99: It builds trust. And trust gives you access.","\n",{"->":"derek_discussion"},null],"derek_discussion":["^Agent 0x99: Now, about Derek Lawson...","\n","ev",{"VAR?":"final_choice"},"str","^fight","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_fight"},{"->":".^.^.^.10"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^arrest","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_arrest"},{"->":".^.^.^.20"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^recruit","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_recruit"},{"->":".^.^.^.30"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^expose","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"consequence_expose"},{"->":".^.^.^.40"},null]}],"nop","\n",{"->":"consequence_arrest"},null],"consequence_fight":[["^Agent 0x99: You took Derek down physically. Aggressive approach.","\n","^Agent 0x99: Walk me through your tactical reasoning.","\n","ev","str","^He was planning mass murder. I ended the threat.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^He calculated those deaths so coldly. I reacted.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^He reached for something. Threat assessment.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Agent 0x99: Direct and effective. Derek's in custody, Operation Shatter is stopped.","\n","^Agent 0x99: His lawyers will make noise about excessive force, but you had full field authorization.","\n",{"->":"fight_outcome"},null],"c-1":["\n","^Agent 0x99: I saw the footage. The way he talked about those casualties like statistics...","\n","^Agent 0x99: Understandable reaction. Derek's narrative now is that SAFETYNET attacked him, but that's lawyer talk.","\n",{"->":"fight_outcome"},null],"c-2":["\n","^Agent 0x99: Field decisions happen fast. I saw the footage—he did move toward his desk.","\n","^Agent 0x99: You neutralized a potential threat. Textbook response.","\n",{"->":"fight_outcome_justified"},null]}],null],"fight_outcome":[["^Agent 0x99: Derek's in custody. Mission accomplished.","\n","^Agent 0x99: His defense team is spinning the excessive force angle, but you have field immunity as a SAFETYNET operative.","\n","^Agent 0x99: The confrontation will be part of his trial narrative. His lawyers will use it. Worth noting for future ops.","\n","ev",{"VAR?":"found_casualty_projections"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: The hard evidence you recovered—his casualty projections—that's what convicts him. The confrontation is just noise.","\n",{"->":".^.^.^.11"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Forensics is building the evidence case. The physical confrontation adds complexity to prosecution, but he's not walking free.","\n",{"->":".^.^.^.11"},null]}],"nop","\n","^Agent 0x99: Different approach than a quiet arrest, but the result's the same. He's neutralized.","\n","ev","str","^Mission complete. That's what matters.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^He planned to kill 85 people. No sympathy.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Agreed. Operation Shatter stopped, lives saved.","\n",{"->":"phase_3_discussion"},null],"c-1":["\n","^Agent 0x99: None deserved. Derek's done. ENTROPY lost this round.","\n",{"->":"phase_3_discussion"},null]}],null],"fight_outcome_justified":[["^Agent 0x99: Derek's in custody. You neutralized a potentially armed hostile.","\n","^Agent 0x99: Turned out he was reaching for a phone, not a weapon. But split-second decisions don't have hindsight.","\n","^Agent 0x99: Response was controlled. Minimal injury. Threat neutralized.","\n","ev",{"VAR?":"found_casualty_projections"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: The evidence backs up the arrest—his casualty projections with his signature.","\n",{"->":".^.^.^.11"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Forensics is pulling evidence from his systems. Prosecution case is solid.","\n",{"->":".^.^.^.11"},null]}],"nop","\n","^Agent 0x99: His lawyers will file complaints, but review board will clear it. Standard hostile engagement protocol.","\n","^Agent 0x99: Clean tactical response to a perceived threat.","\n","ev","str","^Threat assessment was correct.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'd make the same call again.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Agreed. You made the right call in the moment.","\n",{"->":"phase_3_discussion"},null],"c-1":["\n","^Agent 0x99: That's what field agents do. Assess, act, neutralize.","\n",{"->":"phase_3_discussion"},null]}],null],"consequence_arrest":[["^Agent 0x99: You chose arrest. Legal prosecution through proper channels.","\n","^Agent 0x99: He's not cooperating—true believers rarely do. But we have the evidence. His signature on the casualty projections.","\n","^Agent 0x99: He'll spend decades in prison explaining why 85 dead people would have been \"educational.\"","\n","ev","str","^Will the charges stick?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^He seemed so certain he was right","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Conspiracy to commit mass murder. Terrorism. Computer crimes.","\n","ev",{"VAR?":"found_casualty_projections"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: With the casualty projections you recovered? He's done.","\n",{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: We're building the evidence case. It'll take longer, but he's not walking free.","\n",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":"phase_3_discussion"},null],"c-1":["\n","^Agent 0x99: That's what makes true believers dangerous. They've rationalized everything.","\n","^Agent 0x99: Derek doesn't think he's a murderer. He thinks he's an educator.","\n","^Agent 0x99: The jury will disagree.","\n",{"->":"phase_3_discussion"},null]}],null],"consequence_recruit":[["^Agent 0x99: You offered him a chance to cooperate. Turn informant.","\n","^Agent 0x99: I heard his answer. \"I will never betray ENTROPY.\"","\n","^Agent 0x99: True believers don't turn, ","ev",{"VAR?":"player_name"},"out","/ev","^. They'd rather go to prison as martyrs.","\n","ev","str","^I had to try","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I thought maybe he'd want to reduce his sentence","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: It was worth asking. His refusal tells us something about ENTROPY's organizational culture.","\n","^Agent 0x99: These aren't mercenaries. They're ideologues. That's useful intelligence.","\n",{"->":"recruit_outcome"},null],"c-1":["\n","^Agent 0x99: A rational person would. Derek isn't rational. He's a believer.","\n","^Agent 0x99: His ideology matters more than his freedom.","\n",{"->":"recruit_outcome"},null]}],null],"recruit_outcome":["^Agent 0x99: He's in custody now. Same outcome as arrest.","\n","^Agent 0x99: But we learned something important: ENTROPY attracts true believers. They won't flip for deals.","\n","^Agent 0x99: We'll need to find other ways to get inside intelligence.","\n",{"->":"phase_3_discussion"},null],"consequence_expose":[["^Agent 0x99: Public disclosure. Full transparency.","\n","^Agent 0x99: The casualty projections are on every news site. Derek's death calculations. The targeting lists.","\n","^Agent 0x99: The world now knows what ENTROPY was willing to do.","\n","ev","str","^People deserve to know","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Let them see who Derek really is","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Maybe. But now ENTROPY knows we're onto Operation Shatter methodology.","\n","^Agent 0x99: They'll adapt. Change tactics. We've lost the element of surprise.","\n",{"->":"expose_outcome"},null],"c-1":["\n","^Agent 0x99: They're seeing. \"Acceptable losses.\" \"Educational deaths.\"","\n","^Agent 0x99: The public is horrified. Good. They should be.","\n",{"->":"expose_outcome"},null]}],null],"expose_outcome":["^Agent 0x99: Director Netherton is... not happy. We don't usually expose methods.","\n","^Agent 0x99: But ENTROPY's tactics are now public knowledge. People know to verify. To question.","\n","^Agent 0x99: In a twisted way, you taught the lesson Derek wanted—just without the deaths.","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: At least Maya's identity stayed protected through all this.","\n",{"->":".^.^.^.11"},null]}],[{"->":".^.b"},{"b":["\n","^Agent 0x99: Maya's identity came out in the disclosure. She's being handled as a public whistleblower now.","\n",{"->":".^.^.^.11"},null]}],"nop","\n",{"->":"phase_3_discussion"},null],"phase_3_discussion":[["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, I need you to understand what we learned today.","\n","^Agent 0x99: We always thought ENTROPY was sophisticated cybercrime. Data theft. Corporate espionage.","\n","^Agent 0x99: This is different. Derek had casualty projections. He calculated deaths and considered them acceptable.","\n","ev","str","^They're willing to kill for their ideology","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What does that mean for future missions?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"true_nature"},null],"c-1":["\n",{"->":"true_nature"},null]}],null],"true_nature":[["^Agent 0x99: It means we're not fighting criminals. We're fighting true believers.","\n","^Agent 0x99: People who think killing people is \"education.\" Who see deaths as \"acceptable losses.\"","\n","^Agent 0x99: And if Social Fabric was willing to do this... what are the other cells planning?","\n","ev","str","^Who is The Architect?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^How do we stop them?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"architect_mystery"},null],"c-1":["\n",{"->":"stop_entropy"},null]}],null],"architect_mystery":[["^Agent 0x99: We don't know. ENTROPY's leader, strategist, philosopher.","\n","^Agent 0x99: Derek quoted The Architect. Believed every word. Got approval to kill 85 people.","\n","^Agent 0x99: Whoever they are, they've built an organization of true believers.","\n","ev","str","^We have to find them","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^That sounds terrifying","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Every cell we disrupt, every operation we stop, brings us closer.","\n","ev",{"VAR?":"lore_collected"},3,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: The intelligence you collected today gives us new leads. The Architect's communication patterns. Their philosophical fingerprints.","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"mission_end"},null],"c-1":["\n","^Agent 0x99: It is. But that's why SAFETYNET exists.","\n","^Agent 0x99: Today, you stood between ENTROPY and 85 people they'd sacrifice.","\n",{"->":"mission_end"},null]}],null],"stop_entropy":["^Agent 0x99: Cell by cell. Operation by operation.","\n","^Agent 0x99: Today you stopped Operation Shatter. Tomorrow, we stop the next one.","\n",{"->":"mission_end"},null],"mission_end":["^Agent 0x99: First mission complete. Lives saved. True believer in custody.","\n","ev",{"VAR?":"lore_collected"},3,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: And ","ev",{"VAR?":"lore_collected"},"out","/ev","^ intelligence fragments recovered. That's thorough investigative work.","\n",{"->":".^.^.^.8"},null]}],"nop","\n","ev",{"VAR?":"lore_collected"},0,"==","/ev",[{"->":".^.b","c":true},{"b":["\n","^Agent 0x99: You focused on the primary objectives. Efficient.","\n","^Agent 0x99: But next time, look for additional intelligence. Context helps future operations.","\n",{"->":".^.^.^.16"},null]}],"nop","\n","^Agent 0x99: Get some rest. Next briefing is in 48 hours.","\n","^Agent 0x99: And ","ev",{"VAR?":"player_name"},"out","/ev","^? You did more than complete a mission today.","\n","^Agent 0x99: You saved lives. Real people who will never know your name.","\n","^Agent 0x99: That's what SAFETYNET is for.","\n","^[MISSION COMPLETE: FIRST CONTACT]","\n","ev",{"VAR?":"final_choice"},"str","^fight","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Derek Lawson subdued by force - Hostile engagement neutralized]","\n",{"->":".^.^.^.41"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^arrest","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Derek Lawson arrested - Prosecution pending]","\n",{"->":".^.^.^.51"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^recruit","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Derek Lawson arrested - Refused cooperation]","\n",{"->":".^.^.^.61"},null]}],"nop","\n","ev",{"VAR?":"final_choice"},"str","^expose","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[OUTCOME: Full public disclosure - ENTROPY methods exposed]","\n",{"->":".^.^.^.71"},null]}],"nop","\n","^[OPERATION SHATTER: NEUTRALIZED]","\n","^[LIVES SAVED: 42-85 (estimated)]","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: COMPLETE - All critical documents recovered]","\n",{"->":".^.^.^.83"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: SUBSTANTIAL - Casualty projections secured]","\n",{"->":".^.^.^.92"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: SUBSTANTIAL - Target database secured]","\n",{"->":".^.^.^.101"},null]}],"nop","\n","ev",{"VAR?":"found_casualty_projections"},"!",{"VAR?":"found_target_database"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^[EVIDENCE: PARTIAL - Forensics team recovering additional files]","\n",{"->":".^.^.^.111"},null]}],"nop","\n","ev",{"VAR?":"maya_identity_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^[MAYA CHEN: Identity protected]","\n",{"->":".^.^.^.118"},null]}],[{"->":".^.b"},{"b":["\n","^[MAYA CHEN: Identity compromised - Under SAFETYNET protection]","\n",{"->":".^.^.^.118"},null]}],"nop","\n","ev",{"VAR?":"kevin_protected"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^[KEVIN PARK: Protected from frame-up - Career intact]","\n",{"->":".^.^.^.124"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^ignore","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[KEVIN PARK: Arrested, later cleared - Traumatized but free]","\n",{"->":".^.^.^.134"},null]}],"nop","\n","ev",{"VAR?":"kevin_choice"},"str","^","/str","==","/ev",[{"->":".^.b","c":true},{"b":["\n","^[KEVIN PARK: Status unknown]","\n",{"->":".^.^.^.144"},null]}],"nop","\n","^[The Architect remains at large...]","\n","#","^exit_conversation","/#","end",null],"global decl":["ev","str","^Agent 0x00","/str",{"VAR=":"player_name"},"str","^","/str",{"VAR=":"final_choice"},0,{"VAR=":"objectives_completed"},0,{"VAR=":"lore_collected"},false,{"VAR=":"found_casualty_projections"},false,{"VAR=":"found_target_database"},false,{"VAR=":"talked_to_maya"},false,{"VAR=":"talked_to_kevin"},true,{"VAR=":"maya_identity_protected"},"str","^","/str",{"VAR=":"kevin_choice"},false,{"VAR=":"kevin_protected"},false,{"VAR=":"security_audit_completed"},0,{"VAR=":"audit_correct_answers"},0,{"VAR=":"audit_wrong_answers"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file diff --git a/scenarios/m01_first_contact/ink/m01_derek_confrontation.json b/scenarios/m01_first_contact/ink/m01_derek_confrontation.json index 88a291c..b3ccb2e 100644 --- a/scenarios/m01_first_contact/ink/m01_derek_confrontation.json +++ b/scenarios/m01_first_contact/ink/m01_derek_confrontation.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":[["ev",{"VAR?":"ssh_flag_submitted"},"!",{"VAR?":"linux_flag_submitted"},"!","||",{"VAR?":"sudo_flag_submitted"},"!","||","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"insufficient_evidence"},{"->":".^.^.^.11"},null]}],"nop","\n","#","^complete_task:confront_derek","/#","^Derek: Working late on the security audit?","\n","^Derek: I've been watching you, you know. The lockpicking. The server access. The files you've been copying.","\n","^Derek: You're not an IT contractor. And you've found Operation Shatter.","\n","ev","str","^I know what you're planning, Derek.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I've seen the casualty projections.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^SAFETYNET knows everything.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","ev","str","^aggressive","/str","/ev",{"VAR=":"confrontation_approach","re":true},"ev",true,"/ev",{"VAR=":"derek_knows_safetynet","re":true},{"->":"derek_response_direct"},null],"c-1":["\n","ev","str","^evidence_based","/str","/ev",{"VAR=":"confrontation_approach","re":true},"ev",true,"/ev",{"VAR=":"derek_knows_safetynet","re":true},{"->":"derek_response_evidence"},null],"c-2":["\n","ev","str","^aggressive","/str","/ev",{"VAR=":"confrontation_approach","re":true},"ev",true,"/ev",{"VAR=":"derek_knows_safetynet","re":true},{"->":"derek_response_safetynet"},null]}],null],"insufficient_evidence":[["^Derek: Oh, you must be the IT contractor. Security audit, right?","\n","^Derek: I'm kind of busy. Maybe check back later?","\n","ev","str","^I need to look at your systems","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^We should talk about some irregularities I've found","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I'll come back later","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Derek: Feel free to look around the office. But I don't have time for an interview right now.","\n","^Derek: Maybe after you've actually found something worth discussing.","\n","#","^exit_conversation","/#","end",null],"c-1":["\n","^Derek: Irregularities? Like what exactly?","\n","^Derek: If you don't have specifics, I've got work to do. Come back when you have evidence.","\n","#","^exit_conversation","/#","end",null],"c-2":["\n","^Derek: Good idea. I'm sure the server room has plenty to keep you busy.","\n","#","^exit_conversation","/#","end",null]}],null],"derek_response_direct":[["^Derek: \"Planning.\" Such a neutral word for what we're doing.","\n","^Derek: We're not planning an attack. We're planning an education.","\n","ev","str","^You're planning to kill people.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're insane.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"derek_admits_casualties"},null],"c-1":["\n",{"->":"derek_calm_response"},null]}],null],"derek_calm_response":["^Derek: Insane? I'm the sanest person in this building.","\n","^Derek: Everyone else pretends the systems work. Pretends their data is secure. Pretends that trust is deserved.","\n","^Derek: I know the truth. And after Sunday, so will everyone else.","\n",{"->":"derek_admits_casualties"},null],"derek_response_evidence":[["^Derek: Ah. The casualty projections.","\n","^Derek: I was wondering if you'd find those. They're the most honest part of the whole operation.","\n","ev","str","^You calculated how many people would die.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^42 to 85 people. Those are your numbers.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"derek_admits_casualties"},null],"c-1":["\n",{"->":"derek_admits_casualties"},null]}],null],"derek_response_safetynet":["^Derek: SAFETYNET. The organization that thinks surveillance protects people.","\n","^Derek: You found the files. The targeting lists. The message templates.","\n","^Derek: Good. Then you understand what's coming.","\n",{"->":"derek_admits_casualties"},null],"derek_admits_casualties":[["^Derek: Yes. Between 42 and 85 people will die in the first 24 hours.","\n","^Derek: Diabetics who panic about hospital closures. Elderly who can't handle the stress of fake bank failures. Heart attacks. Traffic accidents. A few suicides, probably.","\n","^Derek: I calculated every one of them.","\n","ev","str","^How can you be so calm about murdering people?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're a monster.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Why?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"evil_monologue_part1"},null],"c-1":["\n",{"->":"evil_monologue_part1"},null],"c-2":["\n",{"->":"evil_monologue_part1"},null]}],null],"evil_monologue_part1":[["^Derek: Murder? No. Think of it as... forced education.","\n","^Derek: Every security professional in the world says \"humans are the weakest link.\" They write papers about it. Give talks at conferences. Collect consulting fees.","\n","^Derek: But no one actually DEMONSTRATES it. No one shows what happens when you target human psychology at scale.","\n","^Derek: We're going to prove—conclusively, undeniably—that digital trust is a lie. That every message you receive could be fake. That nothing is secure.","\n","ev","str","^By killing innocent people.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're just terrorists with a philosophy degree.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"evil_monologue_part2"},null],"c-1":["\n",{"->":"evil_monologue_part2"},null]}],null],"evil_monologue_part2":[["^Derek: \"Innocent.\" That's an interesting word.","\n","^Derek: The diabetics we're targeting? They trust hospital notifications without verification. The elderly? They believe bank messages because they look official.","\n","^Derek: They're not innocent. They're negligent. They've outsourced their critical thinking to systems that can be manipulated.","\n","^Derek: We're teaching them—all of them—that trust is dangerous. Verify everything. Question everything. Or die.","\n","ev","str","^Some of them WILL die. That's murder.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're rationalizing mass murder.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"evil_monologue_part3"},null],"c-1":["\n",{"->":"evil_monologue_part3"},null]}],null],"evil_monologue_part3":[["^Derek: Forty-two to eighty-five deaths. Let's call it sixty.","\n","^Derek: Do you know how many people die every year because they trusted the wrong email? Clicked the wrong link? Gave credentials to the wrong person?","\n","^Derek: Thousands. Tens of thousands. Suicides after financial fraud. Medical errors from compromised records. Violence incited by disinformation.","\n","^Derek: We're going to end that. One bad weekend. Sixty deaths. And then NO ONE will ever trust a digital message again without verification.","\n","^Derek: Sixty deaths to save tens of thousands per year. That's not murder. That's optimization.","\n","ev","str","^You're calculating human lives like statistics.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The Architect taught you this, didn't they?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^This ends now.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"derek_final_philosophy"},null],"c-1":["\n",{"->":"architect_reference"},null],"c-2":["\n",{"->":"confrontation_choice"},null]}],null],"architect_reference":["^Derek: The Architect opened my eyes. But I chose this path myself.","\n","^Derek: Entropy is inevitable. Trust is a lie. Security through obscurity fails.","\n","^Derek: We just accelerate the lesson. Make it unavoidable. Make it hurt enough that people remember.","\n",{"->":"derek_final_philosophy"},null],"derek_final_philosophy":[["^Derek: You look at me like I'm a monster.","\n","^Derek: But I'm the only honest person in this industry. Every security researcher KNOWS trust is broken. They just profit from pretending it can be fixed.","\n","^Derek: I'm the one willing to actually fix it. To burn the comfortable lies so something real can grow from the ashes.","\n","^Derek: Those sixty people? Their deaths will save millions.","\n","^Derek: And in ten years, when no one falls for phishing because Operation Shatter taught them to verify everything, you'll understand.","\n","^Derek: I'm not a villain. I'm a prophet.","\n","ev","str","^You're delusional.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're going to prison for the rest of your life.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I almost feel sorry for you. Almost.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"confrontation_choice"},null],"c-1":["\n",{"->":"confrontation_choice"},null],"c-2":["\n",{"->":"confrontation_choice"},null]}],null],"confrontation_choice":[["^Derek: So. Here we are. You've heard my reasoning. You've seen the evidence.","\n","^Derek: What happens now is up to you.","\n","^Derek: But know this—even if you stop Operation Shatter here, the idea doesn't die. There are other cells. Other believers. Other architects of the inevitable.","\n","ev","str","^I'm calling in SAFETYNET. You're under arrest.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Work with us. Help us stop the other cells.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I'm exposing everything publicly. Let the world see what you are.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","ev","str","^arrest","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_arrest"},null],"c-1":["\n","ev","str","^recruit","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_recruit"},null],"c-2":["\n","ev","str","^expose","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_expose"},null]}],null],"choice_arrest":["^You: You're done, Derek. Operation Shatter dies today. And you're going to spend the rest of your life in prison.","\n","^Derek: Prison. How quaint.","\n","^Derek: You think concrete walls stop ideas? I'll become a martyr. People will study my philosophy. Question why I was silenced.","\n","^You: You'll be a case study in how not to become a terrorist.","\n","^Derek: Terrorist. That's what they call educators who make people uncomfortable.","\n","^You call in SAFETYNET backup. Derek doesn't resist—he's too confident that he's already won something.","\n",{"->":"arrest_outcome"},null],"arrest_outcome":["#","^speaker:agent_0x99","/#","^Agent 0x99: Backup team is on site. Derek Lawson in custody.","\n","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^... I heard everything. The way he talked about those deaths. Like they were just... numbers.","\n","^Agent 0x99: We got him. Operation Shatter is over. You saved those people.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"choice_recruit":["^You: You said there are other cells. Other architects of chaos.","\n","^You: Help us stop them. Turn informant. Give us ENTROPY from the inside.","\n","^Derek: Become a double agent? Betray The Architect?","\n","^Derek: *laughs*","\n","^Derek: You think I'd sell out the only people who understand the truth? For what—reduced sentence?","\n","^Derek: No. I'm not like you, willing to compromise principles for convenience.","\n","^Derek: Arrest me. Expose me. I don't care. But I will never betray ENTROPY.","\n","^You: Then you leave me no choice.","\n","^You call in SAFETYNET backup. Derek was never going to cooperate—his belief is absolute.","\n",{"->":"recruit_outcome"},null],"recruit_outcome":["#","^speaker:agent_0x99","/#","^Agent 0x99: I heard his refusal. Not surprised—true believers don't turn.","\n","^Agent 0x99: But you tried. That matters. Sometimes there's no way to reach someone.","\n","^Agent 0x99: Derek Lawson is in custody. Operation Shatter is stopped. That's what counts.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"choice_expose":[["^You: I'm taking everything. The casualty projections. The targeting lists. The messages you wrote for elderly diabetics.","\n","^You: I'm giving it all to the press. Let the world see what ENTROPY really is.","\n","^Derek: *smiles*","\n","^Derek: You think that hurts me? I WANT people to see this.","\n","^Derek: Public disclosure means the philosophy spreads. People will read those casualty projections and think—what if it happened? What if next time we're not stopped?","\n","^Derek: Fear is the first step to wisdom. You're doing my work for me.","\n","ev","str","^Then the world will also see you in handcuffs.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^At least they'll know to watch for people like you.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"expose_execute"},null],"c-1":["\n",{"->":"expose_execute"},null]}],null],"expose_execute":["^You: Maybe. But they'll also see that SAFETYNET stopped you. That we found you before you killed anyone.","\n","^You: And every time someone reads about Operation Shatter, they'll remember that we caught you. That your \"inevitable entropy\" wasn't so inevitable after all.","\n","^Derek: A temporary setback. Entropy always wins eventually.","\n","^You: Not today.","\n","^You begin compiling the evidence for public release while calling in backup.","\n",{"->":"expose_outcome"},null],"expose_outcome":["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, public disclosure is... complicated. Director Netherton is going to have opinions.","\n","^Agent 0x99: But I understand why you did it. People should know what ENTROPY is capable of. What they were willing to do.","\n","^Agent 0x99: Derek's in custody. The targeting lists are secured. And those 85 people who were going to die on Sunday? They're going to live.","\n","^Agent 0x99: That's what matters.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"global decl":["ev","str","^","/str",{"VAR=":"confrontation_approach"},false,{"VAR=":"derek_knows_safetynet"},false,{"VAR=":"derek_showed_remorse"},"str","^","/str",{"VAR=":"final_choice"},false,{"VAR=":"derek_confronted"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},false,{"VAR=":"evidence_collected"},false,{"VAR=":"found_casualty_projections"},false,{"VAR=":"ssh_flag_submitted"},false,{"VAR=":"linux_flag_submitted"},false,{"VAR=":"sudo_flag_submitted"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":[["ev",{"VAR?":"ssh_flag_submitted"},"!",{"VAR?":"linux_flag_submitted"},"!","||",{"VAR?":"sudo_flag_submitted"},"!","||","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"insufficient_evidence"},{"->":".^.^.^.11"},null]}],"nop","\n","#","^complete_task:confront_derek","/#","^Derek: Working late on the security audit?","\n","^Derek: I've been watching you, you know. The lockpicking. The server access. The files you've been copying.","\n","^Derek: You're not an IT contractor. And you've found Operation Shatter.","\n","ev","str","^I know what you're planning, Derek.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I've seen the casualty projections.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^SAFETYNET knows everything.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","ev","str","^aggressive","/str","/ev",{"VAR=":"confrontation_approach","re":true},"ev",true,"/ev",{"VAR=":"derek_knows_safetynet","re":true},{"->":"derek_response_direct"},null],"c-1":["\n","ev","str","^evidence_based","/str","/ev",{"VAR=":"confrontation_approach","re":true},"ev",true,"/ev",{"VAR=":"derek_knows_safetynet","re":true},{"->":"derek_response_evidence"},null],"c-2":["\n","ev","str","^aggressive","/str","/ev",{"VAR=":"confrontation_approach","re":true},"ev",true,"/ev",{"VAR=":"derek_knows_safetynet","re":true},{"->":"derek_response_safetynet"},null]}],null],"insufficient_evidence":[["^Derek: Oh, you must be the IT contractor. Security audit, right?","\n","^Derek: I'm kind of busy. Maybe check back later?","\n","ev","str","^I need to look at your systems","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^We should talk about some irregularities I've found","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I'll come back later","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Derek: Feel free to look around the office. But I don't have time for an interview right now.","\n","^Derek: Maybe after you've actually found something worth discussing.","\n","#","^exit_conversation","/#","end",null],"c-1":["\n","^Derek: Irregularities? Like what exactly?","\n","^Derek: If you don't have specifics, I've got work to do. Come back when you have evidence.","\n","#","^exit_conversation","/#","end",null],"c-2":["\n","^Derek: Good idea. I'm sure the server room has plenty to keep you busy.","\n","#","^exit_conversation","/#","end",null]}],null],"derek_response_direct":[["^Derek: \"Planning.\" Such a neutral word for what we're doing.","\n","^Derek: We're not planning an attack. We're planning an education.","\n","ev","str","^You're planning to kill people.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're insane.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"derek_admits_casualties"},null],"c-1":["\n",{"->":"derek_calm_response"},null]}],null],"derek_calm_response":["^Derek: Insane? I'm the sanest person in this building.","\n","^Derek: Everyone else pretends the systems work. Pretends their data is secure. Pretends that trust is deserved.","\n","^Derek: I know the truth. And after Sunday, so will everyone else.","\n",{"->":"derek_admits_casualties"},null],"derek_response_evidence":[["^Derek: Ah. The casualty projections.","\n","^Derek: I was wondering if you'd find those. They're the most honest part of the whole operation.","\n","ev","str","^You calculated how many people would die.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^42 to 85 people. Those are your numbers.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"derek_admits_casualties"},null],"c-1":["\n",{"->":"derek_admits_casualties"},null]}],null],"derek_response_safetynet":["^Derek: SAFETYNET. The organization that thinks surveillance protects people.","\n","^Derek: You found the files. The targeting lists. The message templates.","\n","^Derek: Good. Then you understand what's coming.","\n",{"->":"derek_admits_casualties"},null],"derek_admits_casualties":[["^Derek: Yes. Between 42 and 85 people will die in the first 24 hours.","\n","^Derek: Diabetics who panic about hospital closures. Elderly who can't handle the stress of fake bank failures. Heart attacks. Traffic accidents. A few suicides, probably.","\n","^Derek: I calculated every one of them.","\n","ev","str","^How can you be so calm about murdering people?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're a monster.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Why?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"evil_monologue_part1"},null],"c-1":["\n",{"->":"evil_monologue_part1"},null],"c-2":["\n",{"->":"evil_monologue_part1"},null]}],null],"evil_monologue_part1":[["^Derek: Murder? No. Think of it as... forced education.","\n","^Derek: Every security professional in the world says \"humans are the weakest link.\" They write papers about it. Give talks at conferences. Collect consulting fees.","\n","^Derek: But no one actually DEMONSTRATES it. No one shows what happens when you target human psychology at scale.","\n","^Derek: We're going to prove—conclusively, undeniably—that digital trust is a lie. That every message you receive could be fake. That nothing is secure.","\n","ev","str","^By killing innocent people.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're just terrorists with a philosophy degree.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"evil_monologue_part2"},null],"c-1":["\n",{"->":"evil_monologue_part2"},null]}],null],"evil_monologue_part2":[["^Derek: \"Innocent.\" That's an interesting word.","\n","^Derek: The diabetics we're targeting? They trust hospital notifications without verification. The elderly? They believe bank messages because they look official.","\n","^Derek: They're not innocent. They're negligent. They've outsourced their critical thinking to systems that can be manipulated.","\n","^Derek: We're teaching them—all of them—that trust is dangerous. Verify everything. Question everything. Or die.","\n","ev","str","^Some of them WILL die. That's murder.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're rationalizing mass murder.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"evil_monologue_part3"},null],"c-1":["\n",{"->":"evil_monologue_part3"},null]}],null],"evil_monologue_part3":[["^Derek: Forty-two to eighty-five deaths. Let's call it sixty.","\n","^Derek: Do you know how many people die every year because they trusted the wrong email? Clicked the wrong link? Gave credentials to the wrong person?","\n","^Derek: Thousands. Tens of thousands. Suicides after financial fraud. Medical errors from compromised records. Violence incited by disinformation.","\n","^Derek: We're going to end that. One bad weekend. Sixty deaths. And then NO ONE will ever trust a digital message again without verification.","\n","^Derek: Sixty deaths to save tens of thousands per year. That's not murder. That's optimization.","\n","ev","str","^You're calculating human lives like statistics.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^The Architect taught you this, didn't they?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^This ends now.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"derek_final_philosophy"},null],"c-1":["\n",{"->":"architect_reference"},null],"c-2":["\n",{"->":"confrontation_choice"},null]}],null],"architect_reference":["^Derek: The Architect opened my eyes. But I chose this path myself.","\n","^Derek: Entropy is inevitable. Trust is a lie. Security through obscurity fails.","\n","^Derek: We just accelerate the lesson. Make it unavoidable. Make it hurt enough that people remember.","\n",{"->":"derek_final_philosophy"},null],"derek_final_philosophy":[["^Derek: You look at me like I'm a monster.","\n","^Derek: But I'm the only honest person in this industry. Every security researcher KNOWS trust is broken. They just profit from pretending it can be fixed.","\n","^Derek: I'm the one willing to actually fix it. To burn the comfortable lies so something real can grow from the ashes.","\n","^Derek: Those sixty people? Their deaths will save millions.","\n","^Derek: And in ten years, when no one falls for phishing because Operation Shatter taught them to verify everything, you'll understand.","\n","^Derek: I'm not a villain. I'm a prophet.","\n","ev","str","^You're delusional.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You're going to prison for the rest of your life.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I almost feel sorry for you. Almost.","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"confrontation_choice"},null],"c-1":["\n",{"->":"confrontation_choice"},null],"c-2":["\n",{"->":"confrontation_choice"},null]}],null],"confrontation_choice":[["^Derek: So. Here we are. You've heard my reasoning. You've seen the evidence.","\n","^Derek: What happens now is up to you.","\n","^Derek: But know this—even if you stop Operation Shatter here, the idea doesn't die. There are other cells. Other believers. Other architects of the inevitable.","\n","ev","str","^I'm taking you down. Now.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm calling in SAFETYNET. You're under arrest.","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Work with us. Help us stop the other cells.","/str","/ev",{"*":".^.c-2","flg":4},"ev","str","^I'm exposing everything publicly. Let the world see what you are.","/str","/ev",{"*":".^.c-3","flg":4},{"c-0":["^ ","#","^color:red","/#","\n","ev","str","^fight","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_fight"},null],"c-1":["\n","ev","str","^arrest","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_arrest"},null],"c-2":["\n","ev","str","^recruit","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_recruit"},null],"c-3":["\n","ev","str","^expose","/str","/ev",{"VAR=":"final_choice","re":true},{"->":"choice_expose"},null]}],null],"choice_fight":["^You: No lawyers. No trials. No platform for your twisted philosophy.","\n","^Derek: *steps back* You're making a mistake.","\n","^You: The only mistake was thinking you'd get to walk out of here.","\n","^Derek: Violence? How disappointing. I expected better from SAFETYNET.","\n","^You: You calculated deaths like statistics. You don't get to lecture me about violence.","\n","^Derek becomes hostile, reaching for something in his desk.","\n","#","^hostile","/#","#","^speaker:derek","/#","#","^influence:-100","/#","#","^add_objective:defeat_derek_hostile","/#","^Derek: If you want a fight, ","ev",{"VAR?":"player_name"},"out","/ev","^, you'll get one. But you won't stop ENTROPY. You'll just prove we're right about the system.","\n","^Derek: Come on then!","\n",{"->":"fight_outcome"},null],"fight_outcome":["^The confrontation escalates. Derek fights desperately, but you're trained for this.","\n","^After a brief struggle, you subdue him. He's breathing hard, defiant even in defeat.","\n","#","^complete_task:defeat_derek_hostile","/#","#","^event:hostile_npc_defeated:derek","/#","#","^speaker:derek","/#","^Derek: *coughs* You think... you think this changes anything?","\n","^Derek: I'm a martyr now. ENTROPY will remember this. The Architect will remember.","\n","^Derek: You didn't arrest me. You attacked me. How noble.","\n","^You call in SAFETYNET backup while keeping Derek restrained.","\n","#","^speaker:agent_0x99","/#","^Agent 0x99: Backup team on site. Derek Lawson subdued and in custody.","\n","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^... that was aggressive. But he's down. Operation Shatter is over.","\n","^Agent 0x99: We'll discuss the methods in debrief.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"choice_arrest":["^You: You're done, Derek. Operation Shatter dies today. And you're going to spend the rest of your life in prison.","\n","^Derek: Prison. How quaint.","\n","^Derek: You think concrete walls stop ideas? I'll become a martyr. People will study my philosophy. Question why I was silenced.","\n","^You: You'll be a case study in how not to become a terrorist.","\n","^Derek: Terrorist. That's what they call educators who make people uncomfortable.","\n","^You call in SAFETYNET backup. Derek doesn't resist—he's too confident that he's already won something.","\n",{"->":"arrest_outcome"},null],"arrest_outcome":["#","^speaker:agent_0x99","/#","^Agent 0x99: Backup team is on site. Derek Lawson in custody.","\n","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^... I heard everything. The way he talked about those deaths. Like they were just... numbers.","\n","^Agent 0x99: We got him. Operation Shatter is over. You saved those people.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"choice_recruit":["^You: You said there are other cells. Other architects of chaos.","\n","^You: Help us stop them. Turn informant. Give us ENTROPY from the inside.","\n","^Derek: Become a double agent? Betray The Architect?","\n","^Derek: *laughs*","\n","^Derek: You think I'd sell out the only people who understand the truth? For what—reduced sentence?","\n","^Derek: No. I'm not like you, willing to compromise principles for convenience.","\n","^Derek: Arrest me. Expose me. I don't care. But I will never betray ENTROPY.","\n","^You: Then you leave me no choice.","\n","^You call in SAFETYNET backup. Derek was never going to cooperate—his belief is absolute.","\n",{"->":"recruit_outcome"},null],"recruit_outcome":["#","^speaker:agent_0x99","/#","^Agent 0x99: I heard his refusal. Not surprised—true believers don't turn.","\n","^Agent 0x99: But you tried. That matters. Sometimes there's no way to reach someone.","\n","^Agent 0x99: Derek Lawson is in custody. Operation Shatter is stopped. That's what counts.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"choice_expose":[["^You: I'm taking everything. The casualty projections. The targeting lists. The messages you wrote for elderly diabetics.","\n","^You: I'm giving it all to the press. Let the world see what ENTROPY really is.","\n","^Derek: *smiles*","\n","^Derek: You think that hurts me? I WANT people to see this.","\n","^Derek: Public disclosure means the philosophy spreads. People will read those casualty projections and think—what if it happened? What if next time we're not stopped?","\n","^Derek: Fear is the first step to wisdom. You're doing my work for me.","\n","ev","str","^Then the world will also see you in handcuffs.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^At least they'll know to watch for people like you.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"expose_execute"},null],"c-1":["\n",{"->":"expose_execute"},null]}],null],"expose_execute":["^You: Maybe. But they'll also see that SAFETYNET stopped you. That we found you before you killed anyone.","\n","^You: And every time someone reads about Operation Shatter, they'll remember that we caught you. That your \"inevitable entropy\" wasn't so inevitable after all.","\n","^Derek: A temporary setback. Entropy always wins eventually.","\n","^You: Not today.","\n","^You begin compiling the evidence for public release while calling in backup.","\n",{"->":"expose_outcome"},null],"expose_outcome":["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, public disclosure is... complicated. Director Netherton is going to have opinions.","\n","^Agent 0x99: But I understand why you did it. People should know what ENTROPY is capable of. What they were willing to do.","\n","^Agent 0x99: Derek's in custody. The targeting lists are secured. And those 85 people who were going to die on Sunday? They're going to live.","\n","^Agent 0x99: That's what matters.","\n","ev",true,"/ev",{"VAR=":"derek_confronted","re":true},"#","^exit_conversation","/#","end",null],"global decl":["ev","str","^","/str",{"VAR=":"confrontation_approach"},false,{"VAR=":"derek_knows_safetynet"},false,{"VAR=":"derek_showed_remorse"},"str","^","/str",{"VAR=":"final_choice"},false,{"VAR=":"derek_confronted"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},false,{"VAR=":"evidence_collected"},false,{"VAR=":"found_casualty_projections"},false,{"VAR=":"ssh_flag_submitted"},false,{"VAR=":"linux_flag_submitted"},false,{"VAR=":"sudo_flag_submitted"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file diff --git a/scenarios/m01_first_contact/ink/m01_npc_maya.ink b/scenarios/m01_first_contact/ink/m01_npc_maya.ink index 7dd0fe0..cac61d4 100644 --- a/scenarios/m01_first_contact/ink/m01_npc_maya.ink +++ b/scenarios/m01_first_contact/ink/m01_npc_maya.ink @@ -93,6 +93,7 @@ Maya: They're planning to kill people. On purpose. They call it "Operation Shatt === operation_details === ~ discussed_operation = true +#unlock_task:inform_safetynet_operation_shatter Maya: Operation Shatter is a coordinated disinformation attack. diff --git a/scenarios/m01_first_contact/ink/m01_npc_maya.json b/scenarios/m01_first_contact/ink/m01_npc_maya.json index fa2b684..8463bbb 100644 --- a/scenarios/m01_first_contact/ink/m01_npc_maya.json +++ b/scenarios/m01_first_contact/ink/m01_npc_maya.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["#","^set_variable:talked_to_maya=true","/#","#","^complete_task:talk_to_maya","/#","ev",{"VAR?":"met_maya"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","ev",true,"/ev",{"VAR=":"met_maya","re":true},"ev",{"VAR?":"influence"},2,"+",{"VAR=":"influence","re":true},"/ev","^Maya: *looks up nervously* Oh! You startled me.","\n","^Maya: You're the... IT contractor, right? The security auditor?","\n",{"->":"first_meeting"},{"->":"start.11"},null]}],"nop","\n","ev",{"VAR?":"met_maya"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Maya: *glances at door* Is it safe to talk?","\n",{"->":"hub"},{"->":"start.17"},null]}],"nop","\n",null],"first_meeting":[["ev","str","^That's right. I'm reviewing security systems","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You seem nervous","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: *studies your face carefully*","\n","^Maya: Are you really here for a security audit? Or are you here because of my message?","\n",{"->":"reveal_check"},null],"c-1":["\n","ev",{"VAR?":"influence"},1,"+",{"VAR=":"influence","re":true},"/ev","^Maya: I have reason to be. Things aren't what they seem here.","\n",{"->":"reveal_check"},null]}],null],"reveal_check":[["ev","str","^What message?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^SAFETYNET sent me","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: The tip. To SAFETYNET. About Operation Shatter.","\n","^Maya: *pauses* If you don't know what I'm talking about, forget I said anything.","\n",["ev","str","^I'm from SAFETYNET","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Tell me more about this operation","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"revealed_informant","re":true},"ev",{"VAR?":"influence"},5,"+",{"VAR=":"influence","re":true},"/ev","^Maya: *visible relief* Thank god. I was starting to think no one would come.","\n",{"->":"informant_reveal"},null],"c-1":["\n","ev",{"VAR?":"influence"},2,"+",{"VAR=":"influence","re":true},"/ev","^Maya: Only if you're here to stop it. People are going to die.","\n",{"->":"operation_details"},null]}],null],"c-1":["\n","ev",true,"/ev",{"VAR=":"revealed_informant","re":true},"ev",{"VAR?":"influence"},5,"+",{"VAR=":"influence","re":true},"/ev","^Maya: *exhales* Finally. I've been waiting for weeks.","\n",{"->":"informant_reveal"},null]}],null],"informant_reveal":[["^Maya: I'm the one who contacted you. The anonymous tip.","\n","^Maya: I was hired as a content analyst. I thought we were doing marketing.","\n","^Maya: Then I started seeing the target lists. The psychological profiles. The projected casualties.","\n","^Maya: They're planning to kill people. On purpose. They call it \"Operation Shatter.\"","\n","ev","str","^Tell me everything","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Who's behind it?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"discussed_operation","re":true},{"->":"operation_details"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"warned_about_derek","re":true},{"->":"derek_intel"},null]}],null],"operation_details":[["ev",true,"/ev",{"VAR=":"discussed_operation","re":true},"^Maya: Operation Shatter is a coordinated disinformation attack.","\n","^Maya: They've profiled over two million people. Diabetics, elderly, people with anxiety disorders.","\n","^Maya: The plan is to send fake emergency messages—hospital closures, bank failures, government alerts.","\n","^Maya: The panic will cause deaths. Heart attacks, missed medications, accidents.","\n","^Maya: They've calculated it: 42 to 85 people will die in the first 24 hours.","\n","ev","str","^And they're okay with that?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^When does it launch?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: Derek—he's the one running it—he calls it \"education.\"","\n","^Maya: Says the deaths will teach people not to trust digital communications.","\n","^Maya: He's insane. But he believes every word.","\n",{"->":"hub"},null],"c-1":["\n","^Maya: Sunday. 6 AM. That's when the messages go out.","\n","^Maya: You have three days to stop it.","\n",{"->":"hub"},null]}],null],"derek_intel":[["ev",true,"/ev",{"VAR=":"warned_about_derek","re":true},"^Maya: Derek Lawson. Senior Marketing Manager. But he's not really marketing.","\n","^Maya: He's ENTROPY. Part of a cell called \"Social Fabric.\"","\n","^Maya: He reports to someone called \"The Architect.\" I've seen the emails.","\n","^Maya: Derek's the operations lead. He built the target lists, wrote the fake messages, coordinated with their technical people.","\n","ev","str","^Where's the evidence?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What about the others here?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: His office. His computer has the contingency plans.","\n","^Maya: His filing cabinet has the casualty projections. The code is his birthday—0419.","\n","^Maya: And the server room has the target database. Kevin has the keycard.","\n",{"->":"hub"},null],"c-1":["\n","^Maya: Kevin's innocent. He's suspicious of Derek but doesn't know the full picture.","\n","^Maya: Sarah just works reception. She doesn't know anything.","\n","^Maya: Patricia—the old manager—she figured it out. That's why they fired her.","\n",{"->":"hub"},null]}],null],"hub":[["ev","str","^Tell me about Operation Shatter","/str",{"VAR?":"discussed_operation"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^What can you tell me about Derek?","/str",{"VAR?":"warned_about_derek"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^What happened to Patricia?","/str",{"VAR?":"asked_about_patricia"},"!","/ev",{"*":".^.c-2","flg":5},"ev","str","^What should I do first?","/str",{"VAR?":"revealed_informant"},"/ev",{"*":".^.c-3","flg":5},"ev","str","^I need to keep investigating","/str","/ev",{"*":".^.c-4","flg":4},{"c-0":["\n",{"->":"operation_details"},null],"c-1":["\n",{"->":"derek_intel"},null],"c-2":["\n",{"->":"patricia_story"},null],"c-3":["\n",{"->":"tactical_advice"},null],"c-4":["\n","#","^exit_conversation","/#","^Maya: Be careful. Derek's paranoid. If he suspects you're onto him, he has a plan to frame Kevin for everything.","\n","^Maya: I've seen the contingency files. Check Derek's computer.","\n",{"->":"hub"},null]}],null],"patricia_story":[["ev",true,"/ev",{"VAR=":"asked_about_patricia","re":true},"^Maya: Patricia Wells. She was our department manager.","\n","^Maya: She noticed Derek's weird behavior. The late nights, the encrypted calls.","\n","^Maya: She started investigating. Kept notes in her office safe.","\n","^Maya: One day HR called her in. \"Performance issues.\" She was gone within an hour.","\n","^Maya: They didn't even let her take her briefcase. It's still in her office.","\n","ev","str","^What's in the briefcase?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^That's suspicious timing","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: Her investigation notes, I think. A timeline of how ENTROPY infiltrated the company.","\n","^Maya: The office is unlocked, but the briefcase is locked. Patricia took the key with her.","\n","^Maya: If you can pick the lock, there might be useful information inside.","\n",{"->":"hub"},null],"c-1":["\n","^Maya: Derek arranged it. I saw emails between him and HR.","\n","^Maya: Anyone who gets too close gets removed.","\n",{"->":"hub"},null]}],null],"tactical_advice":[["^Maya: Okay, here's what you need:","\n","^Maya: First, get into Derek's office. His spare key is in Patricia's old safe—she kept a copy.","\n","^Maya: The safe code is 0419. Derek's anniversary. He uses it for everything.","\n","^Maya: Second, check Derek's computer. The contingency plan to frame Kevin is right there.","\n","^Maya: Third, open his filing cabinet. Same code—0419. That's where the casualty projections are.","\n","^Maya: Fourth, get into the server room. Kevin has the keycard. The target database is there.","\n","^Maya: And if you can pick the lock on Patricia's briefcase, there's a timeline showing how long ENTROPY has been planning this.","\n","ev","str","^That's a lot to do","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'll get started","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: Operation Shatter launches Sunday. We don't have much time.","\n","^Maya: Oh, and there are VM systems in the server room. The attack infrastructure.","\n","^Maya: You'll need to collect evidence from there too. Submit any flags you find to prove we were inside their systems.","\n",{"->":"hub"},null],"c-1":["\n","#","^exit_conversation","/#","^Maya: Good luck. And... thank you. For coming.","\n","^Maya: I was starting to think no one cared about stopping this.","\n",{"->":"hub"},null]}],null],"global decl":["ev",0,{"VAR=":"influence"},false,{"VAR=":"met_maya"},false,{"VAR=":"revealed_informant"},false,{"VAR=":"warned_about_derek"},false,{"VAR=":"discussed_operation"},false,{"VAR=":"asked_about_patricia"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["#","^set_variable:talked_to_maya=true","/#","#","^complete_task:talk_to_maya","/#","ev",{"VAR?":"met_maya"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","ev",true,"/ev",{"VAR=":"met_maya","re":true},"ev",{"VAR?":"influence"},2,"+",{"VAR=":"influence","re":true},"/ev","^Maya: *looks up nervously* Oh! You startled me.","\n","^Maya: You're the... IT contractor, right? The security auditor?","\n",{"->":"first_meeting"},{"->":"start.11"},null]}],"nop","\n","ev",{"VAR?":"met_maya"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Maya: *glances at door* Is it safe to talk?","\n",{"->":"hub"},{"->":"start.17"},null]}],"nop","\n",null],"first_meeting":[["ev","str","^That's right. I'm reviewing security systems","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^You seem nervous","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: *studies your face carefully*","\n","^Maya: Are you really here for a security audit? Or are you here because of my message?","\n",{"->":"reveal_check"},null],"c-1":["\n","ev",{"VAR?":"influence"},1,"+",{"VAR=":"influence","re":true},"/ev","^Maya: I have reason to be. Things aren't what they seem here.","\n",{"->":"reveal_check"},null]}],null],"reveal_check":[["ev","str","^What message?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^SAFETYNET sent me","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: The tip. To SAFETYNET. About Operation Shatter.","\n","^Maya: *pauses* If you don't know what I'm talking about, forget I said anything.","\n",["ev","str","^I'm from SAFETYNET","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Tell me more about this operation","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"revealed_informant","re":true},"ev",{"VAR?":"influence"},5,"+",{"VAR=":"influence","re":true},"/ev","^Maya: *visible relief* Thank god. I was starting to think no one would come.","\n",{"->":"informant_reveal"},null],"c-1":["\n","ev",{"VAR?":"influence"},2,"+",{"VAR=":"influence","re":true},"/ev","^Maya: Only if you're here to stop it. People are going to die.","\n",{"->":"operation_details"},null]}],null],"c-1":["\n","ev",true,"/ev",{"VAR=":"revealed_informant","re":true},"ev",{"VAR?":"influence"},5,"+",{"VAR=":"influence","re":true},"/ev","^Maya: *exhales* Finally. I've been waiting for weeks.","\n",{"->":"informant_reveal"},null]}],null],"informant_reveal":[["^Maya: I'm the one who contacted you. The anonymous tip.","\n","^Maya: I was hired as a content analyst. I thought we were doing marketing.","\n","^Maya: Then I started seeing the target lists. The psychological profiles. The projected casualties.","\n","^Maya: They're planning to kill people. On purpose. They call it \"Operation Shatter.\"","\n","ev","str","^Tell me everything","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Who's behind it?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"discussed_operation","re":true},{"->":"operation_details"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"warned_about_derek","re":true},{"->":"derek_intel"},null]}],null],"operation_details":[["ev",true,"/ev",{"VAR=":"discussed_operation","re":true},"#","^unlock_task:inform_safetynet_operation_shatter","/#","^Maya: Operation Shatter is a coordinated disinformation attack.","\n","^Maya: They've profiled over two million people. Diabetics, elderly, people with anxiety disorders.","\n","^Maya: The plan is to send fake emergency messages—hospital closures, bank failures, government alerts.","\n","^Maya: The panic will cause deaths. Heart attacks, missed medications, accidents.","\n","^Maya: They've calculated it: 42 to 85 people will die in the first 24 hours.","\n","ev","str","^And they're okay with that?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^When does it launch?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: Derek—he's the one running it—he calls it \"education.\"","\n","^Maya: Says the deaths will teach people not to trust digital communications.","\n","^Maya: He's insane. But he believes every word.","\n",{"->":"hub"},null],"c-1":["\n","^Maya: Sunday. 6 AM. That's when the messages go out.","\n","^Maya: You have three days to stop it.","\n",{"->":"hub"},null]}],null],"derek_intel":[["ev",true,"/ev",{"VAR=":"warned_about_derek","re":true},"^Maya: Derek Lawson. Senior Marketing Manager. But he's not really marketing.","\n","^Maya: He's ENTROPY. Part of a cell called \"Social Fabric.\"","\n","^Maya: He reports to someone called \"The Architect.\" I've seen the emails.","\n","^Maya: Derek's the operations lead. He built the target lists, wrote the fake messages, coordinated with their technical people.","\n","ev","str","^Where's the evidence?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What about the others here?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: His office. His computer has the contingency plans.","\n","^Maya: His filing cabinet has the casualty projections. The code is his birthday—0419.","\n","^Maya: And the server room has the target database. Kevin has the keycard.","\n",{"->":"hub"},null],"c-1":["\n","^Maya: Kevin's innocent. He's suspicious of Derek but doesn't know the full picture.","\n","^Maya: Sarah just works reception. She doesn't know anything.","\n","^Maya: Patricia—the old manager—she figured it out. That's why they fired her.","\n",{"->":"hub"},null]}],null],"hub":[["ev","str","^Tell me about Operation Shatter","/str",{"VAR?":"discussed_operation"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^What can you tell me about Derek?","/str",{"VAR?":"warned_about_derek"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^What happened to Patricia?","/str",{"VAR?":"asked_about_patricia"},"!","/ev",{"*":".^.c-2","flg":5},"ev","str","^What should I do first?","/str",{"VAR?":"revealed_informant"},"/ev",{"*":".^.c-3","flg":5},"ev","str","^I need to keep investigating","/str","/ev",{"*":".^.c-4","flg":4},{"c-0":["\n",{"->":"operation_details"},null],"c-1":["\n",{"->":"derek_intel"},null],"c-2":["\n",{"->":"patricia_story"},null],"c-3":["\n",{"->":"tactical_advice"},null],"c-4":["\n","#","^exit_conversation","/#","^Maya: Be careful. Derek's paranoid. If he suspects you're onto him, he has a plan to frame Kevin for everything.","\n","^Maya: I've seen the contingency files. Check Derek's computer.","\n",{"->":"hub"},null]}],null],"patricia_story":[["ev",true,"/ev",{"VAR=":"asked_about_patricia","re":true},"^Maya: Patricia Wells. She was our department manager.","\n","^Maya: She noticed Derek's weird behavior. The late nights, the encrypted calls.","\n","^Maya: She started investigating. Kept notes in her office safe.","\n","^Maya: One day HR called her in. \"Performance issues.\" She was gone within an hour.","\n","^Maya: They didn't even let her take her briefcase. It's still in her office.","\n","ev","str","^What's in the briefcase?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^That's suspicious timing","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: Her investigation notes, I think. A timeline of how ENTROPY infiltrated the company.","\n","^Maya: The office is unlocked, but the briefcase is locked. Patricia took the key with her.","\n","^Maya: If you can pick the lock, there might be useful information inside.","\n",{"->":"hub"},null],"c-1":["\n","^Maya: Derek arranged it. I saw emails between him and HR.","\n","^Maya: Anyone who gets too close gets removed.","\n",{"->":"hub"},null]}],null],"tactical_advice":[["^Maya: Okay, here's what you need:","\n","^Maya: First, get into Derek's office. His spare key is in Patricia's old safe—she kept a copy.","\n","^Maya: The safe code is 0419. Derek's anniversary. He uses it for everything.","\n","^Maya: Second, check Derek's computer. The contingency plan to frame Kevin is right there.","\n","^Maya: Third, open his filing cabinet. Same code—0419. That's where the casualty projections are.","\n","^Maya: Fourth, get into the server room. Kevin has the keycard. The target database is there.","\n","^Maya: And if you can pick the lock on Patricia's briefcase, there's a timeline showing how long ENTROPY has been planning this.","\n","ev","str","^That's a lot to do","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'll get started","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Maya: Operation Shatter launches Sunday. We don't have much time.","\n","^Maya: Oh, and there are VM systems in the server room. The attack infrastructure.","\n","^Maya: You'll need to collect evidence from there too. Submit any flags you find to prove we were inside their systems.","\n",{"->":"hub"},null],"c-1":["\n","#","^exit_conversation","/#","^Maya: Good luck. And... thank you. For coming.","\n","^Maya: I was starting to think no one cared about stopping this.","\n",{"->":"hub"},null]}],null],"global decl":["ev",0,{"VAR=":"influence"},false,{"VAR=":"met_maya"},false,{"VAR=":"revealed_informant"},false,{"VAR=":"warned_about_derek"},false,{"VAR=":"discussed_operation"},false,{"VAR=":"asked_about_patricia"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file diff --git a/scenarios/m01_first_contact/ink/m01_opening_briefing.ink b/scenarios/m01_first_contact/ink/m01_opening_briefing.ink index 7c2b2bc..28c5ce1 100644 --- a/scenarios/m01_first_contact/ink/m01_opening_briefing.ink +++ b/scenarios/m01_first_contact/ink/m01_opening_briefing.ink @@ -2,15 +2,11 @@ // Mission 1: First Contact - Opening Briefing // Act 1: Interactive Cutscene // Agent 0x99 "Haxolottle" briefs Agent 0x00 -// UPDATED: Operation Shatter - Clear evil threat -// UPDATED: Removed vague "approach" choice - outcomes -// now based on actual player decisions +// UPDATED: Shortened intro - Operation Shatter discovered through investigation // ================================================ // Variables for tracking what player asked about (affects debrief) VAR asked_about_stakes = false -VAR asked_about_casualties = false -VAR asked_about_architect = false VAR asked_about_derek = false VAR asked_about_maya = false VAR mission_accepted = false @@ -25,12 +21,12 @@ VAR player_name = "Agent 0x00" === start === Agent 0x99: {player_name}, thanks for getting here on short notice. -Agent 0x99: We have a situation developing at Viral Dynamics Media. And it's worse than we initially thought. +Agent 0x99: We have a situation at Viral Dynamics Media. ENTROPY's Social Fabric cell is operating there. -+ [What's the situation?] ++ [What are they doing?] -> briefing_threat + [I'm ready. What's the mission?] - -> briefing_threat + -> mission_objectives + [How urgent is this?] ~ asked_about_stakes = true -> urgency_explanation @@ -40,145 +36,47 @@ Agent 0x99: We have a situation developing at Viral Dynamics Media. And it's wor // ================================================ === urgency_explanation === -Agent 0x99: We're 72 hours from a mass casualty event. +Agent 0x99: Time-sensitive. We received an anonymous tip from someone inside who suspects ENTROPY activity. -Agent 0x99: ENTROPY's Social Fabric cell is operating inside Viral Dynamics. But they're not just running disinformation campaigns. - -Agent 0x99: They're planning something called "Operation Shatter." +Agent 0x99: Whatever they're planning, it's active. And it's dangerous. -> briefing_threat // ================================================ -// THREAT BRIEFING - OPERATION SHATTER +// THREAT BRIEFING // ================================================ === briefing_threat === -Agent 0x99: Three weeks ago, our AI flagged something bigger than election interference. +Agent 0x99: Three weeks ago, we flagged suspicious activity at Viral Dynamics—far beyond typical disinformation work. -Agent 0x99: Social Fabric has spent three months collecting psychological profiles. Detailed vulnerability assessments on over two million people in the region. +Agent 0x99: Our intel suggests they're coordinating something larger. Data collection, psychological profiling, attack infrastructure. -+ [What kind of profiles?] - -> profile_details -+ [What are they planning to do with them?] - -> operation_shatter -+ [Two million people?] - -> profile_scale +Agent 0x99: The details are unclear, but it's active and operational. -// ================================================ -// PROFILE DETAILS -// ================================================ - -=== profile_details === -Agent 0x99: Medical records. Prescription histories. Financial stress indicators. Documented anxiety disorders. - -Agent 0x99: They've identified who has insulin dependencies. Who relies on weekly dialysis. Who lives alone without family support. - -Agent 0x99: This isn't demographic marketing data. This is a targeting database for psychological warfare. - -+ [What are they going to do with it?] - -> operation_shatter -+ [How did they get this data?] - -> data_source - -=== data_source === -Agent 0x99: The usual methods—breached insurance databases, compromised pharmacy systems, scraped social media. - -Agent 0x99: But the concerning part isn't how they got it. It's what they're planning to do with it. - --> operation_shatter - -=== profile_scale === -Agent 0x99: 2.3 million profiles, to be precise. And each one includes a vulnerability score. - -Agent 0x99: They've categorized people by how likely they are to panic. To make dangerous decisions. To die if they receive the wrong message at the wrong time. - --> operation_shatter - -// ================================================ -// OPERATION SHATTER - THE EVIL PLAN -// ================================================ - -=== operation_shatter === -Agent 0x99: We intercepted fragments of something called "Operation Shatter." - -Agent 0x99: Simultaneous fake crisis messages. Personalized. Targeted at the most vulnerable populations. - -+ [What kind of crisis messages?] - -> crisis_details -+ [What's the goal?] - -> entropy_goal - -=== crisis_details === -Agent 0x99: Fake hospital system collapses. "Your appointment has been cancelled. All patient records corrupted." - -Agent 0x99: Fake bank failures. "Your funds are frozen due to suspected breach." - -Agent 0x99: Fake infrastructure attacks. "Water contaminated. Power grid compromised." - -Agent 0x99: All delivered simultaneously to people they've profiled as most likely to panic. - -+ [That would cause mass chaos...] - -> casualty_projections -+ [People could die from that.] - ~ asked_about_casualties = true - -> casualty_projections - -=== entropy_goal === -Agent 0x99: Social Fabric's philosophy is "truth is obsolete, only narrative matters." - -Agent 0x99: But this goes beyond philosophy. They want to permanently destroy public trust in digital communications. - -Agent 0x99: And they're willing to kill people to make their point. - --> casualty_projections - -// ================================================ -// CASUALTY PROJECTIONS - THE HORROR -// ================================================ - -=== casualty_projections === -Agent 0x99: {player_name}, I need you to understand what we're dealing with. - -Agent 0x99: We recovered fragments of their impact assessment. They've calculated projected casualties. - -+ [How many?] - ~ asked_about_casualties = true - -> casualty_numbers -+ [They're planning to kill people?] - ~ asked_about_casualties = true - -> casualty_numbers - -=== casualty_numbers === -Agent 0x99: Their own estimates: 42 to 85 direct deaths in the first 24 hours. - -Agent 0x99: Diabetics who skip insulin because they believe hospitals are compromised. Elderly who have heart attacks from fake bank failure notices. Traffic fatalities from evacuation panic. - -Agent 0x99: And they consider these deaths... acceptable. "Educational," they call it. - -+ [That's monstrous.] - -> villain_philosophy -+ [We have to stop this.] - -> mission_objectives - -=== villain_philosophy === -Agent 0x99: The fragment we recovered includes a note from someone called "The Architect." - -Agent 0x99: "These are not victims. They are examples. Their deaths will save thousands who learn the lesson: Trust nothing. Verify everything." - -Agent 0x99: They're true believers, {player_name}. They think murdering people is "teaching a lesson." - -+ [Who's The Architect?] - ~ asked_about_architect = true - -> architect_mention ++ [What kind of data?] + -> data_concerns ++ [Who's running the operation?] + ~ asked_about_derek = true + -> operative_identity + [What's my mission?] -> mission_objectives -=== architect_mention === -Agent 0x99: We don't know yet. Someone coordinating ENTROPY cells at a strategic level. +// ================================================ +// DATA CONCERNS +// ================================================ -Agent 0x99: But that's a problem for later. Right now, we stop Operation Shatter. +=== data_concerns === +Agent 0x99: Large-scale data aggregation. Personal profiles, vulnerability assessments. --> mission_objectives +Agent 0x99: Whatever they're building, it's targeted and sophisticated. + +Agent 0x99: Your job is to get inside and find out what they're actually planning. + ++ [Who's running this?] + ~ asked_about_derek = true + -> operative_identity ++ [What's my mission?] + -> mission_objectives // ================================================ // MISSION OBJECTIVES @@ -187,11 +85,11 @@ Agent 0x99: But that's a problem for later. Right now, we stop Operation Shatter === mission_objectives === Agent 0x99: Your objectives: -Agent 0x99: One—Find the complete Operation Shatter documentation. Target lists, message templates, deployment timeline. +Agent 0x99: One—Infiltrate Viral Dynamics and identify what ENTROPY is planning. -Agent 0x99: Two—Identify all ENTROPY operatives inside Viral Dynamics. +Agent 0x99: Two—Gather evidence of their operations and identify all operatives. -Agent 0x99: Three—Stop the operation before Sunday. That's when they deploy. +Agent 0x99: Three—Report back with actionable intelligence so we can stop whatever they're building. + [How do I get inside?] -> cover_story @@ -208,23 +106,14 @@ Agent 0x99: Three—Stop the operation before Sunday. That's when they deploy. === operative_identity === Agent 0x99: Derek Lawson. Senior Marketing Manager at Viral Dynamics. -Agent 0x99: Perfect cover—his job is literally manipulating narratives for clients. He's been there three months, which aligns with when the data collection started. +Agent 0x99: He's been there three months. Timeline matches when the suspicious activity started. -Agent 0x99: He's not just running operations. He authored parts of the casualty projections we intercepted. +Agent 0x99: He's ENTROPY, but we don't know the full scope of what he's running. -+ [He calculated how many people would die?] - -> derek_author + [How do I get to him?] -> cover_story - -=== derek_author === -Agent 0x99: His signature is on the medical dependency targeting document. - -Agent 0x99: He personally identified which populations would be most vulnerable to fake hospital closure messages. - -Agent 0x99: This isn't a foot soldier following orders. He's an architect of mass casualties. - --> cover_story ++ [What's my mission?] + -> mission_objectives // ================================================ // COVER STORY @@ -243,25 +132,25 @@ Agent 0x99: Completely legitimate. Viral Dynamics actually requested the audit w === technical_access === Agent 0x99: Server room, computers, network infrastructure—all fair game under your cover. -Agent 0x99: That's where you'll find the Operation Shatter files. Derek keeps them encrypted, but they're there. +Agent 0x99: That's where you'll find evidence of what Derek's planning. Look for encrypted files, attack infrastructure, target databases. -> innocent_warning === employee_interaction === Agent 0x99: Most employees at Viral Dynamics have no idea what's happening. -Agent 0x99: They think they work at a marketing agency. The Operation Shatter team is isolated—maybe three or four people total. +Agent 0x99: They think they work at a marketing agency. The ENTROPY team is isolated—probably just a few people. -Agent 0x99: Everyone else is innocent. They'll go home to families tonight with no idea their company was planning to kill people. +Agent 0x99: Everyone else is innocent. Keep collateral damage to zero. -> innocent_warning === innocent_warning === -Agent 0x99: One more thing: there's a journalist there named Maya Chen. +Agent 0x99: One more thing: there's someone inside named Maya Chen. -Agent 0x99: She contacted us anonymously. Suspected something was wrong but doesn't know the full scope. She thinks it's corporate fraud, not mass murder. +Agent 0x99: She contacted us anonymously. Suspected something was wrong but doesn't have the full picture. -Agent 0x99: Protect her identity. If Derek finds out she tipped us off, she's in danger. +Agent 0x99: Find her. She might have critical information. And protect her identity—if Derek finds out she tipped us off, she's in danger. ~ asked_about_maya = true @@ -286,7 +175,7 @@ Agent 0x99: Your contractor kit has lockpicks, RFID cloner, and analysis tools. Agent 0x99: Everything you need looks like standard IT equipment. Stay in character. -Agent 0x99: And {player_name}—when you find those casualty projections, photograph everything. We need complete documentation. +Agent 0x99: And {player_name}—document everything you find. We need complete evidence of whatever they're planning. -> final_instructions @@ -295,9 +184,9 @@ Agent 0x99: And {player_name}—when you find those casualty projections, photog // ================================================ === final_instructions === -Agent 0x99: Remember—Derek doesn't know we're onto Operation Shatter. He thinks this is just an IT audit. +Agent 0x99: Remember—Derek doesn't know we're onto him. This is just a routine IT audit as far as he's concerned. -Agent 0x99: Use that advantage. Gather evidence before confronting anyone. +Agent 0x99: Use that advantage. Gather intelligence and evidence before making any moves. + [Any specific advice?] -> specific_advice @@ -330,11 +219,11 @@ Agent 0x99: And Maya Chen—the journalist who contacted us. Be careful around h // ================================================ === deployment === -Agent 0x99: {player_name}, I won't lie. This is bigger than a typical first mission. +Agent 0x99: {player_name}, get inside, find out what ENTROPY is planning, and report back. -Agent 0x99: But you're ready. And those 85 people who might die on Sunday? They're counting on you. Even if they don't know it. +Agent 0x99: Talk to Maya. She's your best lead. Whatever Derek's building, she'll have seen pieces of it. -Agent 0x99: Stop Operation Shatter. Find the evidence. And make sure Derek Lawson never hurts anyone. +Agent 0x99: Once you know what we're dealing with, call me. We'll figure out how to stop it. ~ mission_accepted = true diff --git a/scenarios/m01_first_contact/ink/m01_opening_briefing.json b/scenarios/m01_first_contact/ink/m01_opening_briefing.json index c91055c..a7084f8 100644 --- a/scenarios/m01_first_contact/ink/m01_opening_briefing.json +++ b/scenarios/m01_first_contact/ink/m01_opening_briefing.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":[["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, thanks for getting here on short notice.","\n","^Agent 0x99: We have a situation developing at Viral Dynamics Media. And it's worse than we initially thought.","\n","ev","str","^What's the situation?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready. What's the mission?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^How urgent is this?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"briefing_threat"},null],"c-1":["\n",{"->":"briefing_threat"},null],"c-2":["\n","ev",true,"/ev",{"VAR=":"asked_about_stakes","re":true},{"->":"urgency_explanation"},null]}],null],"urgency_explanation":["^Agent 0x99: We're 72 hours from a mass casualty event.","\n","^Agent 0x99: ENTROPY's Social Fabric cell is operating inside Viral Dynamics. But they're not just running disinformation campaigns.","\n","^Agent 0x99: They're planning something called \"Operation Shatter.\"","\n",{"->":"briefing_threat"},null],"briefing_threat":[["^Agent 0x99: Three weeks ago, our AI flagged something bigger than election interference.","\n","^Agent 0x99: Social Fabric has spent three months collecting psychological profiles. Detailed vulnerability assessments on over two million people in the region.","\n","ev","str","^What kind of profiles?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What are they planning to do with them?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Two million people?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"profile_details"},null],"c-1":["\n",{"->":"operation_shatter"},null],"c-2":["\n",{"->":"profile_scale"},null]}],null],"profile_details":[["^Agent 0x99: Medical records. Prescription histories. Financial stress indicators. Documented anxiety disorders.","\n","^Agent 0x99: They've identified who has insulin dependencies. Who relies on weekly dialysis. Who lives alone without family support.","\n","^Agent 0x99: This isn't demographic marketing data. This is a targeting database for psychological warfare.","\n","ev","str","^What are they going to do with it?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^How did they get this data?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"operation_shatter"},null],"c-1":["\n",{"->":"data_source"},null]}],null],"data_source":["^Agent 0x99: The usual methods—breached insurance databases, compromised pharmacy systems, scraped social media.","\n","^Agent 0x99: But the concerning part isn't how they got it. It's what they're planning to do with it.","\n",{"->":"operation_shatter"},null],"profile_scale":["^Agent 0x99: 2.3 million profiles, to be precise. And each one includes a vulnerability score.","\n","^Agent 0x99: They've categorized people by how likely they are to panic. To make dangerous decisions. To die if they receive the wrong message at the wrong time.","\n",{"->":"operation_shatter"},null],"operation_shatter":[["^Agent 0x99: We intercepted fragments of something called \"Operation Shatter.\"","\n","^Agent 0x99: Simultaneous fake crisis messages. Personalized. Targeted at the most vulnerable populations.","\n","ev","str","^What kind of crisis messages?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What's the goal?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"crisis_details"},null],"c-1":["\n",{"->":"entropy_goal"},null]}],null],"crisis_details":[["^Agent 0x99: Fake hospital system collapses. \"Your appointment has been cancelled. All patient records corrupted.\"","\n","^Agent 0x99: Fake bank failures. \"Your funds are frozen due to suspected breach.\"","\n","^Agent 0x99: Fake infrastructure attacks. \"Water contaminated. Power grid compromised.\"","\n","^Agent 0x99: All delivered simultaneously to people they've profiled as most likely to panic.","\n","ev","str","^That would cause mass chaos...","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^People could die from that.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"casualty_projections"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"asked_about_casualties","re":true},{"->":"casualty_projections"},null]}],null],"entropy_goal":["^Agent 0x99: Social Fabric's philosophy is \"truth is obsolete, only narrative matters.\"","\n","^Agent 0x99: But this goes beyond philosophy. They want to permanently destroy public trust in digital communications.","\n","^Agent 0x99: And they're willing to kill people to make their point.","\n",{"->":"casualty_projections"},null],"casualty_projections":[["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, I need you to understand what we're dealing with.","\n","^Agent 0x99: We recovered fragments of their impact assessment. They've calculated projected casualties.","\n","ev","str","^How many?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^They're planning to kill people?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"asked_about_casualties","re":true},{"->":"casualty_numbers"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"asked_about_casualties","re":true},{"->":"casualty_numbers"},null]}],null],"casualty_numbers":[["^Agent 0x99: Their own estimates: 42 to 85 direct deaths in the first 24 hours.","\n","^Agent 0x99: Diabetics who skip insulin because they believe hospitals are compromised. Elderly who have heart attacks from fake bank failure notices. Traffic fatalities from evacuation panic.","\n","^Agent 0x99: And they consider these deaths... acceptable. \"Educational,\" they call it.","\n","ev","str","^That's monstrous.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^We have to stop this.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"villain_philosophy"},null],"c-1":["\n",{"->":"mission_objectives"},null]}],null],"villain_philosophy":[["^Agent 0x99: The fragment we recovered includes a note from someone called \"The Architect.\"","\n","^Agent 0x99: \"These are not victims. They are examples. Their deaths will save thousands who learn the lesson: Trust nothing. Verify everything.\"","\n","^Agent 0x99: They're true believers, ","ev",{"VAR?":"player_name"},"out","/ev","^. They think murdering people is \"teaching a lesson.\"","\n","ev","str","^Who's The Architect?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What's my mission?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"asked_about_architect","re":true},{"->":"architect_mention"},null],"c-1":["\n",{"->":"mission_objectives"},null]}],null],"architect_mention":["^Agent 0x99: We don't know yet. Someone coordinating ENTROPY cells at a strategic level.","\n","^Agent 0x99: But that's a problem for later. Right now, we stop Operation Shatter.","\n",{"->":"mission_objectives"},null],"mission_objectives":[["^Agent 0x99: Your objectives:","\n","^Agent 0x99: One—Find the complete Operation Shatter documentation. Target lists, message templates, deployment timeline.","\n","^Agent 0x99: Two—Identify all ENTROPY operatives inside Viral Dynamics.","\n","^Agent 0x99: Three—Stop the operation before Sunday. That's when they deploy.","\n","ev","str","^How do I get inside?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Who's the primary target?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^What resources do I have?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"cover_story"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"asked_about_derek","re":true},{"->":"operative_identity"},null],"c-2":["\n",{"->":"resources_available"},null]}],null],"operative_identity":[["^Agent 0x99: Derek Lawson. Senior Marketing Manager at Viral Dynamics.","\n","^Agent 0x99: Perfect cover—his job is literally manipulating narratives for clients. He's been there three months, which aligns with when the data collection started.","\n","^Agent 0x99: He's not just running operations. He authored parts of the casualty projections we intercepted.","\n","ev","str","^He calculated how many people would die?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^How do I get to him?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"derek_author"},null],"c-1":["\n",{"->":"cover_story"},null]}],null],"derek_author":["^Agent 0x99: His signature is on the medical dependency targeting document.","\n","^Agent 0x99: He personally identified which populations would be most vulnerable to fake hospital closure messages.","\n","^Agent 0x99: This isn't a foot soldier following orders. He's an architect of mass casualties.","\n",{"->":"cover_story"},null],"cover_story":[["^Agent 0x99: You're going in as an IT contractor hired to audit their network security.","\n","^Agent 0x99: Completely legitimate. Viral Dynamics actually requested the audit weeks ago. We just... made sure we got the contract.","\n","ev","str","^So I'll have access to technical systems","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What about the employees?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"technical_access"},null],"c-1":["\n",{"->":"employee_interaction"},null]}],null],"technical_access":["^Agent 0x99: Server room, computers, network infrastructure—all fair game under your cover.","\n","^Agent 0x99: That's where you'll find the Operation Shatter files. Derek keeps them encrypted, but they're there.","\n",{"->":"innocent_warning"},null],"employee_interaction":["^Agent 0x99: Most employees at Viral Dynamics have no idea what's happening.","\n","^Agent 0x99: They think they work at a marketing agency. The Operation Shatter team is isolated—maybe three or four people total.","\n","^Agent 0x99: Everyone else is innocent. They'll go home to families tonight with no idea their company was planning to kill people.","\n",{"->":"innocent_warning"},null],"innocent_warning":["^Agent 0x99: One more thing: there's a journalist there named Maya Chen.","\n","^Agent 0x99: She contacted us anonymously. Suspected something was wrong but doesn't know the full scope. She thinks it's corporate fraud, not mass murder.","\n","^Agent 0x99: Protect her identity. If Derek finds out she tipped us off, she's in danger.","\n","ev",true,"/ev",{"VAR=":"asked_about_maya","re":true},{"->":"resources_available"},null],"resources_available":[["^Agent 0x99: You'll have phone comms with me throughout. I'll provide guidance as needed.","\n","^Agent 0x99: There's a SAFETYNET drop-site terminal in their server room for submitting intercepted intelligence.","\n","ev","str","^What about tools?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready to go","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"tools_discussion"},null],"c-1":["\n",{"->":"final_instructions"},null]}],null],"tools_discussion":["^Agent 0x99: Your contractor kit has lockpicks, RFID cloner, and analysis tools.","\n","^Agent 0x99: Everything you need looks like standard IT equipment. Stay in character.","\n","^Agent 0x99: And ","ev",{"VAR?":"player_name"},"out","/ev","^—when you find those casualty projections, photograph everything. We need complete documentation.","\n",{"->":"final_instructions"},null],"final_instructions":[["^Agent 0x99: Remember—Derek doesn't know we're onto Operation Shatter. He thinks this is just an IT audit.","\n","^Agent 0x99: Use that advantage. Gather evidence before confronting anyone.","\n","ev","str","^Any specific advice?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready to deploy","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"specific_advice"},null],"c-1":["\n",{"->":"deployment"},null]}],null],"specific_advice":[["^Agent 0x99: The IT manager—Kevin Park—is your entry point. Build rapport with him.","\n","^Agent 0x99: He's not ENTROPY, just overworked and underpaid. He'll appreciate competent help and give you access.","\n","ev","str","^Anyone else I should know about?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Got it. Ready to go","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"other_npcs"},null],"c-1":["\n",{"->":"deployment"},null]}],null],"other_npcs":["^Agent 0x99: Sarah Martinez is the receptionist. Professional, friendly. Don't give her any reason to flag you.","\n","^Agent 0x99: And Maya Chen—the journalist who contacted us. Be careful around her. Derek might be watching who she talks to.","\n",{"->":"deployment"},null],"deployment":["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, I won't lie. This is bigger than a typical first mission.","\n","^Agent 0x99: But you're ready. And those 85 people who might die on Sunday? They're counting on you. Even if they don't know it.","\n","^Agent 0x99: Stop Operation Shatter. Find the evidence. And make sure Derek Lawson never hurts anyone.","\n","ev",true,"/ev",{"VAR=":"mission_accepted","re":true},"#","^exit_conversation","/#","end",null],"global decl":["ev",false,{"VAR=":"asked_about_stakes"},false,{"VAR=":"asked_about_casualties"},false,{"VAR=":"asked_about_architect"},false,{"VAR=":"asked_about_derek"},false,{"VAR=":"asked_about_maya"},false,{"VAR=":"mission_accepted"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":[["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, thanks for getting here on short notice.","\n","^Agent 0x99: We have a situation at Viral Dynamics Media. ENTROPY's Social Fabric cell is operating there.","\n","ev","str","^What are they doing?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready. What's the mission?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^How urgent is this?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"briefing_threat"},null],"c-1":["\n",{"->":"mission_objectives"},null],"c-2":["\n","ev",true,"/ev",{"VAR=":"asked_about_stakes","re":true},{"->":"urgency_explanation"},null]}],null],"urgency_explanation":["^Agent 0x99: Time-sensitive. We received an anonymous tip from someone inside who suspects ENTROPY activity.","\n","^Agent 0x99: Whatever they're planning, it's active. And it's dangerous.","\n",{"->":"briefing_threat"},null],"briefing_threat":[["^Agent 0x99: Three weeks ago, we flagged suspicious activity at Viral Dynamics—far beyond typical disinformation work.","\n","^Agent 0x99: Our intel suggests they're coordinating something larger. Data collection, psychological profiling, attack infrastructure.","\n","^Agent 0x99: The details are unclear, but it's active and operational.","\n","ev","str","^What kind of data?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Who's running the operation?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^What's my mission?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"data_concerns"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"asked_about_derek","re":true},{"->":"operative_identity"},null],"c-2":["\n",{"->":"mission_objectives"},null]}],null],"data_concerns":[["^Agent 0x99: Large-scale data aggregation. Personal profiles, vulnerability assessments.","\n","^Agent 0x99: Whatever they're building, it's targeted and sophisticated.","\n","^Agent 0x99: Your job is to get inside and find out what they're actually planning.","\n","ev","str","^Who's running this?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What's my mission?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","ev",true,"/ev",{"VAR=":"asked_about_derek","re":true},{"->":"operative_identity"},null],"c-1":["\n",{"->":"mission_objectives"},null]}],null],"mission_objectives":[["^Agent 0x99: Your objectives:","\n","^Agent 0x99: One—Infiltrate Viral Dynamics and identify what ENTROPY is planning.","\n","^Agent 0x99: Two—Gather evidence of their operations and identify all operatives.","\n","^Agent 0x99: Three—Report back with actionable intelligence so we can stop whatever they're building.","\n","ev","str","^How do I get inside?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Who's the primary target?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^What resources do I have?","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"cover_story"},null],"c-1":["\n","ev",true,"/ev",{"VAR=":"asked_about_derek","re":true},{"->":"operative_identity"},null],"c-2":["\n",{"->":"resources_available"},null]}],null],"operative_identity":[["^Agent 0x99: Derek Lawson. Senior Marketing Manager at Viral Dynamics.","\n","^Agent 0x99: He's been there three months. Timeline matches when the suspicious activity started.","\n","^Agent 0x99: He's ENTROPY, but we don't know the full scope of what he's running.","\n","ev","str","^How do I get to him?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What's my mission?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"cover_story"},null],"c-1":["\n",{"->":"mission_objectives"},null]}],null],"cover_story":[["^Agent 0x99: You're going in as an IT contractor hired to audit their network security.","\n","^Agent 0x99: Completely legitimate. Viral Dynamics actually requested the audit weeks ago. We just... made sure we got the contract.","\n","ev","str","^So I'll have access to technical systems","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What about the employees?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"technical_access"},null],"c-1":["\n",{"->":"employee_interaction"},null]}],null],"technical_access":["^Agent 0x99: Server room, computers, network infrastructure—all fair game under your cover.","\n","^Agent 0x99: That's where you'll find evidence of what Derek's planning. Look for encrypted files, attack infrastructure, target databases.","\n",{"->":"innocent_warning"},null],"employee_interaction":["^Agent 0x99: Most employees at Viral Dynamics have no idea what's happening.","\n","^Agent 0x99: They think they work at a marketing agency. The ENTROPY team is isolated—probably just a few people.","\n","^Agent 0x99: Everyone else is innocent. Keep collateral damage to zero.","\n",{"->":"innocent_warning"},null],"innocent_warning":["^Agent 0x99: One more thing: there's someone inside named Maya Chen.","\n","^Agent 0x99: She contacted us anonymously. Suspected something was wrong but doesn't have the full picture.","\n","^Agent 0x99: Find her. She might have critical information. And protect her identity—if Derek finds out she tipped us off, she's in danger.","\n","ev",true,"/ev",{"VAR=":"asked_about_maya","re":true},{"->":"resources_available"},null],"resources_available":[["^Agent 0x99: You'll have phone comms with me throughout. I'll provide guidance as needed.","\n","^Agent 0x99: There's a SAFETYNET drop-site terminal in their server room for submitting intercepted intelligence.","\n","ev","str","^What about tools?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready to go","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"tools_discussion"},null],"c-1":["\n",{"->":"final_instructions"},null]}],null],"tools_discussion":["^Agent 0x99: Your contractor kit has lockpicks, RFID cloner, and analysis tools.","\n","^Agent 0x99: Everything you need looks like standard IT equipment. Stay in character.","\n","^Agent 0x99: And ","ev",{"VAR?":"player_name"},"out","/ev","^—document everything you find. We need complete evidence of whatever they're planning.","\n",{"->":"final_instructions"},null],"final_instructions":[["^Agent 0x99: Remember—Derek doesn't know we're onto him. This is just a routine IT audit as far as he's concerned.","\n","^Agent 0x99: Use that advantage. Gather intelligence and evidence before making any moves.","\n","ev","str","^Any specific advice?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready to deploy","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"specific_advice"},null],"c-1":["\n",{"->":"deployment"},null]}],null],"specific_advice":[["^Agent 0x99: The IT manager—Kevin Park—is your entry point. Build rapport with him.","\n","^Agent 0x99: He's not ENTROPY, just overworked and underpaid. He'll appreciate competent help and give you access.","\n","ev","str","^Anyone else I should know about?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Got it. Ready to go","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"other_npcs"},null],"c-1":["\n",{"->":"deployment"},null]}],null],"other_npcs":["^Agent 0x99: Sarah Martinez is the receptionist. Professional, friendly. Don't give her any reason to flag you.","\n","^Agent 0x99: And Maya Chen—the journalist who contacted us. Be careful around her. Derek might be watching who she talks to.","\n",{"->":"deployment"},null],"deployment":["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, get inside, find out what ENTROPY is planning, and report back.","\n","^Agent 0x99: Talk to Maya. She's your best lead. Whatever Derek's building, she'll have seen pieces of it.","\n","^Agent 0x99: Once you know what we're dealing with, call me. We'll figure out how to stop it.","\n","ev",true,"/ev",{"VAR=":"mission_accepted","re":true},"#","^exit_conversation","/#","end",null],"global decl":["ev",false,{"VAR=":"asked_about_stakes"},false,{"VAR=":"asked_about_derek"},false,{"VAR=":"asked_about_maya"},false,{"VAR=":"mission_accepted"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file diff --git a/scenarios/m01_first_contact/ink/m01_phone_agent0x99.ink b/scenarios/m01_first_contact/ink/m01_phone_agent0x99.ink index 1f26c11..8e32be0 100644 --- a/scenarios/m01_first_contact/ink/m01_phone_agent0x99.ink +++ b/scenarios/m01_first_contact/ink/m01_phone_agent0x99.ink @@ -9,10 +9,13 @@ VAR ssh_hint_given = false VAR linux_hint_given = false VAR sudo_hint_given = false VAR first_contact = true +VAR operation_shatter_reported = false // External variables VAR player_name = "Agent 0x00" VAR current_task = "" +VAR talked_to_maya = false +VAR discussed_operation = false // ================================================ // START: PHONE SUPPORT @@ -57,6 +60,8 @@ Agent 0x99: If you need guidance on any challenges, I'm here. That's what handle Agent 0x99: What do you need help with? ++ {talked_to_maya and discussed_operation and not operation_shatter_reported} [I discovered what ENTROPY is planning - Operation Shatter] + -> report_operation_shatter + {not lockpick_hint_given} [Lockpicking guidance] -> lockpick_help + {not ssh_hint_given} [SSH brute force help] @@ -167,6 +172,90 @@ Agent 0x99: Most people at Viral Dynamics are legitimate employees. We want ENTR + [Understood] -> support_hub +// ================================================ +// REPORT OPERATION SHATTER DISCOVERY +// ================================================ + +=== report_operation_shatter === +~ operation_shatter_reported = true +#unlock_task:inform_safetynet_operation_shatter + +Agent 0x99: ...Say that again. + ++ [Operation Shatter - coordinated disinformation attack] + -> shatter_details_1 ++ [They're planning mass casualties] + -> shatter_casualties + +=== shatter_details_1 === +Agent 0x99: Operation Shatter. Christ. + +Agent 0x99: What exactly are they planning? + ++ [Fake crisis messages targeting vulnerable populations] + -> shatter_details_2 + +=== shatter_details_2 === +Agent 0x99: Talk to me. What did Maya tell you? + ++ [Over two million profiles. Fake hospital closures, bank failures, infrastructure attacks.] + -> shatter_casualties + +=== shatter_casualties === +Agent 0x99: {player_name}, this is worse than we thought. + +Agent 0x99: How bad are we talking? + ++ [Their own projections: 42 to 85 deaths in the first 24 hours] + -> shatter_reaction ++ [They've calculated acceptable casualties. They're targeting diabetics, elderly, people with anxiety disorders.] + -> shatter_reaction + +=== shatter_reaction === +Agent 0x99: ...Forty-two to eighty-five people. Calculated. Deliberate. + +Agent 0x99: They're not just terrorists. They're mass murderers with spreadsheets. + +Agent 0x99: {player_name}, listen carefully. Your mission just changed priority. + ++ [What do I need to do?] + -> updated_objectives + +=== updated_objectives === +Agent 0x99: New priority objective: Stop Operation Shatter before deployment. + +Agent 0x99: Maya said Sunday, 6 AM. That's when the messages go out. + +Agent 0x99: Find the complete documentation—target lists, message templates, deployment systems. + +Agent 0x99: Gather proof of Derek's involvement. And shut down their attack infrastructure before those messages go out. + ++ [What about those 85 people?] + -> people_at_stake ++ [I'll stop it] + -> mission_commitment + +=== people_at_stake === +Agent 0x99: They're counting on you, {player_name}. Even if they don't know it. + +Agent 0x99: Diabetics who'll skip insulin. Elderly with heart conditions. People who'll panic and make fatal decisions. + +Agent 0x99: Every piece of evidence you find brings us closer to stopping this. + +-> mission_commitment + +=== mission_commitment === +#complete_task:inform_safetynet_operation_shatter + +Agent 0x99: Good work discovering this. Now we know what we're dealing with. + +Agent 0x99: Continue investigating. Find the Operation Shatter files, identify all operatives, and prepare to shut this down. + +Agent 0x99: Call me if you need support. This just became a race against the clock. + +#exit_conversation +-> support_hub + // ================================================ // EVENT: LOCKPICK ACQUIRED // ================================================ diff --git a/scenarios/m01_first_contact/ink/m01_phone_agent0x99.json b/scenarios/m01_first_contact/ink/m01_phone_agent0x99.json index 0a68ba9..6751b1c 100644 --- a/scenarios/m01_first_contact/ink/m01_phone_agent0x99.json +++ b/scenarios/m01_first_contact/ink/m01_phone_agent0x99.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["ev",{"VAR?":"first_contact"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev",false,"/ev",{"VAR=":"first_contact","re":true},{"->":"first_call"},{"->":"start.4"},null]}],"nop","\n","ev",{"VAR?":"first_contact"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"support_hub"},{"->":"start.11"},null]}],"nop","\n",null],"first_call":[["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, checking in. How's the infiltration going?","\n","^Agent 0x99: If you need guidance on any challenges, I'm here. That's what handlers are for.","\n","ev","str","^Everything's going smoothly so far","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I could use some tips","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I'll call if I need help","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Agent 0x99: Good. Remember, take your time. Rushing creates mistakes.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null],"c-2":["\n","#","^exit_conversation","/#","^Agent 0x99: Roger that. I'm here when you need me.","\n",{"->":"support_hub"},null]}],null],"support_hub":[["#","^speaker:agent_0x99","/#","^Agent 0x99: What do you need help with?","\n","ev","str","^Lockpicking guidance","/str",{"VAR?":"lockpick_hint_given"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^SSH brute force help","/str",{"VAR?":"ssh_hint_given"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^Linux navigation tips","/str",{"VAR?":"linux_hint_given"},"!","/ev",{"*":".^.c-2","flg":5},"ev","str","^Privilege escalation guidance","/str",{"VAR?":"sudo_hint_given"},"!","/ev",{"*":".^.c-3","flg":5},"ev","str","^General mission advice","/str","/ev",{"*":".^.c-4","flg":4},"ev","str","^I'm good for now","/str","/ev",{"*":".^.c-5","flg":4},{"c-0":["\n",{"->":"lockpick_help"},null],"c-1":["\n",{"->":"ssh_help"},null],"c-2":["\n",{"->":"linux_help"},null],"c-3":["\n",{"->":"sudo_help"},null],"c-4":["\n",{"->":"general_advice"},null],"c-5":["\n","#","^exit_conversation","/#","^Agent 0x99: Copy that. Call anytime.","\n",{"->":".^.^.^"},null]}],null],"lockpick_help":[["ev",true,"/ev",{"VAR=":"lockpick_hint_given","re":true},"^Agent 0x99: Lockpicking is about patience and listening.","\n","^Agent 0x99: Each pin has a sweet spot. Apply tension, test each pin, feel for the feedback.","\n","^Agent 0x99: Start with the storage closet practice safe—low stakes, good for learning.","\n","ev","str","^Any other tips?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Got it, thanks","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Don't force it. If you're stuck, reset and try again. There's no timer.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"ssh_help":[["ev",true,"/ev",{"VAR=":"ssh_hint_given","re":true},"^Agent 0x99: SSH brute force uses Hydra to test password lists against login prompts.","\n","^Agent 0x99: The key is using good password lists. Kevin's hints about \"ViralDynamics2025\" variations are gold.","\n","^Agent 0x99: Command format: hydra -l username -P passwordlist.txt ssh:","\n","ev","str","^What if I don't have a password list?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Thanks, that helps","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Build one from intel. Kevin mentioned patterns, the whiteboard had clues. Social engineering works.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"linux_help":[["ev",true,"/ev",{"VAR=":"linux_hint_given","re":true},"^Agent 0x99: Linux navigation basics: ls lists files, cd changes directory, cat reads files.","\n","^Agent 0x99: Check the home directory first. User files, hidden configs—look for .bashrc, .ssh, personal directories.","\n","^Agent 0x99: Hidden files start with a dot. Use ls -la to see them.","\n","ev","str","^Where should I look for flags?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Got it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Home directories, user documents, sometimes hidden in config files. Explore methodically.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"sudo_help":[["ev",true,"/ev",{"VAR=":"sudo_hint_given","re":true},"^Agent 0x99: Privilege escalation means gaining access to other accounts or higher permissions.","\n","^Agent 0x99: Try \"sudo -l\" to see what sudo permissions you have. Some accounts allow switching users.","\n","^Agent 0x99: Command: sudo -u otherusername bash gives you a shell as that user.","\n","ev","str","^What if I don't have sudo access?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Thanks","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Check for misconfigured files, world-writable directories, or SUID binaries. But for this mission, sudo works.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"general_advice":[["^Agent 0x99: Remember the mission priorities: gather evidence, identify operatives, minimize innocent casualties.","\n","^Agent 0x99: Most people at Viral Dynamics are legitimate employees. We want ENTROPY, not collateral damage.","\n","ev","str","^How do I know who's ENTROPY?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What about Maya?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Understood","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Agent 0x99: Evidence correlation. Look for encrypted communications, connections to known cells, suspicious behavior.","\n","^Agent 0x99: Derek's our primary suspect, but gather proof before confronting.","\n",{"->":"support_hub"},null],"c-1":["\n","^Agent 0x99: Protect her. She's the informant who brought this to us. Don't expose her unless absolutely necessary.","\n",{"->":"support_hub"},null],"c-2":["\n",{"->":"support_hub"},null]}],null],"event_lockpick_acquired":[["#","^speaker:agent_0x99","/#","^Agent 0x99: I see Kevin gave you lockpicks. Smart social engineering.","\n","^Agent 0x99: Practice on low-risk targets first. Storage closet, unlocked areas.","\n","^Agent 0x99: Remember, you're testing security—officially.","\n","ev","str","^Will do","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Any lockpicking tips?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"lockpick_help"},null]}],null],"event_server_room_entered":[["#","^speaker:agent_0x99","/#","#","^complete_task:access_server_room","/#","#","^unlock_task:access_vm","/#","^Agent 0x99: You're in the server room. Good work getting access.","\n","^Agent 0x99: Look for the compromised systems. VM access will give you deeper intelligence.","\n","ev","str","^What am I looking for?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^On it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Evidence of ENTROPY's infrastructure. Backdoors, encrypted communications, anything linking Derek to other cells.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_first_flag":[["#","^speaker:agent_0x99","/#","^Agent 0x99: First flag submitted. Nice work, ","ev",{"VAR?":"player_name"},"out","/ev","^.","\n","^Agent 0x99: Each flag unlocks intelligence. Keep correlating VM findings with physical evidence.","\n","ev","str","^What should I focus on next?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Thanks","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Continue the VM challenges, but don't forget physical investigation. Derek's office, filing cabinets, computer access.","\n","^Agent 0x99: Hybrid approach—digital and physical evidence together.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_derek_office_entered":[["#","^speaker:agent_0x99","/#","#","^unlock_task:find_campaign_materials","/#","#","^unlock_task:discover_manifesto","/#","#","^unlock_task:decode_communications","/#","^Agent 0x99: You're in Derek's office. Good.","\n","^Agent 0x99: Look for communications, project documents, anything linking him to ENTROPY.","\n","^Agent 0x99: Whiteboard messages, computer files, filing cabinets. Be thorough.","\n","ev","str","^What if Derek catches me?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^On it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Your cover is solid. You're doing a security audit—accessing offices is expected.","\n","^Agent 0x99: But don't tip your hand too early. Gather evidence before confronting.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_all_flags":[["#","^speaker:agent_0x99","/#","^Agent 0x99: All VM flags submitted. Excellent work.","\n","^Agent 0x99: Intelligence confirms Derek Lawson as primary operative, coordinating with Zero Day Syndicate.","\n","^Agent 0x99: Now correlate with physical evidence. Then we can move to confrontation.","\n","ev","str","^What's the confrontation plan?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Roger that","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: That's your call. Direct, silent extraction, or something creative.","\n","^Agent 0x99: I trust your judgment. You've proven capable.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_contingency_found":[["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, I just saw what you pulled from Derek's computer.","\n","^Agent 0x99: He's planning to frame Kevin Park for the entire breach. Fake logs, forged emails, the works.","\n","^Agent 0x99: Kevin—the IT guy who gave you access, who trusted you—is going to take the fall for ENTROPY.","\n","ev","str","^That's monstrous","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What can I do about it?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"contingency_reaction"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"contingency_reaction":["^Agent 0x99: It gets worse. Derek's contingency activates automatically when systems are seized.","\n","^Agent 0x99: If we don't do something, Kevin gets arrested. His kids watch him taken away in handcuffs.","\n","^Agent 0x99: Eventually he'd be cleared, but... that's not something you just walk off.","\n",{"->":"contingency_options"},null],"contingency_options":[["^Agent 0x99: You have options here. None of them are perfect.","\n","^Agent 0x99: What do you want to do?","\n","ev","str","^Warn Kevin directly - tell him what's coming","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Leave evidence clearing Kevin for investigators","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Focus on the mission - Kevin's not my responsibility","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"warn_kevin_choice"},null],"c-1":["\n",{"->":"plant_evidence_choice"},null],"c-2":["\n",{"->":"ignore_kevin_choice"},null]}],null],"warn_kevin_choice":[["^Agent 0x99: Direct warning. Risky—if Kevin panics or acts differently, Derek might notice.","\n","^Agent 0x99: But if it works, Kevin has time to lawyer up, document everything. He's protected.","\n","ev","str","^I'll take that risk. He deserves to know.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Maybe there's a safer option...","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^set_variable:kevin_choice=warn","/#","#","^set_variable:kevin_protected=true","/#","^Agent 0x99: Understood. Find Kevin, tell him what's coming. Just... be careful how much you reveal.","\n","^Agent 0x99: The more he knows about SAFETYNET, the more complicated this gets.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"plant_evidence_choice":[["^Agent 0x99: Anonymous help. Leave the frame-up files where our follow-up team will find them.","\n","^Agent 0x99: Kevin never knows he was in danger. Investigators see Derek's setup immediately.","\n","^Agent 0x99: Clean. Professional. Takes time, but lower risk.","\n","ev","str","^That's the smarter play. Do it that way.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Maybe there's another option...","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^set_variable:kevin_choice=evidence","/#","#","^set_variable:kevin_protected=true","/#","^Agent 0x99: Copy the contingency files to a visible location. Investigators will find them during evidence collection.","\n","^Agent 0x99: Kevin walks away clean without ever knowing. That's the professional approach.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"ignore_kevin_choice":[["^Agent 0x99: ...You're sure about that?","\n","^Agent 0x99: Kevin helped you. If you ignore this, he gets arrested. His family watches.","\n","^Agent 0x99: He'll be cleared eventually, but that's trauma that doesn't heal.","\n","ev","str","^The mission has to come first. I can't save everyone.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Wait. Let me reconsider.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^set_variable:kevin_choice=ignore","/#","#","^set_variable:kevin_protected=false","/#","^Agent 0x99: ...Understood. That's your call to make.","\n","^Agent 0x99: Just know that choice has consequences. For Kevin. For his family.","\n","^Agent 0x99: And for you, when you think about it later.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"event_act2_complete":[["#","^speaker:agent_0x99","/#","^Agent 0x99: You've identified the operatives and gathered the evidence.","\n","^Agent 0x99: Time to decide: How do you want to resolve this?","\n","^Agent 0x99: Confrontation, silent extraction, or public exposure. Each has consequences.","\n","ev","str","^I need to think about this","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready to proceed","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Take your time. This is the part where your choices matter most.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","^Agent 0x99: Good luck, ","ev",{"VAR?":"player_name"},"out","/ev","^. You've got this.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"global decl":["ev",false,{"VAR=":"lockpick_hint_given"},false,{"VAR=":"ssh_hint_given"},false,{"VAR=":"linux_hint_given"},false,{"VAR=":"sudo_hint_given"},true,{"VAR=":"first_contact"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},"str","^","/str",{"VAR=":"current_task"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["ev",{"VAR?":"first_contact"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev",false,"/ev",{"VAR=":"first_contact","re":true},{"->":"first_call"},{"->":"start.4"},null]}],"nop","\n","ev",{"VAR?":"first_contact"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n",{"->":"support_hub"},{"->":"start.11"},null]}],"nop","\n",null],"first_call":[["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, checking in. How's the infiltration going?","\n","^Agent 0x99: If you need guidance on any challenges, I'm here. That's what handlers are for.","\n","ev","str","^Everything's going smoothly so far","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I could use some tips","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^I'll call if I need help","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Agent 0x99: Good. Remember, take your time. Rushing creates mistakes.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null],"c-2":["\n","#","^exit_conversation","/#","^Agent 0x99: Roger that. I'm here when you need me.","\n",{"->":"support_hub"},null]}],null],"support_hub":[["#","^speaker:agent_0x99","/#","^Agent 0x99: What do you need help with?","\n","ev","str","^I discovered what ENTROPY is planning - Operation Shatter","/str",{"VAR?":"talked_to_maya"},{"VAR?":"discussed_operation"},"&&",{"VAR?":"operation_shatter_reported"},"!","&&","/ev",{"*":".^.c-0","flg":5},"ev","str","^Lockpicking guidance","/str",{"VAR?":"lockpick_hint_given"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^SSH brute force help","/str",{"VAR?":"ssh_hint_given"},"!","/ev",{"*":".^.c-2","flg":5},"ev","str","^Linux navigation tips","/str",{"VAR?":"linux_hint_given"},"!","/ev",{"*":".^.c-3","flg":5},"ev","str","^Privilege escalation guidance","/str",{"VAR?":"sudo_hint_given"},"!","/ev",{"*":".^.c-4","flg":5},"ev","str","^General mission advice","/str","/ev",{"*":".^.c-5","flg":4},"ev","str","^I'm good for now","/str","/ev",{"*":".^.c-6","flg":4},{"c-0":["\n",{"->":"report_operation_shatter"},null],"c-1":["\n",{"->":"lockpick_help"},null],"c-2":["\n",{"->":"ssh_help"},null],"c-3":["\n",{"->":"linux_help"},null],"c-4":["\n",{"->":"sudo_help"},null],"c-5":["\n",{"->":"general_advice"},null],"c-6":["\n","#","^exit_conversation","/#","^Agent 0x99: Copy that. Call anytime.","\n",{"->":".^.^.^"},null]}],null],"lockpick_help":[["ev",true,"/ev",{"VAR=":"lockpick_hint_given","re":true},"^Agent 0x99: Lockpicking is about patience and listening.","\n","^Agent 0x99: Each pin has a sweet spot. Apply tension, test each pin, feel for the feedback.","\n","^Agent 0x99: Start with the storage closet practice safe—low stakes, good for learning.","\n","ev","str","^Any other tips?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Got it, thanks","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Don't force it. If you're stuck, reset and try again. There's no timer.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"ssh_help":[["ev",true,"/ev",{"VAR=":"ssh_hint_given","re":true},"^Agent 0x99: SSH brute force uses Hydra to test password lists against login prompts.","\n","^Agent 0x99: The key is using good password lists. Kevin's hints about \"ViralDynamics2025\" variations are gold.","\n","^Agent 0x99: Command format: hydra -l username -P passwordlist.txt ssh:","\n","ev","str","^What if I don't have a password list?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Thanks, that helps","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Build one from intel. Kevin mentioned patterns, the whiteboard had clues. Social engineering works.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"linux_help":[["ev",true,"/ev",{"VAR=":"linux_hint_given","re":true},"^Agent 0x99: Linux navigation basics: ls lists files, cd changes directory, cat reads files.","\n","^Agent 0x99: Check the home directory first. User files, hidden configs—look for .bashrc, .ssh, personal directories.","\n","^Agent 0x99: Hidden files start with a dot. Use ls -la to see them.","\n","ev","str","^Where should I look for flags?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Got it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Home directories, user documents, sometimes hidden in config files. Explore methodically.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"sudo_help":[["ev",true,"/ev",{"VAR=":"sudo_hint_given","re":true},"^Agent 0x99: Privilege escalation means gaining access to other accounts or higher permissions.","\n","^Agent 0x99: Try \"sudo -l\" to see what sudo permissions you have. Some accounts allow switching users.","\n","^Agent 0x99: Command: sudo -u otherusername bash gives you a shell as that user.","\n","ev","str","^What if I don't have sudo access?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Thanks","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Check for misconfigured files, world-writable directories, or SUID binaries. But for this mission, sudo works.","\n",{"->":"support_hub"},null],"c-1":["\n",{"->":"support_hub"},null]}],null],"general_advice":[["^Agent 0x99: Remember the mission priorities: gather evidence, identify operatives, minimize innocent casualties.","\n","^Agent 0x99: Most people at Viral Dynamics are legitimate employees. We want ENTROPY, not collateral damage.","\n","ev","str","^How do I know who's ENTROPY?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What about Maya?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Understood","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Agent 0x99: Evidence correlation. Look for encrypted communications, connections to known cells, suspicious behavior.","\n","^Agent 0x99: Derek's our primary suspect, but gather proof before confronting.","\n",{"->":"support_hub"},null],"c-1":["\n","^Agent 0x99: Protect her. She's the informant who brought this to us. Don't expose her unless absolutely necessary.","\n",{"->":"support_hub"},null],"c-2":["\n",{"->":"support_hub"},null]}],null],"report_operation_shatter":[["ev",true,"/ev",{"VAR=":"operation_shatter_reported","re":true},"#","^unlock_task:inform_safetynet_operation_shatter","/#","^Agent 0x99: ...Say that again.","\n","ev","str","^Operation Shatter - coordinated disinformation attack","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^They're planning mass casualties","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"shatter_details_1"},null],"c-1":["\n",{"->":"shatter_casualties"},null]}],null],"shatter_details_1":[["^Agent 0x99: Operation Shatter. Christ.","\n","^Agent 0x99: What exactly are they planning?","\n","ev","str","^Fake crisis messages targeting vulnerable populations","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"shatter_details_2"},null]}],null],"shatter_details_2":[["^Agent 0x99: Talk to me. What did Maya tell you?","\n","ev","str","^Over two million profiles. Fake hospital closures, bank failures, infrastructure attacks.","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"shatter_casualties"},null]}],null],"shatter_casualties":[["^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, this is worse than we thought.","\n","^Agent 0x99: How bad are we talking?","\n","ev","str","^Their own projections: 42 to 85 deaths in the first 24 hours","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^They've calculated acceptable casualties. They're targeting diabetics, elderly, people with anxiety disorders.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"shatter_reaction"},null],"c-1":["\n",{"->":"shatter_reaction"},null]}],null],"shatter_reaction":[["^Agent 0x99: ...Forty-two to eighty-five people. Calculated. Deliberate.","\n","^Agent 0x99: They're not just terrorists. They're mass murderers with spreadsheets.","\n","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, listen carefully. Your mission just changed priority.","\n","ev","str","^What do I need to do?","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"updated_objectives"},null]}],null],"updated_objectives":[["^Agent 0x99: New priority objective: Stop Operation Shatter before deployment.","\n","^Agent 0x99: Maya said Sunday, 6 AM. That's when the messages go out.","\n","^Agent 0x99: Find the complete documentation—target lists, message templates, deployment systems.","\n","^Agent 0x99: Gather proof of Derek's involvement. And shut down their attack infrastructure before those messages go out.","\n","ev","str","^What about those 85 people?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'll stop it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"people_at_stake"},null],"c-1":["\n",{"->":"mission_commitment"},null]}],null],"people_at_stake":["^Agent 0x99: They're counting on you, ","ev",{"VAR?":"player_name"},"out","/ev","^. Even if they don't know it.","\n","^Agent 0x99: Diabetics who'll skip insulin. Elderly with heart conditions. People who'll panic and make fatal decisions.","\n","^Agent 0x99: Every piece of evidence you find brings us closer to stopping this.","\n",{"->":"mission_commitment"},null],"mission_commitment":["#","^complete_task:inform_safetynet_operation_shatter","/#","^Agent 0x99: Good work discovering this. Now we know what we're dealing with.","\n","^Agent 0x99: Continue investigating. Find the Operation Shatter files, identify all operatives, and prepare to shut this down.","\n","^Agent 0x99: Call me if you need support. This just became a race against the clock.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"event_lockpick_acquired":[["#","^speaker:agent_0x99","/#","^Agent 0x99: I see Kevin gave you lockpicks. Smart social engineering.","\n","^Agent 0x99: Practice on low-risk targets first. Storage closet, unlocked areas.","\n","^Agent 0x99: Remember, you're testing security—officially.","\n","ev","str","^Will do","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Any lockpicking tips?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"lockpick_help"},null]}],null],"event_server_room_entered":[["#","^speaker:agent_0x99","/#","#","^complete_task:access_server_room","/#","#","^unlock_task:access_vm","/#","^Agent 0x99: You're in the server room. Good work getting access.","\n","^Agent 0x99: Look for the compromised systems. VM access will give you deeper intelligence.","\n","ev","str","^What am I looking for?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^On it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Evidence of ENTROPY's infrastructure. Backdoors, encrypted communications, anything linking Derek to other cells.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_first_flag":[["#","^speaker:agent_0x99","/#","^Agent 0x99: First flag submitted. Nice work, ","ev",{"VAR?":"player_name"},"out","/ev","^.","\n","^Agent 0x99: Each flag unlocks intelligence. Keep correlating VM findings with physical evidence.","\n","ev","str","^What should I focus on next?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Thanks","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Continue the VM challenges, but don't forget physical investigation. Derek's office, filing cabinets, computer access.","\n","^Agent 0x99: Hybrid approach—digital and physical evidence together.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_derek_office_entered":[["#","^speaker:agent_0x99","/#","#","^unlock_task:find_campaign_materials","/#","#","^unlock_task:discover_manifesto","/#","#","^unlock_task:decode_communications","/#","^Agent 0x99: You're in Derek's office. Good.","\n","^Agent 0x99: Look for communications, project documents, anything linking him to ENTROPY.","\n","^Agent 0x99: Whiteboard messages, computer files, filing cabinets. Be thorough.","\n","ev","str","^What if Derek catches me?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^On it","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Your cover is solid. You're doing a security audit—accessing offices is expected.","\n","^Agent 0x99: But don't tip your hand too early. Gather evidence before confronting.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_all_flags":[["#","^speaker:agent_0x99","/#","^Agent 0x99: All VM flags submitted. Excellent work.","\n","^Agent 0x99: Intelligence confirms Derek Lawson as primary operative, coordinating with Zero Day Syndicate.","\n","^Agent 0x99: Now correlate with physical evidence. Then we can move to confrontation.","\n","ev","str","^What's the confrontation plan?","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Roger that","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: That's your call. Direct, silent extraction, or something creative.","\n","^Agent 0x99: I trust your judgment. You've proven capable.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"event_contingency_found":[["#","^speaker:agent_0x99","/#","^Agent 0x99: ","ev",{"VAR?":"player_name"},"out","/ev","^, I just saw what you pulled from Derek's computer.","\n","^Agent 0x99: He's planning to frame Kevin Park for the entire breach. Fake logs, forged emails, the works.","\n","^Agent 0x99: Kevin—the IT guy who gave you access, who trusted you—is going to take the fall for ENTROPY.","\n","ev","str","^That's monstrous","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^What can I do about it?","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n",{"->":"contingency_reaction"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"contingency_reaction":["^Agent 0x99: It gets worse. Derek's contingency activates automatically when systems are seized.","\n","^Agent 0x99: If we don't do something, Kevin gets arrested. His kids watch him taken away in handcuffs.","\n","^Agent 0x99: Eventually he'd be cleared, but... that's not something you just walk off.","\n",{"->":"contingency_options"},null],"contingency_options":[["^Agent 0x99: You have options here. None of them are perfect.","\n","^Agent 0x99: What do you want to do?","\n","ev","str","^Warn Kevin directly - tell him what's coming","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Leave evidence clearing Kevin for investigators","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Focus on the mission - Kevin's not my responsibility","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"warn_kevin_choice"},null],"c-1":["\n",{"->":"plant_evidence_choice"},null],"c-2":["\n",{"->":"ignore_kevin_choice"},null]}],null],"warn_kevin_choice":[["^Agent 0x99: Direct warning. Risky—if Kevin panics or acts differently, Derek might notice.","\n","^Agent 0x99: But if it works, Kevin has time to lawyer up, document everything. He's protected.","\n","ev","str","^I'll take that risk. He deserves to know.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Maybe there's a safer option...","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^set_variable:kevin_choice=warn","/#","#","^set_variable:kevin_protected=true","/#","^Agent 0x99: Understood. Find Kevin, tell him what's coming. Just... be careful how much you reveal.","\n","^Agent 0x99: The more he knows about SAFETYNET, the more complicated this gets.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"plant_evidence_choice":[["^Agent 0x99: Anonymous help. Leave the frame-up files where our follow-up team will find them.","\n","^Agent 0x99: Kevin never knows he was in danger. Investigators see Derek's setup immediately.","\n","^Agent 0x99: Clean. Professional. Takes time, but lower risk.","\n","ev","str","^That's the smarter play. Do it that way.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Maybe there's another option...","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^set_variable:kevin_choice=evidence","/#","#","^set_variable:kevin_protected=true","/#","^Agent 0x99: Copy the contingency files to a visible location. Investigators will find them during evidence collection.","\n","^Agent 0x99: Kevin walks away clean without ever knowing. That's the professional approach.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"ignore_kevin_choice":[["^Agent 0x99: ...You're sure about that?","\n","^Agent 0x99: Kevin helped you. If you ignore this, he gets arrested. His family watches.","\n","^Agent 0x99: He'll be cleared eventually, but that's trauma that doesn't heal.","\n","ev","str","^The mission has to come first. I can't save everyone.","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Wait. Let me reconsider.","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","#","^set_variable:kevin_choice=ignore","/#","#","^set_variable:kevin_protected=false","/#","^Agent 0x99: ...Understood. That's your call to make.","\n","^Agent 0x99: Just know that choice has consequences. For Kevin. For his family.","\n","^Agent 0x99: And for you, when you think about it later.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n",{"->":"contingency_options"},null]}],null],"event_act2_complete":[["#","^speaker:agent_0x99","/#","^Agent 0x99: You've identified the operatives and gathered the evidence.","\n","^Agent 0x99: Time to decide: How do you want to resolve this?","\n","^Agent 0x99: Confrontation, silent extraction, or public exposure. Each has consequences.","\n","ev","str","^I need to think about this","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^I'm ready to proceed","/str","/ev",{"*":".^.c-1","flg":4},{"c-0":["\n","^Agent 0x99: Take your time. This is the part where your choices matter most.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null],"c-1":["\n","^Agent 0x99: Good luck, ","ev",{"VAR?":"player_name"},"out","/ev","^. You've got this.","\n","#","^exit_conversation","/#",{"->":"support_hub"},null]}],null],"global decl":["ev",false,{"VAR=":"lockpick_hint_given"},false,{"VAR=":"ssh_hint_given"},false,{"VAR=":"linux_hint_given"},false,{"VAR=":"sudo_hint_given"},true,{"VAR=":"first_contact"},false,{"VAR=":"operation_shatter_reported"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},"str","^","/str",{"VAR=":"current_task"},false,{"VAR=":"talked_to_maya"},false,{"VAR=":"discussed_operation"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file diff --git a/scenarios/m01_first_contact/scenario.json.erb b/scenarios/m01_first_contact/scenario.json.erb index 0e975cd..5641efc 100644 --- a/scenarios/m01_first_contact/scenario.json.erb +++ b/scenarios/m01_first_contact/scenario.json.erb @@ -156,6 +156,13 @@ password_hints = "Common passwords: Marketing123, Campaign2024, Viral_Dynamics_A "type": "npc_conversation", "targetNPC": "maya_chen", "status": "locked" + }, + { + "taskId": "inform_safetynet_operation_shatter", + "title": "Report Operation Shatter discovery to SAFETYNET", + "type": "phone_conversation", + "targetNPC": "agent_0x99", + "status": "locked" } ] }, @@ -965,6 +972,8 @@ password_hints = "Common passwords: Marketing123, Campaign2024, Viral_Dynamics_A "talked_to_maya": false, "talked_to_kevin": false, "maya_identity_protected": true, + "discussed_operation": false, + "operation_shatter_reported": false, "objectives_completed": 0, "lore_collected": 0,