- Changed 'eventMapping' to 'eventMappings' in NPC definitions for consistency.
- Updated target knot for closing debrief NPC to 'start' and adjusted story path.
- Enhanced validation script to check for correct eventMappings structure and properties.
- Added checks for missing properties in eventMappings and timedMessages.
- Provided best practice guidance for event-driven cutscenes and closing debrief implementation.
- Updated spriteSheet for Sarah Martinez from "female_office_worker" to "female_blowse".
- Added new event triggers for closing debrief upon entering the main office area and confronting Derek.
- Modified Agent 0x99 to use a person type NPC with updated event mappings and properties.
- Added knockback functionality for both player and NPCs, allowing for dynamic interactions during combat.
- Implemented new animations for player and NPC hit reactions, including 'taking-punch' and 'death' animations.
- Updated player and NPC behavior to prevent animation interruptions during attacks and knockouts.
- Improved player health system to trigger death animations and disable movement upon KO.
- Refactored NPC combat to manage attack states and ensure animations play correctly.
- Introduced utility functions for applying knockback effects and checking knockback states.
- Added hand frames PNG for interaction modes.
- Updated HUD CSS to support new player HUD buttons and styles.
- Enhanced combat configuration to define interaction modes: interact, jab, and cross.
- Integrated player HUD creation and management in the game core.
- Improved player combat system to handle interaction modes and associated animations.
- Modified interaction handling to auto-switch modes for chairs and hostile NPCs.
- Updated health UI to always display health status.
- Created a new HUD JavaScript module to manage avatar and interaction mode toggle.
- Added a test HTML file for the three-mode toggle functionality.
- Deleted unused character images: woman_in_science_lab_coat.png and woman_with_black_long_hair_bow_in_hair_long_sleeve_(1).png.
- Added new padlock icon asset for UI.
- Introduced player_preferences.css for styling the player preferences configuration screen.
- Updated game.js to load new character atlases with simplified filenames.
- Enhanced player.js to create custom idle animations for characters.
- Implemented sprite-grid.js for sprite selection UI, including a preview feature.
- Updated database schema to include break_escape_player_preferences table for storing player settings.
- Modified convert_pixellab_to_spritesheet.py to map character names to simplified filenames and extract headshots from character images.
- Updated the game to support new character sprite atlases for both male and female characters, allowing for a wider variety of NPC designs.
- Improved player sprite initialization to dynamically select between atlas-based and legacy sprites, enhancing flexibility in character representation.
- Refined collision box settings based on sprite type, ensuring accurate physics interactions for both atlas (80x80) and legacy (64x64) sprites.
- Enhanced NPC behavior to utilize atlas animations, allowing for more fluid and diverse animations based on available frames.
Files modified:
- game.js: Added new character atlases and updated sprite loading logic.
- player.js: Improved player sprite handling and collision box adjustments.
- npc-behavior.js: Updated animation handling for NPCs to support atlas-based animations.
- npc-sprites.js: Enhanced NPC sprite creation to accommodate atlas detection and initial frame selection.
- scenario.json.erb: Updated player and NPC configurations to utilize new sprite sheets and animation settings.
- m01_npc_sarah.ink: Revised dialogue options to include new interactions related to NPCs.
- Updated the games_controller to remove starting items from the inventory response, ensuring no duplicates are sent to the client.
- Enhanced the inventory processing logic in JavaScript to check for existing items by ID, type, or name before adding new items, preventing duplicate entries in the player's inventory.
Files modified:
- games_controller.rb: Adjusted inventory response handling.
- inventory.js: Added duplicate item check during inventory processing.
- Implemented keyboard event handling to allow players to use the spacebar to continue and number keys (1-9) to select choices in the minigame.
- Updated UI to display choice buttons with number prefixes for easier selection.
Files modified:
- person-chat-minigame.js: Added keyboard event listener for choice selection.
- person-chat-ui.js: Updated choice button creation to include number prefixes.
- Added a new task to report the discovery of Operation Shatter to SAFETYNET, including dialogue for Agent 0x99.
- Introduced new variables to track player interactions regarding the operation and its implications.
- Updated scenario files to reflect the urgency and details of the operation, emphasizing the calculated casualties and the psychological warfare aspect.
- Shortened the opening briefing to streamline the introduction of the mission and its stakes.
Files modified:
- scenario.json.erb: Added new task for reporting Operation Shatter.
- m01_closing_debrief.json: Updated dialogue to reflect new mission details.
- m01_derek_confrontation.json: Adjusted confrontation dialogue to align with new narrative elements.
- m01_npc_maya.ink: Enhanced Maya's dialogue regarding Operation Shatter.
- m01_opening_briefing.ink: Streamlined introduction and urgency explanation.
- m01_phone_agent0x99.ink: Added reporting mechanics for Operation Shatter discovery.
- Changed CSS file paths in index.html and show.html.erb to reflect new directory structure under public/break_escape.
- Added a new tutorial.css file with styles tailored for the tutorial system, ensuring a cohesive pixel-art aesthetic.
- Enhanced the tutorial manager to track player interactions, including clicks to move and inventory item usage, improving the tutorial experience for new players.
- Updated tutorial steps to dynamically include objectives based on the current scenario.
Files modified:
- index.html: Updated CSS links.
- show.html.erb: Updated CSS links.
- tutorial.css: New styles for the tutorial system.
- player.js: Added notifications for player actions.
- tutorial-manager.js: Enhanced logic for tracking tutorial progress and objectives.
- interactions.js: Added notifications for inventory interactions.
- Refactored the MissionsController to use local variable `missions` instead of instance variable `@missions` for better clarity and performance.
- Introduced grouping of missions by collection for display, improving the organization of mission listings.
- Updated the view to iterate over `@missions_by_collection`, enhancing the presentation of missions by their respective collections.
- Added new CSS styles for collection headings to improve UI aesthetics.
Additionally, removed invalid missions from the database and updated mission collections for better categorization.
Files modified:
- missions_controller.rb: Refactored mission retrieval logic.
- index.html.erb: Updated mission display logic and added new styles.
- migration file: Added cleanup for invalid missions.
- Various mission JSON files: Updated collections for consistency.
Implements a comprehensive tutorial system that:
- Prompts first-time players with option to take tutorial
- Detects device type (mobile vs keyboard) for appropriate instructions
- Shows interactive steps with objectives for basic controls:
* Keyboard: WASD movement, Shift to run, E to interact
* Mobile: Click/tap to move and interact
- Tracks player actions to progress through tutorial steps
- Saves completion status in localStorage
- Includes polished UI with animations and responsive design
Files added:
- tutorial-manager.js: Core tutorial logic and state management
- tutorial.css: Styled UI components with animations
Files modified:
- game.js: Integrated tutorial check on first load
- player.js: Added tutorial notifications for movement/running
- interactions.js: Added tutorial notification for interactions
- main.js: Imported tutorial manager system
- index.html: Added tutorial CSS stylesheet
Adds a new dialogue option for Kevin where the player can provide a
preliminary security audit update. The feature includes:
- 5 MCQ-style security assessment questions covering:
* Physical security (locks and access control)
* Access control patterns (Derek's suspicious activities)
* Password security (predictable patterns)
* Personnel security (Patricia's firing)
* Data protection (network segmentation)
- Answer tracking system (correct/wrong counts)
- Kevin provides context-appropriate responses to each answer
- Influence point adjustments based on answers
- Available after player makes progress (gets items from Kevin)
- Debrief feedback section that evaluates player's security analysis:
* Excellent performance: 4+ correct answers
* Solid performance: 3 correct answers
* Poor performance: ≤2 correct answers
* Feedback on tradecraft and cover maintenance
This enhances the undercover security consultant role-play and provides
educational value on security assessment best practices.
- Change debrief to be tactical/professional rather than judgmental
- Add emphasis on field immunity for SAFETYNET operatives
- Frame fight as valid tactical choice, not a mistake
- Keep practical implications without moral judgment
- Update mission summary: "Hostile engagement neutralized" instead of "Excessive force allegations"
- Agent 0x99 now validates player agency rather than shaming the choice
- Add objective "defeat_derek_hostile" when Derek becomes hostile
- Emit event "hostile_npc_defeated:derek" when Derek is subdued
- Complete objective when Derek is defeated in fight outcome
- Add "fight" choice alongside arrest/recruit/expose options
- Derek becomes hostile when player chooses to fight (#hostile tag)
- Closing debrief includes moral consequences of fighting vs arresting
- Agent 0x99 discusses excessive force and SAFETYNET protocol
- Mission summary reflects fight outcome with allegations
Fixes two critical issues when multiple doors lead to the same room:
1. Room reloading: Added checks in loadRoom() and createRoom() to prevent
reloading/recreating rooms that are already loaded. This prevents the
room from being unnecessarily recreated when opening a second door to
the same room.
2. Door location detection: Updated removeMatchingDoorSprite() to use
position and direction when finding the matching door. Previously it
only checked connectedRoom, which caused it to remove the wrong door
when multiple doors connected the same two rooms at different locations.
Now it checks:
- Opposite direction matches
- Position matches within tolerance (X for N/S doors, Y for E/W doors)
This ensures that opening different doors to the same room works correctly
without causing room reloads or removing the wrong door sprites.