Internal — Dev Team

Dev M2
MVP Polish

Interaction systems, Player UI feedback, race effects & visual polish

Version 1.0
Milestone Dev M2 — MVP Polish
Engine Godot 4.6.1
Date 2025
Status Not started
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
0 / 16 completed
01

Milestone Overview

What M2 is about
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.
02

Interaction Systems

Both tasks deal with mouse-driven player control — placing rooms into the hotel grid and assigning clients to those rooms.

1
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
2
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
Room
[ E ] ▸
[ E ] ▸
Client ▸
Room ★
[ E ] ▸
Floor 0 — Reception
Ghost / valid placement target (Empty Room)
Client being dragged
Occupied room
03

UI & Feedback

Player-facing information
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
04

New Game Systems

Items · Effects · Race Abilities

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
Effect System
Low
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.
B
Item System
Low
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.
C
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.
05

Visual Polish

Movement · Parallax · Camera
L0
Far sky / moon
Parallax Backgrounds — Layer 0Slowest · atmospheric sky, distant fog
~0.05× speed
L1
Treeline — far
Parallax Backgrounds — Layer 1Slow · distant treeline silhouettes
~0.15× speed
L2
Treeline — mid
Parallax Backgrounds — Layer 2Mid · mid-distance forest layer
~0.30× speed
L3
Treeline — near
Parallax Backgrounds — Layer 3Fast · close foreground treeline
~0.55× speed
GND
Ground
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.
06

Conventions & Guidelines