Introduce REQ-UI-ITEM-ICON (item icons on belts/ports, colored-square
fallback, per-pixel-size raster cache) and REQ-UI-RECIPE-ICON (icon-only
recipe options in the Miner/Assembler selection dialog). Document the
optional recipes.toml `icon` field and cross-reference from
REQ-GW-TILE-SIZE and the visuals.toml config description.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Implements the requirements rename in the codebase. The salvageable object
dropped by destroyed ships and defence stations is now the "debris" entity;
the scrap resource it yields (cargo, delivery, smelting, threat,
scrap_drop_formula, scrap_per_threat) is unchanged.
Entity renames: ScrapDataComponent->DebrisComponent, ScrapSystem->DebrisSystem,
ScrapInfo->DebrisInfo, ScrapSelectionChangedEvent->DebrisSelectionChangedEvent
(member scrap->debris), spawnScrap->spawnDebris, getScraps->getDebrisSystem,
getAllScrapInfo->getAllDebrisInfo, scrapAtWorldPos/scrapInBox->debris*,
SalvageScrapBehavior::scrapTarget->debrisTarget, PendingCollection::scrap->debris,
ScrapTest.cpp->DebrisTest.cpp. Config key scrap_despawn_seconds->
debris_despawn_seconds (WorldConfig.scrapDespawnSeconds->debrisDespawnSeconds).
The salvage/deliver behavior classes keep their names (they act on the scrap
resource).
Also implements the new REQ-UI-DEBRIS-PANEL behavior in SelectedBuildingPanel:
a single selected piece of debris shows a "Debris" heading plus a "Scrap" stat
row; a multi/mixed field selection appends "Debris x N" and "Scrap x N" lines.
Updates the four renamed REQ-ID references in comments/docs, plus architecture.md
and derived.md. All 449 test cases pass; app, tests, and balancing targets build.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
The salvageable object dropped by destroyed ships and defence stations is
now named "debris" (it carries a scrap amount), resolving the overload
where "scrap" meant both the resource and the dropped object. Renames the
REQ-*-SCRAP-* selection/drop requirement IDs to REQ-*-DEBRIS-*, adds a
single-debris stats panel and mixed field-selection summary, and renames
the scrap_despawn_seconds config key to debris_despawn_seconds. The scrap
resource, scrap_drop_formula, and scrap_per_threat are unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
REQ-UI-DECONSTRUCT-BUTTON now specifies a hover tooltip stating both
deconstruction refund cases (partial for built buildings, full for
construction sites), collapsing to one case when refund_percentage is
100%. REQ-UI-BUILD-TOOLTIP reconciled to point at it.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Draw each building's icon glyph over its footprint fill in place of the text
identity glyph (REQ-UI-WORLD-ICON): production buildings, HQ, and defence
stations. GameWorldView pre-renders each type's icon (chip background stripped)
in a white and a dark variant and picks the contrasting one by fill luminance;
belts, splitters, and tunnels are excluded and keep their tile/text rendering.
Wired into operational buildings, construction sites (icon + progress), stations
(previously letterless), and the builder/blueprint ghost. Update the requirement
wording from "white glyph" to a contrasting ink.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Update REQ-UI-WORLD-ICON: in-world building icons apply to the production
buildings, HQ, and defence stations only. Belts, splitters, and tunnels keep
their existing tile rendering so orientation/flow stays readable; their build
buttons still use icons, and tunnel_entry.svg is a build-button icon only.
Adjust the visuals.toml glyph note accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Add REQ-UI-WORLD-ICON: buildings render their icon's glyph symbol centered on
the footprint (over the existing fill), replacing the letter identity glyph,
with a text-glyph fallback for types without an icon file. Update
REQ-UI-CONSTRUCTION-PROGRESS and the visuals.toml config summary accordingly;
port glyphs are unaffected.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Add REQ-UI-BUILD-ICON (per-building SVG chip icons loaded from
data/icons/buildings/) and extend REQ-UI-BUILD-DISABLED to cover the greyed
icon variant shown for unaffordable buildings.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Rename the Demolish* terminology to Deconstruct* across the simulation,
events, UI, tests, and docs (DemolishCommand and the DemolishMode* events
become their Deconstruct* equivalents), aligning with the deconstruction
queue at HEAD.
Add per-building SVG icons for the build button grid (REQ-UI-BUILD-GRID):
one color-chip icon per placeable building under data/icons/buildings,
loaded from disk at runtime and rendered with QtSvg onto each build button.
An unaffordable building's button shows a grey-recolored variant via a
QIcon Disabled-mode pixmap (REQ-UI-BUILD-DISABLED). Adds the Qt5::Svg
dependency and deploys Qt5Svg.dll.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Demolishing a fully-built building now queues it for timed
deconstruction (parallel to the construction queue) rather than
removing it instantly; construction sites are still removed
instantly. Adds REQ-BLD-DECON-QUEUE and updates REQ-BLD-DEMOLISH,
REQ-BLD-DEMOLISH-CLICK, REQ-BLD-DEMOLISH-BOX, and REQ-BLD-TUNNEL-PAIR.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc
Replace the per-config unlock fields (unlock_at_station_level,
unlock_requires) with a first-class unlock-group concept defined in a
new unlocks.toml. An unlock group is now the unit of loot: awarding one
grants all its members (ships, modules, buildings, assembler recipes) at
once, so a building and a module can be unlocked together.
- Buildings become lockable (REQ-LOCK-BUILDING); locked types are hidden
from the build grid and skipped in blueprint placement.
- Items absent from every unlock group start unlocked (replaces -1).
- New unlocked_at_start flag on assembler recipes for graph-unreachable
base recipes (e.g. building blocks).
- Group display name derived from id for now; no display_name field yet.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc