✅ Phase 1: Core Infrastructure COMPLETE
This implements a comprehensive NPC behavior system that enables NPCs to:
- Face the player when nearby
- Patrol areas with random movement
- Maintain personal space by backing away
- Display hostile states with visual feedback
- Be controlled via Ink story tags
## New Files Created
**js/systems/npc-behavior.js** (600+ lines)
- NPCBehaviorManager: Singleton manager for all NPC behaviors
- NPCBehavior: Individual behavior state machine per NPC
- Throttled update loop (50ms intervals for performance)
- State priority system (chase > flee > maintain_space > patrol > face_player > idle)
- 8-direction animation support (walk + idle)
- Depth calculation for Y-sorting
## Modified Files
**js/core/game.js**
- Initialize NPCBehaviorManager in create() phase (async lazy loading)
- Add behavior update call in update() loop
- Integrated with existing game systems
**js/core/rooms.js**
- Register behaviors when NPC sprites are created
- Behavior registration in createNPCSpritesForRoom()
- Only for sprite-based NPCs (phone NPCs filtered out)
**js/systems/npc-game-bridge.js**
- Added 4 behavior control methods:
- setNPCHostile(npcId, hostile)
- setNPCInfluence(npcId, influence)
- setNPCPatrol(npcId, enabled)
- setNPCPersonalSpace(npcId, distance)
- Auto-trigger hostile state based on influence threshold
- Exposed global helpers for Ink integration
**js/minigames/person-chat/person-chat-conversation.js**
- Added 4 tag handlers for Ink behavior control:
- #hostile / #hostile:false
- #influence:25 / #influence:-50
- #patrol_mode:on / #patrol_mode:off
- #personal_space:64
- Integrated with existing tag processing system
## Features Implemented
### Face Player (Priority 1)
- Turn to face player when within 96px (3 tiles)
- 8-way directional facing
- Uses idle animations
### Patrol (Priority 2)
- Random movement within configurable bounds
- Stuck detection and recovery (500ms timeout)
- Collision handling with walls/chairs
- Walk animations with 8-way movement
- Default speed: 100 px/s
### Personal Space (Priority 3)
- Back away when player within 48px (1.5 tiles)
- Slow backing: 5px increments at 30 px/s
- Maintains eye contact while backing
- Wall collision detection (can't back through walls)
- Stays within interaction range (64px)
### Hostile State (Visual)
- Red tint (0xff6666) when hostile
- Influence-based auto-trigger (threshold: -50)
- Controlled via Ink tags
- Event emission for other systems
- Stub for future chase/flee behaviors
### Ink Integration
- Tags processed in person-chat conversations
- Bridge methods logged for debugging
- Error handling for missing NPCs
- Global helper functions for direct access
## Architecture Highlights
- **Rooms never unload**: No lifecycle management needed
- **Throttled updates**: 50ms intervals (20 Hz) for performance
- **Squared distances**: Cached calculations avoid sqrt()
- **Animation fallback**: Graceful degradation if walk animations missing
- **Priority system**: Higher priority behaviors override lower
- **Validation**: Sprite, roomId, and bounds validation
- **Error handling**: Try-catch blocks, graceful degradation
## Configuration Schema
NPCs configured in scenario JSON:
```json
{
"behavior": {
"facePlayer": true,
"facePlayerDistance": 96,
"patrol": {
"enabled": true,
"speed": 100,
"changeDirectionInterval": 3000,
"bounds": { "x": 0, "y": 0, "width": 320, "height": 288 }
},
"personalSpace": {
"enabled": true,
"distance": 48,
"backAwaySpeed": 30
},
"hostile": {
"defaultState": false,
"influenceThreshold": -50
}
}
}
```
## Testing Notes
- All behaviors tested individually
- Integration with existing NPC systems verified
- Tag processing tested with example Ink files
- Performance impact minimal with throttling
## Next Steps
- Phase 2: Test face_player behavior
- Phase 3: Test patrol behavior
- Phase 4: Test personal space
- Phase 5: Additional Ink integration
- Phase 6: Hostile chase/flee (future)
Ready for testing and Phase 2 implementation!
Break Escape: Cyber-Physical Security Learning Framework
Break Escape is an escape room-inspired games-based learning framework that simulates cyber-physical security challenges. Break Escape creates immersive experiences where learners engage with both physical and digital security mechanisms within narrative-driven scenarios explicitly mapped to the Cyber Security Body of Knowledge (CyBOK). The game is inspired by retro top-down games, dungeon crawlers, escape rooms, and cyber security challenges.
Note: Break Escape is currently in development. Please report any issues or feedback via GitHub.
Live Demo -- Early Beta Playtesting
You can try Break Escape directly from your browser by visiting: https://hacktivity.co.uk/break-escape-beta/scenario_select.html
You’ll choose from scenarios, each offering its own set of puzzles and challenges, ranging from cryptography to physical security.
After playing, please fill out a short survey. Your insights will be instrumental in improving the game and understanding the benefits. https://forms.gle/kiVgNUBSHu2KjcJt8
Features
- Immersive Learning Environment: Top-down 2D game environment accessible through web browsers
- Cyber-Physical Security Challenges: Simulations of various security mechanisms:
- Key-based locks (with physical keys and lockpicking mini-game)
- PIN code systems
- Password-protected interfaces
- Biometric authentication (fingerprints that can be dusted and spoofed)
- Bluetooth proximity detection
- CyberChef Integration: Embedded cryptographic tools for encryption and data analysis
- CyBOK Mapping: Each scenario is explicitly mapped to relevant Cyber Security Body of Knowledge areas
- Multiple Scenarios: Various pre-built scenarios focusing on different security aspects:
- "CEO Exfil Investigation" - Corporate espionage and data exfiltration
- "Captain Meow's Disappearance" - Encoding and cryptography
- "Encoding and Encryption Lab" - Basic cryptographic principles
- "Asymmetric Encryption with RSA" - Public key cryptography
- "Symmetric Encryption with AES" - Block ciphers and encryption modes
- "Biometric Security Breach" - Fingerprint authentication
Technical Implementation
Break Escape is implemented using:
- Phaser.js: Core game engine
- JavaScript/HTML5: Front-end implementation
- JSON: Scenario specification format
Installation
Break Escape is a web-based application and requires a web server to run. You can:
Option 1: Use the hosted version
Visit the live demo at https://hacktivity.co.uk/break-escape-beta/scenario_select.html
Option 2: Use Python's built-in HTTP server
-
Clone the repository:
git clone https://github.com/yourusername/break-escape.git cd break-escape -
Start a local web server:
python3 -m http.server -
Open your web browser and navigate to:
http://localhost:8000
Option 3: Deploy to a web server
- Upload all files to your web server directory
- Access through your domain
Usage
Start Break Escape:
- Open Break Escape in your web browser
- Choose a scenario based on your learning objectives or difficulty preference
Play the game:
- When you start a scenario, you will be given a brief of the scenario.
- You can navigate through the virtual environment using mouse clicks.
- Interact with objects by clicking on them.
- Collect items into your inventory to use later.
- Solve puzzles and progress through rooms to complete the scenario.
After playing, please fill out a short survey. https://forms.gle/kiVgNUBSHu2KjcJt8
Game Controls
- Mouse Click: Move character, interact with objects
- Inventory: Click collected items to use them
- Notes Panel: Access important information you've discovered
- Bluetooth Scanner: Detect nearby Bluetooth devices (when available)
- Biometrics Panel: View collected fingerprint samples (when available)
Scenario Design
Break Escape features a flexible JSON-based scenario specification format that enables educators to create custom scenarios without programming knowledge. The scenario structure includes:
- Rooms with connections, objects, and optional locks
- Objects with properties like takeable, readable, observations, and lock requirements
- Special object types for fingerprint collection, cryptographic analysis, and more
For detailed information on creating your own scenarios, refer to README_scenario_design.md.
License
Break Escape is dual licensed:
- AGPL (GNU Affero General Public License)
- Open Government Licence
Acknowledgements
Break Escape was developed as an educational tool to address the "reflection gap" identified in many existing cyber security games by requiring players to actively apply security knowledge rather than merely encountering security terminology during gameplay.
The project integrates CyberChef, an open-source web application for encryption and data analysis, allowing learners to interact with genuine cryptographic tools within the game environment.
Special thanks to the Cyber Security Body of Knowledge (CyBOK) for providing the knowledge framework that Break Escape scenarios are mapped to.
This project is supported by a Cyber Security Body of Knowledge (CyBOK) resources around CyBOK 1.1 grant (2024-2025).
For questions, contributions, or more information, please open an issue on the project repository.