mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-20 13:50:46 +00:00
- 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.
981 lines
44 KiB
Plaintext
981 lines
44 KiB
Plaintext
<%
|
|
# ============================================================================
|
|
# MISSION 1: FIRST CONTACT - SCENARIO FILE (REVISED LAYOUT)
|
|
# ============================================================================
|
|
# Break Escape - Season 1: The Architect's Shadow
|
|
#
|
|
# This file defines the game world structure: rooms, NPCs, objects, items
|
|
# For mission metadata (display name, CyBOK mappings, etc.), see mission.json
|
|
#
|
|
# ROOM LAYOUT:
|
|
# Reception → Main Office Area (KEY) → Multiple rooms branch:
|
|
# - Storage Closet (unlocked, practice safe)
|
|
# - Break Room (unlocked, clues)
|
|
# - Conference Room (unlocked, evidence)
|
|
# - IT Room (PIN 2468, Kevin + lockpicks + keycard)
|
|
# - Manager's Office (unlocked, safe with Derek's key, briefcase for lockpick)
|
|
# - Maya's Office (unlocked, informant)
|
|
# - Derek's Office (KEY or LOCKPICK)
|
|
# └→ Derek's Office connects to Server Room (KEYCARD)
|
|
# ============================================================================
|
|
|
|
# ERB Helper Methods
|
|
require 'base64'
|
|
|
|
def base64_encode(text)
|
|
Base64.strict_encode64(text)
|
|
end
|
|
|
|
# Narrative Content Variables
|
|
client_list_message = "Client list update: Coordinating with ZDS for technical infrastructure deployment. Phase 3 timeline: 2 weeks. FILING_CABINET_PIN: 0419 (Derek's bday - don't forget again!)"
|
|
password_hints = "Common passwords: Marketing123, Campaign2024, Viral_Dynamics_Admin, Derek0419"
|
|
%>
|
|
{
|
|
"scenario_brief": "Infiltrate Viral Dynamics Media to investigate suspected ENTROPY operations. Gather evidence of disinformation campaigns while maintaining cover as an IT contractor.",
|
|
|
|
"objectives": [
|
|
{
|
|
"aimId": "establish_access",
|
|
"title": "Establish Access",
|
|
"description": "Get into the building and begin your investigation",
|
|
"status": "active",
|
|
"order": 0,
|
|
"tasks": [
|
|
{
|
|
"taskId": "check_in_reception",
|
|
"title": "Check in at reception",
|
|
"type": "npc_conversation",
|
|
"targetNPC": "sarah_martinez",
|
|
"status": "active"
|
|
},
|
|
{
|
|
"taskId": "access_main_office",
|
|
"title": "Access the main office area",
|
|
"type": "enter_room",
|
|
"targetRoom": "main_office_area",
|
|
"status": "active"
|
|
},
|
|
{
|
|
"taskId": "find_it_room_code",
|
|
"title": "Find the IT room access code",
|
|
"type": "collect_items",
|
|
"targetItems": ["notes"],
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "access_it_room",
|
|
"title": "Access the IT room",
|
|
"type": "enter_room",
|
|
"targetRoom": "it_room",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "meet_kevin",
|
|
"title": "Meet Kevin Park",
|
|
"type": "npc_conversation",
|
|
"targetNPC": "kevin_park",
|
|
"status": "locked"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"aimId": "investigate_derek",
|
|
"title": "Investigate Derek Lawson",
|
|
"description": "Access Derek's office and gather evidence",
|
|
"status": "active",
|
|
"order": 1,
|
|
"tasks": [
|
|
{
|
|
"taskId": "find_derek_key",
|
|
"title": "Find access to Derek's office",
|
|
"type": "collect_items",
|
|
"targetItems": ["key"],
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "access_derek_office",
|
|
"title": "Enter Derek's office",
|
|
"type": "enter_room",
|
|
"targetRoom": "derek_office",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "search_derek_computer",
|
|
"title": "Search Derek's computer",
|
|
"type": "collect_items",
|
|
"targetItems": ["text_file"],
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "decode_whiteboard",
|
|
"title": "Decode the whiteboard message",
|
|
"type": "unlock_object",
|
|
"targetObject": "cyberchef_workstation",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "open_derek_cabinet",
|
|
"title": "Open Derek's filing cabinet",
|
|
"type": "unlock_object",
|
|
"targetObject": "derek_cabinet",
|
|
"status": "locked"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"aimId": "gather_evidence",
|
|
"title": "Gather Evidence",
|
|
"description": "Collect proof of the disinformation operation",
|
|
"status": "active",
|
|
"order": 2,
|
|
"tasks": [
|
|
{
|
|
"taskId": "find_casualty_projections",
|
|
"title": "Find Operation Shatter casualty projections",
|
|
"type": "collect_items",
|
|
"targetItems": ["notes"],
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "find_manifesto",
|
|
"title": "Discover ENTROPY manifesto",
|
|
"type": "collect_items",
|
|
"targetItems": ["notes"],
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "find_campaign_materials",
|
|
"title": "Find campaign materials",
|
|
"type": "collect_items",
|
|
"targetItems": ["notes"],
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "talk_to_maya",
|
|
"title": "Talk to the informant",
|
|
"type": "npc_conversation",
|
|
"targetNPC": "maya_chen",
|
|
"status": "locked"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"aimId": "intercept_comms",
|
|
"title": "Intercept Communications",
|
|
"description": "Access server systems and intercept ENTROPY communications",
|
|
"status": "active",
|
|
"order": 3,
|
|
"tasks": [
|
|
{
|
|
"taskId": "access_server_room",
|
|
"title": "Access the server room",
|
|
"type": "enter_room",
|
|
"targetRoom": "server_room",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "access_vm",
|
|
"title": "Access compromised systems",
|
|
"type": "unlock_object",
|
|
"targetObject": "vm_launcher_intro_linux",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "submit_ssh_flag",
|
|
"title": "Submit SSH access evidence",
|
|
"type": "submit_flags",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "submit_linux_flag",
|
|
"title": "Submit Linux navigation evidence",
|
|
"type": "submit_flags",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "submit_sudo_flag",
|
|
"title": "Submit privilege escalation evidence",
|
|
"type": "submit_flags",
|
|
"status": "locked"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"aimId": "confront_operative",
|
|
"title": "Confront the Operative",
|
|
"description": "Confront Derek with the evidence and decide his fate",
|
|
"status": "locked",
|
|
"order": 4,
|
|
"tasks": [
|
|
{
|
|
"taskId": "confront_derek",
|
|
"title": "Confront Derek Lawson",
|
|
"type": "npc_conversation",
|
|
"targetNPC": "derek_lawson",
|
|
"status": "locked"
|
|
},
|
|
{
|
|
"taskId": "choose_resolution",
|
|
"title": "Choose how to resolve the situation",
|
|
"type": "custom",
|
|
"status": "locked"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
|
|
"startRoom": "reception_area",
|
|
|
|
"startItemsInInventory": [
|
|
{
|
|
"type": "phone",
|
|
"name": "Your Phone",
|
|
"takeable": true,
|
|
"phoneId": "player_phone",
|
|
"npcIds": ["agent_0x99"],
|
|
"observations": "Your secure phone with encrypted connection to SAFETYNET"
|
|
}
|
|
],
|
|
|
|
"player": {
|
|
"id": "player",
|
|
"displayName": "Agent 0x00",
|
|
"spriteSheet": "hacker",
|
|
"spriteTalk": "assets/characters/hacker-talk.png",
|
|
"spriteConfig": {
|
|
"idleFrameStart": 20,
|
|
"idleFrameEnd": 23
|
|
}
|
|
},
|
|
|
|
"rooms": {
|
|
"reception_area": {
|
|
"type": "room_reception",
|
|
"connections": {
|
|
"north": "main_office_area"
|
|
},
|
|
"npcs": [
|
|
{
|
|
"id": "briefing_cutscene",
|
|
"displayName": "Agent 0x99",
|
|
"npcType": "person",
|
|
"position": { "x": 500, "y": 500 },
|
|
"spriteSheet": "hacker",
|
|
"spriteConfig": {
|
|
"idleFrameStart": 20,
|
|
"idleFrameEnd": 23
|
|
},
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_opening_briefing.json",
|
|
"currentKnot": "start",
|
|
"timedConversation": {
|
|
"delay": 0,
|
|
"targetKnot": "start",
|
|
"background": "assets/backgrounds/hq1.png"
|
|
}
|
|
},
|
|
{
|
|
"id": "sarah_martinez",
|
|
"displayName": "Sarah Martinez",
|
|
"npcType": "person",
|
|
"position": { "x": 4, "y": 1.5 },
|
|
"spriteSheet": "hacker-red",
|
|
"spriteTalk": "assets/characters/hacker-red-talk.png",
|
|
"spriteConfig": {
|
|
"idleFrameStart": 20,
|
|
"idleFrameEnd": 23
|
|
},
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_npc_sarah.json",
|
|
"currentKnot": "start",
|
|
"itemsHeld": [
|
|
{
|
|
"type": "id_badge",
|
|
"name": "Visitor Badge",
|
|
"takeable": true,
|
|
"observations": "Temporary visitor badge for office access"
|
|
},
|
|
{
|
|
"type": "key",
|
|
"name": "Main Office Key",
|
|
"takeable": true,
|
|
"key_id": "main_office_key",
|
|
"keyPins": [45, 25, 55, 35],
|
|
"observations": "Key to the main office area"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "agent_0x99",
|
|
"displayName": "Agent 0x99 'Haxolottle'",
|
|
"npcType": "phone",
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_phone_agent0x99.json",
|
|
"avatar": "assets/npc/avatars/npc_helper.png",
|
|
"phoneId": "player_phone",
|
|
"currentKnot": "first_call",
|
|
"timedMessages": [
|
|
{
|
|
"delay": 3000,
|
|
"message": "Hey rookie! 🦎 I'm your handler for this op. Message me if you need any guidance.",
|
|
"type": "text"
|
|
}
|
|
],
|
|
"eventMappings": [
|
|
{
|
|
"eventPattern": "item_picked_up:lockpick",
|
|
"targetKnot": "event_lockpick_acquired",
|
|
"onceOnly": true
|
|
},
|
|
{
|
|
"eventPattern": "room_entered:server_room",
|
|
"targetKnot": "event_server_room_entered",
|
|
"onceOnly": true
|
|
},
|
|
{
|
|
"eventPattern": "room_entered:derek_office",
|
|
"targetKnot": "event_derek_office_entered",
|
|
"onceOnly": true
|
|
},
|
|
{
|
|
"eventPattern": "item_picked_up:contingency_files",
|
|
"targetKnot": "event_contingency_found",
|
|
"onceOnly": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "closing_debrief_trigger",
|
|
"displayName": "Agent 0x99",
|
|
"npcType": "phone",
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_closing_debrief.json",
|
|
"avatar": "assets/npc/avatars/npc_helper.png",
|
|
"phoneId": "player_phone",
|
|
"currentKnot": "start",
|
|
"eventMappings": [
|
|
{
|
|
"eventPattern": "global_variable_changed:derek_confronted",
|
|
"targetKnot": "start",
|
|
"condition": "value === true",
|
|
"onceOnly": true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"objects": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Building Directory",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "Viral Dynamics Media - Staff Directory\n\nRECEPTION:\nSarah Martinez - Receptionist\n\nMAIN OFFICE:\nKevin Park - IT Manager (IT Room)\nMaya Chen - Content Analyst\n\nPRIVATE OFFICES:\nDerek Lawson - Senior Marketing Manager\nManager's Office - VACANT",
|
|
"observations": "Posted directory of office staff"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Visitor Sign-In Log",
|
|
"takeable": false,
|
|
"readable": true,
|
|
"text": "VISITOR SIGN-IN LOG\n\nRecent Entries:\n- 11:47 PM - D. Lawson (employee late access)\n- 11:52 PM - D. Lawson (employee late access)\n- 12:03 AM - D. Lawson (employee late access)\n\nNote: Multiple late-night entries for Derek Lawson this month.",
|
|
"observations": "Sign-in log showing suspicious after-hours access patterns"
|
|
}
|
|
]
|
|
},
|
|
|
|
"main_office_area": {
|
|
"type": "room_office",
|
|
"locked": true,
|
|
"lockType": "key",
|
|
"requires": "main_office_key",
|
|
"keyPins": [45, 25, 55, 35],
|
|
"connections": {
|
|
"south": "reception_area",
|
|
"north": ["hallway_west", "hallway_east"],
|
|
"east": "it_room",
|
|
"west": "break_room"
|
|
},
|
|
"npcs": [],
|
|
"objects": [
|
|
{
|
|
"type": "pc",
|
|
"id": "cyberchef_workstation",
|
|
"name": "CyberChef Workstation",
|
|
"takeable": false,
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_terminal_cyberchef.json",
|
|
"currentKnot": "start",
|
|
"observations": "Analysis workstation with encoding/decoding tools"
|
|
},
|
|
{
|
|
"type": "safe",
|
|
"name": "Main Filing Cabinet",
|
|
"takeable": false,
|
|
"locked": true,
|
|
"lockType": "pin",
|
|
"requires": "2024",
|
|
"observations": "Digital filing cabinet with keypad lock - requires 4-digit PIN",
|
|
"contents": [
|
|
{
|
|
"type": "notes",
|
|
"name": "The Architect's Letter",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "FROM: The Architect\nTO: CELL_SOCIAL_FABRIC [All Members]\n\nI write to you because your work represents the purest expression of our philosophy. While others dismantle systems through code and infrastructure, you reshape the very foundation of belief.\n\nTrust is the ultimate vulnerability. Every system, every institution, every relationship depends on it. And trust, unlike encryption, cannot be patched.\n\nYour upcoming operation will demonstrate this truth on a scale never before attempted. When it succeeds, the world will finally understand: in the digital age, truth is merely consensus, and consensus can be manufactured.\n\nThe weak will perish in confusion. The strong will learn to verify.\n\nEntropy is inevitable. We merely accelerate the lesson.\n\n- The Architect\n\n[LORE Fragment - Campaign Arc: The Architect's Shadow]",
|
|
"observations": "Encrypted correspondence revealing ENTROPY leadership structure"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Sticky Note",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "Cabinet PIN:\nElection year = access code\n\n(Remember: 2024)",
|
|
"observations": "Password reminder stuck to desk"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Maintenance Checklist",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "VIRAL DYNAMICS - MAINTENANCE LOG\n\nIT Room Access:\nKevin keeps forgetting the code.\nIT ROOM PIN: 2468\n(Seriously Kevin, just memorize it)\n\nStorage Closet:\nPractice safe code: 1337 (for new hires)\n\nLast updated: 2 weeks ago",
|
|
"observations": "Maintenance checklist with access codes"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Kevin's Desk Note",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "Gone to check the servers.\nIf you need me, I'm in the IT Room.\n- Kevin\n\nP.S. The IT Room code is still 2468. Yes, I finally memorized it.",
|
|
"observations": "Note from Kevin explaining his absence"
|
|
}
|
|
]
|
|
},
|
|
|
|
"storage_closet": {
|
|
"type": "small_room_1x1gu",
|
|
"locked": false,
|
|
"connections": {
|
|
"east": "hallway_west"
|
|
},
|
|
"objects": [
|
|
{
|
|
"type": "safe",
|
|
"name": "Practice Safe",
|
|
"takeable": false,
|
|
"locked": true,
|
|
"lockType": "pin",
|
|
"requires": "1337",
|
|
"observations": "Training safe for new employees to practice - 4-digit PIN",
|
|
"contents": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Old Orientation Guide",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "VIRAL DYNAMICS - NEW EMPLOYEE ORIENTATION\n\nWelcome to the team!\n\nSecurity Reminders:\n- Always lock your workstation\n- Don't share passwords\n- Report suspicious activity to Kevin in IT\n\nFun Fact: The practice safe code (1337) is 'leet speak' for 'elite'. Kevin thought it was funny.\n\n[Minor LORE Fragment]",
|
|
"observations": "Old orientation materials"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Maintenance Log (Backup)",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "MAINTENANCE ACCESS CODES (BACKUP COPY)\n\nIT Room: 2468\nPractice Safe: 1337\nManager's Safe: Ask Derek (he has the combo)\n\nNote: Manager's office safe hasn't been opened since Patricia left.",
|
|
"observations": "Backup copy of maintenance codes"
|
|
}
|
|
]
|
|
},
|
|
|
|
"break_room": {
|
|
"type": "room_office",
|
|
"locked": false,
|
|
"connections": {
|
|
"east": "main_office_area",
|
|
"west": "conference_room"
|
|
},
|
|
"objects": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Coffee Shop Receipt",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "THE DAILY GRIND - RECEIPT\nDate: Last Tuesday, 11:47 PM\n\nNote on back (handwriting):\n'Derek meeting with unknown contact AGAIN.\nDiscussing \"Phase 3 timeline\" and \"The Architect.\"\nThis is the 5th late-night meeting this month.\nSomething is very wrong here.'\n\n- Anonymous concerned employee",
|
|
"observations": "Receipt with handwritten note about Derek's suspicious meetings"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Birthday Card",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "🎂 HAPPY ANNIVERSARY! 🎂\n\nTo Derek & Lisa,\nCongratulations on 10 years!\nApril 19th - a day to remember!\n\nFrom your Viral Dynamics family\n\n(Note: Several signatures, including Maya, Kevin, Sarah)",
|
|
"observations": "Anniversary card revealing Derek's anniversary date: April 19"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Office Gossip",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "Overheard at the coffee machine:\n\n'Did you hear Patricia got fired?'\n'The old manager? Yeah, weird timing.'\n'She was asking too many questions about Derek's projects.'\n'And now her office is just... empty.'\n'Creepy if you ask me.'\n\n(Someone really needs to clean this whiteboard more often)",
|
|
"observations": "Gossip about the former manager's sudden departure"
|
|
}
|
|
]
|
|
},
|
|
|
|
"conference_room": {
|
|
"type": "room_office",
|
|
"locked": false,
|
|
"connections": {
|
|
"east": "break_room"
|
|
},
|
|
"objects": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Meeting Calendar",
|
|
"takeable": false,
|
|
"readable": true,
|
|
"text": "CONFERENCE ROOM CALENDAR\n\nMonday: Derek - 'External Partner Sync' (recurring)\nTuesday: All Hands (cancelled)\nWednesday: Derek - 'ZDS Infrastructure Review'\nThursday: Derek - 'Campaign Coordination'\nFriday: Derek - 'Phase 3 Planning'\n\nNote: Derek has booked this room for 'external calls' almost every day this month.",
|
|
"observations": "Meeting calendar showing Derek's suspicious scheduling patterns"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "ZDS Meeting Notes",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "MEETING NOTES - ZDS Infrastructure Review\nDate: Last Wednesday\nAttendees: Derek Lawson, [REDACTED]\n\nAgenda:\n1. Technical infrastructure status - CONFIRMED\n2. Message deployment timeline - ON SCHEDULE\n3. Target list finalization - 2.3M profiles ready\n4. Casualty projections review - ACCEPTABLE\n\nAction Items:\n- Derek to confirm Phase 3 launch window\n- ZDS to provide backup exfiltration routes\n\n[EVIDENCE - Zero Day Syndicate Connection]",
|
|
"observations": "Meeting notes revealing coordination with Zero Day Syndicate"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Campaign Timeline",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "OPERATION SHATTER - CAMPAIGN TIMELINE\n\nWeek 1-2: Content creation ✓\nWeek 3-4: Narrative seeding ✓\nWeek 5: Coordinated release - PENDING\n\nTarget Demographics:\n- Medical dependency populations\n- Financial anxiety segments \n- Elderly isolated individuals\n\nProjected Impact: SIGNIFICANT\n\nNote: 'The Architect' has approved final timeline.",
|
|
"observations": "Campaign timeline for Operation Shatter"
|
|
}
|
|
]
|
|
},
|
|
|
|
"it_room": {
|
|
"type": "room_office",
|
|
"locked": true,
|
|
"lockType": "pin",
|
|
"requires": "2468",
|
|
"connections": {
|
|
"west": "main_office_area"
|
|
},
|
|
"npcs": [
|
|
{
|
|
"id": "kevin_park",
|
|
"displayName": "Kevin Park",
|
|
"npcType": "person",
|
|
"position": { "x": 4, "y": 4 },
|
|
"spriteSheet": "hacker",
|
|
"spriteConfig": {
|
|
"idleFrameStart": 20,
|
|
"idleFrameEnd": 23
|
|
},
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_npc_kevin.json",
|
|
"currentKnot": "start",
|
|
"itemsHeld": [
|
|
{
|
|
"type": "lockpick",
|
|
"name": "Lock Pick Kit",
|
|
"takeable": true,
|
|
"observations": "Professional lock picking kit - for security testing"
|
|
},
|
|
{
|
|
"type": "keycard",
|
|
"name": "Server Room Keycard",
|
|
"takeable": true,
|
|
"key_id": "server_keycard",
|
|
"observations": "Kevin's keycard for server room access"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Password Hints",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "<%= password_hints %>",
|
|
"observations": "Common password patterns used in the office"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"objects": [
|
|
{
|
|
"type": "pc",
|
|
"name": "IT Monitoring Station",
|
|
"takeable": false,
|
|
"locked": false,
|
|
"observations": "Network monitoring displays showing server activity",
|
|
"contents": [
|
|
{
|
|
"type": "text_file",
|
|
"name": "Server Access Log",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "UNAUTHORIZED ACCESS LOG\n\nFlagged Entries:\n- Derek Lawson accessed SERVER_ROOM at 11:52 PM (no ticket)\n- Derek Lawson accessed SERVER_ROOM at 12:03 AM (no ticket)\n- Derek Lawson accessed BACKUP_SYSTEM at 2:15 AM (no ticket)\n\nNote: I've flagged these to management 3 times. No response.\nSomething's not right.\n- Kevin",
|
|
"observations": "Kevin's log of Derek's unauthorized server access"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "IT Security Concerns",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "MEMO TO MANAGEMENT (UNSENT)\n\nRE: Security Concerns - Derek Lawson\n\nI've documented multiple instances of Derek accessing the server room without authorization. When I asked him about it, he said he was 'checking campaign servers.'\n\nWe don't have campaign servers in that room.\n\nI think he's doing something he shouldn't be, but I don't know who to trust. The last person who raised concerns about Derek was Patricia, and she got fired.\n\nI'm keeping this memo in case something happens to me too.\n\n- Kevin Park, IT Manager",
|
|
"observations": "Kevin's unsent memo expressing concerns about Derek"
|
|
}
|
|
]
|
|
},
|
|
|
|
"hallway_west": {
|
|
"type": "hall_1x2gu",
|
|
"locked": false,
|
|
"connections": {
|
|
"south": "main_office_area",
|
|
"north": ["manager_office", "maya_office"],
|
|
"west": "storage_closet",
|
|
"east": "hallway_east"
|
|
},
|
|
"objects": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Office Directory Sign",
|
|
"takeable": false,
|
|
"readable": true,
|
|
"text": "↑ Manager's Office (VACANT)\n← Storage Closet\n→ East Hallway",
|
|
"observations": "Directional sign for the offices"
|
|
}
|
|
]
|
|
},
|
|
|
|
"hallway_east": {
|
|
"type": "hall_1x2gu",
|
|
"locked": false,
|
|
"connections": {
|
|
"south": "main_office_area",
|
|
"north": ["maya_office", "derek_office"],
|
|
"east": "server_room",
|
|
"west": "hallway_west"
|
|
},
|
|
"objects": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Office Directory Sign",
|
|
"takeable": false,
|
|
"readable": true,
|
|
"text": "↑ Maya Chen | Derek Lawson\n→ Server Room (Authorized Personnel Only)\n← West Hallway",
|
|
"observations": "Directional sign for the offices and server room"
|
|
}
|
|
]
|
|
},
|
|
|
|
"manager_office": {
|
|
"type": "room_office",
|
|
"locked": false,
|
|
"connections": {
|
|
"south": "hallway_west"
|
|
},
|
|
"objects": [
|
|
{
|
|
"type": "safe",
|
|
"name": "Patricia's Safe",
|
|
"takeable": false,
|
|
"locked": true,
|
|
"lockType": "pin",
|
|
"requires": "0419",
|
|
"observations": "Former manager's safe - keypad shows wear on 0, 1, 4, 9",
|
|
"contents": [
|
|
{
|
|
"type": "key",
|
|
"name": "Derek's Office Key",
|
|
"takeable": true,
|
|
"key_id": "derek_office_key",
|
|
"keyPins": [35, 55, 45, 25],
|
|
"observations": "Spare key to Derek Lawson's office - Patricia must have kept a copy"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Patricia's Investigation Notes",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "MY INVESTIGATION NOTES - PATRICIA WELLS\n\nDerek Lawson is hiding something. I've documented:\n- Late night server access (no business justification)\n- Encrypted communications with external parties\n- Large data transfers to unknown destinations\n- References to someone called 'The Architect'\n\nI'm going to confront him tomorrow.\n\nUpdate: HR called me in. I'm being 'let go' for 'performance issues.' This is retaliation. If you're reading this, I was right about Derek.\n\nThe safe code is his anniversary: 0419\n\n[LORE Fragment - Patricia's Investigation]",
|
|
"observations": "Former manager's investigation notes - reveals she was fired for getting too close"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "suitcase",
|
|
"name": "Patricia's Briefcase",
|
|
"takeable": false,
|
|
"locked": true,
|
|
"lockType": "key",
|
|
"keyPins": [40, 60, 30, 50],
|
|
"difficulty": "medium",
|
|
"observations": "Former manager's briefcase - she left it behind when she was escorted out. No key available - would need to pick the lock.",
|
|
"contents": [
|
|
{
|
|
"type": "notes",
|
|
"name": "ENTROPY Infiltration Timeline",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "═══════════════════════════════════════════════════════════\n HOW ENTROPY INFILTRATED VIRAL DYNAMICS\n [PATRICIA'S RECONSTRUCTION]\n═══════════════════════════════════════════════════════════\n\n18 MONTHS AGO:\nDerek Lawson hired as 'Senior Marketing Manager'\nBackground check clean - too clean?\n\n12 MONTHS AGO:\nDerek requests 'enhanced privacy' for his systems\nStarts working late nights regularly\n\n9 MONTHS AGO:\nFirst references to 'external partners' in meeting notes\nDerek begins booking conference room for 'private calls'\n\n6 MONTHS AGO:\nI notice unusual server access patterns\nStart documenting Derek's activities\n\n3 MONTHS AGO:\nConfront Derek - he deflects, becomes hostile\nStart finding evidence of coordination with 'ZDS'\n\n1 MONTH AGO:\nDiscovered references to 'The Architect' and 'Operation Shatter'\nProjected casualties document - 42-85 deaths\nThis is bigger than corporate espionage\n\nTODAY:\nFired for 'performance issues'\nThey're protecting him\nSomeone needs to stop this\n\n═══════════════════════════════════════════════════════════\nIf you found this, you're the someone.\n═══════════════════════════════════════════════════════════\n\n[MAJOR LORE Fragment - ENTROPY Infiltration History]",
|
|
"observations": "Patricia's reconstruction of how ENTROPY infiltrated the company - LOCKPICK ONLY"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Termination Letter",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "VIRAL DYNAMICS MEDIA\nHUMAN RESOURCES\n\nTO: Patricia Wells\nRE: Termination of Employment\n\nEffective immediately, your employment with Viral Dynamics Media is terminated due to performance concerns.\n\nPlease collect your personal belongings and return your access badge to security.\n\nWe wish you well in your future endeavors.\n\n(Note: This is clearly a form letter. No specific performance issues cited.)",
|
|
"observations": "Patricia's termination letter - suspiciously vague"
|
|
}
|
|
]
|
|
},
|
|
|
|
"maya_office": {
|
|
"type": "room_office",
|
|
"locked": false,
|
|
"connections": {
|
|
"south": "hallway_east"
|
|
},
|
|
"npcs": [
|
|
{
|
|
"id": "maya_chen",
|
|
"displayName": "Maya Chen",
|
|
"npcType": "person",
|
|
"position": { "x": 4, "y": 4 },
|
|
"spriteSheet": "hacker-red",
|
|
"spriteTalk": "assets/characters/hacker-red-talk.png",
|
|
"spriteConfig": {
|
|
"idleFrameStart": 20,
|
|
"idleFrameEnd": 23
|
|
},
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_npc_maya.json",
|
|
"currentKnot": "start"
|
|
}
|
|
],
|
|
"objects": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Disinformation Research",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "RESEARCH NOTES - MAYA CHEN\n\nI was hired to analyze content effectiveness.\nWhat I found was something else entirely.\n\nThe 'campaigns' we're running aren't marketing.\nThey're psychological operations.\n\nTarget demographics aren't customers.\nThey're victims.\n\nI tried to raise concerns internally.\nPatricia listened. Then Patricia got fired.\n\nI'm documenting everything now.\nSomeone needs to know the truth.\n\n(If you're reading this and you're not Derek, we should talk.)",
|
|
"observations": "Maya's research notes revealing her concerns"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "SAFETYNET Contact",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "SECURE COMMUNICATION\n\nTo: SAFETYNET Tip Line\nFrom: Anonymous\n\nI work at Viral Dynamics Media.\nSomething terrible is being planned.\nThey call it 'Operation Shatter.'\nPeople will die.\n\nPlease send someone.\n\n- An ally",
|
|
"observations": "Maya's tip to SAFETYNET - she's the informant who triggered this mission"
|
|
}
|
|
]
|
|
},
|
|
|
|
"derek_office": {
|
|
"type": "room_office",
|
|
"locked": true,
|
|
"lockType": "key",
|
|
"requires": "derek_office_key",
|
|
"keyPins": [35, 55, 45, 25],
|
|
"difficulty": "medium",
|
|
"connections": {
|
|
"south": "hallway_east"
|
|
},
|
|
"npcs": [
|
|
{
|
|
"id": "derek_lawson",
|
|
"displayName": "Derek Lawson",
|
|
"npcType": "person",
|
|
"position": { "x": 4, "y": 4 },
|
|
"spriteSheet": "hacker",
|
|
"spriteConfig": {
|
|
"idleFrameStart": 20,
|
|
"idleFrameEnd": 23
|
|
},
|
|
"storyPath": "scenarios/m01_first_contact/ink/m01_derek_confrontation.json",
|
|
"currentKnot": "start",
|
|
"behavior": {
|
|
"initiallyHidden": true,
|
|
"appearsOnEvent": "all_flags_submitted"
|
|
}
|
|
}
|
|
],
|
|
"objects": [
|
|
{
|
|
"type": "pc",
|
|
"name": "Derek's Computer",
|
|
"takeable": false,
|
|
"locked": false,
|
|
"observations": "Derek's personal workstation - files visible on screen",
|
|
"contents": [
|
|
{
|
|
"type": "text_file",
|
|
"id": "contingency_files",
|
|
"name": "CONTINGENCY - IT Audit Response",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "═══════════════════════════════════════════════════════════\n CONTINGENCY PLAN: IT AUDIT RESPONSE\n [ACTIVATE IF COMPROMISED]\n═══════════════════════════════════════════════════════════\n\nIf audit discovers anomalies, activate CONTINGENCY.\n\nIT Manager Kevin Park becomes the fall guy.\nHis access patterns can be retroactively modified.\nHis termination provides closure for the company and\nends investigation.\n\nPREPARED EVIDENCE:\n- Fake security logs showing Kevin accessing servers at odd hours\n- Forged email from Kevin to 'unknown external party'\n- Timeline framing Kevin as source of data breach\n\nKevin helped you. Gave you access. Trusted you.\nAnd Derek is going to destroy his career—maybe his life—\nto cover ENTROPY's tracks.\n\n[This file triggers a moral choice when collected]",
|
|
"observations": "Derek's plan to frame Kevin for everything"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Whiteboard Message",
|
|
"takeable": false,
|
|
"readable": true,
|
|
"text": "ENCODED MESSAGE ON WHITEBOARD:\n\n<%= base64_encode(client_list_message) %>\n\n(Appears to be Base64 encoded - use CyberChef workstation to decode)",
|
|
"observations": "Strategic planning notes in encoded format"
|
|
},
|
|
{
|
|
"type": "safe",
|
|
"id": "derek_cabinet",
|
|
"name": "Derek's Filing Cabinet",
|
|
"takeable": false,
|
|
"locked": true,
|
|
"lockType": "pin",
|
|
"requires": "0419",
|
|
"observations": "Executive filing cabinet with electronic keypad - requires 4-digit PIN",
|
|
"contents": [
|
|
{
|
|
"type": "notes",
|
|
"name": "Operation Shatter Casualty Projections",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "═══════════════════════════════════════════════════════════\n OPERATION SHATTER - IMPACT ASSESSMENT\n [INTERNAL PLANNING DOCUMENT]\n═══════════════════════════════════════════════════════════\n\nPROJECTED CASUALTY ANALYSIS:\n\nDirect Casualties (First 24 Hours):\n- Cardiac events from panic: 15-30 fatalities\n- Diabetics missing insulin: 8-12 fatalities\n- Dialysis patients avoiding facilities: 4-8 fatalities\n- Violence from incitement: 5-15 fatalities\n- Traffic accidents from panic: 10-20 fatalities\n\nESTIMATED DIRECT DEATHS: 42-85 people\n\nSTRATEGIC JUSTIFICATION:\nThese deaths are not the goal—they are the demonstration.\nWhen truth emerges that fake messages caused real deaths,\ntrust in ALL digital communications collapses permanently.\n\nThis is not terrorism. This is education at scale.\n\nAPPROVED: The Architect\n\n[CRITICAL EVIDENCE - Operation Shatter]",
|
|
"observations": "Derek's calculated death projections - critical evidence",
|
|
"onPickup": { "setVariable": { "found_casualty_projections": true } }
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Social Fabric Manifesto",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "═══════════════════════════════════════════════════════════\n ENTROPY CELL: SOCIAL FABRIC\n OPERATIONAL PHILOSOPHY DOCUMENT\n [RECOVERED INTELLIGENCE]\n═══════════════════════════════════════════════════════════\n\nPHILOSOPHY:\n\nSecurity professionals focus on technical defenses—\nfirewalls, encryption, access controls. They miss the\nmost vulnerable attack surface: human belief systems.\n\nPeople don't believe what's true. They believe what\naligns with their existing narratives.\n\nWe don't hack systems. We hack perception.\n\nOPERATIONAL METHODS:\n- Fabricate content that confirms existing fears\n- Target vulnerable populations with tailored messages\n- Exploit trust in institutional communications\n- Create panic through coordinated false information\n\nACCEPTABLE LOSSES:\nSome will die so others learn the lesson:\nVerify everything. Trust nothing.\nThe weak will die. The adaptable will survive.\n\n[LORE Fragment - ENTROPY Cell Intelligence]",
|
|
"observations": "ENTROPY operational philosophy - critical intelligence"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Campaign Materials",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "CONFIDENTIAL - OPERATION SHATTER ASSETS\n\nTarget: 2.3 million profiled individuals\n\nPsychological Profiles:\n- Medical dependency (insulin, dialysis)\n- Financial anxiety (elderly on fixed incomes)\n- Anxiety disorders (documented conditions)\n- Social isolation (limited support networks)\n\nDeployment Assets:\n- Fabricated hospital closure notices\n- Fake bank failure announcements\n- Forged government emergency alerts\n- Coordinated social media panic accounts\n\nLaunch Window: This Sunday, 6:00 AM\n\n[CRITICAL EVIDENCE - Campaign Assets]",
|
|
"observations": "Evidence of coordinated disinformation campaign"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Derek's Calendar",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "DEREK LAWSON - PERSONAL CALENDAR\n\nToday: Client meeting (cover for this operation)\nTomorrow: Final coordination call with ZDS\nSunday: LAUNCH DAY - Operation Shatter goes live\n\nNote to self: Remember to activate Kevin contingency if audit finds anything. His fingerprints are already on the fake logs.",
|
|
"observations": "Derek's calendar showing Operation Shatter launches Sunday"
|
|
}
|
|
]
|
|
},
|
|
|
|
"server_room": {
|
|
"type": "room_servers",
|
|
"locked": true,
|
|
"lockType": "rfid",
|
|
"requires": "server_keycard",
|
|
"connections": {
|
|
"west": "hallway_east"
|
|
},
|
|
"npcs": [],
|
|
"objects": [
|
|
{
|
|
"type": "vm-launcher",
|
|
"id": "vm_launcher_intro_linux",
|
|
"name": "VM Access Terminal",
|
|
"takeable": false,
|
|
"observations": "Terminal providing access to compromised Social Fabric infrastructure for investigation",
|
|
"hacktivityMode": <%= vm_context && vm_context['hacktivity_mode'] ? 'true' : 'false' %>,
|
|
"vm": <%= vm_object('intro_to_linux_security_lab', {"id":1,"title":"Social Fabric Server","ip":"192.168.100.50","enable_console":true}) %>
|
|
},
|
|
{
|
|
"type": "flag-station",
|
|
"id": "flag_station_dropsite",
|
|
"name": "SAFETYNET Drop-Site Terminal",
|
|
"takeable": false,
|
|
"observations": "Secure terminal for submitting intercepted intelligence and VM flags",
|
|
"acceptsVms": ["intro_to_linux_security_lab"],
|
|
"flags": <%= flags_for_vm('intro_to_linux_security_lab', ['flag{ssh_brute_force_success}', 'flag{linux_navigation_complete}', 'flag{privilege_escalation_success}']) %>,
|
|
"flagRewards": [
|
|
{
|
|
"type": "emit_event",
|
|
"event_name": "ssh_flag_submitted",
|
|
"description": "SSH access flag submitted - unlocks server intelligence"
|
|
},
|
|
{
|
|
"type": "emit_event",
|
|
"event_name": "navigation_flag_submitted",
|
|
"description": "Linux navigation flag submitted - reveals file system evidence"
|
|
},
|
|
{
|
|
"type": "emit_event",
|
|
"event_name": "sudo_flag_submitted",
|
|
"description": "Privilege escalation flag submitted - unlocks root-level evidence"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Network Backdoor Analysis",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "SAFETYNET Intelligence Report\nCLASSIFICATION: RESTRICTED\n\nANALYSIS: Firmware Backdoor in Social Media Platform\n\nSummary: Social Fabric cell has embedded surveillance capabilities into their platform's core infrastructure. The backdoor operates at the firmware level, making it extremely difficult to detect through conventional security audits.\n\nCapabilities:\n- Real-time message interception\n- User behavior profiling\n- Coordinated message injection\n- Trust metric manipulation\n\nThis infrastructure enables Operation Shatter's mass panic deployment.\n\n[LORE Fragment - Network Security Intelligence]",
|
|
"observations": "Technical analysis of ENTROPY backdoor implementation"
|
|
},
|
|
{
|
|
"type": "notes",
|
|
"name": "Operation Shatter Target Database",
|
|
"takeable": true,
|
|
"readable": true,
|
|
"text": "═══════════════════════════════════════════════════════════\n OPERATION SHATTER - TARGET DEMOGRAPHICS\n [PSYCHOLOGICAL WARFARE DATABASE]\n═══════════════════════════════════════════════════════════\n\nTOTAL PROFILES: 2,347,832\nCOLLECTION PERIOD: 90 days\n\nSEGMENT 1: MEDICAL DEPENDENCY\nPopulation: 47,832 individuals\n- Insulin-dependent diabetics (14,203)\n- Weekly dialysis patients (2,847)\n- Chronic condition requiring hospital visits (30,782)\nVulnerability Score: 9.2/10\n\nSEGMENT 2: FINANCIAL ANXIETY\nPopulation: 156,432 individuals\n- Documented financial stress markers\n- Elderly on fixed incomes\n- Recent job loss indicators\nVulnerability Score: 8.7/10\n\nSEGMENT 3: ANXIETY DISORDERS\nPopulation: 89,247 individuals\n- Documented anxiety or panic disorders\n- Social media behavior indicating stress\nVulnerability Score: 9.5/10\n\nSEGMENT 4: ELDERLY ISOLATED\nPopulation: 34,891 individuals\n- Age 70+ living alone\n- Limited family contact\n- High institutional trust\nVulnerability Score: 9.8/10\n\n[CRITICAL EVIDENCE - Target Database]",
|
|
"observations": "Database of 2.3 million people profiled for vulnerability to panic",
|
|
"onPickup": { "setVariable": { "found_target_database": true } }
|
|
}
|
|
]
|
|
}
|
|
},
|
|
|
|
"globalVariables": {
|
|
"player_name": "Agent 0x00",
|
|
"mission_started": false,
|
|
"agent_0x99_contacted": false,
|
|
|
|
"final_choice": "",
|
|
"derek_confronted": false,
|
|
|
|
"kevin_choice": "",
|
|
"kevin_protected": false,
|
|
|
|
"found_casualty_projections": false,
|
|
"found_target_database": false,
|
|
|
|
"talked_to_maya": false,
|
|
"talked_to_kevin": false,
|
|
"maya_identity_protected": true,
|
|
|
|
"objectives_completed": 0,
|
|
"lore_collected": 0,
|
|
"evidence_collected": false,
|
|
"current_task": "",
|
|
|
|
"ssh_flag_submitted": false,
|
|
"linux_flag_submitted": false,
|
|
"sudo_flag_submitted": false,
|
|
|
|
"all_flags_submitted": false
|
|
}
|
|
}
|