diff --git a/story_design/ink/NPC_HUB_ARCHITECTURE.md b/story_design/ink/NPC_HUB_ARCHITECTURE.md new file mode 100644 index 0000000..9d40586 --- /dev/null +++ b/story_design/ink/NPC_HUB_ARCHITECTURE.md @@ -0,0 +1,477 @@ +# NPC Conversation Hub Architecture + +## Overview + +The NPC hub architecture implements a three-tier system for organizing NPC conversations in Ink: + +1. **Hub Files** (`*_hub.ink`) - Central entry points that mix personal + mission content +2. **Personal Conversation Files** (`*_ongoing_conversations.ink`) - Relationship building across all missions +3. **Mission-Specific Files** (`*_mission_*.ink`) - Content specific to individual missions + +This architecture allows: +- **Context-aware conversations** - Different topics based on mission phase, location, and stress level +- **Separation of concerns** - Personal relationships vs. mission content in separate files +- **Easy expansion** - Add new missions without touching personal conversations +- **Natural flow** - Players can seamlessly move between personal chat and mission discussion + +## File Structure + +``` +story_design/ink/ +├── netherton_hub.ink # Central hub for Netherton +├── netherton_ongoing_conversations.ink # Personal relationship (all missions) +├── netherton_mission_ghost_example.ink # Mission-specific content example +│ +├── chen_hub.ink # Central hub for Dr. Chen +├── dr_chen_ongoing_conversations.ink # Personal friendship (all missions) +├── chen_mission_ghost_equipment.ink # Mission equipment support +│ +├── haxolottle_hub.ink # Central hub for Haxolottle +├── haxolottle_ongoing_conversations.ink # Personal friendship (all missions) +└── haxolottle_mission_ghost_handler.ink # Mission handler support +``` + +## How It Works + +### 1. Hub Files (Central Entry Points) + +Hub files are the **main entry point** when the player talks to an NPC. They: + +- **Include** both personal and mission-specific files +- **Present context-aware options** based on: + - `current_mission_id` - What mission is active + - `mission_phase` - Planning, active, debriefing, or downtime + - `npc_location` - Where the conversation happens + - `operational_stress_level` - How urgent the situation is (for Haxolottle) + - `equipment_status` - Equipment condition (for Dr. Chen) + +**Example from `netherton_hub.ink`:** + +```ink +=== netherton_main_hub === + +// PERSONAL option (always available if topics exist) ++ {has_available_personal_topics() and mission_phase != "active"} + [How are you, Director?] + -> jump_to_personal_conversations + +// MISSION-SPECIFIC options (context-dependent) ++ {current_mission_id == "ghost_in_machine" and mission_phase == "pre_briefing"} + [Request briefing for Ghost Protocol operation] + -> mission_ghost_briefing + ++ {current_mission_id == "ghost_in_machine" and mission_phase == "active"} + [Request tactical guidance] + -> mission_ghost_tactical_support +``` + +### 2. Personal Conversation Files + +These files contain **ongoing relationship development** that persists across all missions: + +- Phase 1 (Missions 1-5): Getting to know the NPC +- Phase 2 (Missions 6-10): Deepening friendship/respect +- Phase 3 (Missions 11-15): Genuine trust and vulnerability +- Phase 4 (Missions 16+): Deep friendship/partnership + +**Key Feature: Hub Returns** + +Personal conversations need to support returning to the hub. This is done by creating `_with_return` versions of phase hubs: + +```ink +// In netherton_ongoing_conversations.ink + +=== phase_1_hub_with_return === +// Present personal topics ++ {not npc_netherton_discussed_handbook} + [Ask about the Field Operations Handbook] + -> handbook_discussion + +// After discussion, return to this hub (tunnel pattern) +-> phase_1_hub_with_return + +// When player is done with personal chat, return via tunnel ++ [That will be all for personal discussion] + ->-> // Return to calling hub via tunnel +``` + +### 3. Mission-Specific Files + +These files contain content for **specific missions only**: + +- Mission briefings +- Tactical support during operations +- Technical equipment discussions (Dr. Chen) +- Handler coordination (Haxolottle) +- Mission debriefs + +**Example: `netherton_mission_ghost_example.ink`** + +Contains: +- `=== ghost_briefing ===` - Pre-mission briefing +- `=== ghost_tactical_support ===` - Active mission support +- `=== ghost_debrief ===` - Post-mission debrief + +## Variable Scoping (Three-Tier System) + +### PERSISTENT Variables +**Saved between game sessions** - Never reset + +```ink +VAR npc_netherton_respect = 50 // PERSISTENT +VAR npc_netherton_discussed_handbook = false // PERSISTENT +``` + +Examples: +- NPC relationship stats (respect, rapport, friendship_level) +- Discussed topics (so they don't repeat) +- Achievement flags (shared_vulnerability, earned_trust) + +### GLOBAL Variables +**Session-only, span all NPCs** - Reset when mission ends + +```ink +VAR total_missions_completed = 0 // GLOBAL +VAR professional_reputation = 0 // GLOBAL +``` + +Examples: +- Mission completion count +- Professional reputation +- Current threat level + +### EXTERNAL/LOCAL Variables +**Provided by game engine per conversation** + +```ink +EXTERNAL player_name // Player's agent codename +EXTERNAL current_mission_id // Which mission is active +EXTERNAL npc_location // Where conversation happens +EXTERNAL mission_phase // Planning, active, debriefing, downtime +``` + +## Context-Aware Conversation Flow + +### Example: Talking to Netherton + +**Scenario 1: Downtime, in his office, missions 1-5** +``` +Player talks to Netherton + ↓ +netherton_hub.ink → netherton_conversation_entry + ↓ +Shows: "How are you, Director?" (personal) + "Ask about SAFETYNET operations status" (general) + ↓ +Player chooses personal → jumps to netherton_ongoing_conversations.ink + ↓ +Shows Phase 1 personal topics (handbook, leadership, etc.) + ↓ +Player finishes personal chat → returns to hub + ↓ +Player exits conversation +``` + +**Scenario 2: Active mission, field comms, Ghost Protocol** +``` +Player talks to Netherton (via comms) + ↓ +netherton_hub.ink → netherton_conversation_entry + ↓ +Shows: "Request tactical guidance" (mission-specific) + "Request emergency extraction" (crisis option) + ↓ +Player requests guidance → jumps to netherton_mission_ghost_example.ink + ↓ +Shows tactical support options for Ghost Protocol + ↓ +Netherton provides guidance → player continues mission +``` + +**Scenario 3: Debriefing after mission** +``` +Player talks to Netherton + ↓ +netherton_hub.ink → netherton_conversation_entry + ↓ +Shows: "Debrief Ghost Protocol operation" (mission-specific) + "How are you doing?" (personal, if topics available) + ↓ +Player debriefs → netherton_mission_ghost_example.ink → ghost_debrief + ↓ +Performance evaluation, feedback, next assignment discussion + ↓ +Returns to hub → player can then do personal chat or exit +``` + +## NPC-Specific Patterns + +### Netherton (Director - Formal Authority) + +**Context Variables:** +- `npc_location`: "office", "briefing_room", "field", "safehouse" +- Focuses on: Mission briefings, tactical decisions, strategic counsel + +**Personality Adaptation:** +- In office: Formal but slightly more personal +- In briefing room: Strictly professional +- Over field comms: Terse, tactical +- In safehouse: More open to personal discussion + +### Dr. Chen (Tech Support - Enthusiastic Collaboration) + +**Context Variables:** +- `npc_location`: "lab", "equipment_room", "briefing_room", "field_support" +- `equipment_status`: "nominal", "damaged", "needs_upgrade" + +**Priority Topics:** +- Equipment repairs (highest priority if damaged) +- Mission-specific tech briefings +- Experimental technology discussions +- Personal friendship (when not in crisis) + +**Personality Adaptation:** +- In lab: Enthusiastic, eager to show experiments +- Equipment room: Professional but excited about gear +- Field support: Focused, concerned, solution-oriented +- Downtime: Friend mode, personal conversations + +### Haxolottle (Handler - Calm Under Pressure) + +**Context Variables:** +- `npc_location`: "handler_station", "briefing_room", "comms_active", "safehouse" +- `operational_stress_level`: "low", "moderate", "high", "crisis" +- `mission_phase`: Determines support type + +**Priority System:** +1. **Crisis situations** - Overrides everything +2. **Active mission support** - Handler guidance during ops +3. **Mission planning** - Contingency planning, handler coordination +4. **Personal friendship** - Only during downtime + +**Personality Adaptation:** +- Crisis: Absolutely focused, calm, methodical +- Active mission: Professional handler mode +- Planning: Collaborative, detail-oriented +- Downtime: Relaxed friend, personal chat + +## Adding New Missions + +To add a new mission: + +1. **Create mission-specific file**: `npc_mission_newmission.ink` + +```ink +=== newmission_briefing === +// Briefing content +-> END + +=== newmission_tactical_support === +// Active mission support +-> END + +=== newmission_debrief === +// Post-mission debrief +-> END +``` + +2. **Add INCLUDE to hub file**: `npc_hub.ink` + +```ink +INCLUDE npc_mission_newmission.ink +``` + +3. **Add hub options** based on context: + +```ink +=== npc_main_hub === + ++ {current_mission_id == "newmission" and mission_phase == "pre_briefing"} + [Request briefing for new mission] + -> newmission_briefing + ++ {current_mission_id == "newmission" and mission_phase == "active"} + [Request support] + -> newmission_tactical_support +``` + +**The personal conversation files don't need to change!** Relationship building is independent of specific missions. + +## Pros and Cons + +### Approach: Separate Files with Hub Integration (Current Implementation) + +#### Pros: +✅ **Clean separation** - Personal vs. mission content in different files +✅ **Context-aware presentation** - Right topics at right time +✅ **Reusable personal conversations** - Same file across all missions +✅ **Easy to add missions** - Create new file, add to hub, done +✅ **Version control friendly** - Changes to one mission don't affect others +✅ **Scalable** - Can have dozens of missions without bloat +✅ **Team collaboration** - Different writers can work on different missions +✅ **Testing** - Can test mission content independently + +#### Cons: +❌ **Requires INCLUDE management** - Must track which files are included +❌ **Variable scope complexity** - Need to ensure variables accessible across files +❌ **Hub return pattern** - Personal files need special "with_return" versions +❌ **More files to manage** - Hub + personal + N mission files per NPC + +### Alternative: Single File with Tunnels + +#### Pros: +✅ **Everything in one place** - Simpler file structure +✅ **No INCLUDE complexity** - Single file, no includes +✅ **Easier tunneling** - `->->` returns work naturally + +#### Cons: +❌ **File bloat** - Personal + all missions in one huge file +❌ **Hard to navigate** - Thousands of lines per NPC +❌ **Version control conflicts** - Everyone editing same file +❌ **Testing difficulty** - Can't isolate mission content +❌ **Not scalable** - Gets worse with each mission added + +### Alternative: Context-Aware Mixed Hub (No Separation) + +#### Pros: +✅ **Most natural flow** - Personal and mission topics mixed seamlessly +✅ **Maximum flexibility** - Can show any topic based on any context + +#### Cons: +❌ **Everything in hub file** - Becomes massive +❌ **No reusability** - Personal content duplicated per mission +❌ **Hard to maintain** - Changes ripple everywhere +❌ **Difficult to write** - Context logic becomes extremely complex + +## Best Practices + +### 1. Use Helper Functions for Availability Checks + +```ink +=== function has_available_personal_topics() === +// Centralized logic for when personal chat is available +{ + - total_missions_completed <= 5: + { + - not npc_netherton_discussed_handbook: ~ return true + - not npc_netherton_discussed_leadership: ~ return true + - else: ~ return false + } + // ... more phases +} +``` + +### 2. Context Variables Should Be Meaningful + +Good: +```ink +EXTERNAL mission_phase // "planning", "active", "debriefing", "downtime" +EXTERNAL npc_location // "office", "lab", "field", "safehouse" +``` + +Bad: +```ink +EXTERNAL phase // What phase? Mission? Relationship? +EXTERNAL loc // Unclear abbreviation +``` + +### 3. Priority Ordering in Hubs + +Show options in priority order: +1. Crisis/emergency options (highest priority) +2. Mission-critical options +3. Equipment/support options +4. Personal conversation options +5. General topics +6. Exit options (always last) + +### 4. Use Comments to Explain Context Logic + +```ink +// PERSONAL RELATIONSHIP OPTION +// Only available during downtime (not during active missions) +// Only if there are topics they haven't discussed yet ++ {has_available_personal_topics() and mission_phase != "active"} + [How are you, Director?] + -> jump_to_personal_conversations +``` + +### 5. Consistent Naming Conventions + +- Hub files: `npcname_hub.ink` +- Personal files: `npcname_ongoing_conversations.ink` +- Mission files: `npcname_mission_missionname.ink` +- Hub entry: `=== npcname_conversation_entry ===` +- Main hub: `=== npcname_main_hub ===` + +## Integration with Game Engine + +### Required Engine Support + +1. **Variable Persistence** + - Save/load PERSISTENT variables between game sessions + - Reset GLOBAL variables when appropriate + - Provide EXTERNAL variables each conversation + +2. **Conversation Triggering** + - Call appropriate hub entry point: `npcname_conversation_entry` + - Set context variables before calling + - Handle `#exit_conversation` tag + +3. **Context Tracking** + - Track current mission ID + - Track mission phase (planning → active → debriefing → downtime) + - Track NPC location + - Track operational stress level (for Haxolottle) + - Track equipment status (for Dr. Chen) + +### Example Engine Call + +```typescript +// Player talks to Netherton during Ghost Protocol mission +conversationEngine.startConversation({ + npc: "netherton", + entry_point: "netherton_conversation_entry", + context: { + player_name: player.codename, + current_mission_id: "ghost_in_machine", + mission_phase: "active", + npc_location: "field", // Over comms + total_missions_completed: player.missionsCompleted, + professional_reputation: player.reputation + } +}); +``` + +## Future Enhancements + +### Potential Additions: + +1. **Cross-NPC References** + - Netherton mentioning Chen's equipment: "Dr. Chen has prepared specialized gear." + - Chen asking about field experience: "How did the mission with Haxolottle go?" + +2. **Dynamic Context Variables** + - `time_of_day`: "morning", "afternoon", "evening", "late_night" + - `recent_mission_outcome`: "success", "partial", "failure" + - `agent_injury_status`: "healthy", "wounded", "recovering" + +3. **Relationship Cross-Talk** + - High rapport with Chen unlocks technical topics with Netherton + - Trust with Haxolottle affects handler briefings + +4. **Mood/Emotion System** + - NPC mood based on recent events + - Player stress level affects conversation tone + +## Summary + +The hub architecture provides: + +- **Modularity**: Personal and mission content separated +- **Context-Awareness**: Right conversations at right time +- **Scalability**: Easy to add new missions +- **Maintainability**: Changes isolated to relevant files +- **Natural Flow**: Seamless mix of personal and professional + +This architecture scales from 3 NPCs across 5 missions to 20 NPCs across 50 missions without becoming unwieldy. diff --git a/story_design/ink/chen_hub.ink b/story_design/ink/chen_hub.ink new file mode 100644 index 0000000..f5c160a --- /dev/null +++ b/story_design/ink/chen_hub.ink @@ -0,0 +1,519 @@ +// =========================================== +// DR. CHEN CONVERSATION HUB +// Break Escape Universe +// =========================================== +// Central entry point for all Dr. Chen conversations +// Mixes personal friendship building with technical support +// Context-aware based on current mission and equipment needs +// =========================================== + +// Include personal relationship file +INCLUDE dr_chen_ongoing_conversations.ink + +// Include mission-specific files (examples - add more as missions are created) +// INCLUDE chen_mission_ghost_equipment.ink +// INCLUDE chen_mission_data_sanctuary_tech.ink + +// =========================================== +// EXTERNAL CONTEXT VARIABLES +// These are provided by the game engine +// =========================================== + +EXTERNAL player_name // LOCAL - Player's agent name +EXTERNAL current_mission_id // LOCAL - Current mission being discussed +EXTERNAL npc_location // LOCAL - Where conversation happens ("lab", "equipment_room", "briefing_room", "field_support") +EXTERNAL mission_phase // LOCAL - Phase of current mission ("pre_briefing", "active", "debriefing", "downtime") +EXTERNAL equipment_status // LOCAL - Status of player's equipment ("nominal", "damaged", "needs_upgrade") + +// =========================================== +// GLOBAL VARIABLES (shared across all NPCs) +// =========================================== + +VAR total_missions_completed = 0 // GLOBAL - Total missions done +VAR professional_reputation = 0 // GLOBAL - Agent standing + +// =========================================== +// MAIN ENTRY POINT +// Called by game engine when player talks to Dr. Chen +// =========================================== + +=== chen_conversation_entry === +// This is the main entry point - game engine calls this + +{npc_location == "lab": + Dr. Chen: {player_name}! *looks up from workbench* Perfect timing. Come check this out! +- npc_location == "equipment_room": + Dr. Chen: Oh hey! Here for gear? I just finished calibrating some new equipment. +- npc_location == "briefing_room": + Dr. Chen: Agent {player_name}. *gestures to technical displays* Let's talk about the tech side of this operation. +- npc_location == "field_support": + Dr. Chen: *over comms* Reading you loud and clear. What do you need? +- else: + Dr. Chen: Hey! What brings you by? +} + +-> chen_main_hub + +// =========================================== +// MAIN HUB - CONTEXT-AWARE CONVERSATION MENU +// Dynamically shows personal + technical + mission topics +// =========================================== + +=== chen_main_hub === + +// Show different options based on location, mission phase, and relationship level + +// PERSONAL FRIENDSHIP OPTION (always available if topics exist) ++ {has_available_personal_topics() and mission_phase != "active"} [How are you doing, Dr. Chen?] + Dr. Chen: Oh! *surprised by personal question* + {npc_chen_rapport >= 70: + Dr. Chen: You know, I really appreciate when people ask that. Want to chat for a bit? + - else: + Dr. Chen: I'm good! Busy, but good. What's up? + } + -> jump_to_personal_conversations + +// EQUIPMENT AND TECHNICAL SUPPORT (high priority when damaged or needs upgrade) ++ {equipment_status == "damaged"} [My equipment took damage in the field] + Dr. Chen: *immediately concerned* Let me see it. What happened? + -> equipment_repair_discussion + ++ {equipment_status == "needs_upgrade"} [Request equipment upgrades for upcoming mission] + Dr. Chen: Upgrades! Yes! I've been working on some new gear. Let me show you what's available. + -> equipment_upgrade_menu + ++ {mission_phase == "active" and npc_location == "field_support"} [I need technical support in the field] + Dr. Chen: *alert* Okay, talk to me. What's the technical problem? + -> field_technical_support + +// MISSION-SPECIFIC TECHNICAL DISCUSSIONS ++ {current_mission_id == "ghost_in_machine" and mission_phase == "pre_briefing"} [What tech will I need for Ghost Protocol?] + Dr. Chen: Ghost Protocol! Okay, so I've prepared some specialized equipment for this one. Let me walk you through it. + -> mission_ghost_equipment_briefing + ++ {current_mission_id == "ghost_in_machine" and mission_phase == "debriefing"} [Technical debrief for Ghost Protocol] + Dr. Chen: How did the equipment perform? I need field data to improve the designs. + -> mission_ghost_tech_debrief + ++ {current_mission_id == "data_sanctuary"} [What tech is protecting the Data Sanctuary?] + Dr. Chen: *pulls up schematics* The sanctuary has multi-layered security. Let me explain the architecture. + -> mission_sanctuary_tech_overview + +// GENERAL TECHNICAL TOPICS ++ {mission_phase == "downtime"} [Ask about experimental technology] + Dr. Chen: *eyes light up* Oh! You want to hear about the experimental stuff? Because I have some REALLY cool projects going. + -> experimental_tech_discussion + ++ {mission_phase == "downtime" and npc_chen_rapport >= 50} [Offer to help test experimental equipment] + Dr. Chen: *excited* You'd volunteer for field testing? That would be incredibly helpful! + -> volunteer_field_testing + ++ {npc_chen_rapport >= 60} [Ask for technical training] + Dr. Chen: You want technical training? I love teaching! What area interests you? + -> technical_training_discussion + +// EXIT OPTIONS ++ {mission_phase == "active" and npc_location == "field_support"} [That's all I needed, thanks] + Dr. Chen: Roger that. I'll keep monitoring your situation. Call if you need anything! + #exit_conversation + -> END + ++ [That's all for now, Chen] + {npc_chen_rapport >= 80: + Dr. Chen: Sounds good! *warm smile* Always great talking with you. Stay safe out there! + - npc_chen_rapport >= 50: + Dr. Chen: Alright! Let me know if you need anything. Seriously, anytime. + - else: + Dr. Chen: Okay. Good luck with the mission! + } + #exit_conversation + -> END + +// =========================================== +// HELPER FUNCTION - Check for available personal topics +// =========================================== + +=== function has_available_personal_topics() === +// Returns true if there are any personal conversation topics available +{ + // Phase 1 topics (missions 1-5) + - total_missions_completed <= 5: + { + - not npc_chen_discussed_tech_philosophy: ~ return true + - not npc_chen_discussed_entropy_tech: ~ return true + - not npc_chen_discussed_chen_background: ~ return true + - not npc_chen_discussed_favorite_projects and npc_chen_rapport >= 55: ~ return true + - else: ~ return false + } + + // Phase 2 topics (missions 6-10) + - total_missions_completed <= 10: + { + - not npc_chen_discussed_experimental_tech: ~ return true + - not npc_chen_discussed_research_frustrations and npc_chen_rapport >= 65: ~ return true + - not npc_chen_discussed_field_vs_lab: ~ return true + - not npc_chen_discussed_ethical_tech and npc_chen_rapport >= 70: ~ return true + - else: ~ return false + } + + // Phase 3 topics (missions 11-15) + - total_missions_completed <= 15: + { + - not npc_chen_discussed_dream_projects and npc_chen_rapport >= 80: ~ return true + - not npc_chen_discussed_tech_risks and npc_chen_rapport >= 75: ~ return true + - not npc_chen_discussed_work_life_balance: ~ return true + - not npc_chen_discussed_mentorship and npc_chen_rapport >= 80: ~ return true + - else: ~ return false + } + + // Phase 4 topics (missions 16+) + - total_missions_completed > 15: + { + - not npc_chen_discussed_future_vision and npc_chen_rapport >= 90: ~ return true + - not npc_chen_discussed_friendship_value and npc_chen_rapport >= 85: ~ return true + - not npc_chen_discussed_collaborative_legacy and npc_chen_rapport >= 90: ~ return true + - not npc_chen_discussed_beyond_safetynet and npc_chen_rapport >= 88: ~ return true + - else: ~ return false + } + + - else: + ~ return false +} + +// =========================================== +// JUMP TO PERSONAL CONVERSATIONS +// Routes to the appropriate phase hub in personal file +// =========================================== + +=== jump_to_personal_conversations === +// Jump to appropriate phase hub based on progression, then return here +{ + - total_missions_completed <= 5: + -> dr_chen_ongoing_conversations.phase_1_hub_with_return -> + - total_missions_completed <= 10: + -> dr_chen_ongoing_conversations.phase_2_hub_with_return -> + - total_missions_completed <= 15: + -> dr_chen_ongoing_conversations.phase_3_hub_with_return -> + - total_missions_completed > 15: + -> dr_chen_ongoing_conversations.phase_4_hub_with_return -> +} + +// Return from personal conversations +Dr. Chen: *switches back to tech mode* So, what else did you need? +-> chen_main_hub + +// =========================================== +// EQUIPMENT AND TECHNICAL SUPPORT +// =========================================== + +=== equipment_repair_discussion === +Dr. Chen: *examines the damaged equipment* Okay, let me see... *muttering technical analysis* + +Dr. Chen: This is fixable, but it'll take some time. What happened out there? + ++ [Explain the damage honestly] + You explain how the equipment was damaged during the operation. + Dr. Chen: *nods* Okay, that's actually really useful feedback. I can improve the durability in the next version. + Dr. Chen: Give me about two hours. I'll have this repaired and reinforced. + ~ npc_chen_rapport += 5 + #equipment_repair_started + -> chen_main_hub + ++ [Say it was your fault] + Dr. Chen: Hey, no—don't beat yourself up. Field conditions are unpredictable. That's why we build redundancy. + Dr. Chen: Let me fix this and add some additional protection. You're not the first agent to damage gear in the field. + ~ npc_chen_rapport += 8 + -> chen_main_hub + ++ [Blame the equipment design] + Dr. Chen: *slight frown* Okay... I mean, there's always room for improvement. But the equipment is rated for standard field conditions. + Dr. Chen: I'll repair it. And I'll review the design specs. But be more careful with the gear, alright? + ~ npc_chen_rapport -= 3 + -> chen_main_hub + +=== equipment_upgrade_menu === +Dr. Chen: *brings up equipment catalog on holographic display* + +Dr. Chen: Alright, so here's what's available for your access level: + +Dr. Chen: Network infiltration package—improved encryption bypass, faster data extraction. +Dr. Chen: Surveillance countermeasures—better detection avoidance, signal jamming upgrades. +Dr. Chen: Physical security tools—advanced lockpicks, biometric spoofing, RFID cloning. + +What interests you? + ++ [Network infiltration upgrade] + Dr. Chen: Good choice. *pulls equipment* This has the latest decryption algorithms. Should shave minutes off your infiltration time. + Dr. Chen: I'll add it to your loadout. Don't lose this one—it's expensive! + #equipment_upgraded_network + ~ professional_reputation += 1 + -> chen_main_hub + ++ [Surveillance countermeasures] + Dr. Chen: Smart. Staying undetected is half the job. *configures equipment* + Dr. Chen: This should make you nearly invisible to standard monitoring systems. Field test it and let me know how it performs. + #equipment_upgraded_surveillance + ~ professional_reputation += 1 + -> chen_main_hub + ++ [Physical security tools] + Dr. Chen: The classics, updated. *hands over toolkit* + Dr. Chen: New biometric spoofer uses quantum randomization—way harder to detect than the old version. + #equipment_upgraded_physical + ~ professional_reputation += 1 + -> chen_main_hub + ++ [Ask what they recommend] + Dr. Chen: *considers your mission profile* + {current_mission_id == "ghost_in_machine": + Dr. Chen: For Ghost Protocol? Definitely the network package. You'll be dealing with sophisticated digital security. + - else: + Dr. Chen: Based on your recent missions... I'd say surveillance countermeasures. You're running a lot of infiltration ops. + } + Dr. Chen: But it's your call. You know what you need in the field. + -> equipment_upgrade_menu + +=== field_technical_support === +Dr. Chen: *focused* Okay, I'm pulling up your equipment telemetry. What's the technical issue? + ++ [System won't connect to target network] + Dr. Chen: *checking diagnostics* Hmm, they might be using non-standard protocols. Try cycling through alt-frequencies. Settings menu, third tab. + Dr. Chen: If that doesn't work, there might be active jamming. I can try remote boost, but it'll make you more detectable. + -> field_support_followup + ++ [Encryption is taking too long] + Dr. Chen: Yeah, they upgraded their security. Um... *rapid thinking* ...okay, try the quantum bypass. It's experimental but it should work. + Dr. Chen: Quantum menu, enable fast-mode. Warning: it generates a lot of heat. Don't run it for more than five minutes. + ~ npc_chen_rapport += 5 + -> field_support_followup + ++ [Equipment is malfunctioning] + Dr. Chen: *concerned* Malfunctioning how? Be specific. + Dr. Chen: Actually, I'm seeing some anomalous readings on my end. Let me try a remote reset... *working* + Dr. Chen: There. Try now. That should stabilize it. + -> field_support_followup + +=== field_support_followup === +Dr. Chen: Did that help? Are you good to continue? + ++ [Yes, that fixed it. Thanks!] + Dr. Chen: *relieved* Oh good! Okay, I'll keep monitoring. Call if anything else goes wrong. + ~ npc_chen_rapport += 8 + -> chen_main_hub + ++ [Still having issues] + Dr. Chen: *more concerned* Okay, this might be a hardware problem. Can you safely abort and extract? + Dr. Chen: I don't want you stuck in there with malfunctioning equipment. Your safety is more important than the mission. + ~ npc_chen_rapport += 10 + -> chen_main_hub + +=== mission_ghost_equipment_briefing === +Dr. Chen: *pulls up equipment display with visible excitement* + +Dr. Chen: Okay! So for Ghost Protocol, I've prepared some specialized gear. This is actually really cool tech. + +Dr. Chen: First—active network camouflage. Makes your digital signature look like normal traffic. You'll blend into their network like you're just another employee. + +Dr. Chen: Second—enhanced data exfiltration tools. Faster extraction, better compression, leaves minimal traces. + +Dr. Chen: Third—and this is experimental—quantum-encrypted comms. Even if they intercept your transmissions to Haxolottle, they can't decrypt them. + ++ [Ask how the network camouflage works] + Dr. Chen: *launches into technical explanation* ...so basically, it analyzes local traffic patterns and generates fake activity that matches the statistical profile... + -> ghost_equipment_details + ++ [Ask about the risks of experimental tech] + Dr. Chen: *appreciates the question* Good thinking. The quantum comms are 95% reliable in testing. If they fail, you default to standard encrypted comms. + Dr. Chen: I've built in fallbacks. Worst case, you lose some capability but not all capability. + ~ npc_chen_rapport += 5 + -> ghost_equipment_details + ++ [Express confidence in the tech] + Dr. Chen: *grins* I'm glad you trust my work! I've tested this extensively. You'll be well-equipped. + ~ npc_chen_rapport += 8 + -> ghost_equipment_details + +=== ghost_equipment_details === +Dr. Chen: Any other questions about the gear? Or are you ready for me to configure your loadout? + ++ [More questions about technical specs] + Dr. Chen: *happily explains more details* + -> ghost_equipment_details + ++ [I'm ready. Configure my loadout.] + Dr. Chen: Perfect! Give me twenty minutes. I'll have everything calibrated to your biometrics. + Dr. Chen: *genuine* And hey... be careful out there, okay? I built good equipment, but you're the one taking the risks. + {npc_chen_rapport >= 60: + Dr. Chen: Come back safe. The tech works better when the operator survives. + ~ npc_chen_rapport += 5 + } + #equipment_configured + -> chen_main_hub + +=== mission_ghost_tech_debrief === +Dr. Chen: *eager for feedback* Okay, tell me everything! How did the equipment perform? + ++ [Everything worked perfectly] + Dr. Chen: *extremely pleased* Yes! That's what I want to hear! The camouflage held up? No detection issues? + Dr. Chen: This is great data. I can certify this tech for wider deployment now. + ~ npc_chen_rapport += 10 + ~ npc_chen_tech_collaboration += 1 + -> chen_main_hub + ++ [Mostly good, but had some issues with X] + Dr. Chen: *immediately taking notes* Okay, tell me specifics. What were the exact conditions when the issue occurred? + You provide detailed feedback. + Dr. Chen: Perfect. This is exactly the field data I need. I can iterate on the design and fix that problem. + Dr. Chen: Thank you for the thorough report. Seriously. This makes my job so much easier. + ~ npc_chen_rapport += 15 + ~ npc_chen_tech_collaboration += 2 + -> chen_main_hub + ++ [Honestly, it saved my life] + Dr. Chen: *becomes emotional* It... really? Tell me what happened. + You explain how the equipment got you out of a dangerous situation. + Dr. Chen: *voice cracks slightly* That's... that's why I do this. Building tech that keeps agents safe. + Dr. Chen: I'm really glad you're okay. And thank you for the feedback. I'll keep improving it. + ~ npc_chen_rapport += 20 + ~ npc_chen_tech_collaboration += 2 + -> chen_main_hub + +=== mission_sanctuary_tech_overview === +Dr. Chen: *brings up Data Sanctuary schematics* + +Dr. Chen: The sanctuary has probably the most sophisticated security architecture SAFETYNET has ever built. Multi-layered, redundant, paranoid design. + +Dr. Chen: Physical layer: Biometric access, man-traps, Faraday shielding. Digital layer: Air-gapped systems, quantum encryption, intrusion detection AI. + +Dr. Chen: If ENTROPY tries to breach this, they'll need nation-state level capabilities. Which... *worried* ...they might have. + ++ [Ask if the defenses are enough] + Dr. Chen: *honest* Should be. But ENTROPY has surprised us before. That's why we're adding additional measures. + Dr. Chen: And why agents like you are on standby. Tech is great, but humans adapt in ways systems can't. + -> chen_main_hub + ++ [Ask what your role will be] + Dr. Chen: You'll be part of the rapid response team. If ENTROPY attempts intrusion, you'll help counter them. + Dr. Chen: I'm preparing specialized defensive equipment. Detection tools, countermeasure packages, emergency lockdown access. + -> chen_main_hub + ++ [Express concern about ENTROPY's capabilities] + Dr. Chen: *sighs* Yeah, me too. They're getting better. Faster. More sophisticated. + Dr. Chen: That's why I work late. Every improvement I make might be the difference between holding the line and catastrophic breach. + ~ npc_chen_rapport += 5 + -> chen_main_hub + +=== experimental_tech_discussion === +Dr. Chen: *absolute enthusiasm* Oh! Okay, so I'm working on some really exciting stuff right now! + +Dr. Chen: Project Mirage—adaptive network camouflage that learns from each deployment. Gets better over time. + +Dr. Chen: Project Sentinel—predictive threat detection AI. Tries to identify attacks before they happen. + +Dr. Chen: Project Fortress—quantum-resistant encryption for critical communications. Future-proofing against quantum computing threats. + +Which interests you? + ++ [Tell me about Project Mirage] + -> experimental_mirage_details + ++ [Explain Project Sentinel] + -> experimental_sentinel_details + ++ [Describe Project Fortress] + -> experimental_fortress_details + ++ [All of it sounds amazing] + Dr. Chen: *huge grin* Right?! This is why I love this job. Every project is pushing boundaries! + ~ npc_chen_rapport += 10 + -> chen_main_hub + +=== experimental_mirage_details === +Dr. Chen: Mirage is about learning adaptation. Current camouflage is static—I configure it, you deploy it. + +Dr. Chen: Mirage learns from each mission. Analyzes what worked, what didn't. Automatically improves its disguise algorithms. + +Dr. Chen: Eventually, it becomes customized to your specific operational patterns. Personalized stealth. + +Dr. Chen: Still in early testing, but the results are promising! + +-> experimental_tech_discussion + +=== experimental_sentinel_details === +Dr. Chen: Sentinel is my attempt at precognition through data analysis. + +Dr. Chen: It monitors network traffic, security logs, ENTROPY communication patterns. Looks for pre-attack indicators. + +Dr. Chen: Not perfect—lots of false positives still. But when it works? We get warning hours before ENTROPY strikes. + +Dr. Chen: Could revolutionize our defensive posture if I can refine it. + +-> experimental_tech_discussion + +=== experimental_fortress_details === +Dr. Chen: Fortress addresses a scary problem—quantum computers breaking current encryption. + +Dr. Chen: When quantum computing becomes widespread, every encrypted message we've ever sent becomes readable. That's terrifying. + +Dr. Chen: Fortress uses quantum-resistant mathematics. Should remain secure even against quantum decryption. + +Dr. Chen: It's mathematically beautiful and operationally critical. + +-> experimental_tech_discussion + +=== volunteer_field_testing === +Dr. Chen: *lights up* You'd really volunteer? Most agents avoid experimental gear! + +Dr. Chen: I need field testing data. Lab conditions can't replicate real operational stress. + +Dr. Chen: I promise to build in safety margins. Fallback systems. Kill switches. Your safety comes first. + ++ [I trust your work. I'll test it.] + Dr. Chen: *emotional* That trust means everything. Seriously. + Dr. Chen: I'll prepare test equipment for your next mission. Thorough briefing beforehand. Real-time monitoring during deployment. + Dr. Chen: We're partners in this. Thank you. + ~ npc_chen_rapport += 20 + ~ npc_chen_tech_collaboration += 3 + -> chen_main_hub + ++ [What would I be testing specifically?] + Dr. Chen: Depends on your next mission profile. Probably the adaptive camouflage or improved detection tools. + Dr. Chen: Nothing that could catastrophically fail. Just new features that need validation. + -> volunteer_field_testing + ++ [Maybe next time] + Dr. Chen: No pressure! Experimental testing should always be voluntary. But if you change your mind, let me know! + -> chen_main_hub + +=== technical_training_discussion === +Dr. Chen: Technical training! I love teaching! + +Dr. Chen: What interests you? Network security? Hardware hacking? Cryptography? Sensor systems? + ++ [Network security] + Dr. Chen: Excellent choice. Understanding networks makes you better at infiltrating them. + Dr. Chen: I can run you through penetration testing, protocol analysis, intrusion detection... + ~ professional_reputation += 2 + #training_scheduled_network + -> chen_main_hub + ++ [Hardware hacking] + Dr. Chen: Oh, fun! Physical access to systems. Let me teach you about circuit analysis, firmware exploitation, hardware implants... + ~ professional_reputation += 2 + #training_scheduled_hardware + -> chen_main_hub + ++ [Cryptography] + Dr. Chen: *very excited* My specialty! I can teach you encryption theory, code-breaking techniques, quantum cryptography basics... + ~ professional_reputation += 2 + ~ npc_chen_rapport += 5 + #training_scheduled_crypto + -> chen_main_hub + ++ [Just make me better at my job] + Dr. Chen: *grins* I can do that. Let me design a custom training program based on your recent missions. + Dr. Chen: I'll mix practical skills with theoretical knowledge. Make you a more effective operator. + ~ professional_reputation += 3 + -> chen_main_hub + +=== END diff --git a/story_design/ink/dr_chen_ongoing_conversations.ink b/story_design/ink/dr_chen_ongoing_conversations.ink index 7aa7480..7597a86 100644 --- a/story_design/ink/dr_chen_ongoing_conversations.ink +++ b/story_design/ink/dr_chen_ongoing_conversations.ink @@ -13,33 +13,33 @@ // Your game engine must persist these across ALL missions // =========================================== -VAR npc_npc_chen_rapport = 50 // PERSISTENT - Dr. Chen's rapport with agent (0-100) -VAR npc_chen_npc_chen_tech_collaboration = 0 // PERSISTENT - Successful tech collaborations -VAR npc_chen_npc_chen_shared_discoveries = 0 // PERSISTENT - Technical breakthroughs together -VAR npc_chen_npc_chen_personal_conversations = 0 // PERSISTENT - Non-work discussions +VAR npc_chen_rapport = 50 // PERSISTENT - Dr. Chen's rapport with agent (0-100) +VAR npc_chen_tech_collaboration = 0 // PERSISTENT - Successful tech collaborations +VAR npc_chen_shared_discoveries = 0 // PERSISTENT - Technical breakthroughs together +VAR npc_chen_personal_conversations = 0 // PERSISTENT - Non-work discussions // Topic tracking - ALL PERSISTENT (never reset) -VAR npc_chen_npc_chen_discussed_tech_philosophy = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_entropy_tech = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_chen_background = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_favorite_projects = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_experimental_tech = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_research_frustrations = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_field_vs_lab = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_ethical_tech = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_dream_projects = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_tech_risks = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_work_life_balance = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_mentorship = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_future_vision = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_friendship_value = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_collaborative_legacy = false // PERSISTENT -VAR npc_chen_npc_chen_discussed_beyond_safetynet = false // PERSISTENT +VAR npc_chen_discussed_tech_philosophy = false // PERSISTENT +VAR npc_chen_discussed_entropy_tech = false // PERSISTENT +VAR npc_chen_discussed_chen_background = false // PERSISTENT +VAR npc_chen_discussed_favorite_projects = false // PERSISTENT +VAR npc_chen_discussed_experimental_tech = false // PERSISTENT +VAR npc_chen_discussed_research_frustrations = false // PERSISTENT +VAR npc_chen_discussed_field_vs_lab = false // PERSISTENT +VAR npc_chen_discussed_ethical_tech = false // PERSISTENT +VAR npc_chen_discussed_dream_projects = false // PERSISTENT +VAR npc_chen_discussed_tech_risks = false // PERSISTENT +VAR npc_chen_discussed_work_life_balance = false // PERSISTENT +VAR npc_chen_discussed_mentorship = false // PERSISTENT +VAR npc_chen_discussed_future_vision = false // PERSISTENT +VAR npc_chen_discussed_friendship_value = false // PERSISTENT +VAR npc_chen_discussed_collaborative_legacy = false // PERSISTENT +VAR npc_chen_discussed_beyond_safetynet = false // PERSISTENT // Special moments - PERSISTENT -VAR npc_npc_chen_shared_personal_story = false // PERSISTENT -VAR npc_chen_npc_chen_breakthrough_together = false // PERSISTENT -VAR npc_chen_npc_chen_earned_research_partner_status = false // PERSISTENT +VAR npc_chen_shared_personal_story = false // PERSISTENT +VAR npc_chen_breakthrough_together = false // PERSISTENT +VAR npc_chen_earned_research_partner_status = false // PERSISTENT // =========================================== // GLOBAL VARIABLES (session-only, span NPCs) diff --git a/story_design/ink/haxolottle_hub.ink b/story_design/ink/haxolottle_hub.ink new file mode 100644 index 0000000..19d0972 --- /dev/null +++ b/story_design/ink/haxolottle_hub.ink @@ -0,0 +1,640 @@ +// =========================================== +// HAXOLOTTLE CONVERSATION HUB +// Break Escape Universe +// =========================================== +// Central entry point for all Haxolottle (Agent 0x99) conversations +// Mixes personal friendship building with handler support +// Context-aware based on mission phase and operational needs +// Protocol 47-Alpha: No real identities disclosed +// =========================================== + +// Include personal friendship file +INCLUDE haxolottle_ongoing_conversations.ink + +// Include mission-specific files (examples - add more as missions are created) +// INCLUDE haxolottle_mission_ghost_handler.ink +// INCLUDE haxolottle_mission_data_sanctuary_support.ink + +// =========================================== +// EXTERNAL CONTEXT VARIABLES +// These are provided by the game engine +// =========================================== + +EXTERNAL player_name // LOCAL - Player's agent codename (not real name!) +EXTERNAL current_mission_id // LOCAL - Current mission being discussed +EXTERNAL npc_location // LOCAL - Where conversation happens ("handler_station", "briefing_room", "comms_active", "safehouse") +EXTERNAL mission_phase // LOCAL - Phase of current mission ("planning", "active", "debriefing", "downtime") +EXTERNAL operational_stress_level // LOCAL - How stressed the current situation is ("low", "moderate", "high", "crisis") + +// =========================================== +// GLOBAL VARIABLES (shared across all NPCs) +// =========================================== + +VAR total_missions_completed = 0 // GLOBAL - Total missions done +VAR professional_reputation = 0 // GLOBAL - Agent standing + +// =========================================== +// MAIN ENTRY POINT +// Called by game engine when player talks to Haxolottle +// =========================================== + +=== haxolottle_conversation_entry === +// This is the main entry point - game engine calls this + +{npc_location == "handler_station": + Haxolottle: Agent {player_name}! *swivels chair around from monitors* Good to see you. What's up? +- npc_location == "briefing_room": + Haxolottle: *sits across from you with tablet* Okay, let's review the handler support plan for this operation. +- npc_location == "comms_active": + Haxolottle: *over secure comms, calm and focused* Reading you clearly, {player_name}. How can I help? +- npc_location == "safehouse": + Haxolottle: *relaxed posture, coffee mug nearby* Hey. Safe to talk here. What do you need? +- else: + Haxolottle: {player_name}! What brings you by? +} + +-> haxolottle_main_hub + +// =========================================== +// MAIN HUB - CONTEXT-AWARE CONVERSATION MENU +// Dynamically shows personal + operational + mission topics +// =========================================== + +=== haxolottle_main_hub === + +// Show different options based on location, mission phase, stress level, and friendship + +// CRISIS HANDLING (takes priority during high-stress situations) ++ {operational_stress_level == "crisis" and mission_phase == "active"} [I need immediate handler support!] + Haxolottle: *instantly alert* Talk to me. What's happening? + -> crisis_handler_support + +// PERSONAL FRIENDSHIP OPTION (available during downtime if topics exist) ++ {has_available_personal_topics() and mission_phase == "downtime"} [Want to chat? Non-work stuff?] + Haxolottle: *grins* Personal conversation? According to Regulation 847, that's encouraged for psychological wellbeing. + {npc_haxolottle_friendship_level >= 60: + Haxolottle: And honestly, I could use a break from staring at monitors. What's on your mind? + - else: + Haxolottle: Sure, I've got time. What do you want to talk about? + } + -> jump_to_personal_conversations + +// ACTIVE MISSION HANDLER SUPPORT ++ {mission_phase == "active" and operational_stress_level != "crisis"} [Request handler support] + Haxolottle: On it. What do you need? + -> active_mission_handler_support + ++ {mission_phase == "active"} [Request intel update] + Haxolottle: *pulls up intel feeds* Let me give you the current situation... + -> intel_update_active + ++ {mission_phase == "active" and operational_stress_level == "high"} [Situation is getting complicated] + Haxolottle: *focused* Okay. Talk me through what's happening. We'll adapt. + -> complicated_situation_support + +// MISSION PLANNING AND BRIEFING ++ {current_mission_id == "ghost_in_machine" and mission_phase == "planning"} [Review handler plan for Ghost Protocol] + Haxolottle: Ghost Protocol. Right. *pulls up mission docs* Let's go through the support plan. + -> mission_ghost_handler_briefing + ++ {current_mission_id == "data_sanctuary" and mission_phase == "planning"} [Discuss Data Sanctuary handler support] + Haxolottle: Data Sanctuary defensive operation. I'll be coordinating multi-agent support. Here's how we'll handle it. + -> mission_sanctuary_handler_plan + ++ {mission_phase == "planning"} [Ask about contingency planning] + Haxolottle: Contingencies! Yes. Let's talk about what happens when things go sideways. + Haxolottle: Per the axolotl principle—*slight smile*—we plan for regeneration. + -> contingency_planning_discussion + +// DEBRIEFING ++ {mission_phase == "debriefing"} [Debrief the operation] + Haxolottle: *opens debrief form* Alright. Let's walk through what happened. Start from the beginning. + -> operation_debrief + ++ {mission_phase == "debriefing" and operational_stress_level == "high"} [That mission was rough] + Haxolottle: *concerned* Yeah, I saw. Are you okay? Physically? Mentally? + -> rough_mission_debrief + +// GENERAL HANDLER TOPICS (available during downtime) ++ {mission_phase == "downtime"} [Ask about current threat landscape] + Haxolottle: *brings up threat analysis dashboard* So, here's what ENTROPY is up to lately... + -> threat_landscape_update + ++ {mission_phase == "downtime" and npc_haxolottle_friendship_level >= 40} [Ask for operational advice] + Haxolottle: You want my handler perspective? *settles in* Sure. What's the question? + -> operational_advice_from_handler + ++ {npc_haxolottle_friendship_level >= 50 and mission_phase == "downtime"} [Ask about handler tradecraft] + Haxolottle: Handler tradecraft! You're interested in the behind-the-scenes stuff? + -> handler_tradecraft_discussion + +// EXIT OPTIONS ++ {mission_phase == "active"} [That's all I needed. Thanks, Hax.] + Haxolottle: Roger. I'm monitoring your situation. Call if you need anything. Stay safe out there. + #exit_conversation + -> END + ++ [That's all for now] + {npc_haxolottle_friendship_level >= 70: + Haxolottle: Alright, {player_name}. *genuine warmth* Always good talking with you. Take care of yourself. + - npc_haxolottle_friendship_level >= 40: + Haxolottle: Sounds good. Let me know if you need anything. Really, anytime. + - else: + Haxolottle: Okay. Talk later! + } + #exit_conversation + -> END + +// =========================================== +// HELPER FUNCTION - Check for available personal topics +// =========================================== + +=== function has_available_personal_topics() === +// Returns true if there are any personal conversation topics available +{ + // Phase 1 topics (missions 1-5) + - total_missions_completed <= 5: + { + - not npc_haxolottle_talked_hobbies_general: ~ return true + - not npc_haxolottle_talked_axolotl_obsession: ~ return true + - not npc_haxolottle_talked_music_taste: ~ return true + - not npc_haxolottle_talked_coffee_preferences and npc_haxolottle_talked_hobbies_general: ~ return true + - not npc_haxolottle_talked_stress_management and npc_haxolottle_friendship_level >= 15: ~ return true + - else: ~ return false + } + + // Phase 2 topics (missions 6-10) + - total_missions_completed <= 10: + { + - not npc_haxolottle_talked_philosophy_change: ~ return true + - not npc_haxolottle_talked_handler_life: ~ return true + - not npc_haxolottle_talked_field_nostalgia and npc_haxolottle_friendship_level >= 30: ~ return true + - not npc_haxolottle_talked_weird_habits: ~ return true + - not npc_haxolottle_talked_favorite_operations and npc_haxolottle_friendship_level >= 35: ~ return true + - else: ~ return false + } + + // Phase 3 and 4 topics would go here (file only has Phase 1-2 currently) + - else: + ~ return false +} + +// =========================================== +// JUMP TO PERSONAL CONVERSATIONS +// Routes to the appropriate phase hub in personal file +// =========================================== + +=== jump_to_personal_conversations === +// Jump to appropriate phase hub based on progression, then return here +{ + - total_missions_completed <= 5: + -> haxolottle_ongoing_conversations.phase_1_hub_with_return -> + - total_missions_completed <= 10: + -> haxolottle_ongoing_conversations.phase_2_hub_with_return -> +} + +// Return from personal conversations +Haxolottle: *shifts back to handler mode* So, anything else operational? +-> haxolottle_main_hub + +// =========================================== +// CRISIS HANDLER SUPPORT +// =========================================== + +=== crisis_handler_support === +Haxolottle: *absolutely focused* Okay. Deep breath. You've trained for this. + +Haxolottle: Tell me the situation. What's the immediate threat? + ++ [Explain the crisis situation] + You quickly explain the critical situation you're facing. + Haxolottle: *processing rapidly* Okay. Okay. Here's what we're going to do... + -> crisis_solution_planning + ++ [I'm compromised. Need extraction.] + Haxolottle: *immediately types* Extraction protocol initiated. I'm coordinating with Netherton now. + Haxolottle: Get to emergency waypoint Bravo. Fifteen minutes. Can you make it? + -> emergency_extraction_coordination + ++ [Equipment failure in critical situation] + Haxolottle: *contacts Dr. Chen on second channel* Chen, I need you. Equipment failure, active operation. + Haxolottle: Agent {player_name}, Chen is on comms now. Walk them through the problem. + -> equipment_crisis_support + +=== crisis_solution_planning === +Haxolottle: *calm and methodical despite crisis* + +Haxolottle: Alright. You have options. None are perfect, but you can regenerate from this. + +Haxolottle: Option Alpha: [describes tactical approach]. Risk level: moderate. Success probability: 65%. + +Haxolottle: Option Bravo: [describes alternative]. Risk level: high. Success probability: 80% if it works. + +Haxolottle: Option Charlie: Abort and extract. Risk level: moderate. Mission fails but you live. + +Which approach do you want to take? + ++ [Option Alpha] + Haxolottle: Good call. I agree. Here's how we execute... + #crisis_resolved_alpha + -> haxolottle_main_hub + ++ [Option Bravo] + Haxolottle: High risk, but yeah, the payoff justifies it. I'll support you. Let's do this carefully. + #crisis_resolved_bravo + -> haxolottle_main_hub + ++ [Option Charlie - extract] + Haxolottle: Smart. Live to fight another day. Coordinates extraction... + Haxolottle: You made the right call. Equipment and missions are replaceable. You're not. + ~ npc_haxolottle_friendship_level += 10 + #crisis_extraction + -> haxolottle_main_hub + ++ [Ask for their recommendation] + Haxolottle: *appreciates being consulted* + {operational_stress_level == "crisis": + Haxolottle: Honest assessment? Extract. The mission isn't worth your life. But it's your call. + - else: + Haxolottle: I'd try Alpha. Calculated risk with decent probability. But you're the one in the field. + } + -> crisis_solution_planning + +=== emergency_extraction_coordination === +Haxolottle: *rapid coordination on multiple channels* + +Haxolottle: Netherton has authorized emergency extraction. Asset protection priority. + +Haxolottle: Route to waypoint Bravo: *provides detailed navigation* + +Haxolottle: I've got eyes on security feeds. I'll guide you around patrol patterns. + +Haxolottle: {player_name}—*firm but caring*—you've got this. I'm with you every step. Move now. + +#emergency_extraction_active +-> END + +=== equipment_crisis_support === +// Dr. Chen joins the comms channel +Dr. Chen: *over comms* Okay, I'm here. What's failing? + +Haxolottle: I'll coordinate while Chen troubleshoots the tech. Two-handler support. + +[This would integrate with Chen's technical support systems] + +#multi_handler_crisis_support +-> haxolottle_main_hub + +// =========================================== +// ACTIVE MISSION SUPPORT +// =========================================== + +=== active_mission_handler_support === +Haxolottle: *professional focus* What kind of support do you need? + ++ [Intel refresh - what am I walking into?] + Haxolottle: *pulls up real-time intel* Current situation: [describes updated tactical picture] + Haxolottle: Changes from briefing: [notes differences]. Adapt accordingly. + -> haxolottle_main_hub + ++ [Need security status update] + Haxolottle: *checking feeds* Security status: [describes guard patterns, surveillance state] + Haxolottle: Best infiltration window is in {twelve} minutes. That work for you? + -> haxolottle_main_hub + ++ [Requesting abort confirmation] + Haxolottle: *serious* You want to abort? Talk to me. What's the situation? + -> abort_request_discussion + ++ [Just checking in] + Haxolottle: *reassuring* All good. You're doing great. Operational tempo is solid. Keep it up. + ~ npc_haxolottle_friendship_level += 3 + -> haxolottle_main_hub + +=== intel_update_active === +Haxolottle: *real-time analysis on monitors* + +Haxolottle: Current intel picture: ENTROPY activity level {moderate}. No indication they're aware of you. + +Haxolottle: Target location status: [describes current state based on surveillance] + +Haxolottle: Recommended approach: [tactical suggestion based on current intel] + ++ [Acknowledge and proceed] + Haxolottle: Roger. I'll keep monitoring. Call if situation changes. + -> haxolottle_main_hub + ++ [Intel doesn't match what I'm seeing] + Haxolottle: *immediately alert* Explain. What are you seeing that I'm not? + -> intel_discrepancy_resolution + ++ [Request deeper analysis] + Haxolottle: *types rapidly* Give me two minutes. I'll pull additional sources... + -> deep_intel_analysis + +=== complicated_situation_support === +Haxolottle: *calm under pressure* Okay. Complications are normal. We adapt. + +Haxolottle: Talk me through the specific complication. What changed? + ++ [Explain the complication] + You describe how the situation has become more complex. + Haxolottle: *processes* Alright. That's not ideal, but it's manageable. Here's how we adjust... + Haxolottle: Remember the axolotl principle. Original approach failed. Time to regenerate a new one. + ~ npc_haxolottle_friendship_level += 5 + -> adaptation_planning + ++ [Multiple things going wrong] + Haxolottle: *focused* Okay, let's triage. What's the most immediate problem? + -> crisis_triage + ++ [I think I need to abort] + Haxolottle: *supportive* That's a valid option. Let's assess together. Walk me through your reasoning. + -> abort_assessment + +=== adaptation_planning === +Haxolottle: New plan: [outlines adapted approach based on the complication] + +Haxolottle: This should account for the changes you're seeing. Thoughts? + ++ [Sounds good. Proceeding with adapted plan.] + Haxolottle: Excellent. Execute when ready. I'm monitoring your six. + -> haxolottle_main_hub + ++ [Still risky. What if it doesn't work?] + Haxolottle: Fair concern. Backup plan: [outlines contingency] + Haxolottle: You'll have options. That's what matters. + -> haxolottle_main_hub + ++ [Got a better idea] + Haxolottle: *interested* I'm listening. What are you thinking? + -> agent_alternative_plan + +=== abort_request_discussion === +Haxolottle: *takes it seriously* Okay. If you want to abort, we abort. Your judgment in the field is what matters. + +Haxolottle: But help me understand—is this "mission parameters changed beyond acceptable risk" or "something feels wrong"? + ++ [Risk has exceeded acceptable parameters] + Haxolottle: *nods* Operational assessment. Respected. I'll coordinate extraction. + Haxolottle: Netherton might push back, but I'll support your call. You're the one taking the risk. + ~ npc_haxolottle_friendship_level += 8 + #mission_aborted + -> haxolottle_main_hub + ++ [Something feels wrong - can't explain it] + Haxolottle: *trusts your instinct* That's valid. Field intuition saves lives. Abort authorized. + Haxolottle: We can analyze what felt wrong afterwards. Right now, get clear. + ~ npc_haxolottle_friendship_level += 10 + #mission_aborted_intuition + -> haxolottle_main_hub + ++ [Actually, let me try one more thing first] + Haxolottle: *supportive* Okay. But the abort option stays on the table. I've got your back either way. + -> haxolottle_main_hub + +=== intel_discrepancy_resolution === +Haxolottle: *very focused* Intel discrepancy is serious. Describe exactly what you're seeing. + +You explain the difference between Haxolottle's intel and ground truth. + +Haxolottle: *urgent typing* Okay. Either my feeds are compromised or ENTROPY changed something recently. + +Haxolottle: Recommend trusting your eyes over my monitors. Proceed with extreme caution. I'm investigating the discrepancy. + +{npc_haxolottle_friendship_level >= 50: + Haxolottle: *concerned* And {player_name}? Be careful. If my intel is wrong, you're more exposed than we thought. + ~ npc_haxolottle_friendship_level += 5 +} + +-> haxolottle_main_hub + +// =========================================== +// MISSION-SPECIFIC HANDLER BRIEFINGS +// =========================================== + +=== mission_ghost_handler_briefing === +Haxolottle: *reviews mission documents* + +Haxolottle: Ghost Protocol. High-stakes infiltration. Here's the handler support plan. + +Haxolottle: Before you go in: I'll have access to facility security feeds, external surveillance, and ENTROPY communication intercepts. + +Haxolottle: During infiltration: I'll provide real-time guidance on security patrols, alert you to threats, guide route adjustments. + +Haxolottle: If compromised: Emergency extraction protocols ready. Three waypoints prepared. + ++ [How reliable is the security feed access?] + Haxolottle: 85% confidence. Dr. Chen provided the access tools. They're good, but not perfect. + Haxolottle: If feeds cut out, you'll need to go silent running. We've prepared for that contingency. + -> mission_ghost_handler_briefing + ++ [What if comms go down?] + Haxolottle: Good question. If we lose comms: fall back to pre-planned exfiltration route Alpha. + Haxolottle: I'll send periodic encrypted status pings. If you don't respond, I initiate extraction protocols. + -> mission_ghost_handler_briefing + ++ [Sounds solid. I'm confident in this plan.] + Haxolottle: *slight smile* Good. Because I've run hundreds of handler ops, and this is one of my better plans. + Haxolottle: We've got this. Partnership. + ~ npc_haxolottle_friendship_level += 5 + -> haxolottle_main_hub + +=== mission_sanctuary_handler_plan === +Haxolottle: Data Sanctuary defensive operation. Different from infiltration—we're protecting rather than penetrating. + +Haxolottle: I'll be coordinating four agents plus security personnel. Central tactical coordinator role. + +Haxolottle: Your position will be [describes defensive position]. If ENTROPY attempts breach, you respond to my directions. + +Haxolottle: This requires trusting my tactical picture. I'll be seeing things you can't. Follow my instructions precisely. + ++ [I trust your tactical judgment] + Haxolottle: *appreciates that* Thank you. Command is easier when agents trust the handler. + Haxolottle: I won't let you down. + ~ npc_haxolottle_friendship_level += 8 + -> haxolottle_main_hub + ++ [What if I see something you don't?] + Haxolottle: *good question* Always report anomalies immediately. You're my eyes on the ground. + Haxolottle: I coordinate big picture. You provide ground truth. Both matter. + -> mission_sanctuary_handler_plan + ++ [Coordinating four agents sounds complex] + Haxolottle: It is. But I've done multi-agent ops before. As long as everyone follows instructions, it works. + Haxolottle: Just need everyone to trust the system. And me. + -> mission_sanctuary_handler_plan + +=== contingency_planning_discussion === +Haxolottle: Contingencies! My favorite part of planning. + +Haxolottle: *pulls up contingency matrix* For every mission, I plan at least three "what if" scenarios. + +Haxolottle: What if you're detected? What if extraction fails? What if comms are compromised? What if everything goes perfectly but ENTROPY adapted? + +Haxolottle: The axolotl principle—*smiles*—regeneration over rigidity. Plans that can adapt. + ++ [Walk me through the contingencies for this mission] + Haxolottle: *details specific contingencies based on current mission* + ~ npc_haxolottle_friendship_level += 5 + -> haxolottle_main_hub + ++ [This seems paranoid] + Haxolottle: *shrugs* I've had too many operations go sideways. Paranoid preparation saves lives. + Haxolottle: When you're in the field and things go wrong, you'll be glad we planned for it. + -> haxolottle_main_hub + ++ [I appreciate the thoroughness] + Haxolottle: *genuine* That means a lot. Handlers live and die by preparation. + Haxolottle: Knowing you value that preparation makes the late nights worth it. + ~ npc_haxolottle_friendship_level += 8 + -> haxolottle_main_hub + +// =========================================== +// DEBRIEFING +// =========================================== + +=== operation_debrief === +Haxolottle: *opens debrief form* Standard post-operation debrief. Walk me through it chronologically. + ++ [Provide thorough debrief] + You provide a detailed account of the operation. + Haxolottle: *taking notes* Good detail. This is exactly what I need for the after-action report. + {npc_haxolottle_friendship_level >= 40: + Haxolottle: And more importantly—are you okay? Physically? Mentally? + ~ npc_haxolottle_friendship_level += 3 + } + -> debrief_completion + ++ [Give abbreviated version] + Haxolottle: *slight frown* I need more detail for the report. What specific challenges did you encounter? + -> detailed_debrief_questions + ++ [Ask if they want their perspective first] + Haxolottle: *appreciates the question* Actually, yes. Let me tell you what I saw from handler perspective, then you fill gaps. + -> handler_perspective_debrief + +=== rough_mission_debrief === +Haxolottle: *concerned* Yeah, I was watching. That got intense. + +Haxolottle: Before we do the formal debrief—are you actually okay? Not the professional "I'm fine." The real answer. + ++ [Be honest about the difficulty] + You admit the mission was harder than expected and took a toll. + Haxolottle: *empathetic* Thank you for being honest. That mission pushed limits. You handled it, but pushing limits has costs. + Haxolottle: Take additional recovery time. I'll handle Netherton if they push back. Your wellbeing matters. + ~ npc_haxolottle_friendship_level += 15 + ~ npc_haxolottle_trust_moments += 1 + -> debrief_completion + ++ [Downplay it professionally] + Haxolottle: *sees through it* Agent {player_name}. I watched that mission. It was rough. Don't minimize it. + Haxolottle: Acknowledging difficulty isn't weakness. It's accurate assessment. + -> rough_mission_debrief + ++ [Thank them for asking] + Haxolottle: *genuine* Of course I ask. I watched you face that. I care about more than mission success—I care about you. + {npc_haxolottle_friendship_level >= 50: + Haxolottle: You're not just an asset to manage. You're... *hesitates* ...a colleague I value. A friend, within the constraints of Protocol 47-Alpha. + ~ npc_haxolottle_friendship_level += 10 + } + -> debrief_completion + +=== debrief_completion === +Haxolottle: *finalizes debrief documentation* + +Haxolottle: Debrief complete. After-action report will go to Netherton and operational archives. + +{mission_phase: + Haxolottle: Mission status: {total_missions_completed + 1} operations completed successfully. + ~ total_missions_completed += 1 +} + +Haxolottle: You did good work, {player_name}. Really. + +#debrief_complete +-> haxolottle_main_hub + +// =========================================== +// GENERAL OPERATIONAL DISCUSSIONS +// =========================================== + +=== threat_landscape_update === +Haxolottle: *brings up classified threat dashboard* + +Haxolottle: Current ENTROPY activity: [describes threat level based on mission count and patterns] + +Haxolottle: Recent patterns suggest they're shifting tactics. More sophisticated network infiltration. Less brute force. + +Haxolottle: We're adapting. Dr. Chen is developing new countermeasures. Netherton is adjusting operational protocols. + ++ [Ask about specific threats] + Haxolottle: *provides detailed threat analysis* + -> haxolottle_main_hub + ++ [Express concern about escalation] + Haxolottle: *serious* Yeah, me too. The escalation pattern is concerning. + Haxolottle: But that's why we're here. SAFETYNET exists to counter this. And we're getting better at it. + ~ npc_haxolottle_friendship_level += 3 + -> haxolottle_main_hub + ++ [Thank them for the update] + Haxolottle: *nods* Situational awareness matters. Stay informed, stay effective. + -> haxolottle_main_hub + +=== operational_advice_from_handler === +Haxolottle: Handler perspective on operations. What do you want to know? + ++ [How to be a better field agent] + Haxolottle: From handler perspective? Communicate clearly. Trust your handler's intel but verify with your eyes. Adapt when plans fail. + Haxolottle: Best agents treat handlers as partners, not support staff. We succeed together or fail together. + ~ professional_reputation += 1 + -> haxolottle_main_hub + ++ [What mistakes do agents make?] + Haxolottle: *thoughtful* Biggest mistake: not calling for help until it's too late. Pride gets people hurt. + Haxolottle: Ask for support early. That's what handlers are for. We can't help if we don't know there's a problem. + ~ professional_reputation += 1 + -> haxolottle_main_hub + ++ [How to work better with you specifically] + Haxolottle: *appreciates the question* Honestly? You already work well with me. + Haxolottle: You communicate clearly. You trust my intel while using your judgment. You understand the partnership. + {npc_haxolottle_friendship_level >= 50: + Haxolottle: You're one of the best agents I've handled. And I've handled a lot. + ~ npc_haxolottle_friendship_level += 8 + } + -> haxolottle_main_hub + +=== handler_tradecraft_discussion === +Haxolottle: Handler tradecraft! The behind-the-scenes magic. + +Haxolottle: Handlers balance multiple information streams—security feeds, ENTROPY intercepts, agent biometrics, tactical maps—and synthesize it into actionable guidance. + +Haxolottle: We're pattern recognition engines. Spotting threats before they manifest. Identifying opportunities you can't see from your position. + +Haxolottle: And honestly? A lot of it is managing stress. Yours and ours. Keeping calm when everything is chaotic. + ++ [That sounds incredibly complex] + Haxolottle: It is. But it's also what I'm good at. Turns out eight years of field experience translates well to handler work. + Haxolottle: I know what you're experiencing because I've experienced it. That empathy makes me better at support. + ~ npc_haxolottle_friendship_level += 5 + -> haxolottle_main_hub + ++ [How do you manage your own stress?] + Haxolottle: *honest* Varies. Swimming helps. Reading. Listening to rain sounds while pretending I'm not worried about agents in danger. + {npc_haxolottle_friendship_level >= 40: + Haxolottle: Conversations like this help too. Knowing the agents I support see me as more than a voice on comms. + ~ npc_haxolottle_friendship_level += 8 + } + -> haxolottle_main_hub + ++ [Could you teach me handler skills?] + Haxolottle: *interested* You want cross-training? Actually, that would make you a better field agent. Understanding both sides improves collaboration. + Haxolottle: I can set up some handler shadowing. You observe while I run someone else's operation. Educational for both roles. + ~ professional_reputation += 2 + ~ npc_haxolottle_friendship_level += 10 + #handler_training_offered + -> haxolottle_main_hub + +=== END diff --git a/story_design/ink/haxolottle_ongoing_conversations.ink b/story_design/ink/haxolottle_ongoing_conversations.ink index 6b72ee9..900d978 100644 --- a/story_design/ink/haxolottle_ongoing_conversations.ink +++ b/story_design/ink/haxolottle_ongoing_conversations.ink @@ -13,34 +13,34 @@ // Your game engine must persist these across ALL missions // =========================================== -VAR npc_haxolottle_npc_haxolottle_friendship_level = 0 // PERSISTENT - Overall relationship depth (0-100) -VAR npc_haxolottle_npc_haxolottle_conversations_had = 0 // PERSISTENT - Total personal conversations -VAR npc_haxolottle_npc_haxolottle_trust_moments = 0 // PERSISTENT - Times player shared something personal -VAR npc_haxolottle_npc_haxolottle_humor_shared = 0 // PERSISTENT - Funny moments experienced together -VAR npc_haxolottle_npc_haxolottle_vulnerable_moments = 0 // PERSISTENT - Times either shared something difficult -VAR npc_haxolottle_npc_haxolottle_player_shared_personal = 0 // PERSISTENT - Count of player vulnerable moments +VAR npc_haxolottle_friendship_level = 0 // PERSISTENT - Overall relationship depth (0-100) +VAR npc_haxolottle_conversations_had = 0 // PERSISTENT - Total personal conversations +VAR npc_haxolottle_trust_moments = 0 // PERSISTENT - Times player shared something personal +VAR npc_haxolottle_humor_shared = 0 // PERSISTENT - Funny moments experienced together +VAR npc_haxolottle_vulnerable_moments = 0 // PERSISTENT - Times either shared something difficult +VAR npc_haxolottle_player_shared_personal = 0 // PERSISTENT - Count of player vulnerable moments // Topic tracking - ALL PERSISTENT (never reset) -VAR npc_haxolottle_npc_haxolottle_talked_hobbies_general = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_axolotl_obsession = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_music_taste = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_coffee_preferences = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_stress_management = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_philosophy_change = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_handler_life = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_field_nostalgia = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_weird_habits = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_favorite_operations = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_fears_anxieties = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_what_if_different = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_meaning_work = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_friendship_boundaries = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_future_dreams = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_identity_burden = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_loneliness_secrecy = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_real_name_temptation = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_after_safetynet = false // PERSISTENT -VAR npc_haxolottle_npc_haxolottle_talked_genuine_friendship = false // PERSISTENT +VAR npc_haxolottle_talked_hobbies_general = false // PERSISTENT +VAR npc_haxolottle_talked_axolotl_obsession = false // PERSISTENT +VAR npc_haxolottle_talked_music_taste = false // PERSISTENT +VAR npc_haxolottle_talked_coffee_preferences = false // PERSISTENT +VAR npc_haxolottle_talked_stress_management = false // PERSISTENT +VAR npc_haxolottle_talked_philosophy_change = false // PERSISTENT +VAR npc_haxolottle_talked_handler_life = false // PERSISTENT +VAR npc_haxolottle_talked_field_nostalgia = false // PERSISTENT +VAR npc_haxolottle_talked_weird_habits = false // PERSISTENT +VAR npc_haxolottle_talked_favorite_operations = false // PERSISTENT +VAR npc_haxolottle_talked_fears_anxieties = false // PERSISTENT +VAR npc_haxolottle_talked_what_if_different = false // PERSISTENT +VAR npc_haxolottle_talked_meaning_work = false // PERSISTENT +VAR npc_haxolottle_talked_friendship_boundaries = false // PERSISTENT +VAR npc_haxolottle_talked_future_dreams = false // PERSISTENT +VAR npc_haxolottle_talked_identity_burden = false // PERSISTENT +VAR npc_haxolottle_talked_loneliness_secrecy = false // PERSISTENT +VAR npc_haxolottle_talked_real_name_temptation = false // PERSISTENT +VAR npc_haxolottle_talked_after_safetynet = false // PERSISTENT +VAR npc_haxolottle_talked_genuine_friendship = false // PERSISTENT // Deep personal reveals - PERSISTENT VAR npc_haxolottle_shared_loss = false // PERSISTENT diff --git a/story_design/ink/netherton_hub.ink b/story_design/ink/netherton_hub.ink new file mode 100644 index 0000000..5bd9bf3 --- /dev/null +++ b/story_design/ink/netherton_hub.ink @@ -0,0 +1,358 @@ +// =========================================== +// NETHERTON CONVERSATION HUB +// Break Escape Universe +// =========================================== +// Central entry point for all Netherton conversations +// Mixes personal relationship building with mission-specific content +// Context-aware based on current mission and location +// =========================================== + +// Include personal relationship file +INCLUDE netherton_ongoing_conversations.ink + +// Include mission-specific files (examples - add more as missions are created) +// INCLUDE netherton_mission_ghost_in_machine.ink +// INCLUDE netherton_mission_data_sanctuary.ink +// INCLUDE netherton_mission_protocol_breach.ink + +// =========================================== +// EXTERNAL CONTEXT VARIABLES +// These are provided by the game engine +// =========================================== + +EXTERNAL player_name // LOCAL - Player's agent name +EXTERNAL current_mission_id // LOCAL - Current mission being discussed +EXTERNAL npc_location // LOCAL - Where conversation happens ("office", "safehouse", "field", "briefing_room") +EXTERNAL mission_phase // LOCAL - Phase of current mission ("pre_briefing", "active", "debriefing", "downtime") + +// =========================================== +// GLOBAL VARIABLES (shared across all NPCs) +// =========================================== + +VAR total_missions_completed = 0 // GLOBAL - Total missions done +VAR professional_reputation = 0 // GLOBAL - Agent standing + +// =========================================== +// MAIN ENTRY POINT +// Called by game engine when player talks to Netherton +// =========================================== + +=== netherton_conversation_entry === +// This is the main entry point - game engine calls this + +{npc_location == "office": + Netherton: Agent {player_name}. *gestures to chair* What do you need? +- npc_location == "briefing_room": + Netherton: Agent. *stands at tactical display* We have matters to discuss. +- npc_location == "field": + Netherton: *over secure comms* Agent. Report. +- npc_location == "safehouse": + Netherton: *sits across from you in the secure room* We're clear to talk here. What's on your mind? +- else: + Netherton: Agent {player_name}. What requires my attention? +} + +-> netherton_main_hub + +// =========================================== +// MAIN HUB - CONTEXT-AWARE CONVERSATION MENU +// Dynamically shows personal + mission topics based on context +// =========================================== + +=== netherton_main_hub === + +// Show different options based on location, mission phase, and relationship level + +// PERSONAL RELATIONSHIP OPTION (always available if topics exist) ++ {has_available_personal_topics() and mission_phase != "active"} [How are you, Director?] + Netherton: *slight pause, as if surprised by personal question* + {npc_netherton_respect >= 70: + Netherton: That's... considerate of you to ask, Agent. I have a moment for personal discussion. + - else: + Netherton: An unusual question. But acceptable. What do you wish to discuss? + } + -> jump_to_personal_conversations + +// MISSION-SPECIFIC CONVERSATIONS (context-dependent) ++ {current_mission_id == "ghost_in_machine" and mission_phase == "pre_briefing"} [Request briefing for Ghost Protocol operation] + Netherton: Very well. Let me bring you up to speed on Ghost Protocol. + -> mission_ghost_briefing + ++ {current_mission_id == "ghost_in_machine" and mission_phase == "active"} [Request tactical guidance] + Netherton: *reviews your position on tactical display* What do you need? + -> mission_ghost_tactical_support + ++ {current_mission_id == "ghost_in_machine" and mission_phase == "debriefing"} [Debrief Ghost Protocol operation] + Netherton: Submit your report, Agent. + -> mission_ghost_debrief + ++ {current_mission_id == "data_sanctuary"} [About the Data Sanctuary operation...] + Netherton: The Data Sanctuary. A delicate situation. What questions do you have? + -> mission_sanctuary_discussion + ++ {mission_phase == "downtime" and npc_netherton_respect >= 60} [Ask for operational advice] + Netherton: You want my counsel? *slight approval* Very well. + -> operational_advice_discussion + +// GENERAL PROFESSIONAL TOPICS (available when not in active mission) ++ {mission_phase != "active"} [Ask about SAFETYNET operations status] + Netherton: *brings up secure display* Current operations status... + -> safetynet_status_update + ++ {professional_reputation >= 50 and mission_phase == "downtime"} [Request additional training opportunities] + Netherton: Initiative. Good. What areas do you wish to develop? + -> training_discussion + +// EXIT OPTIONS ++ {mission_phase == "active"} [That's all I needed, Director] + Netherton: Understood. Execute the mission. Report any developments. + #exit_conversation + -> END + ++ [That will be all, Director] + {npc_netherton_respect >= 80: + Netherton: Very well, Agent {player_name}. *almost warm* Continue your excellent work. + - npc_netherton_respect >= 60: + Netherton: Dismissed. Maintain your current performance level. + - else: + Netherton: Dismissed. + } + #exit_conversation + -> END + +// =========================================== +// HELPER FUNCTION - Check for available personal topics +// =========================================== + +=== function has_available_personal_topics() === +// Returns true if there are any personal conversation topics available +{ + // Phase 1 topics (missions 1-5) + - total_missions_completed <= 5: + { + - not npc_netherton_discussed_handbook: ~ return true + - not npc_netherton_discussed_leadership: ~ return true + - not npc_netherton_discussed_safetynet_history: ~ return true + - not npc_netherton_discussed_expectations and npc_netherton_respect >= 55: ~ return true + - else: ~ return false + } + + // Phase 2 topics (missions 6-10) + - total_missions_completed <= 10: + { + - not npc_netherton_discussed_difficult_decisions: ~ return true + - not npc_netherton_discussed_agent_development: ~ return true + - not npc_netherton_discussed_bureau_politics and npc_netherton_respect >= 65: ~ return true + - not npc_netherton_discussed_field_vs_command and npc_netherton_respect >= 60: ~ return true + - else: ~ return false + } + + // Phase 3 topics (missions 11-15) + - total_missions_completed <= 15: + { + - not npc_netherton_discussed_weight_of_command and npc_netherton_respect >= 75: ~ return true + - not npc_netherton_discussed_agent_losses and npc_netherton_respect >= 70: ~ return true + - not npc_netherton_discussed_ethical_boundaries and npc_netherton_respect >= 70: ~ return true + - not npc_netherton_discussed_personal_cost and npc_netherton_respect >= 75: ~ return true + - else: ~ return false + } + + // Phase 4 topics (missions 16+) + - total_missions_completed > 15: + { + - not npc_netherton_discussed_legacy and npc_netherton_respect >= 85: ~ return true + - not npc_netherton_discussed_trust and npc_netherton_respect >= 80: ~ return true + - not npc_netherton_discussed_rare_praise and npc_netherton_respect >= 85: ~ return true + - not npc_netherton_discussed_beyond_protocol and npc_netherton_respect >= 90: ~ return true + - else: ~ return false + } + + - else: + ~ return false +} + +// =========================================== +// JUMP TO PERSONAL CONVERSATIONS +// Routes to the appropriate phase hub in personal file +// =========================================== + +=== jump_to_personal_conversations === +// Jump to appropriate phase hub based on progression, then return here +{ + - total_missions_completed <= 5: + -> netherton_ongoing_conversations.phase_1_hub_with_return -> + - total_missions_completed <= 10: + -> netherton_ongoing_conversations.phase_2_hub_with_return -> + - total_missions_completed <= 15: + -> netherton_ongoing_conversations.phase_3_hub_with_return -> + - total_missions_completed > 15: + -> netherton_ongoing_conversations.phase_4_hub_with_return -> +} + +// Return from personal conversations +Netherton: *returns to professional mode* Anything else you need to discuss? +-> netherton_main_hub + +// =========================================== +// MISSION-SPECIFIC CONTENT STUBS +// These would be expanded in separate mission files +// =========================================== + +=== mission_ghost_briefing === +Netherton: Ghost Protocol targets a critical infrastructure backdoor. ENTROPY has embedded themselves in the power grid control systems for three states. + +Netherton: Your objective: Infiltrate their command node, identify the attack vector, and disable their access without alerting them to SAFETYNET's awareness. + +Netherton: Dr. Chen has prepared specialized equipment. Haxolottle will provide handler support during infiltration. + +Netherton: Questions? + ++ [Ask about the strategic importance] + Netherton: If ENTROPY activates this backdoor, they can cause cascading power failures across the region. Hospitals. Emergency services. Data centers. Millions affected. + Netherton: We cannot allow that capability to remain in hostile hands. + -> mission_ghost_briefing + ++ [Ask about tactical considerations] + Netherton: The facility has physical security and digital monitoring. You'll need to bypass both simultaneously. + Netherton: Haxolottle has mapped their patrol patterns. Dr. Chen's camouflage system should mask your digital presence. But you'll need sound fieldcraft. + -> mission_ghost_briefing + ++ [Ask about extraction plan] + Netherton: Standard extraction protocols apply. Complete the objective, egress quietly. If compromised, Protocol 7 authorizes forced extraction. + Netherton: I'd prefer you complete this quietly. Burned operations create complications. + -> mission_ghost_briefing + ++ [I'm ready to proceed] + Netherton: Excellent. *hands you mission packet* Review the details. Brief with Dr. Chen for equipment. Haxolottle will coordinate deployment. + Netherton: Agent {player_name}—*direct look*—execute this cleanly. We're counting on you. + #mission_briefing_complete + -> netherton_main_hub + +=== mission_ghost_tactical_support === +Netherton: *monitoring your position* I'm tracking your progress. What do you need? + ++ [Request permission to deviate from plan] + Netherton: Explain the deviation and justification. + // This would branch based on player's explanation + Netherton: ... Acceptable. Use your judgment. I trust your field assessment. + ~ npc_netherton_respect += 5 + -> netherton_main_hub + ++ [Request emergency extraction] + Netherton: *immediately alert* Situation? + // This would handle emergency extraction logic + Netherton: Extraction authorized. Get to waypoint Charlie. Haxolottle is coordinating pickup. + #emergency_extraction_authorized + -> netherton_main_hub + ++ [Just checking in] + Netherton: Acknowledged. You're performing well. Maintain operational tempo. + -> netherton_main_hub + +=== mission_ghost_debrief === +Netherton: Your mission report indicates success. The backdoor has been neutralized. ENTROPY remains unaware of our intervention. + +{npc_netherton_respect >= 70: + Netherton: Excellent work, Agent. Your execution was textbook. This is exactly the kind of operational performance SAFETYNET requires. + ~ npc_netherton_respect += 10 +- else: + Netherton: Adequate performance. Mission objectives achieved. Some aspects could be refined. + ~ npc_netherton_respect += 5 +} + +Netherton: Dr. Chen is analyzing the technical data you extracted. It may provide intelligence on other ENTROPY operations. + +Netherton: Take forty-eight hours downtime. Then report for next assignment. + +#mission_complete +-> netherton_main_hub + +=== mission_sanctuary_discussion === +Netherton: The Data Sanctuary operation. We're protecting a secure storage facility that houses classified intelligence from multiple allied agencies. + +Netherton: ENTROPY has been probing the facility's defenses. They want what's inside. + +Netherton: Your role will be defensive support. Not glamorous, but critical. + ++ [Understood. What's my specific assignment?] + Netherton: Details forthcoming. I wanted to brief you on strategic context first. + -> netherton_main_hub + ++ [Ask why ENTROPY wants this data] + Netherton: The sanctuary contains operation records, agent identities, tactical intelligence. A treasure trove for our adversaries. + Netherton: If compromised, dozens of ongoing operations burn. Agents in the field become exposed. The damage would be severe. + -> mission_sanctuary_discussion + ++ [This mission sounds important] + Netherton: Every mission is important, Agent. But yes—this one has particularly high stakes. + -> netherton_main_hub + +=== operational_advice_discussion === +Netherton: You want operational advice. *considers* On what specific matter? + ++ [How to handle ambiguous situations in the field] + Netherton: Ambiguity is constant in our work. The handbook provides framework, but you must exercise judgment. + Netherton: When faced with ambiguous situation: Assess risk. Identify options. Select least-worst approach. Execute decisively. + Netherton: Hesitation kills. Make the call and commit. + ~ npc_netherton_respect += 5 + -> netherton_main_hub + ++ [How to improve mission planning] + Netherton: Read after-action reports from successful operations. Study what worked. Identify patterns. + Netherton: Anticipate failure modes. For each plan, ask: What could go wrong? How would I adapt? + Netherton: The axolotl principle—Haxolottle's term. Plan for regeneration when the original approach fails. + ~ npc_netherton_respect += 5 + -> netherton_main_hub + ++ [How to advance in SAFETYNET] + Netherton: Consistent excellence. That's the path. + Netherton: Demonstrate competence. Show sound judgment. Develop specialized capabilities. Volunteer for challenging assignments. + Netherton: Most importantly: Maintain integrity. Technical skills can be trained. Character cannot. + ~ npc_netherton_respect += 8 + ~ professional_reputation += 1 + -> netherton_main_hub + +=== safetynet_status_update === +Netherton: *brings up classified display* + +Netherton: Current threat level: Elevated. ENTROPY has increased activity across three operational theaters. + +Netherton: CYBER-PHYSICAL division is running {total_missions_completed + 15} active operations. Your work is part of that larger campaign. + +Netherton: We're making progress. But ENTROPY adapts. The fight continues. + ++ [Ask about specific threats] + Netherton: Classified beyond your current access level. Your focus should remain on assigned missions. + -> netherton_main_hub + ++ [Ask how the division is performing] + Netherton: We meet operational objectives consistently. Success rate is {85 + (npc_netherton_respect / 10)} percent over the past quarter. + Netherton: Acceptable, but there's room for improvement. Every failed operation represents unmitigated risk. + -> netherton_main_hub + ++ [Thank them for the update] + Netherton: *nods* Maintaining situational awareness is important. Don't become narrowly focused on individual missions. + Netherton: Understand the larger context. Your work contributes to strategic objectives. + -> netherton_main_hub + +=== training_discussion === +Netherton: Training opportunities. What areas interest you? + ++ [Advanced infiltration techniques] + Netherton: We run quarterly advanced tradecraft seminars. I'll add you to the roster. Expect rigorous training. High washout rate. + ~ professional_reputation += 2 + -> netherton_main_hub + ++ [Leadership development] + Netherton: *slight approval* Thinking about command responsibilities. Good. + Netherton: There's a leadership program for senior agents. Application process is competitive. I can recommend you if your performance continues. + ~ professional_reputation += 3 + ~ npc_netherton_respect += 10 + -> netherton_main_hub + ++ [Technical specialization] + Netherton: Dr. Chen runs technical workshops. I'll arrange access. They'll be pleased to have an agent interested in deep technical capability. + ~ professional_reputation += 2 + -> netherton_main_hub + +=== END diff --git a/story_design/ink/netherton_mission_ghost_example.ink b/story_design/ink/netherton_mission_ghost_example.ink new file mode 100644 index 0000000..f31cfcf --- /dev/null +++ b/story_design/ink/netherton_mission_ghost_example.ink @@ -0,0 +1,345 @@ +// =========================================== +// NETHERTON - GHOST IN THE MACHINE MISSION +// Break Escape Universe +// =========================================== +// Mission-specific dialogue for Ghost in the Machine operation +// This is an EXAMPLE showing how mission-specific files work +// Each mission can have its own file per NPC +// =========================================== + +// Mission-specific variables (would be in global space or mission-specific save data) +VAR ghost_mission_briefed = false +VAR ghost_mission_active = false +VAR ghost_mission_complete = false +VAR ghost_player_asked_about_stakes = false +VAR ghost_player_requested_tactical_advice = false + +// =========================================== +// MISSION BRIEFING +// Called from netherton_hub.ink +// =========================================== + +=== ghost_briefing === +Netherton: *activates secure display showing power grid infrastructure* + +Netherton: Operation: Ghost in the Machine. Codename reflects the nature of the threat—ENTROPY has embedded malicious code into control systems that manage critical infrastructure. + +Netherton: Target: Midwest Regional Power Coordination Center. ENTROPY has infiltrated their operational technology network and installed a persistent backdoor. + +Netherton: *highlights affected regions on map* + +Netherton: If activated, this backdoor grants ENTROPY control over power distribution for three states. Hospitals. Emergency services. Data centers. Millions of lives depend on stable power. + +~ ghost_mission_briefed = true + +* [Ask about strategic importance] + Netherton: Strategic importance is severe. ENTROPY gains leverage over critical infrastructure. They could trigger cascading failures. Hold populations hostage. Create chaos that serves their ideology. + Netherton: We cannot allow that capability to remain in hostile hands. This operation is defensive priority one. + ~ ghost_player_asked_about_stakes = true + -> ghost_briefing + +* [Ask about tactical considerations] + Netherton: Tactical complexity is high. The facility has both physical security—guards, surveillance, access controls—and digital monitoring—intrusion detection, network analysis. + Netherton: You must bypass both simultaneously. Physical infiltration without digital signature. Digital operations without physical detection. + Netherton: Dr. Chen has prepared specialized equipment. Active network camouflage will mask your digital presence. But you'll need sound tradecraft for physical infiltration. + ~ ghost_player_requested_tactical_advice = true + -> ghost_briefing + +* [Ask about the intelligence source] + Netherton: *slight hesitation* + Netherton: Intelligence derived from signals intercept and human source reporting. Reliability assessed as high. But not perfect. + Netherton: You should assume the intelligence is directionally accurate. Specific details may vary. Maintain operational flexibility. + -> ghost_briefing + +* [Ask about rules of engagement] + Netherton: Rules of engagement: Non-lethal unless absolutely necessary for self-defense. This is a stealth operation. Violence creates complications. + Netherton: Facility personnel are civilians. They are not ENTROPY. They are unaware their systems have been compromised. Treat them as innocents. + Netherton: Your target is the ENTROPY backdoor code. Not the people who work there. + ~ npc_netherton_respect += 5 + -> ghost_briefing + +* [Ask about extraction plan] + Netherton: Extraction follows standard protocols. Complete objective, egress quietly using planned route. Haxolottle will coordinate transportation. + Netherton: If compromised: Protocol 7 authorizes emergency extraction. Three prepared waypoints. Haxolottle has the coordinates. + Netherton: *firm look* I would prefer you complete this operation quietly. Burned operations create cascading problems. But your safety takes priority over operational security. + {npc_netherton_respect >= 70: + Netherton: *rare vulnerability* I'd rather you come back safe with a failed mission than not come back at all. + ~ npc_netherton_respect += 5 + } + -> ghost_briefing + +* {ghost_player_asked_about_stakes and ghost_player_requested_tactical_advice} [I'm ready to proceed. Assign the mission.] + Netherton: *slight nod of approval* + Netherton: Mission assigned. *hands over classified mission packet* + Netherton: Review operational details thoroughly. Brief with Dr. Chen for equipment familiarization. Coordinate timing with Haxolottle. + Netherton: Agent {player_name}—*direct eye contact*—you're one of our most capable operators. That's why you're receiving this assignment. + {npc_netherton_respect >= 80: + Netherton: *almost warm* I have confidence in your abilities. Execute this mission with the excellence you've consistently demonstrated. + - npc_netherton_respect >= 60: + Netherton: Execute this cleanly. Demonstrate the operational skill I expect from agents of your caliber. + - else: + Netherton: Complete the mission. Maintain operational standards. + } + + Netherton: Dismissed. Begin preparation. + + ~ ghost_mission_active = true + ~ professional_reputation += 2 + #mission_ghost_assigned + -> END + +* [This seems like high-pressure assignment] + Netherton: *doesn't soften* + Netherton: It is high pressure. All our assignments carry weight. This particular operation has severe consequences for failure. + Netherton: That's why I'm assigning it to you. You've proven capable of handling pressure. This is not beyond your abilities. + {npc_netherton_respect >= 70: + Netherton: *slight reassurance* I would not assign you a mission I believed you couldn't complete. Trust your training. Trust your capabilities. + ~ npc_netherton_respect += 5 + } + -> ghost_briefing + +// =========================================== +// TACTICAL SUPPORT DURING MISSION +// Called from netherton_hub.ink when mission is active +// =========================================== + +=== ghost_tactical_support === +Netherton: *monitoring your position on tactical display* + +Netherton: Agent {player_name}, I have your location. What do you need? + +* [Request permission to deviate from infiltration plan] + Netherton: Explain the deviation and tactical justification. + + ** [Explain that security patterns changed] + Netherton: *considers* Security adaptation is expected. If original route is compromised, alternate approach is reasonable. + Netherton: Granted. Use tactical judgment. Haxolottle will adjust monitoring based on new route. + ~ npc_netherton_respect += 5 + #deviation_approved + -> ghost_tactical_support + + ** [Explain that you found better approach] + Netherton: *evaluates* + {npc_netherton_respect >= 70: + Netherton: Your field assessment carries weight. If you've identified superior approach, I trust your judgment. + - else: + Netherton: Explain why your approach is superior to planned method. + } + Netherton: Approved. Execute your plan. Report results. + ~ npc_netherton_respect += 8 + #alternate_approach_approved + -> ghost_tactical_support + + ** [Explain that situation is more dangerous than expected] + Netherton: *concerned* How much more dangerous? Assess risk level. + Netherton: If deviation reduces risk while maintaining mission viability, approved. If risk exceeds acceptable parameters, consider abort. + Netherton: Your safety matters, Agent. Make the call. + ~ npc_netherton_respect += 10 + -> ghost_tactical_support + +* [Request emergency extraction] + Netherton: *immediately alert* Situation report. Are you compromised? + + ** [Yes, position is compromised] + Netherton: *rapid coordination* Extraction authorized. Proceed to waypoint Charlie immediately. Haxolottle is scrambling pickup. + Netherton: Evade pursuit. Maintain comms if possible. We're getting you out. + #emergency_extraction_authorized + -> END + + ** [Not compromised but mission parameters exceeded] + Netherton: *assessing* Understood. Operational assessment indicating abort? + Netherton: Extraction authorized. Mission can be re-attempted with adjusted parameters. Agent safety is priority. + {npc_netherton_respect >= 70: + Netherton: Good call recognizing when to withdraw. Better to extract safely than push beyond limits. + ~ npc_netherton_respect += 10 + } + #tactical_abort_authorized + -> END + + ** [Equipment failure requiring extraction] + Netherton: Dr. Chen is monitoring your channel. Stand by. + Netherton: *to Chen* Can you remote-diagnose the failure? + // This would integrate with Chen's systems + Netherton: If equipment cannot be restored, extraction is authorized. Decision is yours, Agent. + -> ghost_tactical_support + +* [Request real-time intel update] + Netherton: *checks multiple feeds* + Netherton: Current intel: [describes security status, ENTROPY activity, facility operations] + Netherton: Haxolottle reports: [provides handler assessment] + Netherton: Recommended action: [tactical suggestion] + Netherton: Questions? + -> ghost_tactical_support + +* [Report mission objective complete] + Netherton: *verification* Confirm: ENTROPY backdoor has been neutralized? Evidence captured? + + ** [Confirm objective complete] + Netherton: Excellent. Begin exfiltration using planned route. Haxolottle will guide egress. + {npc_netherton_respect >= 80: + Netherton: *rare approval* Outstanding work, Agent. Textbook execution. + - npc_netherton_respect >= 60: + Netherton: Well done. Proceed to extraction point. + - else: + Netherton: Acknowledged. Extract. + } + ~ ghost_mission_complete = true + ~ npc_netherton_respect += 15 + #mission_objective_complete + -> END + + ** [Objective complete but complications occurred] + Netherton: Elaborate on complications. + // Would branch based on specific complications + Netherton: Understood. Exfiltrate. We'll debrief complications after you're secure. + ~ ghost_mission_complete = true + ~ npc_netherton_respect += 10 + #mission_complete_with_complications + -> END + +* [Just checking in, all nominal] + Netherton: *brief acknowledgment* Acknowledged. Operational tempo is solid. Continue mission. + {npc_netherton_respect >= 60: + Netherton: You're performing well. Maintain current approach. + ~ npc_netherton_respect += 3 + } + -> END + +// =========================================== +// MISSION DEBRIEF +// Called from netherton_hub.ink after mission completion +// =========================================== + +=== ghost_debrief === +Netherton: *mission after-action review display active* + +Netherton: Agent {player_name}. Debrief for Operation Ghost in the Machine. + +Netherton: Mission outcome: {ghost_mission_complete: Success | Failure}. ENTROPY backdoor status: {ghost_mission_complete: Neutralized | Remains active}. + +{ghost_mission_complete: + Netherton: Your operational execution was {npc_netherton_respect >= 85: exemplary | npc_netherton_respect >= 70: highly competent | npc_netherton_respect >= 55: satisfactory | adequate}. + + Netherton: The facility's power grid control systems have been secured. ENTROPY's capability to trigger cascading failures has been eliminated. + + Netherton: Dr. Chen is analyzing the technical data you extracted. Initial assessment indicates this backdoor was part of a larger ENTROPY infrastructure campaign. + + {npc_netherton_respect >= 80: + Netherton: *genuine approval* This is exactly the kind of operational performance SAFETYNET requires. You executed under pressure, adapted to complications, and achieved mission objectives without compromise. + ~ npc_netherton_respect += 15 + - npc_netherton_respect >= 65: + Netherton: Solid work. Mission objectives achieved. Some aspects could be refined in future operations, but overall performance meets standards. + ~ npc_netherton_respect += 10 + - else: + Netherton: Adequate performance. Mission complete. There are areas for improvement we'll address in training. + ~ npc_netherton_respect += 5 + } + + ~ professional_reputation += 5 + ~ total_missions_completed += 1 + +- else: + Netherton: Mission did not achieve primary objectives. ENTROPY backdoor remains in place. This is... disappointing. + + Netherton: However, you exfiltrated safely. Equipment and personnel are recoverable. Mission can be re-attempted. + + {npc_netherton_respect >= 60: + Netherton: The fact that you recognized when to abort shows sound judgment. Better to withdraw safely than to force failure into catastrophe. + ~ npc_netherton_respect += 5 + - else: + Netherton: We'll analyze what went wrong. Identify lessons learned. Prepare for second attempt. + } +} + +* [Request detailed feedback on performance] + Netherton: *pulls up performance analysis* + + Netherton: Technical execution: {npc_netherton_respect >= 75: Excellent | npc_netherton_respect >= 60: Competent | Needs improvement}. You demonstrated {npc_netherton_respect >= 70: strong | adequate} tradecraft. + + Netherton: Decision-making under pressure: {npc_netherton_respect >= 75: Sound judgment consistently applied | npc_netherton_respect >= 60: Generally solid with minor questionable calls | Requires development}. + + Netherton: Adaptation to complications: {npc_netherton_respect >= 75: Excellent flexibility and problem-solving | npc_netherton_respect >= 60: Adequate adaptation | Struggled with unexpected variables}. + + {npc_netherton_respect >= 70: + Netherton: Areas for continued development: [specific constructive feedback] + Netherton: But overall, this was strong work. Continue this trajectory. + ~ npc_netherton_respect += 5 + - else: + Netherton: Areas requiring improvement: [specific critical feedback] + Netherton: Focus on these elements in training. Standards must be maintained. + } + -> ghost_debrief + +* [Ask about the larger ENTROPY campaign] + Netherton: *brings up classified intelligence display* + + Netherton: The backdoor you neutralized is consistent with ENTROPY's "Infrastructure Compromise Initiative"—their term, intercepted from communications. + + Netherton: They're embedding persistent access in critical systems across multiple sectors. Power. Water. Communications. Transportation. + + Netherton: Your operation denied them one attack vector. But the campaign continues. This is long-term conflict. + + {npc_netherton_respect >= 70: + Netherton: *rare transparency* Which is why operatives like you are critical. Every operation you complete successfully degrades ENTROPY's capabilities. + Netherton: The work matters. You matter. Remember that. + ~ npc_netherton_respect += 8 + } + -> ghost_debrief + +* [Ask about next assignment] + Netherton: *approves the professional focus* + + Netherton: Take seventy-two hours recovery time. Regulation 412—mandatory rest after high-stress operations. + + Netherton: After recovery period, report for next assignment briefing. I have several operations in development. Your performance on Ghost Protocol will inform assignment selection. + + {npc_netherton_respect >= 75: + Netherton: Given your demonstrated capabilities, I'm considering you for increasingly complex operations. Keep performing at this level. + ~ professional_reputation += 2 + } + -> ghost_debrief + +* {ghost_mission_complete} [This mission felt significant. Thank you for the assignment.] + Netherton: *slight surprise at the personal acknowledgment* + + {npc_netherton_respect >= 70: + Netherton: You're welcome. Though the gratitude should flow both directions—you executed excellently. + Netherton: Assigning capable agents to critical missions is easy. Having agents who justify that confidence is rarer. + ~ npc_netherton_respect += 10 + ~ npc_netherton_personal_moments += 1 + - else: + Netherton: *formal* Assignment is based on operational requirements and agent capabilities. You met requirements. That's sufficient. + } + -> ghost_debrief + +* [Request time for personal decompression] + Netherton: *approves immediately* + + Netherton: Granted. High-stress operations take psychological toll. Take the time you need. + + {npc_netherton_respect >= 65: + Netherton: *rare concern* Regulation 299 requires self-care. If you need counseling services, they're available. No judgment. No impact on operational status. + Netherton: I've used them myself after difficult operations. It helps. + ~ npc_netherton_respect += 8 + ~ npc_netherton_personal_moments += 1 + } + + Netherton: Report when you're ready for next assignment. Not before. + -> ghost_debrief + +* [That will be all, Director.] + Netherton: *nods* + + {ghost_mission_complete and npc_netherton_respect >= 75: + Netherton: Excellent work on this operation, Agent {player_name}. *almost warm* Truly excellent. + Netherton: Dismissed. Take your recovery time. Return ready for the next challenge. + - ghost_mission_complete: + Netherton: Dismissed. Review the operational lessons learned. Apply them to future assignments. + - else: + Netherton: We'll revisit this mission. Learn from what went wrong. Dismissed. + } + + #debrief_complete + -> END + +=== END diff --git a/story_design/ink/netherton_ongoing_conversations.ink b/story_design/ink/netherton_ongoing_conversations.ink index a4eef2c..872e02c 100644 --- a/story_design/ink/netherton_ongoing_conversations.ink +++ b/story_design/ink/netherton_ongoing_conversations.ink @@ -13,32 +13,32 @@ // Your game engine must persist these across ALL missions // =========================================== -VAR npc_npc_netherton_respect = 50 // PERSISTENT - Director's respect for agent (0-100) -VAR npc_netherton_npc_netherton_serious_conversations = 0 // PERSISTENT - Formal discussions held -VAR npc_netherton_npc_netherton_personal_moments = 0 // PERSISTENT - Rare vulnerable moments +VAR npc_netherton_respect = 50 // PERSISTENT - Director's respect for agent (0-100) +VAR npc_netherton_serious_conversations = 0 // PERSISTENT - Formal discussions held +VAR npc_netherton_personal_moments = 0 // PERSISTENT - Rare vulnerable moments // Topic tracking - ALL PERSISTENT (never reset) -VAR npc_netherton_npc_netherton_discussed_handbook = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_leadership = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_safetynet_history = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_expectations = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_difficult_decisions = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_agent_development = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_bureau_politics = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_field_vs_command = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_weight_of_command = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_agent_losses = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_ethical_boundaries = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_personal_cost = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_legacy = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_trust = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_rare_praise = false // PERSISTENT -VAR npc_netherton_npc_netherton_discussed_beyond_protocol = false // PERSISTENT +VAR npc_netherton_discussed_handbook = false // PERSISTENT +VAR npc_netherton_discussed_leadership = false // PERSISTENT +VAR npc_netherton_discussed_safetynet_history = false // PERSISTENT +VAR npc_netherton_discussed_expectations = false // PERSISTENT +VAR npc_netherton_discussed_difficult_decisions = false // PERSISTENT +VAR npc_netherton_discussed_agent_development = false // PERSISTENT +VAR npc_netherton_discussed_bureau_politics = false // PERSISTENT +VAR npc_netherton_discussed_field_vs_command = false // PERSISTENT +VAR npc_netherton_discussed_weight_of_command = false // PERSISTENT +VAR npc_netherton_discussed_agent_losses = false // PERSISTENT +VAR npc_netherton_discussed_ethical_boundaries = false // PERSISTENT +VAR npc_netherton_discussed_personal_cost = false // PERSISTENT +VAR npc_netherton_discussed_legacy = false // PERSISTENT +VAR npc_netherton_discussed_trust = false // PERSISTENT +VAR npc_netherton_discussed_rare_praise = false // PERSISTENT +VAR npc_netherton_discussed_beyond_protocol = false // PERSISTENT // Achievement flags - PERSISTENT -VAR npc_npc_netherton_shared_vulnerability = false // PERSISTENT -VAR npc_netherton_npc_netherton_earned_personal_trust = false // PERSISTENT -VAR npc_netherton_npc_netherton_received_commendation = false // PERSISTENT +VAR npc_netherton_shared_vulnerability = false // PERSISTENT +VAR npc_netherton_earned_personal_trust = false // PERSISTENT +VAR npc_netherton_received_commendation = false // PERSISTENT // =========================================== // GLOBAL VARIABLES (session-only, span NPCs)