mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-21 11:18:08 +00:00
6fda1e3251072571e0291573430a14dc9934c61c
Created comprehensive atmospheric design for corporate investigation mission:
TONE & ATMOSPHERE:
- Corporate noir thriller with mounting moral complexity
- Tense investigation (not high-action, slow-burn)
- Tonal shift: Professional → Empathetic → Moral crisis
- Environmental storytelling through objects and spaces
QUANTUM DYNAMICS CORPORATION:
- Modern Bay Area tech campus (450 employees, 5 floors)
- Aesthetic: Clean minimalist + high-tech research + defense contractor security
- Color palette: Cool blues/whites (sterile), warm woods (corporate friendly)
- Sensory details: Server hum, badge beeps, nervous energy, forced normalcy
TIME & PACING:
- Wednesday afternoon: Mission start, interviews available
- Wednesday night: Empty building, free exploration
- Friday night: Final exfiltration trap scenario
- Environmental progression mirrors moral weight
ROOM-SPECIFIC ATMOSPHERES:
- Corporate lobby: Professional surveillance, unwelcoming
- Patricia's office: Frustrated competence, investigation chaos
- Engineering wing: Nervous productivity, team strain
- Torres' office: **CRITICAL** Quiet desperation
* Family photos, medical bills ($380K visible), children's drawings
* 'Get well soon Mommy' with hearts, 'Best Dad' caption
* Half-finished coffee, expired parking permit (sold car)
* This space makes player feel terrible about investigation
- Server room: Surveillance thriller, digital battlefield
- Conference room: War room, evidence mounting
CHARACTER ATMOSPHERE & VOICES:
DAVID TORRES (Manipulated Insider - NOT typical ENTROPY villain):
- Age 38, Hispanic, thin from stress, constantly adjusts wedding ring
- Voice: Intelligent/technical, exhausted, defensive → breaks easily
- Physical tells: Removes glasses, adjusts ring, long pauses
- Confrontation tone: Horror and disbelief (NOT evil monologue)
- Can be turned, feels genuine remorse
- Dialogue: 'What did I do for them? What did I do?'
THE RECRUITER (True ENTROPY Villain - Unseen):
- Actual true believer, professional manipulator
- Calculated recruitment, identified Torres' vulnerability
- Communications show methodical exploitation
- Goes dark after Torres compromised
PATRICIA MORGAN (CSO):
- Age 52, former FBI Cyber (15 years), armed, no-nonsense
- Voice: Direct law enforcement style, frustrated, defensive about team
- 'God. That's how they get people.'
DR. SARAH CHEN (Team Lead):
- Age 41, maternal toward team, guilty about missing signs
- Defensive → Accepting progression
- 'If David did this... those soldiers. Their lives. God.'
SUPPORTING CAST:
- Lisa Rodriguez: Sympathetic friend, emotional context provider
- Marcus Webb: IT manager, guilty about security gaps
- Kevin Tran: Junior engineer, idolizes Torres ('He's a good person')
- Michael Park: RED HERRING (affair, not espionage)
- Dr. Amara Johnson: RED HERRING (legitimate collaboration)
5 KEY EMOTIONAL MOMENTS:
1. Medical bills discovery: $380K, insurance denials, family photo
2. Torres' journal: 8 months of moral descent in real-time
3. Confrontation revelation: Torres realizes 'journalists' are foreign intel
4. Children's drawings: Innocence amid tragedy
5. The choice: No good options (justice vs. mercy)
ENVIRONMENTAL STORYTELLING:
- Torres' desk items tell complete story (coffee, USB, parking permit, photos)
- Engineering whiteboard shows isolation (missed meetings, unanswered questions)
- Server room evidence (fingerprints, blind spots, Friday logs)
- Corporate sterility vs. personal tragedy contrast
ATMOSPHERIC PROGRESSION:
- Act 1: Professional investigator (clean, cooperative, satisfying)
- Act 2: Humanization (complexity, empathy, uncertainty)
- Act 3: Moral weight (impossible decisions, professional detachment gone)
Document: 350+ lines defining complete sensory framework, character voices,
and emotional progression for investigation thriller atmosphere.
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%