mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-21 11:18:08 +00:00
145a2f988c3f395c56a431793d85b15547949ae8
CRITICAL FIXES - Resolved progression-blocking issues: **1. Added Missing Items for Room Access:** - Added rfid_cloner to Kevin's inventory (enables badge cloning mechanic) - Added Torres Office Keycard to Kevin's inventory (enables Torres office access) - Added Security Office Keycard to Patricia's inventory (enables her office access) - Added Server Password Sticky Note to open_office_area (enables server_room access) **2. Populated Empty Rooms:** **Patricia's Office:** - Added Security Incident Log (shows Torres' suspicious activity timeline) - Added SAFETYNET Mission Brief (full mission context with casualty projections) - Changed from locked to unlocked (Patricia is mission handler, no need for lock) **Data Center:** - Added Exfiltration Upload Terminal (Torres' staging system) - Added Upload Schedule (shows Operation Schrodinger timeline, $200K payment) - Added Data Package Manifest (847 GB stolen data, 12-40 projected casualties) **Open Office Area:** - Added Server Password Sticky Note (password: quantum2024) - Added IT Department Notice (mentions Torres' unusual server access) **3. Updated Objectives - Added Missing Tasks:** **Investigate Employees (3 new tasks):** - obtain_rfid_cloner: Obtain RFID badge cloner from Kevin - obtain_torres_keycard: Get keycard for Torres' office from Kevin - find_lockpick: Acquire lockpick set from Kevin **Exploit Infrastructure (2 new tasks):** - clone_employee_badge: Clone Kevin's employee badge for server access - find_server_password: Find the server room password - access_data_center: Access the data center to find exfiltration evidence - find_upload_schedule: Discover Torres' upload schedule **Total Objectives:** 5 aims, 27 tasks (was 19 tasks) **4. Progression Path Now Complete:** BEFORE (BLOCKED): Reception → Break Room → Main Office ✓ ↓ Kevin interview ✓ ↓ Get tools ❌ (NO RFID CLONER!) ↓ Clone badge ❌ (CAN'T CLONE!) ↓ Server access ❌ (NO PASSWORD!) ↓ Torres office ❌ (NO KEYCARD!) AFTER (WORKING): Reception → Break Room → Main Office ✓ ↓ Kevin interview → Get lockpick, rfid_cloner, Torres keycard ✓ ↓ Clone Kevin's employee badge ✓ ↓ Find server password in office area ✓ ↓ Access server_hallway (cloned badge) ✓ ↓ Access server_room (password) ✓ ↓ VM exploitation & flag submission ✓ ↓ Access torres_office (keycard from Kevin) ✓ ↓ Find medical bills & journal (evidence_level +2) ✓ ↓ Access data_center (upload schedule evidence) ✓ ↓ Confront Torres when evidence_sufficient ✓ **5. Evidence & Lore Added:** - 7 new readable documents with mission-critical information - Security logs showing Torres' escalation timeline - Full SAFETYNET mission brief with casualty estimates - Operation Schrodinger exfiltration details - Data package manifest (847 GB, 12-40 casualties) **Validation Status:** ✓ Schema validation passed ✓ ERB rendered successfully ✓ No missing recommended fields ⚠ 6 optional suggestions (waypoints, PIN locks, containers) Mission 5 progression path is now fully functional and playable.
BreakEscape Rails Engine
Cybersecurity training escape room game as a mountable Rails Engine.
Features
- 24+ cybersecurity escape room scenarios
- Server-side progress tracking with 2-table schema
- Randomized passwords per game instance via ERB
- JIT Ink script compilation for NPC dialogue
- Polymorphic player support (User/DemoUser)
- Pundit authorization
- RESTful API for game state management
- Session-based state persistence
Installation
In your Gemfile:
gem 'break_escape', path: 'path/to/break_escape'
Then:
bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed # Optional: creates missions from scenarios
Mounting in Host App
In your config/routes.rb:
mount BreakEscape::Engine => "/break_escape"
Usage
Standalone Mode (Development)
export BREAK_ESCAPE_STANDALONE=true
rails server
# Visit http://localhost:3000/break_escape/
Mounted Mode (Production)
Mount in Hacktivity or another Rails app. The engine will use the host app's current_user via Devise.
Configuration
# config/initializers/break_escape.rb
BreakEscape.configure do |config|
config.standalone_mode = false # true for development
config.demo_user_handle = 'demo_player'
end
Database Schema
break_escape_missions- Scenario metadata (name, display_name, published, difficulty)break_escape_games- Player state + scenario snapshot (JSONB)break_escape_demo_users- Standalone mode only (optional)
API Endpoints
GET /games/:id/scenario- Scenario JSON (ERB-generated)GET /games/:id/ink?npc=X- NPC script (JIT compiled from .ink)GET /games/:id/bootstrap- Initial game dataPUT /games/:id/sync_state- Sync player statePOST /games/:id/unlock- Validate unlock attemptPOST /games/:id/inventory- Update inventory
Architecture
ERB Scenario Generation
Scenarios are stored as .json.erb templates and rendered on-demand with randomized values:
<%= random_password %>- Generates unique password per game<%= random_pin %>- Generates unique 4-digit PIN<%= random_code %>- Generates unique hex code
JIT Ink Compilation
NPC dialogue scripts compile on first request (~300ms):
- Check if
.jsonexists and is newer than.ink - If needed, run
inklecateto compile - Cache compiled JSON for subsequent requests
State Management
Player state stored in JSONB column:
- Current room and unlocked rooms
- Inventory and collected items
- NPC encounters
- Global variables (synced with client)
- Health and minigame state
Testing
rails test
License
AGPL v3 - See LICENSE file for details
Documentation
See HACKTIVITY_INTEGRATION.md for integration guide.
Description
Languages
JavaScript
86.5%
Ink
7%
HTML
2.9%
CSS
2.5%
Ruby
0.9%
Other
0.2%