Consolidated all ink source files into scenarios/ink directory for better organization. All ink source files and documentation are now in the same location as their compiled JSON output. Changes: 1. Moved all .ink source files from story_design/ink/ to scenarios/ink/ - chen_hub.ink and supporting files - netherton_hub.ink and supporting files - haxolottle_hub.ink and supporting files - All other ink source files 2. Moved documentation files to scenarios/ink/ - INK_BEST_PRACTICES.md - NPC_HUB_ARCHITECTURE.md - ONGOING_CONVERSATIONS_README.md - README.md 3. Added scripts/compile-ink.sh - Automatically compiles all .ink files in scenarios/ink/ - Outputs JSON to the same directory - Shows colored output with success/failure status - Provides compilation summary Usage: ./scripts/compile-ink.sh This consolidates the ink development workflow into a single directory and provides an easy way to recompile all ink files after making changes.
20 KiB
Haxolottle Ongoing Conversations System
Overview
This system provides a progressive, drip-fed friendship development between the player (Agent 0x00) and their handler (Agent 0x99 "Haxolottle") across multiple missions. Conversations deepen naturally over time while respecting SAFETYNET's identity protection protocols.
Design Philosophy
Core Principles
- Genuine Friendship Within Constraints: Build a real emotional bond between characters who can never know each other's real identities
- Progressive Revelation: Unlock deeper, more vulnerable topics as friendship develops
- Drip-Fed Content: Spread conversations across 15+ missions to create long-term investment
- Respect Protocol 47-Alpha: Characters can share personal interests, philosophies, fears—but never identifying information
- Emotional Authenticity: Make the constraint itself part of the emotional depth, not just a limitation
What Makes This Different
Unlike the general lore exploration hub, these conversations:
- Are specifically with Haxolottle (not generic NPC system)
- Build a single ongoing relationship over time
- Track emotional progression (friendship_level 0-100)
- Unlock based on mission count, not just influence
- Explore vulnerability, personal loss, philosophical questions
- Address the burden of hidden identities directly
Files
haxolottle_ongoing_conversations.ink
Missions 1-10 (Phases 1-2)
Phase 1 Topics (Missions 1-5):
- General hobbies and interests
- The axolotl obsession deep dive
- Music taste and preferences
- Coffee/tea preferences
- Stress management strategies
Phase 2 Topics (Missions 6-10):
- How philosophy has evolved over years
- What handler life is really like
- Nostalgia for field work
- Weird habits developed from the job
- Favorite past operations
- Difficult day/personal struggle moment
haxolottle_ongoing_conversations_advanced.ink
Missions 11+ (Phases 3-4)
Phase 3 Topics (Missions 11-15):
- Fears and anxieties about the work
- "What if I'd chosen differently?" alternate life discussion
- Meaning and purpose of the work
- Friendship within constraints
- Dreams for the future
- Personal loss story (high friendship)
Phase 4 Topics (Missions 16+):
- The burden of hidden identity
- Loneliness of secrecy
- Temptation to share real names
- What happens after SAFETYNET?
- Explicit friendship acknowledgment
- Secret hobby reveal (poetry writing)
Progression System
Friendship Level Tracking
VAR friendship_level = 0 // 0-100 scale
Friendship Level Gains:
- Basic conversation: +3 to +5
- Thoughtful question: +8 to +12
- Personal sharing by player: +10 to +20
- Vulnerable mutual sharing: +20 to +40
- Deep trust moments: +40 to +65
Friendship Level Gates:
| Level | What Unlocks |
|---|---|
| 0-20 | Basic topics only |
| 20-40 | Some personal topics |
| 40-60 | Vulnerable conversations |
| 60-80 | Deep friendship topics |
| 80-100 | Most intimate revelations |
Mission-Based Unlocking
VAR missions_together = current_mission_number
Conversations are gated by both friendship level AND mission count:
- Prevents rushing through all content immediately
- Creates natural pacing across campaign
- Rewards long-term player investment
Additional Tracking Variables
VAR conversations_had = 0 // Total personal conversations
VAR trust_moments = 0 // Times genuine trust was shown
VAR humor_shared = 0 // Funny moments together
VAR vulnerable_moments = 0 // Times vulnerability was shared
VAR player_shared_personal = 0 // Player openness counter
These create a rich profile of the relationship that can be referenced later.
Topic Structure
Typical Conversation Flow
Hub → Topic Selection → Main Content → Player Choice → Response → Return to Hub
Each topic:
- Sets discussion flag (
talked_X = true) to prevent repetition - Grants friendship points based on depth
- Increments conversation counter
- Offers player choices that affect friendship
- May unlock related topics or special moments
Player Choice Types
Supportive Choices (+10 to +20 friendship):
- Express understanding
- Offer comfort
- Affirm Haxolottle's feelings
Sharing Choices (+15 to +35 friendship):
- Reveal player's similar experiences
- Share personal struggles (within protocol)
- Mutual vulnerability
Humor Choices (+5 to +15 friendship):
- Gentle teasing
- Shared jokes
- Light moments
Analytical Choices (+8 to +15 friendship):
- Ask deeper questions
- Explore philosophical angles
- Challenge thoughtfully
Protocol 47-Alpha Integration
What Can Be Shared
Per Regulation 847 and Protocol 180, agents may discuss:
✅ Allowed:
- Personal interests and hobbies (swimming, reading, music)
- Philosophies and worldviews
- Emotional struggles and fears
- Past operational experiences (anonymized)
- Future dreams and aspirations
- Stress management techniques
- Weird habits and quirks
- Creative outlets (poetry, art, etc.)
❌ Forbidden:
- Real names
- Home addresses
- Family member names/details
- Specific previous employment (if identifying)
- Educational institutions (if identifying)
- Unique biographical details
- Any identifying personal information
How Characters Navigate This
The conversations themselves explore this constraint:
Haxolottle: I don't need to know your real name to know you're
a good person who cares about doing this work right.
The limitation becomes part of the depth, not just a restriction.
Integration Guide
Adding to Missions
Option 1: Downtime Moments
=== mission_safe_moment ===
You've reached a secure location. Your phone buzzes with a message.
+ [Check message from Haxolottle]
-> start_haxolottle_conversation
+ [Focus on mission]
-> continue_mission
Option 2: Post-Mission Debrief
=== mission_complete_debrief ===
#speaker:agent_haxolottle
Haxolottle: Good work today. Before we close out... got a minute to talk?
Not about the mission—just... talk?
+ [Sure, let's talk]
-> start_haxolottle_conversation
+ [Maybe next time]
-> end_debrief
Option 3: Pre-Mission Ritual
=== mission_briefing_complete ===
#speaker:agent_haxolottle
Haxolottle: Briefing done. You've got 15 minutes before deployment.
Want to chat and decompress before the operation?
+ [Let's talk for a bit]
-> start_haxolottle_conversation
+ [I'll use the time to prepare]
-> mission_prep
Entry Points
// For missions 1-10
-> start // in haxolottle_ongoing_conversations.ink
// For missions 11-15
-> phase_3_hub // in haxolottle_ongoing_conversations_advanced.ink
// For missions 16+
-> phase_4_hub // in haxolottle_ongoing_conversations_advanced.ink
Recommended Frequency
- Missions 1-5: Offer conversation every 1-2 missions
- Missions 6-10: Offer every 1-2 missions, some optional
- Missions 11-15: Offer every 2-3 missions (deeper content)
- Missions 16+: Offer as special moments, not every mission
Rule of thumb: Don't force it. Let players initiate when they want deeper connection.
Emotional Arcs
Phase 1 (Missions 1-5): Getting to Know You
Tone: Light, friendly, establishing rapport Topics: Hobbies, interests, surface-level personal info Goal: Build basic friendship and comfort
Key moments:
- Discovering the axolotl obsession
- Finding shared interests
- First vulnerable admission (stress management)
Phase 2 (Missions 6-10): Deepening Connection
Tone: More personal, some vulnerability Topics: Philosophy, handler life reality, past experiences Goal: Establish genuine trust
Key moments:
- Haxolottle shares haunting decision
- Discussion of gray areas in work
- Acknowledging weird habits together
Phase 3 (Missions 11-15): Genuine Friendship
Tone: Vulnerable, honest, meaningful Topics: Fears, alternate paths, meaning of work Goal: Create deep emotional bond
Key moments:
- Mutual fear sharing
- "Friendship within constraints" discussion
- Personal loss revelation
Phase 4 (Missions 16+): Deep Bond
Tone: Intimate (platonically), questioning identity Topics: Identity burden, name temptation, lasting friendship Goal: Acknowledge profound connection despite constraints
Key moments:
- Temptation to share real names
- Explicit friendship acknowledgment
- Secret hobby reveal
- "You're one of my closest friends" moment
Special High-Friendship Events
The Personal Loss Story
Requirement: friendship_level >= 70, Phase 3+
Trigger: -> hax_personal_loss
Haxolottle shares story of losing someone important when choosing SAFETYNET. Major vulnerability moment.
The Secret Hobby Reveal
Requirement: friendship_level >= 85, Phase 4
Trigger: -> hax_secret_hobby
Haxolottle reveals they write poetry to process the work. Can share a poem if player wants.
The Name Temptation
Requirement: friendship_level >= 75, Phase 4
Trigger: -> name_temptation
Explicit discussion of wanting to share real names but choosing not to for safety. Most direct addressing of Protocol 47-Alpha's emotional cost.
The Friendship Acknowledgment
Requirement: friendship_level >= 80, Phase 4
Trigger: -> friendship_acknowledgment
Haxolottle explicitly states player is one of their closest friends. Can reach friendship_level 90-100.
Variable Reference
Core Tracking
VAR friendship_level = 0 // 0-100 overall relationship
VAR missions_together = 0 // Mission count
VAR conversations_had = 0 // Total personal conversations
VAR trust_moments = 0 // Genuine trust shown
VAR humor_shared = 0 // Funny moments together
VAR vulnerable_moments = 0 // Vulnerability shared
VAR player_shared_personal = 0 // Player openness
Phase 1 Topics (Missions 1-5)
VAR talked_hobbies_general = false
VAR talked_axolotl_obsession = false
VAR talked_music_taste = false
VAR talked_coffee_preferences = false
VAR talked_stress_management = false
Phase 2 Topics (Missions 6-10)
VAR talked_philosophy_change = false
VAR talked_handler_life = false
VAR talked_field_nostalgia = false
VAR talked_weird_habits = false
VAR talked_favorite_operations = false
Phase 3 Topics (Missions 11-15)
VAR talked_fears_anxieties = false
VAR talked_what_if_different = false
VAR talked_meaning_work = false
VAR talked_friendship_boundaries = false
VAR talked_future_dreams = false
Phase 4 Topics (Missions 16+)
VAR talked_identity_burden = false
VAR talked_loneliness_secrecy = false
VAR talked_real_name_temptation = false
VAR talked_after_safetynet = false
VAR talked_genuine_friendship = false
Special Events
VAR hax_shared_loss = false // Personal loss story told
VAR hax_shared_doubt = false // Shared professional doubts
VAR hax_shared_secret_hobby = false // Poetry writing revealed
Character Voice Guidelines
Haxolottle's Voice
Early Conversations (Phases 1-2):
- Professional but warm
- Occasional axolotl metaphors (not every conversation)
- Supportive mentor energy
- Some humor, mostly light
Later Conversations (Phases 3-4):
- More vulnerable and honest
- Philosophical and reflective
- Direct about emotional realities
- Still warm but with more weight
Key Phrases:
- "Like an axolotl regenerating..." (adaptation metaphor)
- "Protocol 47-Alpha says... but..."
- "You're a good person, Agent {player_name}"
- "That means more than you know"
- "We're doing something impossible here"
Player Response Guidance
Players should have options to:
- Support - Offer comfort and understanding
- Share - Reveal their own experiences (within protocol)
- Question - Ask deeper or clarifying questions
- Deflect - Keep some distance if they choose
Avoid: Making player automatically vulnerable. Give them agency over how much they share.
Writing New Conversations
Template Structure
=== new_topic_name ===
#speaker:agent_haxolottle
~ talked_new_topic_name = true
~ friendship_level += [5-15 for basic, 15-30 for deep]
~ conversations_had += 1
~ [vulnerable_moments += 1 if appropriate]
[Haxolottle's opening about the topic]
[Content - 3-6 exchanges]
* [Player Choice 1 - Supportive]
~ friendship_level += [appropriate amount]
~ [possibly player_shared_personal += 1]
You: [Player response]
-> new_topic_response_1
* [Player Choice 2 - Sharing]
~ friendship_level += [higher amount]
~ player_shared_personal += [1-3]
~ trust_moments += [possibly 1-2]
You: [Player shares something]
-> new_topic_response_2
* [Player Choice 3 - Question or alternative]
~ friendship_level += [moderate amount]
You: [Player asks or responds differently]
-> new_topic_response_3
=== new_topic_response_1 ===
[Haxolottle's response to supportive choice]
~ friendship_level += [additional points]
-> [return to hub]
[Repeat for other responses]
Quality Checklist
- Does it respect Protocol 47-Alpha? (No identifying info)
- Does it advance friendship naturally?
- Does it offer meaningful player choices?
- Does Haxolottle's voice stay consistent?
- Does it grant appropriate friendship points?
- Does it mark the topic as discussed?
- Does it return to hub properly?
- Is it gated by appropriate friendship/mission levels?
Persistence Across Sessions
Required Variables to Save
friendship_level
missions_together
conversations_had
trust_moments
vulnerable_moments
player_shared_personal
// All "talked_X" flags
// All "hax_shared_X" flags
Recommended Save Points
- After each conversation
- At mission completion
- During autosave moments
Reset Considerations
Never Reset:
- friendship_level
- talked_X flags (topics should stay discussed)
- hax_shared_X flags (special events shouldn't repeat)
Can Reset:
- missions_together (if starting new campaign)
- But consider carrying friendship over for NG+
Usage Examples
Example 1: Early Mission Downtime
=== safe_house_moment ===
You've secured the location. Time to catch your breath.
Your phone buzzes—message from Haxolottle.
+ [Read message]
#speaker:agent_haxolottle
Haxolottle: You've got some breathing room. Want to chat while you wait?
++ [Sure]
{missions_together <= 5:
-> phase_1_hub // Early missions
- missions_together <= 10:
-> phase_2_hub // Middle missions
- missions_together <= 15:
-> phase_3_hub // Later missions
- else:
-> phase_4_hub // Deep friendship
}
++ [Maybe later]
Haxolottle: No problem. Focus on the mission.
-> continue_mission
Example 2: Post-Mission Check-In
=== mission_debrief_personal ===
#speaker:agent_haxolottle
{missions_together == 6:
Haxolottle: Six missions together now. That's... that's starting to feel like a real partnership.
Haxolottle: Not just professional—we're building something here, aren't we?
-> phase_2_hub
- missions_together == 11:
Haxolottle: Over ten missions. I don't know your real name, Agent {player_name}, but I know you. Really know you.
Haxolottle: Want to talk about that?
-> phase_3_hub
- else:
Haxolottle: Good work today. Need to talk about anything?
-> [appropriate hub based on mission count]
}
Example 3: Player-Initiated Conversation
=== player_phone_menu ===
You have a moment of downtime.
+ [Call Haxolottle]
{friendship_level >= 30:
-> call_haxolottle_friendly
- else:
-> call_haxolottle_professional
}
+ [Continue mission]
-> next_objective
=== call_haxolottle_friendly ===
#speaker:agent_haxolottle
Haxolottle: Hey! Not an emergency call, which is good. What's up?
+ [Just wanted to talk]
Haxolottle: I'm glad you called. I could use a break from monitoring feeds anyway.
-> [appropriate conversation hub]
+ [Actually, never mind]
Haxolottle: No worries. I'm here if you need me.
-> player_phone_menu
Narrative Impact
How This Affects the Overall Story
Early Game:
- Establishes Haxolottle as more than just mission support
- Creates emotional investment in handler-agent relationship
- Provides relief from mission tension
Mid Game:
- Deepens understanding of SAFETYNET culture
- Explores ethical complexities through personal lens
- Makes Protocol 47-Alpha feel real and consequential
Late Game:
- Provides emotional anchor during intense missions
- Demonstrates the personal cost of secret work
- Creates genuine stakes beyond mission success
Player Investment Mechanisms
- Slow Burn: Relationship develops over 15+ missions
- Player Agency: Players choose how much to engage
- Mutual Vulnerability: Both characters share and grow
- Constrained Intimacy: Limitations create unique emotional texture
- Recognition: Haxolottle remembers and references past conversations
Future Expansion Ideas
Additional Conversation Paths
Crisis Moments:
- Conversations triggered when player fails missions
- Haxolottle helping player process mistakes
- Rebuilding confidence together
Special Events:
- Birthdays (handler and agent don't know each other's, discuss that)
- SAFETYNET anniversaries
- Milestone mission celebrations (50th, 100th)
Other Agents:
- Haxolottle mentions their other agents (without details)
- Player can ask about handler life juggling multiple agents
- Discussions of different agent personalities
Philosophical Deep Dives:
- Specific ethical dilemmas from missions
- Theoretical discussions about surveillance vs. privacy
- Debates about SAFETYNET's methods
Integration with Other Systems
Mission Performance Callbacks:
- Haxolottle references player's approach styles
- Discusses specific mission moments
- Acknowledges player's growth
Lore System Integration:
- Some conversations unlock LORE entries
- LORE discoveries can trigger conversations
- Deeper lore accessible through friendship
Multiple Handlers:
- If player ever changes handlers, reference this friendship
- Grief/adjustment to new handler
- Staying in touch with Haxolottle in new role
Technical Notes
Performance Considerations
- Hub pattern is efficient for branching
- Boolean flags prevent re-computation
- Friendship calculations are simple arithmetic
- No complex nested conditionals
Testing Checklist
- All conversation paths are reachable
- Friendship gains are balanced
- Phase gates work correctly
- Variables persist across sessions
- No orphaned diverts
- Character voice is consistent
- Protocol 47-Alpha is respected throughout
- Player has meaningful choices
- Conversations return to hub properly
- Special events trigger at correct friendship levels
Common Pitfalls to Avoid
Don't:
- Rush to Phase 4 content too quickly
- Make Haxolottle reveal identifying information
- Force vulnerability—let players choose
- Repeat the axolotl metaphor every conversation
- Make friendship_level increase too easily
- Forget to mark topics as discussed
- Break character voice in later phases
Do:
- Let relationship develop naturally
- Respect Protocol 47-Alpha as narrative element
- Vary conversation tones (light and heavy)
- Reference previous conversations
- Give players agency over engagement depth
- Make constraints part of the emotional story
Credits & References
Based On:
- Character profile: Agent 0x99 "Haxolottle" (story_design/universe_bible/04_characters/safetynet/)
- Character profile: Agent 0x00 (story_design/universe_bible/04_characters/safetynet/)
- Rules of Engagement: Protocol 47-Alpha (story_design/universe_bible/02_organisations/safetynet/rules_of_engagement.md)
- Ink Scripting Guide (story_design/story_dev_prompts/07_ink_scripting.md)
Design Philosophy:
- Friendship despite constraints
- Emotional authenticity within genre limits
- Long-term player investment
- Meaningful character development
Last Updated: 2025-11-18 Version: 1.0 Status: Ready for Integration