Dev M2 — MVP Polish · 16 Tasks Total
Task List
🔴 High Priority — Core Interaction
Room Placement System
Press E to hold a room, click to place it
Client Mouse Assignment System
Drag & assign clients to rooms via mouse
🟡 Medium Priority — Feedback & Feel
Button To Trigger Day End
Must display damage results on resolution
Client Stat Display on Hover
Show requirements & auras on mouse hover
Parallax Backgrounds
Scrolling multi-layer environment BG
Parallax Ground
Ground layer that moves with the hotel
Moving Hotel
Hotel drifts/walks across the scene
Icons for Current Effects on a Room
Visual badge showing active auras/effects per room
🟢 Low Priority — Systems & Polish
Client Requirements Status Display
Show per-requirement fulfilment state
Item System
Room items that satisfy requirements or add auras
Effect System
Generalised effect runner used by items & race effects
Race Effect — Fresno Nightcrawler
Unique race behaviour implementation
Race Effect — Wendigo
Unique race behaviour implementation
Slight Bobbing of the Hotel
Periodic camera movement simulating riding a walking mount
Add Item Checks to Damage Check
Items must be evaluated at day resolution
Better Camera System
Locked to hotel, zoom in/out still functional
Total Tasks
16
Across interaction, UI, systems, and visual layers.
High Priority
2
Room Placement + Client Mouse Assignment.
Playable Goal
1 Day Cycle
Place rooms → assign clients → trigger day end → see damage result.
- iRace effects (Fresno Nightcrawler, Wendigo) are scoped to M2 but are low priority — polish the core loop first, then layer them in.
- ✓M1 systems (grid, aura propagation,
client_satisfaction_manager.gd) are assumed stable as a starting point but may need revamping as M2 work surfaces new requirements.
Both tasks deal with mouse-driven player control — placing rooms into the hotel grid and assigning clients to those rooms.
Room Placement System
High
Player presses E to pick up a room. The room follows the cursor as a ghost preview. Clicking on a valid empty grid cell places it. Pressing E again or right-clicking cancels. The grid highlights valid slots while the ghost is active. Placement calls into hotel_grid.gd to register the new room and trigger an aura recalculation.
Relevant scriptshotel_grid.gd · room.gd · (new) room_placement_controller.gd
Client Mouse Assignment System
High
Player clicks a client at the reception to pick them up (ghost follows cursor). Clicking a room with an open slot drops the client in. Clicking an occupied room swaps clients. Dragging back to the reception unassigns. The system must call room.assign_client() and trigger a requirement state refresh on drop.
Relevant scriptsclient.gd · room.gd · (new) client_placement_controller.gd
Ghost / valid placement target (Empty Room)
| Task |
Priority |
What it shows |
Notes |
| Button To Trigger Day End |
Medium |
Ends the day and runs the satisfaction check |
Damage output goes to the terminal for now — no in-game result display yet |
| Client Stat Display on Hover |
Medium |
Requirements, aura type, race |
Tooltip-style popup; reads from client.gd data directly |
| Client Requirements Status Display |
Low |
Per-requirement ✓ / ✗ state in real time |
Updates live when client is moved or room state changes |
| Icons for Current Effects on a Room |
Medium |
Small badge icons on each room showing active aura types |
Should update immediately on aura recalculation; read from room state |
Three interconnected systems that sit on top of the M1 foundation. Race effects are varied enough in nature that some logic rewrites may be needed as each one is implemented.
A system that applies effects to rooms or clients. An effect can add an aura type to a room, mark a requirement as satisfied, or trigger events. Used by items placed in rooms and by race unique effects. Exact architecture TBD as implementation progresses.
Rooms can hold items. Each item holds an array of effects. When an item is placed into a room its effects become active; when removed they are revoked. client_satisfaction_manager.gd must evaluate active item effects before computing satisfaction — this is tracked separately as the Add Item Checks to Damage Check task.
Race Effects — Fresno Nightcrawler & Wendigo
Low
Each race has a unique passive or triggered effect. Because race effects can vary significantly from one another, implementing them may require reworking parts of existing systems. Only Fresno Nightcrawler and Wendigo are in scope for M2; the remaining races follow in later milestones.
L0
Parallax Backgrounds — Layer 0Slowest · atmospheric sky, distant fog
~0.05× speed
L1
Parallax Backgrounds — Layer 1Slow · distant treeline silhouettes
~0.15× speed
L2
Parallax Backgrounds — Layer 2Mid · mid-distance forest layer
~0.30× speed
L3
Parallax Backgrounds — Layer 3Fast · close foreground treeline
~0.55× speed
GND
Parallax GroundFastest · ground directly below the hotel
~0.8× speed
| Task |
Priority |
Description |
| Parallax Backgrounds |
Medium |
Three treeline layers (far / mid / near) plus a sky layer scrolling at different speeds. Use ParallaxBackground + ParallaxLayer nodes in Godot. Layers should loop seamlessly. |
| Parallax Ground |
Medium |
A dedicated ground layer that moves in sync with the hotel's forward drift. Faster scroll rate than the background layers. Can be a tiling sprite. |
| Moving Hotel |
Medium |
The hotel drifts horizontally across the scene as if walking on its spider legs. Velocity should be gentle — this is ambiance, not gameplay. Drives the parallax speed reference value. |
| Slight Bobbing of the Hotel |
Low |
Periodic camera movement that simulates the feeling of riding a walking mount — like the rhythm of a horse walking. Not a constant idle sway, but a deliberate periodic shift tied to the hotel's movement cadence. |
| Better Camera System |
Low |
Camera follows the hotel's X position but allows the player to zoom in/out with scroll wheel. Clamp zoom to sane min/max. Camera should not clip into the ground layer. |
- iAll new scripts, nodes, and assets introduced in M2 must follow team conventions. Name things before you create them — check the naming doc if in doubt.