- Updated the story premise to introduce "Operation Shatter," detailing the coordinated mass panic attack targeting vulnerable populations.
- Expanded the room layout to include additional rooms and NPC interactions, enhancing player exploration and engagement.
- Added critical LORE fragments revealing casualty projections and targeting demographics, emphasizing the stakes of the mission.
- Revised dialogue and choices to reflect player actions and moral implications, ensuring a more impactful closing debrief.
- Improved scenario structure and flow, aligning with best practices for narrative clarity and player agency.
- Introduced a lab workstation popup in the game interface for accessing lab sheets via an iframe.
- Implemented JavaScript functions to create, open, and close the lab workstation, enhancing user interaction.
- Updated CSS styles for the lab workstation popup to ensure a seamless visual experience.
- Enhanced interaction handling to allow players to open lab workstations from inventory items.
- Added new scenario files for the Linux Fundamentals and Security Lab, including detailed instructions and objectives for players.
- Updated scenario schema to include the new lab workstation type, ensuring proper integration into the game mechanics.
- Updated scenario-schema.json to include "tutorial" as a valid difficulty level.
- Changed position coordinates from integer to number for better precision.
- Added new item types ("id_badge", "rfid_cloner") in scenario schema with descriptions.
- Improved validate_scenario.rb to check for common issues, including room connection directions and NPC configurations.
- Added suggestions for gameplay improvements based on scenario features.
- Updated SCENARIO_JSON_FORMAT_GUIDE.md to clarify valid directions and bidirectional connections.
- Introduced guidelines for lock type variety and progression in room layout design.
- Established dialogue pacing rules in Ink scripting to enhance player engagement.
- Included validation steps in scenario assembly documentation to ensure structural integrity.
- Introduced `scenario-schema.json` to define the structure and requirements for scenario.json.erb files.
- Implemented `validate_scenario.rb` to render ERB templates to JSON and validate against the schema.
- Created a comprehensive `SCENARIO_JSON_FORMAT_GUIDE.md` to outline the correct format for scenario files, including required fields, room definitions, objectives, and common mistakes.
Create comprehensive Ink dialogue files for five security tools:
- Kali Linux: Overview and getting started guide
- nmap: Port scanning and network discovery
- Metasploit: Finding and running exploits
- chmod: File permissions and usage
- nikto: Web vulnerability scanning
Each file provides interactive educational content with:
- Multiple topic branches for different aspects
- Practical examples and use cases
- Step-by-step instructions
- Security and ethical usage reminders
- Navigation between related topics
These files can be included in game scenarios to provide
contextual help to players learning security tools.
- Remove ready_for_practice and challenge_tips sections
- Update encoding_encryption.ink header and start section
- Clean exploitation.ink and post_exploitation.ink references
- Ensure all files use consistent game narrative format
- exploitation.ink
- post_exploitation.ink
- phishing_social_engineering.ink
- encoding_encryption.ink
- feeling_blu_ctf.ink
All files now use consistent Haxolottle character and conversational tone
- Add nmap_basics.ink, metasploit_basics.ink, netcat_basics.ink as reusable tools
- Completely rewrite intro_linux.ink:
- Remove all unnecessary tracking variables
- Change from 'Tech Instructor' to 'Haxolottle'
- Remove lab/training/exercise language
- Convert to helpful NPC offering to explain concepts
- Keep all technical content but make conversational
- Link to reusable tool files where appropriate
- Use proper ink patterns (hub structure, #exit_conversation)
- Copy all lab sheets to game_scenarios/ for narrative conversion
- Add dead_drop_system.ink explaining ENTROPY's flag-based communication
- Prepare for converting educational labs into game challenges
Converts introducing_attacks/1_intro_linux.md into interactive dialogue:
- Tech Instructor NPC guides through Linux basics
- Hub structure for major topics: command-line, vi, piping, redirection, networking, SSH, Hydra
- Each topic has short explanations with deep-dive options
- Commands reference section
- Challenge tips for practical exercises
- Progress tracking and instructor rapport system
Game-based learning replacement for traditional lab sheets.
- Remove inconsistent 5-cell (ALPHA/BETA/GAMMA/DELTA/EPSILON) structure
- Update all organizational LORE to reference 11 established cells:
* Digital Vanguard, Critical Mass, Quantum Cabal
* Zero Day Syndicate, Social Fabric, Ghost Protocol
* Ransomware Incorporated, Supply Chain Saboteurs
* Insider Threat Initiative, AI Singularity, Crypto Anarchists
Changes:
- STRAT_001: Add postscript explaining evolution from 5 to 11 cells
- TECH_TOOL_001: Update to reference Critical Mass (not DELTA)
- ENTROPY_PERSONNEL_001: Update Cascade to match Critical Mass member Dr. Sarah Winters
- ENTROPY_OPS_001: Update to reference Digital Vanguard and Insider Threat Initiative
- ENTROPY_HISTORY_001: Note early cell evolution to specialized structure
- PROTO_CELL_001: Remove specific cell designation examples
- TRAIN_RECRUIT_001/TRAIN_OPSEC_001: Remove cell-specific references
- README_ORGANIZATIONAL_LORE: Remove OPCOM_001, update all references
Deletions:
- OPCOM_001: Removed Phase 3 coordination doc (inconsistent with universe bible)
This brings all organizational LORE into consistency with established universe bible.
Created interconnected LORE fragment collection revealing ENTROPY's
world through discoverable artifacts. Organized by content type and
artifact format for progressive player discovery.
**Structure:**
- 4 content categories: ENTROPY Intelligence, The Architect,
Character Backgrounds, Location History
- 7 artifact types: encrypted comms, intelligence reports, text notes,
emails, voice messages, corporate docs, personal items
- Progressive revelation: early game intro → mid game connections →
late game master plan
**10 Seed Fragments Created:**
ENTROPY Intelligence (5):
- Operation Glass House completion report (cell communication)
- Dead drop server list (compromised infrastructure)
- Thermite.py tool analysis (The Architect's signature)
- Operative "Cascade" profile (true believer)
- Complete organizational history (2015-2025, Phase 3 timeline)
The Architect (2):
- Philosophical manifesto on inevitability (ideology revealed)
- Phase 3 activation directive (July 15, complete master plan)
Character Backgrounds (3):
- Sarah Martinez confession email (insider threat desperation)
- Marcus Chen final voice message (civilian courage, survived!)
- Agent 0x99 axolotl philosophy (regeneration vs entropy)
Location History (1):
- Vanguard Financial complete history (25 years, breach, recovery)
**Key Features:**
- Interconnected narrative web (fragments reference each other)
- Educational value (CyBOK-aligned security lessons)
- Moral complexity (sympathetic characters on both sides)
- Emotional impact (personal stories, real consequences)
- Progressive mystery (builds understanding over time)
- Master catalog tracking all connections and discovery timing
**Thematic Elements:**
- ENTROPY: "For entropy and inevitability" - thermodynamic philosophy
- SAFETYNET: "For regeneration and resilience" - axolotl metaphor
- Phase 3: July 15, 2025 - infrastructure-wide coordinated attack
- Moral gray areas: desperate people, true believers, ethical constraints
Fragments demonstrate sophisticated threat actor (ENTROPY) with
decade-long planning, ideological commitment, and custom tooling,
opposed by dedicated defenders (SAFETYNET) who regenerate after
every setback.
See story_design/lore_fragments/MASTER_CATALOG.md for complete
interconnection map and expansion guidelines.
Create design document explaining how CTF flags integrate into
Break Escape's narrative through ENTROPY's dead drop system.
Key concepts:
- Flags as ENTROPY coordination messages
- Drop-site terminals hidden in plain sight
- Why physical presence is required for infiltration
- Flag reward categories (equipment, intel, access, story)
- Complete gameplay loop from briefing to debrief
- Sample Ink dialogue for character interactions
This system allows SecGen CTF scenarios to be embedded
narratively while providing tangible gameplay progression.
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.
Fixes issue where choosing conversation exit options would show
"reached end of story" console message. All mission_hub exit points
now use:
#end_conversation
-> DONE
Instead of:
#end_conversation
-> END
This preserves conversation state at mission_hub while cleanly
ending the interaction without triggering ink's end-of-story behavior.
Updated hub files:
- chen_hub.ink
- netherton_hub.ink
- haxolottle_hub.ink
Recompiled all hub JSON files to reflect changes.
BREAKING CHANGE: Unified relationship variable naming
Old System (Per-NPC Variables):
- Dr. Chen: npc_chen_rapport with #rapport_gained/lost tags
- Director Netherton: npc_netherton_respect with #respect_gained/lost tags
- Haxolottle: npc_haxolottle_friendship_level with #friendship_gained/lost tags
New System (Unified Influence):
- Dr. Chen: npc_chen_influence with #influence_gained/lost tags
- Director Netherton: npc_netherton_influence with #influence_gained/lost tags
- Haxolottle: npc_haxolottle_influence with #influence_gained/lost tags
Benefits:
- Consistent scoring system across all NPCs
- Simpler to understand and balance
- Unified tag system (#influence_gained/lost)
- Messages still customized per NPC based on their personality
Files Changed:
- dr_chen_ongoing_conversations.ink: rapport → influence
- chen_hub.ink: rapport → influence
- netherton_ongoing_conversations.ink: respect → influence
- netherton_hub.ink: respect → influence
- haxolottle_ongoing_conversations.ink: friendship_level → influence
- haxolottle_hub.ink: friendship_level → influence
- PersonChatConversation.js: Updated getInfluenceMessage() for unified system
- Now detects NPC ID and provides appropriate messages
- Supports legacy tag names for backward compatibility
- INK_BEST_PRACTICES.md: Updated all examples and documentation
- Variable naming conventions
- Tag system documentation
- All code examples
- NPC-specific sections
- NPC_HUB_ARCHITECTURE.md: Updated influence system documentation
- Recompiled all hub JSON files
Messages by NPC:
- Dr. Chen: "Dr. Chen appreciates that" / "Dr. Chen is disappointed"
- Netherton: "Director Netherton approves" / "Director Netherton is displeased"
- Haxolottle: "Haxolottle likes that" / "Haxolottle seems disappointed"
All files compile successfully with unified influence system.
BREAKING CHANGE: Updated conversation ending behavior
Old Pattern (WRONG):
- Conversations ended with #exit_conversation
- Diverted to -> END (lost state)
- Game code navigated back to mission_hub
- State not preserved between interactions
New Pattern (CORRECT):
- Conversations end with #end_conversation
- Divert to -> mission_hub (preserves state)
- Game code closes UI window
- Next interaction resumes from mission_hub with full context
Why This Matters:
- State preservation: NPC remembers where conversation left off
- Flexible re-entry: Player can talk to NPC multiple times
- Context awareness: Hub can show different options based on prior discussions
Files Changed:
- All *_ongoing_conversations.ink files: Updated conversation_end knots
- Changed #exit_conversation -> #end_conversation
- Changed -> END -> -> mission_hub
- PersonChatConversation.js: Renamed handleExitConversation -> handleEndConversation
- Now dispatches 'npc-conversation-ended' event to close UI
- Ink handles state preservation via -> mission_hub
- PhoneChatConversation.js: Same changes as PersonChatConversation
- INK_BEST_PRACTICES.md: Updated documentation with correct pattern
- Fixed conversation ending examples
- Updated checklists
- Added state preservation explanation
- NPC_HUB_ARCHITECTURE.md: Updated mission hub flow documentation
- Recompiled all hub JSON files
This ensures conversation state is properly maintained across
multiple interactions with the same NPC within a play session.
Influence Tags System:
- Add #rapport_gained/lost:X tags for Dr. Chen throughout all conversations
- Add #respect_gained/lost:X tags for Director Netherton
- Add #friendship_gained/lost:X tags for Haxolottle
- Tags automatically added after every relationship variable change
- Small changes (±2-5) for minor interactions
- Medium changes (±5-10) for meaningful moments
- Large changes (±10-15) for major trust/betrayal moments
Conversation Handler Updates:
- PersonChatConversation: Add handleInfluenceGained/Lost methods
- PhoneChatConversation: Add tag processing support
- Dispatch 'npc-influence-change' events for UI layer
- Context-appropriate messages based on NPC type and amount
Documentation:
- Create INK_BEST_PRACTICES.md with comprehensive patterns
- Hub architecture and mission_hub pattern
- Influence tags system with examples
- External functions reference
- Variable persistence patterns
- Common ink patterns and anti-patterns
- Complete checklists for new NPC content
- Update NPC_HUB_ARCHITECTURE.md
- Document mission_hub pattern implementation
- Document influence tags system
- Add navigation support requirements
- Cross-reference best practices
Files Modified:
- All ongoing_conversations.ink files (chen, netherton, haxolottle)
- All hub.ink files (chen, netherton, haxolottle)
- PersonChatConversation.js - influence tag handlers
- PhoneChatConversation.js - influence tag handlers (stub)
- Compiled JSON files regenerated
This provides players with immediate visual feedback for relationship
changes and gives writers a clear pattern to follow for all NPC content.
- Standardize all NPC hub files with a consistent 'mission_hub' knot
- Rename chen_main_hub → mission_hub in chen_hub.ink
- Rename netherton_main_hub → mission_hub in netherton_hub.ink
- Rename haxolottle_main_hub → mission_hub in haxolottle_hub.ink
- Add #exit_conversation tag handling in both conversation classes
- PersonChatConversation: Add handleExitConversation() method
- PhoneChatConversation: Add processTags() and handleExitConversation()
- When personal conversations end, automatically navigate back to mission_hub
- Allows seamless flow between personal/mission topics within same conversation
This creates a hub-and-spoke pattern where:
- mission_hub = central routing point (not visible to player)
- Personal conversations branch off and return to hub
- Mission-specific topics branch off and return to hub
- Player sees continuous conversation, game manages routing
Fixed all player_name references to use function call syntax player_name().
Also removed invalid === END knot definitions from hub files.
Changes:
- Fixed player_name -> player_name() in all ongoing_conversations.ink files
- Removed === END knot definitions (END is a built-in directive)
- chen_hub.ink now compiles successfully with only warnings
- netherton_hub.ink and haxolottle_hub.ink still have some structural issues to resolve
Status:
✓ chen_hub.ink - compiles successfully
⚠ netherton_hub.ink - has choice nesting errors
⚠ haxolottle_hub.ink - has missing knot targets and variable errors
When using INCLUDE in ink, all knots are brought into the same namespace.
Divert statements should reference knots directly without the file prefix.
Changed:
- chen_hub.ink: -> dr_chen_ongoing_conversations.phase_X_hub
to -> phase_X_hub
- netherton_hub.ink: -> netherton_ongoing_conversations.phase_X_hub
to -> phase_X_hub
- haxolottle_hub.ink: -> haxolottle_ongoing_conversations.phase_X_hub
to -> phase_X_hub
This fixes the "Divert target not found" compilation errors.
Fixed multiple Ink compilation errors:
1. Removed duplicate EXTERNAL and VAR declarations from hub files:
- chen_hub.ink: Removed player_name(), current_mission_id(),
total_missions_completed, and professional_reputation declarations
(already declared in dr_chen_ongoing_conversations.ink)
- netherton_hub.ink: Same removals for netherton context
- haxolottle_hub.ink: Same removals for haxolottle context
2. Fixed EXTERNAL function call syntax in dr_chen_ongoing_conversations.ink:
- Changed {player_name} to {player_name()} in phase hubs and conversation ends
- Fixed 6 instances across phase_2_hub, phase_3_hub, phase_4_hub,
conversation_end_phase2, and conversation_end_phase3
3. Fixed conditional syntax in chen_hub.ink:
- Changed `current_mission_id == "ghost_in_machine"` to
`current_mission_id() == "ghost_in_machine"` with proper brace structure
4. Fixed jump_to_personal_conversations in all hub files:
- Removed non-existent `_with_return` tunnel calls
- Changed to direct diverts to phase_hub knots
- Removed unreachable "return" dialogue
All hub files now properly include the ongoing conversations file and only
declare EXTERNAL variables unique to the hub context.