mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-21 19:28:03 +00:00
Refactor scenarios: Remove deprecated XML files and update JSON scenarios with starting inventory items. Adjust room creation logic to prevent sprite creation for starting inventory items. Update scenario select paths for consistency.
This commit is contained in:
11
.github/copilot-instructions.md
vendored
11
.github/copilot-instructions.md
vendored
@@ -62,7 +62,8 @@ Mini-games handle modal display, pause/resume, and return callbacks automaticall
|
||||
### Inventory System
|
||||
- Items stored as objects with `id`, `name`, `texture` properties
|
||||
- Item identifiers created via `createItemIdentifier()` for UI display
|
||||
- Special handling: "inInventory" flag in scenario JSON auto-adds items on load
|
||||
- Starting items defined in `startItemsInInventory` array at scenario root level
|
||||
- Starting items automatically added to inventory on game initialization
|
||||
|
||||
### Scenario JSON Structure
|
||||
```json
|
||||
@@ -70,6 +71,14 @@ Mini-games handle modal display, pause/resume, and return callbacks automaticall
|
||||
"scenario_brief": "Mission description",
|
||||
"endGoal": "What player must accomplish",
|
||||
"startRoom": "room_id",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "object_type",
|
||||
"name": "Display name",
|
||||
"takeable": true,
|
||||
"observations": "Item description"
|
||||
}
|
||||
],
|
||||
"rooms": {
|
||||
"room_id": {
|
||||
"type": "room_type",
|
||||
|
||||
@@ -134,12 +134,31 @@ By understanding these constraints, you can design scenarios that work correctly
|
||||
- Objects must have a `type` (e.g., "phone", "notes", "pc", "key", "safe", "suitcase", "fingerprint_kit")
|
||||
- Objects must have a `name` for display purposes
|
||||
- Objects have a `takeable` boolean property indicating if they can be added to inventory
|
||||
- Some objects can be marked with `inInventory: true` to be in the player's inventory at the start
|
||||
- Objects can have `observations` text that describes what the player sees
|
||||
- Readable objects have a `readable` property and `text` content
|
||||
- Objects can be locked with the same lock types as rooms
|
||||
- Container objects (like safes and suitcases) can have `contents` arrays with nested objects
|
||||
|
||||
### Starting Inventory
|
||||
- Use the `startItemsInInventory` array at the root level of your scenario
|
||||
- Players will have these items automatically when they start the game
|
||||
- Example:
|
||||
```json
|
||||
{
|
||||
"scenario_brief": "...",
|
||||
"startRoom": "reception",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
],
|
||||
"rooms": { ... }
|
||||
}
|
||||
```
|
||||
|
||||
### Special Object Types
|
||||
- `fingerprint_kit`: Used to collect fingerprints
|
||||
- `workstation`: For cryptographic analysis
|
||||
@@ -168,7 +187,7 @@ Based on the code analysis, here are guidelines for creating solvable scenarios:
|
||||
|
||||
2. **Tool Placement**: Place necessary tools early in the scenario
|
||||
- Critical tools like fingerprint kits, lockpicks, or bluetooth scanners should be available before they're needed
|
||||
- Consider adding some tools to the initial inventory with `inInventory: true`
|
||||
- Consider adding some tools to the initial inventory with `startItemsInInventory`
|
||||
|
||||
3. **Clue Distribution**: Spread clues logically throughout the scenario
|
||||
- Place hints for codes/passwords in accessible locations
|
||||
|
||||
@@ -1,409 +0,0 @@
|
||||
{
|
||||
"scenario_brief": "You are a security specialist tasked with investigating a high-security research facility after reports of unauthorized access. Your mission is to use biometric tools to identify the intruder, secure sensitive research data, and recover the stolen prototype before it leaves the facility.",
|
||||
"endGoal": "Recover the stolen Project Sentinel prototype from the intruder's hidden exit route and secure all compromised data.",
|
||||
"startRoom": "reception",
|
||||
"rooms": {
|
||||
"reception": {
|
||||
"type": "room_reception",
|
||||
"connections": {
|
||||
"north": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Reception Phone",
|
||||
"takeable": false,
|
||||
"readable": true,
|
||||
"text": "Voicemail: 'Security alert: Unauthorized access detected in the biometrics lab. All personnel must verify identity at security checkpoints. Server room PIN changed to 5923. Security lockdown initiated. - Security Team'",
|
||||
"observations": "The reception phone's message light is blinking with an urgent message"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Security Log",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Unusual access patterns detected:\n- Lab 1: 23:45 PM\n- Biometrics Lab: 01:30 AM\n- Server Room: 02:15 AM\n- Loading Dock: 03:05 AM\n- Director's Office: 03:22 AM",
|
||||
"observations": "A concerning security log from last night"
|
||||
},
|
||||
{
|
||||
"type": "fingerprint_kit",
|
||||
"name": "Fingerprint Kit",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A professional kit for collecting fingerprint samples"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Reception Computer",
|
||||
"takeable": false,
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "receptionist",
|
||||
"fingerprintDifficulty": "easy",
|
||||
"observations": "The reception computer shows a security alert screen. There are clear fingerprints on the keyboard."
|
||||
},
|
||||
{
|
||||
"type": "lockpick",
|
||||
"name": "Lockpick",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A tool for picking locks"
|
||||
},
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Biometric Security Notice",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "ALERT: SECURITY PROTOCOLS UPDATED\n\nAll internal doors now require biometric authentication due to the security breach.\n\nTo proceed: Use your fingerprint kit to collect prints, then present them at door scanners. The main office door requires the receptionist's credentials.\n\nReport any unauthorized access attempts to security immediately.",
|
||||
"observations": "An important notice about the facility's security measures"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Facility Map",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Facility Layout:\n- Reception (Main Entrance)\n- Main Office (North of Reception)\n- Administrative Office (North of Main Office)\n- Research Wing (North of Main Office)\n- Director's Office (North of Administrative Office)\n- Server Room (North of Research Wing)\n- Storage Closet (North of Director's Office)",
|
||||
"observations": "A map of the facility showing all major areas"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office1": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": ["office2", "office3"],
|
||||
"south": "reception"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "receptionist",
|
||||
"biometricMatchThreshold": 0.5,
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Lab Computer",
|
||||
"takeable": false,
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "researcher",
|
||||
"fingerprintDifficulty": "medium",
|
||||
"observations": "A research computer with data analysis software running. There might be fingerprints on the keyboard."
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Research Notes",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Project Sentinel: Biometric security breakthrough. Final test results stored in secure server. Access requires Level 3 clearance or backup key. The prototype scanner is stored in the Director's office.",
|
||||
"observations": "Important research notes about a biometric security project"
|
||||
},
|
||||
{
|
||||
"type": "tablet",
|
||||
"name": "Security Tablet",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Security Alert: Unauthorized access to biometrics lab detected at 01:30 AM. Biometric scanner in server room requires admin fingerprint or emergency override key.",
|
||||
"observations": "A security tablet showing access logs and alerts"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Biolab Key",
|
||||
"takeable": true,
|
||||
"key_id": "ceo_office_key",
|
||||
"observations": "A backup key for the biometrics lab, kept for emergencies"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Team Information",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Project Sentinel Team:\nDr. Eleanor Chen (Director)\nDr. Marcus Patel (Lead Researcher)\nDr. Wei Zhang (Biometrics Specialist)\nAlex Morgan (Security Consultant)",
|
||||
"observations": "Information about the Project Sentinel research team"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Security Guard Schedule",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Night Shift (00:00-08:00):\n- John Reynolds: Front Entrance\n- Mark Stevens: Lab Wing (ON LEAVE)\n- Sarah Chen: Server Room\n\nNOTE: Due to staffing shortage, server room checks reduced to hourly instead of every 30 minutes.",
|
||||
"observations": "The security guard rotation schedule for last night"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office2": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "ceo",
|
||||
"south": "office1"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "researcher",
|
||||
"biometricMatchThreshold": 0.7,
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Biometrics Workstation",
|
||||
"takeable": false,
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "intruder",
|
||||
"fingerprintDifficulty": "medium",
|
||||
"observations": "A specialized workstation for biometric research. The screen shows someone was recently using it."
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Access Log",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Unusual access pattern detected: Admin credentials used during off-hours. Timestamp matches security alert. Safe PIN code: 8741",
|
||||
"observations": "A log showing suspicious access to the biometrics lab"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Fingerprint Comparison Report",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Fingerprint Analysis:\nRecent unauthorized access shows fingerprints matching consultant Alex Morgan (74% confidence).\n\nNOTE: Further analysis needed for confirmation. Check server room terminal for complete database.",
|
||||
"observations": "A report analyzing fingerprints found on breached equipment"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office3": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "server1",
|
||||
"south": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Fingerprint Analysis Station",
|
||||
"takeable": false,
|
||||
"observations": "A specialized workstation for analyzing fingerprint samples"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Biometric Override Codes",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Emergency Override Procedure:\n1. Director's Office Biometric Scanner: Code 72958\n2. Loading Dock Security Gate: Code 36714\n\nWARNING: Use only in emergency situations. All uses are logged and reviewed.",
|
||||
"observations": "A highly sensitive document with emergency override codes"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Server Room Key",
|
||||
"takeable": true,
|
||||
"key_id": "briefcase_key",
|
||||
"observations": "A key to the server room, carelessly left behind by someone"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Maintenance Log",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "03/07 - HVAC repairs completed\n03/08 - Replaced server room cooling unit\n03/09 - Fixed office lighting circuits\n\nNOTE: Need to repair loading dock camera - currently offline due to power fluctuations.",
|
||||
"observations": "A maintenance log for the facility"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ceo": {
|
||||
"type": "room_ceo",
|
||||
"connections": {
|
||||
"north": "closet",
|
||||
"south": "office2"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "ceo_office_key",
|
||||
"difficulty": "medium",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Director's Computer",
|
||||
"takeable": false,
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "director",
|
||||
"fingerprintDifficulty": "hard",
|
||||
"observations": "The director's high-security computer. Multiple fingerprints visible on the keyboard."
|
||||
},
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Director's Phone",
|
||||
"takeable": false,
|
||||
"readable": true,
|
||||
"text": "Last call: Incoming from Security Office at 02:37 AM. Call log shows Security reporting unauthorized access to server room.",
|
||||
"observations": "The director's phone with call history displayed"
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Secure Cabinet Safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "safe_key",
|
||||
"difficulty": "medium",
|
||||
"observations": "A high-security cabinet safe where the prototype would normally be stored",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Empty Prototype Case",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "PROJECT SENTINEL PROTOTYPE\nProperty of Biometric Research Division\nAUTHORIZED ACCESS ONLY\n\nCase opened at 03:26 AM - SECURITY ALERT TRIGGERED",
|
||||
"observations": "An empty case that previously held the prototype device",
|
||||
"important": true
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Project Investors",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Project Sentinel Investors:\n- US Department of Defense: $15M\n- Northcrest Security Solutions: $8M\n- Rivera Technologies: $5M\n\nNOTE: Alex Morgan previously worked for Rivera Technologies for 3 years before becoming our consultant. Passed all background checks.",
|
||||
"observations": "A confidential list of project investors and funding sources"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Director's Calendar",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Today:\n9:00 AM - Staff Briefing\n11:00 AM - DOD Representative Visit\n2:00 PM - Demo of Project Sentinel Prototype\n\nNOTE: Ensure prototype is prepared for demonstration. Security consultant Alex Morgan to assist with setup.",
|
||||
"observations": "The director's schedule for today"
|
||||
}
|
||||
]
|
||||
},
|
||||
"closet": {
|
||||
"type": "room_closet",
|
||||
"connections": {
|
||||
"south": "ceo"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "pin",
|
||||
"requires": "72958",
|
||||
"objects": [
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Hidden Safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "intruder",
|
||||
"biometricMatchThreshold": 0.9,
|
||||
"observations": "A well-hidden wall safe behind a painting with a fingerprint scanner",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Escape Plan",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "4:00 AM - Meet contact at loading dock\n4:15 AM - Transfer prototype and data\n4:30 AM - Leave separately\n\nBackup plan: If compromised, use maintenance tunnel fire exit. Car parked at south lot.",
|
||||
"observations": "A detailed escape plan with timing information",
|
||||
"important": true
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Safe Key",
|
||||
"takeable": true,
|
||||
"key_id": "safe_key",
|
||||
"observations": "A small key with 'Secure Cabinet' written on it"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Scribbled Note",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "A = Meet at dock, 4AM\nN = Bring everything\nM = Getaway car ready\n\nLH will pay other half when delivered.",
|
||||
"observations": "A hastily scribbled note, partially crumpled"
|
||||
}
|
||||
]
|
||||
},
|
||||
"server1": {
|
||||
"type": "room_servers",
|
||||
"connections": {
|
||||
"south": "office3"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"difficulty": "medium",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Server Terminal",
|
||||
"takeable": false,
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "intruder",
|
||||
"fingerprintDifficulty": "medium",
|
||||
"observations": "The main server terminal controlling access to research data. There are clear fingerprints on the screen."
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Secure Data Safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "intruder",
|
||||
"biometricMatchThreshold": 0.9,
|
||||
"observations": "A secure safe with a fingerprint scanner containing the sensitive research data",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Project Sentinel Data",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Complete research data for Project Sentinel biometric security system. Evidence shows unauthorized copy was made at 02:17 AM by someone using spoofed admin credentials.",
|
||||
"observations": "The complete research data for the biometric security project",
|
||||
"important": true
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Security Camera Log",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Camera footage deleted for the following time periods:\n- Loading Dock: 03:00 AM - 03:30 AM\n- Maintenance Tunnel: 03:10 AM - 03:25 AM\n- Director's Office: 03:20 AM - 03:40 AM\n\nSystem shows credentials used: Alex Morgan, Security Consultant",
|
||||
"observations": "A report of deleted security camera footage"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "suitcase",
|
||||
"name": "Suspicious Case",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "intruder",
|
||||
"biometricMatchThreshold": 0.9,
|
||||
"observations": "A suspicious case hidden behind server racks with a fingerprint scanner",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Project Sentinel Prototype",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "PROJECT SENTINEL BIOMETRIC SCANNER PROTOTYPE\nSERIAL: PS-001-X\nCLASSIFICATION: TOP SECRET\n\nWARNING: Authorized handling only. Technology contains classified components.",
|
||||
"observations": "The stolen prototype device, ready to be smuggled out. Congratulations! You've recovered the prototype and secured the sensitive research data. flag{biometric_breach_flag}",
|
||||
"important": true,
|
||||
"isEndGoal": true
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Buyer Details",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Buyer: Lazarus Hacking Group\nPayment: $2.5M total, $500K advance paid\nDelivery instructions: Loading dock 4:00 AM, March 10\nContact code name: Nighthawk\n\nDeliverable: Project Sentinel prototype + all research data",
|
||||
"observations": "Details of the buyer and the transaction",
|
||||
"important": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,279 +0,0 @@
|
||||
{
|
||||
"scenario_brief": "old version. You are a cyber investigator tasked with uncovering evidence of corporate espionage. Anonymous tips suggest the CEO has been selling company secrets, but you need proof.",
|
||||
"startRoom": "reception",
|
||||
"rooms": {
|
||||
"reception": {
|
||||
"type": "room_reception",
|
||||
"connections": {
|
||||
"north": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Reception Phone",
|
||||
"takeable": false,
|
||||
"readable": true,
|
||||
"text": "Voicemail: 'Security breach detected in server room. Changed access code to 4829. - IT Team'",
|
||||
"observations": "The reception phone's message light is blinking urgently"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Security Log",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Unusual after-hours access detected:\n- CEO office: 11:30 PM\n- Server room: 2:15 AM\n- CEO office again: 3:45 AM",
|
||||
"observations": "A concerning security log from last night"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Reception Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "The reception's computer, currently locked"
|
||||
},
|
||||
{
|
||||
"type": "tablet",
|
||||
"name": "Tablet Device",
|
||||
"takeable": true,
|
||||
"locked": true,
|
||||
"lockType": "bluetooth",
|
||||
"requires": "bluetooth",
|
||||
"mac": "00:11:22:33:44:55",
|
||||
"observations": "A locked tablet device that requires Bluetooth pairing"
|
||||
},
|
||||
{
|
||||
"type": "bluetooth_scanner",
|
||||
"name": "Bluetooth Scanner",
|
||||
"takeable": true,
|
||||
"observations": "A device for detecting nearby Bluetooth signals",
|
||||
"canScanBluetooth": true
|
||||
},
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Office Key",
|
||||
"takeable": true,
|
||||
"key_id": "office1_key:40,35,38,32,36",
|
||||
"observations": "A key to access the office areas"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office1": {
|
||||
"type": "room_office",
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "office1_key:40,35,38,32,36",
|
||||
"difficulty": "easy",
|
||||
|
||||
"connections": {
|
||||
"north": ["office2", "office3"],
|
||||
"south": "reception"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Office Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "ceo",
|
||||
"fingerprintDifficulty": "medium",
|
||||
"observations": "A computer with a cybersecurity alert on screen. There might be fingerprints on the keyboard."
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "IT Memo",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "URGENT: Multiple unauthorized access attempts detected from CEO's office IP address",
|
||||
"observations": "A concerning IT department memo"
|
||||
},
|
||||
{
|
||||
"type": "fingerprint_kit",
|
||||
"name": "Fingerprint Kit",
|
||||
"takeable": true,
|
||||
"observations": "A kit used for collecting fingerprints from surfaces"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office2": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "ceo",
|
||||
"south": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Office Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "A standard office computer"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Shredded Document",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Partially readable: '...offshore account...transfer complete...delete all traces...'",
|
||||
"observations": "A partially shredded document that someone failed to dispose of properly"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "CEO Office Key",
|
||||
"takeable": true,
|
||||
"key_id": "ceo_office_key:28,42,35,31",
|
||||
"observations": "A spare key to the CEO's office, carelessly left behind"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office3": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "server1",
|
||||
"south": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "IT Staff Computer",
|
||||
"takeable": false,
|
||||
"requires": "bluetooth",
|
||||
"lockType": "bluetooth",
|
||||
"mac": "00:11:22:33:44:55",
|
||||
"observations": "An IT staff computer showing network security logs"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Network Logs",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Large data transfers detected to unknown external IPs - All originating from CEO's office",
|
||||
"observations": "Suspicious network activity logs"
|
||||
},
|
||||
{
|
||||
"type": "lockpick",
|
||||
"name": "Lock Pick Kit",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A professional lock picking kit with various picks and tension wrenches"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ceo": {
|
||||
"type": "room_ceo",
|
||||
"connections": {
|
||||
"north": "closet",
|
||||
"south": "office2"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "ceo_office_key:28,42,35,31",
|
||||
"difficulty": "easy",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "CEO Computer",
|
||||
"takeable": false,
|
||||
"observations": "The CEO's laptop, still warm - recently used"
|
||||
},
|
||||
{
|
||||
"type": "suitcase",
|
||||
"name": "CEO Briefcase",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key:45,32,38,41",
|
||||
"difficulty": "medium",
|
||||
"observations": "An expensive leather briefcase with a sturdy lock",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Private Note",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Closet keypad code: 7391 - Must move evidence to safe before audit",
|
||||
"observations": "A hastily written note on expensive paper"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Safe Key",
|
||||
"takeable": true,
|
||||
"key_id": "safe_key:52,29,44,37",
|
||||
"observations": "A heavy-duty safe key hidden behind server equipment"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "CEO Phone",
|
||||
"takeable": false,
|
||||
"readable": true,
|
||||
"text": "Recent calls: 'Offshore Bank', 'Unknown', 'Data Buyer'",
|
||||
"observations": "The CEO's phone shows suspicious recent calls"
|
||||
}
|
||||
]
|
||||
},
|
||||
"closet": {
|
||||
"type": "room_closet",
|
||||
"connections": {
|
||||
"south": "ceo"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "pin",
|
||||
"requires": "7391",
|
||||
"objects": [
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Hidden Safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "safe_key:52,29,44,37",
|
||||
"difficulty": "hard",
|
||||
"observations": "A well-hidden wall safe behind a painting",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Incriminating Documents",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Contract for sale of proprietary technology\nBank transfers from competing companies\nDetails of upcoming corporate espionage operations",
|
||||
"observations": "A folder containing damning evidence of corporate espionage. Congratulations! You've recovered the incriminating documents. flag{ceo_exfil_flag}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"server1": {
|
||||
"type": "room_servers",
|
||||
"connections": {
|
||||
"south": "office3"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "pin",
|
||||
"requires": "4829",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Server Terminal",
|
||||
"takeable": false,
|
||||
"observations": "The main server terminal showing massive data exfiltration"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Briefcase Key",
|
||||
"takeable": true,
|
||||
"key_id": "briefcase_key:45,32,38,41",
|
||||
"observations": "A small key labeled 'Personal - Do Not Copy'"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,248 +0,0 @@
|
||||
{
|
||||
"scenario_brief": "Your beloved kitty sidekick, Captain Meow, has vanished without a trace! As a renowned adventurer and detective, you suspect foul play. The last clue? A cryptic paw print left on your desk and a strange voicemail message on your phone. Can you crack the codes, follow the trail, and rescue Captain Meow before it’s too late?",
|
||||
"endGoal": "Recover the stolen Project Sentinel prototype from the intruder's hidden exit route and secure all compromised data.",
|
||||
|
||||
"startRoom": "reception",
|
||||
|
||||
"rooms": {
|
||||
"reception": {
|
||||
"type": "room_reception",
|
||||
"connections": {
|
||||
"north": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Reception Phone",
|
||||
"takeable": false,
|
||||
"readable": true,
|
||||
"text": ".--. / .-. / --- / ..-. / ..-. / . / ... / --- / .-.",
|
||||
"observations": "You hear a series of dots and dashes on the phone. The message is directing you towards finding the villain’s identity. Maybe the first letter would be capitalised."
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Hidden Clue Note",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "If you are reading this then I have been outsmarted and sadly captured...there are a series of clues I left behind for such circumstance, follow them to rescue me. I believe in you do not let me down :)",
|
||||
"observations": "A cry for help?"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Reception Computer",
|
||||
"takeable": false,
|
||||
"readable": true,
|
||||
"text": "QmFyay4=",
|
||||
"observations": "A locked computer with a mysterious message on the screen. It looks like a familiar encoding. There are pawprints on the desk."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"office1": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": ["office2", "office3"],
|
||||
"south": "reception"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "Professor Bark",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Office Computer",
|
||||
"takeable": false,
|
||||
"hasFingerprint": true,
|
||||
"fingerprintOwner": "Mrs Moo",
|
||||
"fingerprintDifficulty": "easy",
|
||||
"observations": "A computer with a cybersecurity alert on screen. There might be pawprints on the keyboard."
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "IT Memo",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "URGENT: Unusual activity detected from the CEO’s office. Security cameras captured a shadowy figure with a cat carrier.",
|
||||
"observations": "A concerning observation on the surveillance cameras memo"
|
||||
},
|
||||
{
|
||||
"type": "fingerprint_kit",
|
||||
"name": "Fingerprint Kit",
|
||||
"takeable": true,
|
||||
"observations": "A kit used for collecting fingerprints from surfaces"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"office2": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "ceo",
|
||||
"south": "office1"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "Mrs Moo",
|
||||
"biometricMatchThreshold": 0.5,
|
||||
"objects": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Shredded Note (Half)",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"observations": "Deeper meaning into the image",
|
||||
"text": "Professor Bark did not act alone, the hooveprint should be enough indication to who else is involved. To get the name, find the name hidden in the image using AES. The key is my favorite meal."
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Image.jpeg",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"text": "",
|
||||
"observations": "89504E470D0A1A0A0000000D49484452000000070000000608060000000F0E8476000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000000970485973000012740000127401DE661F780000001B49444154185763646060F80FC458011394C60AE82DC92EC2CE0000AE7E012D8347D0010000000049454E44AE4260827365637265740000000000000000000000003164623237653536373663363036316665373962386563343432373263326239"
|
||||
},
|
||||
{
|
||||
"type": "tablet",
|
||||
"name": "Captain Meow's Tablet",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "bluetooth",
|
||||
"mac": "00:AB:CD:EF:12:34",
|
||||
"observations": "-Fav meal: Tuna Fish Sandwich With Chives And A Side Of CocaCola And A Cup Of Milk -Fav color: Black -Fav number: Eight -Fav country: Meowland -Fav activity: Napping"
|
||||
},
|
||||
{
|
||||
"type": "bluetooth_scanner",
|
||||
"name": "Bluetooth Scanner",
|
||||
"takeable": true,
|
||||
"observations": "A device for detecting nearby Bluetooth signals.",
|
||||
"canScanBluetooth": true,
|
||||
"mac": "00:AB:CD:EF:12:34"
|
||||
}
|
||||
]
|
||||
},
|
||||
"office3": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "server1",
|
||||
"south": "office1"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "biometric",
|
||||
"requires": "Mrs Moo",
|
||||
"biometricMatchThreshold": 0.5,
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "IT Staff Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "146 157 165 162 40 145 151 147 150 164 40 164 167 157 40 156 151 156 145"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Dr Octopus data",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "We have noticed a security breached.",
|
||||
"observations": "Suspicious activity logged, passcode encrypted for safety purposes."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"ceo": {
|
||||
"type": "room_ceo",
|
||||
"connections": {
|
||||
"south": "office2"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "Mr Moo",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "CEO Computer",
|
||||
"takeable": false,
|
||||
"observations": "To find me, locate the public IP address to locate me."
|
||||
},
|
||||
{
|
||||
"type": "suitcase",
|
||||
"name": "CEO Briefcase",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"observations": "An expensive leather briefcase with a sturdy lock.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Incriminating Documents",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "192.168.1.34 10.0.0.56 172.16.254.12 203.0.113.78 192.168.0.45 192.168.2.100 172.31.128.99 10.10.10.10",
|
||||
"observations": "A bunch of IP addresses, follow the public IP address to find me."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "203.0.113.78",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Flag",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "I knew you could do it! You found me! Here is your prize for rescuing me: \nflag{sampleflaghere}" }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"server1": {
|
||||
"type": "room_servers",
|
||||
"connections": {
|
||||
"south": "office3"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "pin",
|
||||
"requires": "4829",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Server Terminal",
|
||||
"takeable": false,
|
||||
"observations": "Hash my name 'Captain Meow'"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Data safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "acffd84890456241cba3469e32fd46d3",
|
||||
"observations": "A locked closet containing an important key. It requires a PIN to open.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Briefcase Key",
|
||||
"takeable": true,
|
||||
"key_id": "briefcase_key",
|
||||
"observations": "A small key labeled 'Personal - Do Not Copy.'"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<scenario xmlns="http://www.github//cliffe/BreakEscapeGame/blob/main/assets/scenarios"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://github.com/cliffe/BreakEscapeGame/blob/main/assets/scenarios/scenerio1.json">
|
||||
|
||||
<name>Captain Meow disappearance</name>
|
||||
<author>Z. Cliffe Schreuders</author>
|
||||
<description>
|
||||
# Introduction
|
||||
Your beloved kitty sidekick, Captain Meow, has vanished without a trace! As a renowned adventurer and detective, you suspect foul play. The last clue? A cryptic paw print left on your desk and a strange voicemail message on your phone.
|
||||
|
||||
Captain Meow has always been a sneaky genius, leaving behind puzzles in hopes that you would find him. If anyone could leave behind a trail of encrypted clues, it’s him. But who would kidnap the smartest cat in the world? And why?
|
||||
|
||||
Your journey begins in your study, where Captain Meow’s last trail begins. Can you decipher his messages, crack the codes, and rescue him before time runs out?
|
||||
</description>
|
||||
<type>escape room</type>
|
||||
<difficulty>medium</difficulty>
|
||||
|
||||
<CyBOK KA="F" topic="Operating System Analysis">
|
||||
<keyword>Steganography</keyword>
|
||||
<keyword>Encoding and alternative data formats</keyword>
|
||||
<keyword>SEARCH FOR EVIDENCE</keyword>
|
||||
<keyword>METADATA</keyword>
|
||||
</CyBOK>
|
||||
|
||||
<CyBOK KA="POR" topic="Privacy Technologies and Democratic Values">
|
||||
<keyword>METADATA</keyword>
|
||||
<keyword>STEGANOGRAPHY</keyword>
|
||||
</CyBOK>
|
||||
|
||||
<CyBOK KA="AC" topic="Cryptographic Implementation">
|
||||
<keyword>Cryptographic Libraries</keyword>
|
||||
<keyword>ENCRYPTION - TOOLS</keyword>
|
||||
</CyBOK>
|
||||
|
||||
<CyBOK KA="AC" topic="Physical Security">
|
||||
<keyword>Fingerprint Authentication</keyword>
|
||||
<keyword>Bluetooth Security</keyword>
|
||||
<keyword>Physical Locks</keyword>
|
||||
</CyBOK>
|
||||
|
||||
<CyBOK KA="AC" topic="Hashing and Integrity">
|
||||
<keyword>Hash Functions</keyword>
|
||||
<keyword>MD5 Hash</keyword>
|
||||
</CyBOK>
|
||||
|
||||
<CyBOK KA="AC" topic="Encoding and Representation">
|
||||
<keyword>Base64 Encoding</keyword>
|
||||
<keyword>Octal Encoding</keyword>
|
||||
<keyword>Hexadecimal (Hex) Encoding</keyword>
|
||||
</CyBOK>
|
||||
|
||||
<CyBOK KA="AC" topic="Algorithms, Schemes and Protocols">
|
||||
<keyword>ADVANCED ENCRYPTION STANDARD (AES)</keyword>
|
||||
<keyword>ECB (ELECTRONIC CODE BOOK) BLOCK CIPHER MODE</keyword>
|
||||
</CyBOK>
|
||||
|
||||
</scenario>
|
||||
@@ -1,236 +0,0 @@
|
||||
{
|
||||
"scenario_brief": "You are a curious traveler who stumbles upon Beckett, a ghost town shrouded in mystery. After entering the only standing building, the door slams shut, trapping you inside. A note from Mayor McFluffins warns: 'Fail to escape, and you’ll be turned into a llama.' Solve cryptographic puzzles and break the curse before time runs out, or grow fur and join the town’s eerie fate!",
|
||||
"startRoom": "room_start",
|
||||
"rooms": {
|
||||
"room_start": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "room_office"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Recorded Conversation",
|
||||
"takeable": false,
|
||||
"observations": "Llamas are all pure evil! Jullie and Tim are the two who started this curse. Tim is 3 years old, and Jullie is 5 years old. Remember their ages!"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Clue Note",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"observations": "Safe one, next to the left door is Tim's public key, safe two is Julies's private key and the briefcase is the shared key. \nRemember: Public keys are (g^age MOD p)"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Numbers are important, remember these to proceed:\n- Prime modulus (p): 23\n- Base (g): 5\n- Tim's private key (a): (5^3) MOD 23\n- Jullie's private key (b): (5^5) MOD 23\nEnter the shared secret key to decrypt the next clue."
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Safe 1",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "10",
|
||||
"observations": "A locked safe containing part of the conversation.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Conversation Part 1",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Tim: Do you remember how to calculate your public key again?\nJullie: Not really...I always found the Diffie-Hellman key exchange so confusing lol\nTim: Just remember '(G^private) MOD P' and you'll be good.\n...",
|
||||
"observations": "First part of the conversation."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Safe 2",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "20",
|
||||
"observations": "A locked safe containing the next part of the conversation.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Conversation Part 2",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Jullie: Thanks Tim, this way no one would be able to read our messages!\nTim: Exactly! We need to turn a lot of people into llamas or our plans are forever done for.\nJullie: Yeah, you're right. We need to stay focused and cover our tracks.\nTim: Don't forget our shared key. If you do, this is all for nothing, Jules.\nJullie: Yes, yes. The shared key is (B^a MOD p).",
|
||||
"observations": "Second part of the conversation."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "suitcase",
|
||||
"name": "Briefcase",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "19",
|
||||
"observations": "A locked briefcase containing the key to the next room.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Briefcase Key",
|
||||
"takeable": true,
|
||||
"key_id": "briefcase_key",
|
||||
"observations": "You've found the key to unlock the next room!"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_office": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"south": "room_start",
|
||||
"north": "room_servers"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"objects": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Prime Numbers Hint",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "The city's foundation rests on prime pillars. Find the numbers that uphold its secrets. Here's a riddle to guide you:\n\n'I am a prime number, the smallest of my kind with two digits. My neighbor to the right is also prime, and together we hold the key.'",
|
||||
"observations": "A hint about prime numbers."
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "RSA Modulus Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Calculate N by multiplying two prime numbers (p and q). The pin is the last 4 digits of N."
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_servers": {
|
||||
"type": "room_servers",
|
||||
"connections": {
|
||||
"south": "room_office",
|
||||
"north": "room_closet"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "0143",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Pop up message - decrypt message using private key",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"text": "Decrypt this base64 encrypted message using the private key.",
|
||||
"observations": "jIYyQYFFzXNKgKS1Z744Sudq2KAXdRgSHlExns9MNVNlTZRlnBSm#vVGw6TeEjOhohJeGbFrWk5qNlPhvm0PmneIBbzZ9u4BwzaZ4vxHclLMDQ55e7tOByQ3KVjUgcxX1skW7qj1mPpic2IFsS1kyIyLE3ly1eNZxMCEy1S03bq0="
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Private Key Part 1",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"observations": "This note contains part of the private key required for decryption.",
|
||||
"text": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCczVF4Oq+Njf1Olf/JNnZcSP0jbZVpdVJ+hySa7OPMSpjMsppb\nV1E8qytLIx+HfiU065I/Lhr0LhoKj+hWA3ceCUQa2GeSU+p8X5bseet6/hhrsBYV\nuT+4ajIQ8tDOi/0vrnSh+EMc912TpjAh1nEfeL65LXOwWHDf0rR8Uxv3AQIDAQAB\nAoGACiIVo/6s5im5Jzk32r2/h+a6ny2/hF1t25npsm5hKUxf1Aitw33g1Nod9eDa"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Private Key Part 2",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"observations": "8oNjLaiUnqsg2EtbaPfUVKysJ6WaFQ4BnFe6rKQH+kXDEjSOyMcQsoObO0Bcjk/3\nWpxdTH0qp71yHzg1D6h40cwSra5u/t/ZRFJI/08hBdbt8DECQQDPQwVS5hYfDfXa\ni5Rxwwp4EBZmvy8z/KXPJ+8sXfqi5pBkZTrQfWsiqCW2aRtnTUsC0b3HjRQxf2SV\n+1y9aqQpAkEAwaypvhpE7I2P1LgIPrgW2HM1wiP0oZiM9LizsDHYO/bKqSWL7hnS\n/s6NcQ5CLOyB3uxYBkDIovUSem6/Y6hXGQJBAKi/qaMAQLySEj0Y7gjdwzVT69lG",
|
||||
"text": "Cfmq15ldq0cVUU62qJOFNCiyJLt36hSlaTFnZg5qlLjXbbyLO2s92BlErVkCQDaY\nH3kxGoC8HvFNtzVG21nEkEDbtdffksxhTHW8d0Hf/ZzUsq85pFqjiwd1h332ZV2b\nreyFUoltH/pXQagsCfECQFyG0RpJtc9ojIRUMOqDGQvoi8il4xM4yCiSKQAcLzuu\nqLrEVyNbKHcBf2Hn3xuEHs/DB6zCLVj/FJ7ZWONCJuU=\n-----END RSA PRIVATE KEY-----"
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_closet": {
|
||||
"type": "room_closet",
|
||||
"connections": {
|
||||
"south": "room_servers",
|
||||
"north": "room_ceo"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "8835",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "RSA Encryption Computer",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"text": "Mcfluffins has sent out a memo to all llama population spot which one is the real one and the first four charecters will help you proceed",
|
||||
"observations": "Verify the correct rsa signature from hex. remember 'llamas are the best' -----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXSTdvKibflOrDlUuICO4I93xzuv5cKdM5QEcXMkJSPe0b/B7NQgOW4PumqwZw4sfEKgMIIAoW9BYErgQS38Ax6UelDaSIIGVtoqIXM8fDvchLXHqBh6L9rfxX5GsTybZqX5wQJtZRM8uAAldo98SByUMR6zjBp+ZTBLHLUt15vQIDAQAB-----END PUBLIC KEY-----"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "First two digital signature",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "bd68b0b3e45ac3b2ed499c8014969ac4ab951653a67ca6bc085f8a10c1c4da220c0350f0c27b3fd727b86dbd36ee8f33b3476270cb819145d8a23456f9cf8c373e53e93bcdd1129a1df44c4792e6704f973820386db4306f84faca5f62657235e02e4259f9e9c080dc4a7da1268e671d90bec8435769b25f8f235fe9d1d1fce7",
|
||||
"observations": "077228e6a71569c44ea0baa248f19048c2526a964d55d5c0bfaed061918f7fcae0c1729d8b3ad2f7717399dc04766308711b939fb28d3277a66669362cacef2e4e478bec1cfe8f72f6121bc0b1a41a0cb35353d722919e40dc04c20ecc534be3f427cabf5260829751948f2fc480399029fe961755c8483394feea60be092933"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Second two digital signature",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "30794e2409bd4db6a4891b1f74897cf10cf3704e685d4c89fb96956cf33889c7803ac9c5c818449827c36319b6a73691690ec4a2169c33aaff52c3114c3f4b4e16c7fb82f063ae0bfc84cfd9f3d1aadba960576d26cd61349ad0627107b4370106b6e30e66f28669aa0aa57c12ceba41c3a1d86858f1b4788c2a01dc68799cf1",
|
||||
"observations": "d51e192f1e46fed49089b322d563a2089aa9ad5907b4f0c9e110ea58ef3a5f2dbfd7066d7a9bcab9335034e0b71d22d5ee9205fc31d025f70361bffa3322d901a65c3965b4770890bdddf0922dae6edf61157c68dd291e7ad81443b7c8ca98fbaa6b558024f586d36e777a904e5c400976bf9d0d659826a5cc96fde273e48246"
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_ceo": {
|
||||
"type": "room_ceo",
|
||||
"connections": {
|
||||
"south": "room_closet"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "bd68",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "A terminal with a flickering screen",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Use RSA decryption (m = c^d mod n). For example, if c=3, calculate (3^53 mod 161). Do this for all ciphertext values to reveal the town's hex message. '212,48,9,9,276,23,155,231' d=269 n=286"
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "freedom!",
|
||||
"observations": "A locked safe containing part of the conversation.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Freedom",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "You have saved yourself from being turned into a llama...sadly.",
|
||||
"observations": "flag{hereisaflagsample}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<scenario xmlns="http://www.github//cliffe/BreakEscapeGame/blob/main/assets/scenarios"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://github.com/cliffe/BreakEscapeGame/blob/main/assets/scenarios/scenerio2.json">
|
||||
|
||||
<name>Asymmetric Encryption with RSA</name>
|
||||
<author>Z. Cliffe Schreuders</author>
|
||||
<description>
|
||||
In this interactive escaape room, you will dive into the mystery of your beloved kitty sidekick, Captain Meow, who has vanished under suspicious circumstances. Your task is to navigate through various rooms, solving interconnected puzzles that utilize cryptographic concepts such as Morse code, AES encryption, and fingerprint analysis to uncover the truth.
|
||||
|
||||
In this adventure, you will decode messages, piece together fragmented notes, and utilize digital tools to gather clues about Captain Meow's whereabouts. These tasks will require a blend of teamwork, critical thinking, and creativity. With your skills, we can piece together the mystery and rescue Captain Meow!
|
||||
</description>
|
||||
|
||||
<type>escape room</type>
|
||||
<difficulty>intermediate</difficulty>
|
||||
|
||||
<CyBOK KA="AC" topic="Algorithms, Schemes and Protocols">
|
||||
<keyword>CRYPTOGRAPHY - ASYMMETRIC - RSA</keyword>
|
||||
<keyword>DIFFIE-HELLMAN ALGORITHM</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="AC" topic="Public-Key Cryptography">
|
||||
<keyword>public-key encryption</keyword>
|
||||
<keyword>public-key signatures</keyword>
|
||||
<keyword>RSA MODULUS</keyword>
|
||||
<keyword>RSA PROBLEM</keyword>
|
||||
<keyword>RSA TRANSFORM</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="AC" topic="Key Management">
|
||||
<keyword>key generation</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="AC" topic="Cryptographic Implementation">
|
||||
<keyword>Cryptographic Libraries</keyword>
|
||||
<keyword>ENCRYPTION - TOOLS</keyword>
|
||||
</CyBOK>
|
||||
|
||||
</scenario>
|
||||
@@ -1,168 +0,0 @@
|
||||
{
|
||||
"scenario_brief": "You've discovered the workshop of the brilliant scientist, Dr. Knowitall, who has built a time machine. With him out, you plan to sneak in and grab the blueprints, but they're hidden behind a series of cryptographic puzzles. Entering the workshop triggers self-destruct countdown. You must solve the riddles quickly, or Dr. Knowitall's life's work will be lost forever!",
|
||||
"startRoom": "room_reception",
|
||||
"rooms": {
|
||||
"room_reception": {
|
||||
"type": "room_reception",
|
||||
"connections": {
|
||||
"north": "room_office"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "AES Encrypted Terminal",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "A terminal displaying an encrypted message: '19e1363e815f0d10014f7804539cab9f'. \n Hex the answers to proceed, the key is my favorite scientist + a space and the IV is my favorite theory."
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Fun facts about me - ordering from favorite to least favorite",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Favorite scientists: \n-Albert Einstein \n-Frank Tipler \n-Igor Novikov \n-Stephen Hawking \n \nFavorite theories: \n-Relativity Theory \n-Gödel’s Rotating Universe \n-Tipler’s Rotating Cylinder \n-Darwin's Theory of Evolution \nFavorite movie: \n-Back to the future \nPhone number: \n-07123456789"
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Safe1",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "TimeIsMoney_123",
|
||||
"observations": "A locked safe requiring a decrypted password.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Briefcase Key",
|
||||
"takeable": true,
|
||||
"key_id": "briefcase_key",
|
||||
"observations": "A key labeled 'Briefcase Key'."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_office": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"south": "room_reception",
|
||||
"north": "room_servers"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Render the image and input the colour to open the safe in all lower caps",
|
||||
"takeable": false,
|
||||
"text": "Render the image and input the colour to open the safe in all lower caps",
|
||||
"observations": "89504e470d0a1a0a0000000d4948445200000002000000250806000000681f38aa000000017352474200aece1ce90000000467414d410000b18f0bfc6105000000097048597300000ec300000ec301c76fa8640000001b494441542853637cf1f2ed7f20606062808251061090c360600000d66d0704a06be47e0000000049454e44ae426082"
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Final Safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "white",
|
||||
"observations": "A safe containing Dr. Knowitall’s image.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "CBC mode",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Since you've made it this far, encrypt the image you rendered with the same key and IV and the first six digits will lead you to the next cryptic puzzle.",
|
||||
"observations": "Thank you for doing my dirty work for me :)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"room_servers": {
|
||||
"type": "room_servers",
|
||||
"connections": {
|
||||
"south": "room_office",
|
||||
"north": "room_closet"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "6f8118",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "ECB pc",
|
||||
"takeable": false,
|
||||
"observations": "Encrypt this formula using the same key and IV but using ECB 'E = mc2'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_closet": {
|
||||
"type": "room_closet",
|
||||
"connections": {
|
||||
"south": "room_servers",
|
||||
"north": "room_ceo"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "7a7afe",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Authentication Terminal",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"text":"shift 10",
|
||||
"observations": "Since I was TEN, I learnt to always shift my words, I deeply encourage you to do so too \n Dswo sc bovkdsfo, kxn cy sc iyeb ocmkzo. Dy pebdrob knfkxmo sx sx dro byywc. wi zryxo xewlob gsvv qesno iye."
|
||||
}
|
||||
]
|
||||
},
|
||||
"room_ceo": {
|
||||
"type": "room_ceo",
|
||||
"connections": {
|
||||
"south": "room_closet"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "07123456789",
|
||||
"objects": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Blueprints",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"observations": "Shift the phrase 'Its about time...literally' forward by 3 places. Convert letters to their alphabetic positions (A=1, B=2, ... Z=26) and sum them to find the checksum."
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Final safe",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "289",
|
||||
"observations": "A locked safe requiring a decrypted password.",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Briefcase Key",
|
||||
"takeable": true,
|
||||
"observations": "Congratulations! You've recovered my time machine blueprints and stopped the self-destruct sequence.\n You outsmarted me and for that I believe you deserve these blueprints more than me! \n flag{timemachineflag123}."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<scenario xmlns="http://www.github//cliffe/BreakEscapeGame/blob/main/assets/scenarios"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://github.com/cliffe/BreakEscapeGame/blob/main/assets/scenarios/scenerio3.json">
|
||||
|
||||
<name>Symmetric Encryption with AES</name>
|
||||
<author>Z. Cliffe Schreuders</author>
|
||||
<description>
|
||||
You’ve stumbled upon the secret workshop of the brilliant but eccentric scientist, Dr. Knowitall, who has built a revolutionary time machine. However, the blueprints for the machine are hidden behind a series of cryptographic puzzles, protected by the Advanced Encryption Standard (AES). Dr. Knowitall’s workshop is rigged with a self-destruct mechanism, and you must solve the puzzles quickly to retrieve the blueprints before time runs out.
|
||||
|
||||
In this escape room, you will explore the principles of symmetric encryption, focusing on AES, a widely used block cipher that secures data through cyberchef.
|
||||
|
||||
But beware: time is relative, and so is your escape. The self-destruct countdown is ticking, and every second counts. Can you outsmart Dr. Knowitall’s puzzles, master AES encryption, and escape with the blueprints before it’s too late?
|
||||
|
||||
</description>
|
||||
|
||||
<type>escape room</type>
|
||||
|
||||
<difficulty>intermediate</difficulty>
|
||||
|
||||
<CyBOK KA="AC" topic="Algorithms, Schemes and Protocols">
|
||||
<keyword>ADVANCED ENCRYPTION STANDARD (AES)</keyword>
|
||||
<keyword>ECB (ELECTRONIC CODE BOOK) BLOCK CIPHER MODE</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="AC" topic="Symmetric Cryptography">
|
||||
<keyword>symmetric primitives</keyword>
|
||||
<keyword>symmetric encryption and authentication</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="AC" topic="Cryptographic Implementation">
|
||||
<keyword>Cryptographic Libraries</keyword>
|
||||
<keyword>ENCRYPTION - TOOLS</keyword>
|
||||
<keyword>Hexadecimal Encoding</keyword>
|
||||
</CyBOK>
|
||||
</scenario>
|
||||
@@ -1,173 +0,0 @@
|
||||
{
|
||||
"scenario_brief": "Your legendary cookie recipe has been stolen by the mischievous squirrels led by Sir Acorn! Tracking them to their secret treehouse, the door slams shut behind you. A sign reads: 'Solve our riddles or forever be known as the Cookie Monster!' Crack the cryptographic challenges and reclaim your recipe before time runs out!",
|
||||
"startRoom": "room_reception",
|
||||
|
||||
"rooms": {
|
||||
"room_reception": {
|
||||
"type": "room_reception",
|
||||
"connections": {
|
||||
"north": "room_office"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Base64 Terminal",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Decrypt this message: 'Y3VwIG9mIGZsb3Vy'"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Recipe Note",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Cookies always start with the right ingredients! Step by step, you will gain an ingredient back from your recipe."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"room_office": {
|
||||
"type": "room_office",
|
||||
"connections": {
|
||||
"north": "room_servers",
|
||||
"south": "room_reception"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "cup of flour",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Caesar Cipher Terminal",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Decrypt this message: 'zkgyvuut ul yamgx'"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Cipher Clue",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "A squirrel’s trick is always shifting things around…"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"room_servers": {
|
||||
"type": "room_servers",
|
||||
"connections": {
|
||||
"north": "room_closet",
|
||||
"south": "room_office"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "teaspoon of sugar",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Encoding Puzzle",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Convert this cipher to text: '68 61 6c 66 20 61 20 63 75 70 20 6f 66 20 6d 69 6c 6b'"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Encoding Clue",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "There are many ways to say the same thing… use the right format!"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"room_closet": {
|
||||
"type": "room_closet",
|
||||
"connections": {
|
||||
"north": "room_ceo",
|
||||
"south": "room_servers"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "half a cup of milk",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Vigenère Cipher Terminal",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Decrypt this message: 'gqh dnlzw razk'"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Cipher Hint",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Squirrels love nuts. Use their favorite to unlock the next ingredient."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"room_ceo": {
|
||||
"type": "room_ceo",
|
||||
"connections": {
|
||||
"south": "room_closet"
|
||||
},
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "two large eggs",
|
||||
"objects": [
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "AES Encryption Safe",
|
||||
"takeable": false,
|
||||
"requires": "password",
|
||||
"observations": "Decrypt this AES message for the safe next to the pc: 'e66ffb8accddb124cb14ec6551f33ccc' \nCount up to 20 for the key and IV."
|
||||
},
|
||||
{
|
||||
"type": "safe",
|
||||
"name": "Final Recipe Vault",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "a bunch of love",
|
||||
"observations": "The final safe containing the stolen recipe!",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Clue to the next safe",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"text": "Use md5 hash to hash the name of the cookie made with these ingredients 'love cookies'"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "safe1",
|
||||
"name": "Final Recipe Vault",
|
||||
"takeable": false,
|
||||
"locked": true,
|
||||
"lockType": "password",
|
||||
"requires": "2a4d3354d949c6d865c8c21a6340e7cf",
|
||||
"observations": " ",
|
||||
"contents": [
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Recovered Cookie Recipe",
|
||||
"takeable": true,
|
||||
"readable": true,
|
||||
"observations": "Congratulations! You've cracked our cryptographic traps and saved your recipe! \n flag{sampleflaghere}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<scenario xmlns="http://www.github//cliffe/BreakEscapeGame/blob/main/assets/scenarios"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://github.com/cliffe/BreakEscapeGame/blob/main/assets/scenarios/scenerio4.json">
|
||||
|
||||
|
||||
<name>Encoding and Encryption Lab</name>
|
||||
<author>Z. Cliffe Schreuders</author>
|
||||
<description>
|
||||
Your legendary cookie recipe has been stolen by the mischievous squirrels led by Sir Acorn! Tracking them to their secret treehouse, the door slams shut behind you. A sign reads: 'Solve our riddles or forever be known as the Cookie Monster!' Crack the cryptographic challenges and reclaim your recipe before time runs out!
|
||||
|
||||
This scenario teaches foundational cryptography through Base64 decoding, hexadecimal conversion, Caesar cipher decryption, and AES/MD5 operations using CyberChef to reclaim a secret recipe.
|
||||
</description>
|
||||
|
||||
<type>lab-sheet</type>
|
||||
<difficulty>Beginner</difficulty>
|
||||
|
||||
<CyBOK KA="AC" topic="Algorithms, Schemes and Protocols">
|
||||
<keyword>Encoding vs Cryptography</keyword>
|
||||
<keyword>Caesar cipher</keyword>
|
||||
<keyword>Vigenere cipher</keyword>
|
||||
<keyword>SYMMETRIC CRYPTOGRAPHY - AES (ADVANCED ENCRYPTION STANDARD)</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="F" topic="Artifact Analysis">
|
||||
<keyword>Encoding and alternative data formats</keyword>
|
||||
</CyBOK>
|
||||
<CyBOK KA="WAM" topic="Fundamental Concepts and Approaches">
|
||||
<keyword>ENCODING</keyword>
|
||||
<keyword>BASE64</keyword>
|
||||
</CyBOK>
|
||||
</scenario>
|
||||
@@ -731,6 +731,16 @@ export function createRoom(roomId, roomData, position) {
|
||||
console.log(`Creating room ${roomId} of type ${roomData.type}`);
|
||||
const gameScenario = window.gameScenario;
|
||||
|
||||
// Build a set of item types that are in startItemsInInventory
|
||||
// These should NOT be created as sprites in rooms
|
||||
const startInventoryTypes = new Set();
|
||||
if (gameScenario && gameScenario.startItemsInInventory && Array.isArray(gameScenario.startItemsInInventory)) {
|
||||
gameScenario.startItemsInInventory.forEach(item => {
|
||||
startInventoryTypes.add(item.type);
|
||||
console.log(`Marking item type "${item.type}" as starting inventory (will not create sprite in rooms)`);
|
||||
});
|
||||
}
|
||||
|
||||
// Safety check: if gameRef is null, use window.game as fallback
|
||||
if (!gameRef && window.game) {
|
||||
console.log('gameRef was null, using window.game as fallback');
|
||||
@@ -933,17 +943,6 @@ export function createRoom(roomId, roomData, position) {
|
||||
// in processScenarioObjectsWithConditionalMatching(). They will be handled there
|
||||
// with proper priority ordering (regular table items before conditional ones).
|
||||
|
||||
// Build a set of inventory items that should NOT be created as sprites
|
||||
const inventoryItemTypes = new Set();
|
||||
if (gameScenario.rooms[roomId].objects) {
|
||||
gameScenario.rooms[roomId].objects.forEach(scenarioObj => {
|
||||
if (scenarioObj.inInventory === true) {
|
||||
inventoryItemTypes.add(scenarioObj.type);
|
||||
console.log(`Marking scenario object type "${scenarioObj.type}" as inventory item (will not create sprite)`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Process scenario objects with conditional item matching first
|
||||
const usedItems = processScenarioObjectsWithConditionalMatching(roomId, position, objectsByLayer, map);
|
||||
|
||||
@@ -960,9 +959,9 @@ export function createRoom(roomId, roomData, position) {
|
||||
baseType = number ? 'notes' + number[0] : 'notes';
|
||||
}
|
||||
|
||||
// Skip if this is an inventory item
|
||||
if (inventoryItemTypes.has(baseType)) {
|
||||
console.log(`Skipping regular item ${imageName} (baseType: ${baseType}) - marked as inventory item`);
|
||||
// Skip if this item type is in starting inventory
|
||||
if (startInventoryTypes.has(baseType)) {
|
||||
console.log(`Skipping regular item ${imageName} (baseType: ${baseType}) - marked as starting inventory item`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1001,11 +1000,6 @@ export function createRoom(roomId, roomData, position) {
|
||||
gameScenario.rooms[roomId].objects.forEach((scenarioObj, index) => {
|
||||
const objType = scenarioObj.type;
|
||||
|
||||
// Skip items that should be in inventory
|
||||
if (scenarioObj.inInventory) {
|
||||
return;
|
||||
}
|
||||
|
||||
let sprite = null;
|
||||
let usedItem = null;
|
||||
let isTableItem = false;
|
||||
@@ -1099,8 +1093,14 @@ export function createRoom(roomId, roomData, position) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if this is a table item by seeing if it's in tableItemsByType
|
||||
// Skip if this item type is in starting inventory
|
||||
const baseType = itemPool.extractBaseTypeFromImageName(imageName);
|
||||
if (startInventoryTypes.has(baseType)) {
|
||||
console.log(`Skipping unreserved item ${imageName} (baseType: ${baseType}) - marked as starting inventory item`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if this is a table item by seeing if it's in tableItemsByType
|
||||
if (itemPool.tableItemsByType[baseType] &&
|
||||
itemPool.tableItemsByType[baseType].includes(tiledItem)) {
|
||||
unreservedTableItems.push(tiledItem);
|
||||
|
||||
@@ -41,28 +41,27 @@ export function initializeInventory() {
|
||||
export function processInitialInventoryItems() {
|
||||
console.log('Processing initial inventory items');
|
||||
|
||||
if (!window.gameScenario || !window.gameScenario.rooms) {
|
||||
if (!window.gameScenario) {
|
||||
console.error('Game scenario not loaded');
|
||||
return;
|
||||
}
|
||||
|
||||
// Loop through all rooms in the scenario
|
||||
Object.entries(window.gameScenario.rooms).forEach(([roomId, roomData]) => {
|
||||
if (roomData.objects && Array.isArray(roomData.objects)) {
|
||||
roomData.objects.forEach(obj => {
|
||||
// Check if this object should start in inventory
|
||||
if (obj.inInventory === true) {
|
||||
console.log(`Adding ${obj.name} to inventory from scenario data`);
|
||||
|
||||
// Create inventory sprite for this object
|
||||
const inventoryItem = createInventorySprite(obj);
|
||||
if (inventoryItem) {
|
||||
addToInventory(inventoryItem);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// Check for startItemsInInventory array in scenario
|
||||
if (window.gameScenario.startItemsInInventory && Array.isArray(window.gameScenario.startItemsInInventory)) {
|
||||
console.log(`Processing ${window.gameScenario.startItemsInInventory.length} starting inventory items`);
|
||||
|
||||
window.gameScenario.startItemsInInventory.forEach(itemData => {
|
||||
console.log(`Adding ${itemData.name} to inventory from startItemsInInventory`);
|
||||
|
||||
// Create inventory sprite for this object
|
||||
const inventoryItem = createInventorySprite(itemData);
|
||||
if (inventoryItem) {
|
||||
addToInventory(inventoryItem);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('No startItemsInInventory defined in scenario');
|
||||
}
|
||||
}
|
||||
|
||||
function createInventorySprite(itemData) {
|
||||
@@ -72,6 +71,9 @@ function createInventorySprite(itemData) {
|
||||
name: itemData.type,
|
||||
objectId: `inventory_${itemData.type}_${Date.now()}`,
|
||||
scenarioData: itemData,
|
||||
texture: {
|
||||
key: itemData.type // Use the type as the texture key for image lookup
|
||||
},
|
||||
setVisible: function(visible) {
|
||||
// For inventory items, visibility is handled by DOM
|
||||
return this;
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
title: "Encoding and Encryption Lab",
|
||||
description: "Recover your legendary cookie recipe from mischievous squirrels by solving various encoding and encryption challenges.",
|
||||
difficulty: "beginner",
|
||||
file: "assets/scenarios/scenario4.json",
|
||||
file: "scenarios/scenario4.json",
|
||||
cybok: [
|
||||
{ ka: "AC", topic: "Algorithms, Schemes and Protocols", keywords: ["Encoding vs Cryptography", "Caesar cipher", "Vigenere cipher", "SYMMETRIC CRYPTOGRAPHY - AES (ADVANCED ENCRYPTION STANDARD)"] },
|
||||
{ ka: "F", topic: "Artifact Analysis", keywords: ["Encoding and alternative data formats"] },
|
||||
@@ -229,7 +229,7 @@
|
||||
title: "Captain Meow's Disappearance",
|
||||
description: "Your beloved kitty sidekick, Captain Meow, has vanished without a trace! Follow the cryptic clues to find him before it's too late.",
|
||||
difficulty: "medium",
|
||||
file: "assets/scenarios/scenario1.json",
|
||||
file: "scenarios/scenario1.json",
|
||||
cybok: [
|
||||
{ ka: "F", topic: "Operating System Analysis", keywords: ["Steganography", "Encoding and alternative data formats", "SEARCH FOR EVIDENCE", "METADATA"] },
|
||||
{ ka: "POR", topic: "Privacy Technologies and Democratic Values", keywords: ["METADATA", "STEGANOGRAPHY"] },
|
||||
@@ -245,7 +245,7 @@
|
||||
"title": "CEO Data Exfiltration",
|
||||
"description": "Infiltrate the CEO's office and exfiltrate sensitive company data. You'll need to bypass physical security and find ways to access restricted areas.",
|
||||
"difficulty": "medium",
|
||||
"file": "assets/scenarios/ceo_exfil.json",
|
||||
"file": "scenarios/ceo_exfil.json",
|
||||
"cybok": [
|
||||
{ "ka": "F", "topic": "Artifact Analysis", "keywords": ["digital evidence", "document analysis"] },
|
||||
{ "ka": "AAA", "topic": "Authorisation", "keywords": ["physical access control", "access control mechanisms"] },
|
||||
@@ -277,7 +277,7 @@
|
||||
title: "Asymmetric Encryption with RSA",
|
||||
description: "Solve cryptographic puzzles using RSA and Diffie-Hellman to escape from a cursed ghost town before you're turned into a llama!",
|
||||
difficulty: "intermediate",
|
||||
file: "assets/scenarios/scenario2.json",
|
||||
file: "scenarios/scenario2.json",
|
||||
cybok: [
|
||||
{ ka: "AC", topic: "Algorithms, Schemes and Protocols", keywords: ["CRYPTOGRAPHY - ASYMMETRIC - RSA", "DIFFIE-HELLMAN ALGORITHM"] },
|
||||
{ ka: "AC", topic: "Public-Key Cryptography", keywords: ["public-key encryption", "public-key signatures", "RSA MODULUS", "RSA PROBLEM", "RSA TRANSFORM"] },
|
||||
@@ -290,7 +290,7 @@
|
||||
title: "Symmetric Encryption with AES",
|
||||
description: "Recover Dr. Knowitall's time machine blueprints by solving AES encryption puzzles before the self-destruct sequence activates.",
|
||||
difficulty: "intermediate",
|
||||
file: "assets/scenarios/scenario3.json",
|
||||
file: "scenarios/scenario3.json",
|
||||
cybok: [
|
||||
{ ka: "AC", topic: "Algorithms, Schemes and Protocols", keywords: ["ADVANCED ENCRYPTION STANDARD (AES)", "ECB (ELECTRONIC CODE BOOK) BLOCK CIPHER MODE"] },
|
||||
{ ka: "AC", topic: "Symmetric Cryptography", keywords: ["symmetric primitives", "symmetric encryption and authentication"] },
|
||||
@@ -302,7 +302,7 @@
|
||||
"title": "Biometric Security Breach",
|
||||
"description": "Test the company's biometric security systems by collecting and spoofing fingerprint data to gain unauthorized access.",
|
||||
"difficulty": "hard",
|
||||
"file": "assets/scenarios/biometric_breach.json",
|
||||
"file": "scenarios/biometric_breach.json",
|
||||
"cybok": [
|
||||
{ "ka": "F", "topic": "Operating System Analysis", "keywords": ["Data acquisition", "BIOMETRIC ANALYSIS", "FINGERPRINT COLLECTION"] },
|
||||
{ "ka": "SOIM", "topic": "Monitor: Data Sources", "keywords": ["SECURITY LOGS", "ACCESS LOG ANALYSIS"] },
|
||||
|
||||
@@ -2,6 +2,26 @@
|
||||
"scenario_brief": "You are a security specialist tasked with investigating a high-security research facility after reports of unauthorized access. Your mission is to use biometric tools to identify the intruder, secure sensitive research data, and recover the stolen prototype before it leaves the facility.",
|
||||
"endGoal": "Recover the stolen Project Sentinel prototype from the intruder's hidden exit route and secure all compromised data.",
|
||||
"startRoom": "reception",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "fingerprint_kit",
|
||||
"name": "Fingerprint Kit",
|
||||
"takeable": true,
|
||||
"observations": "A professional kit for collecting fingerprint samples"
|
||||
},
|
||||
{
|
||||
"type": "lockpick",
|
||||
"name": "Lockpick",
|
||||
"takeable": true,
|
||||
"observations": "A tool for picking locks"
|
||||
},
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
],
|
||||
"rooms": {
|
||||
"reception": {
|
||||
"type": "room_reception",
|
||||
@@ -25,13 +45,6 @@
|
||||
"text": "Unusual access patterns detected:\n- Lab 1: 23:45 PM\n- Biometrics Lab: 01:30 AM\n- Server Room: 02:15 AM\n- Loading Dock: 03:05 AM\n- Director's Office: 03:22 AM",
|
||||
"observations": "A concerning security log from last night"
|
||||
},
|
||||
{
|
||||
"type": "fingerprint_kit",
|
||||
"name": "Fingerprint Kit",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A professional kit for collecting fingerprint samples"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Reception Computer",
|
||||
@@ -41,20 +54,6 @@
|
||||
"fingerprintDifficulty": "easy",
|
||||
"observations": "The reception computer shows a security alert screen. There are clear fingerprints on the keyboard."
|
||||
},
|
||||
{
|
||||
"type": "lockpick",
|
||||
"name": "Lockpick",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A tool for picking locks"
|
||||
},
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "notes",
|
||||
"name": "Biometric Security Notice",
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
{
|
||||
"scenario_brief": "Hi! You are a cyber investigator tasked with uncovering evidence of corporate espionage. Anonymous tips suggest the CEO has been selling company secrets, but you need proof.",
|
||||
"startRoom": "reception",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "lockpick",
|
||||
"name": "Lock Pick Kit",
|
||||
"takeable": true,
|
||||
"observations": "A professional lock picking kit with various picks and tension wrenches"
|
||||
}
|
||||
],
|
||||
"rooms": {
|
||||
"reception": {
|
||||
"type": "room_reception",
|
||||
@@ -67,13 +81,6 @@
|
||||
"observations": "A device for detecting nearby Bluetooth signals",
|
||||
"canScanBluetooth": true
|
||||
},
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "key",
|
||||
"name": "Office Key",
|
||||
@@ -188,13 +195,6 @@
|
||||
"readable": true,
|
||||
"text": "Large data transfers detected to unknown external IPs - All originating from CEO's office",
|
||||
"observations": "Suspicious network activity logs"
|
||||
},
|
||||
{
|
||||
"type": "lockpick",
|
||||
"name": "Lock Pick Kit",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A professional lock picking kit with various picks and tension wrenches"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
"scenario_brief": "You are a cyber security student tasked with recovering the Professor's backup of the CyBOK LaTeX source files for the CyBOK 1.1 release. According to legend, the HDD is stored in a safe in the Professor's office. Follow the clues scattered around the department office to find the safe code. Time to put your physical security skills to the test! Good luck, and try not to get caught... or expelled.",
|
||||
"endGoal": "Recover the CyBOK LaTeX source HDD",
|
||||
"startRoom": "reception",
|
||||
"startItemsInInventory": [
|
||||
],
|
||||
"rooms": {
|
||||
"reception": {
|
||||
"type": "room_reception",
|
||||
@@ -40,7 +42,6 @@
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
{
|
||||
"scenario_brief": "Your beloved kitty sidekick, Captain Meow, has vanished without a trace! As a renowned adventurer and detective, you suspect foul play. The last clue? A cryptic paw print left on your desk and a strange voicemail message on your phone. Can you crack the codes, follow the trail, and rescue Captain Meow before it’s too late?",
|
||||
"scenario_brief": "Your beloved kitty sidekick, Captain Meow, has vanished without a trace! As a renowned adventurer and detective, you suspect foul play. The last clue? A cryptic paw print left on your desk and a strange voicemail message on your phone. Can you crack the codes, follow the trail, and rescue Captain Meow before it's too late?",
|
||||
"endGoal": "Recover the stolen Project Sentinel prototype from the intruder's hidden exit route and secure all compromised data.",
|
||||
|
||||
"startRoom": "reception",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
],
|
||||
|
||||
"rooms": {
|
||||
"reception": {
|
||||
@@ -11,13 +19,6 @@
|
||||
"north": "office1"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Reception Phone",
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"scenario_brief": "You are a curious traveler who stumbles upon Beckett, a ghost town shrouded in mystery. After entering the only standing building, the door slams shut, trapping you inside. A note from Mayor McFluffins warns: 'Fail to escape, and you’ll be turned into a llama.' Solve cryptographic puzzles and break the curse before time runs out, or grow fur and join the town’s eerie fate!",
|
||||
"scenario_brief": "You are a curious traveler who stumbles upon Beckett, a ghost town shrouded in mystery. After entering the only standing building, the door slams shut, trapping you inside. A note from Mayor McFluffins warns: 'Fail to escape, and you'll be turned into a llama.' Solve cryptographic puzzles and break the curse before time runs out, or grow fur and join the town's eerie fate!",
|
||||
"startRoom": "room_start",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
],
|
||||
"rooms": {
|
||||
"room_start": {
|
||||
"type": "room_office",
|
||||
@@ -11,13 +19,6 @@
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "phone",
|
||||
"name": "Recorded Conversation",
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"scenario_brief": "You've discovered the workshop of the brilliant scientist, Dr. Knowitall, who has built a time machine. With him out, you plan to sneak in and grab the blueprints, but they're hidden behind a series of cryptographic puzzles. Entering the workshop triggers self-destruct countdown. You must solve the riddles quickly, or Dr. Knowitall's life's work will be lost forever!",
|
||||
"startRoom": "room_reception",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
],
|
||||
"rooms": {
|
||||
"room_reception": {
|
||||
"type": "room_reception",
|
||||
@@ -11,13 +19,6 @@
|
||||
"lockType": "key",
|
||||
"requires": "briefcase_key",
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "AES Encrypted Terminal",
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"scenario_brief": "Your legendary cookie recipe has been stolen by the mischievous squirrels led by Sir Acorn! Tracking them to their secret treehouse, the door slams shut behind you. A sign reads: 'Solve our riddles or forever be known as the Cookie Monster!' Crack the cryptographic challenges and reclaim your recipe before time runs out!",
|
||||
"startRoom": "room_reception",
|
||||
"startItemsInInventory": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
}
|
||||
],
|
||||
|
||||
"rooms": {
|
||||
"room_reception": {
|
||||
@@ -9,13 +17,6 @@
|
||||
"north": "room_office"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"type": "workstation",
|
||||
"name": "Crypto Analysis Station",
|
||||
"takeable": true,
|
||||
"inInventory": true,
|
||||
"observations": "A powerful workstation for cryptographic analysis"
|
||||
},
|
||||
{
|
||||
"type": "pc",
|
||||
"name": "Base64 Terminal",
|
||||
|
||||
Reference in New Issue
Block a user