maniator / maniator/verticopolis

[Feature]: [P3] Ground-floor lobby-only UX polish (palette price + already-built affordance)

Open
#724 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
5
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Two low-severity defer findings from the /gds-code-review pass on the ground-floor lobby-only change (auto-convert: the Floor tool on floor 1 lays a lobby). Design + rationale: _bmad-output/planning-artifacts/design/gdd-ground-floor-lobby-only-2026-07-29.md. Story id: ground-floor-lobby-only.

Both are non-blocking; the shipped change delivers the safety guard (lobby ghost, whole-brush affordability red-ghost, Floor tool-info price note, priced confirmation toast).

1. "Already built here" affordance goes quiet on floor 1 (partly pre-existing)

Re-applying the Floor tool over an existing ground concourse yields no "Floor already built here" message: paintBrush's alreadyAll check compares the uncoerced tool kind ("floor") against structureKindAt (which returns "lobby" on floor 1), so it can never be true for tiles the tool itself created. Keyboard path downgrades to the generic "Can't place Floor here"; mouse/touch is silent (the on-lot paint silence pre-existed). src/game/buildActions.ts (paintBrush alreadyAll).

Fix idea: compare against the coerced kind (groundFloorStructureKind(kind, floor)) in the alreadyAll/no-op path.

2. Live per-hover palette price on floor 1 (optional polish)

The build palette swatch still shows the static Floor price ($500) while a floor-1 placement charges the lobby price ($5,000). Mitigated by the Floor tool-info card note ("On the ground floor this lays a lobby, $5,000 per tile"), the lobby ghost, the red-when-unaffordable ghost, and the priced confirmation toast. A live per-hover relabel of the palette/tool-info was intentionally left out (both are tool-scoped, not hover-scoped). src/ui/uiPalette.ts, src/ui/templates/toolInfo.ts.

Fix idea: if wanted, plumb the current hover floor into the palette/tool-info render so the swatch reflects the effective cost on floor 1.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in src/game/buildActions.ts at paintBrush's alreadyAll check and trace groundFloorStructureKind(kind, floor) for floor 1. Then inspect src/ui/uiPalette.ts and src/ui/templates/toolInfo.ts to understand how the Floor price is rendered. Done means the existing-lobby affordance is reported consistently, with the optional palette/tool-info polish reflecting the effective lobby price if that scope is included.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend, game-dev
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.