Engineering audit, sprint calendar & backlog — Group 7
Every game hides a handful of design problems that define the project. Here are the two that shaped every technical and creative decision we made on Park Street Survivor.
Challenge 01
The Problem
Emily Dickinson's "Hope is the thing with feathers" is abstract — it speaks of perseverance through metaphor. How do you translate that into a game that must communicate the same feeling through player actions and rules, not just words? If the poetry is only decoration, the game is hollow.
Our Solution
We designed a Narrative State Machine that mirrors the player's physical struggle on the slope with curated lines from the poem. When stamina drops below 30%, the dialogue system surfaces "And sore must be the storm —". When a checkpoint is reached, "And sweetest — in the Gale — is heard." The poem becomes a mechanical reward layer, not decoration.
Challenge 02
The Problem
A physics-based hill climb must feel hard enough to create genuine tension — but if it's too punishing, players disconnect from the narrative before they encounter any poetry. Too easy, and the "survival" premise feels hollow. The difficulty curve had to serve the story, not fight it.
Our Solution
We built a tunable physics model with gravity, friction, and momentum as exposed parameters. After structured user testing in Week 4, we found that 4 of 5 testers quit before the first poetry trigger. We reduced initial gravity by 15% and extended the stamina bar — bringing the run-completion rate to 80% without reducing the perceived sense of struggle.
The game is built on a Finite State Machine (FSM) at its core, managing transitions between scenes, player states, and narrative events. All modules communicate through a centralised event bus to keep components decoupled and independently testable.
FSM governs all game-loop transitions, player states, and scene routing.
Howler.js for ambient soundscapes and state-triggered narrative cues.
Tile-based loader with event trigger zones, collision layers, spawn points.
JSON-driven engine with pacing control and branching narrative paths.
HTML5 Canvas 2D with layered duotone pixel art rendering.
Centralised pub/sub bus decouples all game modules for testability.
"The tune without the words" — our system in motion.
Development timeline across five sprints. Each bar shows whether an epic was in active development or polish/review during that sprint.
All completed work items. Filter by assignee, sprint, epic, or type. Story points (SP) reflect complexity estimates agreed at sprint planning.
Showing 28 of 28 items
| Key | Type | Summary | Epic | Sprint | Assignee | SP |
|---|---|---|---|---|---|---|
| SCRUM-101 | User Story | As a player, I want to navigate the Park Street slope | Core Mechanics | Sprint 1 | Charlotte | 8 |
| SCRUM-102 | Task | Implement finite state machine core | Core Mechanics | Sprint 1 | Charlotte | 5 |
| SCRUM-103 | User Story | As a player, I want to explore the Park Street level | Level Design | Sprint 1 | Kangrui | 5 |
| SCRUM-104 | Task | Design ramp collision geometry and trigger zones | Level Design | Sprint 1 | Kangrui | 3 |
| SCRUM-107 | Task | Create player sprite sheet and walk animation | Pixel Art | Sprint 1 | Lucca | 3 |
| SCRUM-108 | Task | Define colour palette and visual style guide | Pixel Art | Sprint 1 | Lucca | 2 |
| SCRUM-109 | Task | Refactor collision detection module | Core Mechanics | Sprint 2 | Charlotte | 3 |
| SCRUM-110 | User Story | As a player, I want audio cues to enhance immersion | Audio | Sprint 2 | Layla | 5 |
| SCRUM-111 | Task | Integrate Howler.js audio engine and ambient tracks | Audio | Sprint 2 | Layla | 3 |
| SCRUM-112 | User Story | As a player, I want a clear and readable HUD | UI/UX | Sprint 2 | Layla | 5 |
| SCRUM-113 | Task | Redesign HUD layout in Figma and implement on canvas | UI/UX | Sprint 2 | Layla | 2 |
| SCRUM-114 | Task | Polish ramp layout with user-testing feedback zones | Level Design | Sprint 2 | Kangrui | 3 |
| SCRUM-116 | Task | Apply duotone filter pipeline to all sprite assets | Pixel Art | Sprint 2 | Lucca | 3 |
| SCRUM-119 | Task | Implement in-game tutorial overlay | UI/UX | Sprint 3 | Layla | 3 |
| SCRUM-120 | Task | Final audio mixing and ambient loop fix | Audio | Sprint 3 | Layla | 2 |
| SCRUM-121 | Task | Build and deploy project website | Tech Infra | Sprint 3 | Charlotte | 3 |
| SCRUM-122 | Task | Final QA pass and performance optimisation | Tech Infra | Sprint 3 | Charlotte | 3 |
| SCRUM-123 | Issue | State machine fails to reset cleanly on game restart | Core Mechanics | Sprint 3 | Charlotte | 2 |
| SCRUM-124 | User Story | As a player, I want clearer onboarding prompts for room and early-level interactions | Core Mechanics | Sprint 4 | Charlotte | 5 |
| SCRUM-125 | Task | Rebalance Level 2 obstacle sequencing, starting positions, and item density | Level Design | Sprint 4 | Kangrui | 3 |
| SCRUM-126 | Task | Refresh HUD palette, fonts, dialogue states, and backpack-to-HUD integration | UI/UX | Sprint 4 | Layla | 3 |
| SCRUM-127 | Task | Update coffee, flyer, puddle, hospital, and destination assets for the polish pass | Pixel Art | Sprint 4 | Lucca | 3 |
| SCRUM-128 | Task | Finalise collision SFX, library ambience, and typewriter feedback for dialogue scenes | Audio | Sprint 4 | Layla | 2 |
| SCRUM-129 | Task | Refactor tutorial flow into click-through onboarding with dual dialogue controls | Core Mechanics | Sprint 5 | Charlotte | 5 |
| SCRUM-130 | Issue | Fix Fantasy Coffee hitbox, door transition flow, and lane-switch sensitivity | Level Design | Sprint 5 | Kangrui | 2 |
| SCRUM-131 | Task | Revamp tutorial visuals, darken hot-air-balloon UI, and prepare final presentation assets | Pixel Art | Sprint 5 | Lucca | 3 |
| SCRUM-132 | Task | Edit the gameplay video, export the sequence diagram, and replace incorrect Level 5 BGM | Tech Infra | Sprint 5 | Layla | 3 |
| SCRUM-133 | Task | Deploy the official project website and update final delivery-facing pages | Tech Infra | Sprint 5 | Kangrui | 3 |