Files
settled-reach/client/scenes/main.tscn
T
jpmschweitzerandClaude Opus 4.6 eb1d89ea86 feat(client): room reset UX, insert pause wiring, auto-checklist (#502, #518, #503)
Room reset (#502): amber reset_plate tile type in TileRenderer, 0.15s
screen flash on room_reset monologue, 'Reset Room' verb via existing
nearby_interactions.

Insert pause (#518, D-058): explicit PauseSimulation on insert open,
ResumeSimulation on close. Replaces toggle-style pause with idempotent
pair per D-058.

Auto-checklist (#503): ChecklistEvaluator parses room YAML, evaluates
7 condition types against GameState with latching. ChecklistOverlay
renders progress in gauntlet mode only. 48 tests covering parser,
evaluation, latching, visibility, and integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:53:35 +01:00

157 lines
7.3 KiB
Plaintext

[gd_scene load_steps=20 format=3 uid="uid://bswrmh7w8dbgm"]
[ext_resource type="Script" path="res://scripts/main.gd" id="1_main"]
[ext_resource type="Script" path="res://scripts/rendering/world_renderer.gd" id="2_world"]
[ext_resource type="Script" path="res://scripts/rendering/entity_renderer.gd" id="3_entity"]
[ext_resource type="Script" path="res://scripts/rendering/fog_shader.gd" id="4_fog"]
[ext_resource type="Script" path="res://scripts/rendering/tile_renderer.gd" id="5_tile"]
[ext_resource type="PackedScene" path="res://ui/hud.tscn" id="6_hud"]
[ext_resource type="PackedScene" path="res://ui/minimap.tscn" id="7_minimap"]
[ext_resource type="PackedScene" path="res://ui/monologue_display.tscn" id="8_monologue"]
[ext_resource type="PackedScene" path="res://ui/interaction_prompt.tscn" id="9_prompt"]
[ext_resource type="Script" path="res://scripts/rendering/cursor_renderer.gd" id="10_cursor"]
[ext_resource type="PackedScene" path="res://ui/interaction_list.tscn" id="11_ilist"]
[ext_resource type="PackedScene" path="res://ui/inventory_grid.tscn" id="12_inv"]
[ext_resource type="PackedScene" path="res://ui/stance_indicator.tscn" id="13_stance"]
[ext_resource type="PackedScene" path="res://ui/world_radial.tscn" id="14_radial"]
[ext_resource type="PackedScene" path="res://ui/dialogue_box.tscn" id="15_dialogue"]
[ext_resource type="Script" path="res://scripts/rendering/fog_entities.gd" id="16_fogent"]
[ext_resource type="PackedScene" path="res://ui/gauntlet_hud.tscn" id="17_gauntlet"]
[ext_resource type="PackedScene" path="res://ui/checklist_overlay.tscn" id="18_checklist"]
[ext_resource type="PackedScene" path="res://ui/bug_report_dialog.tscn" id="19_bugreport"]
[node name="Game" type="Node2D"]
script = ExtResource("1_main")
; D-049 Z-level rendering pipeline (z-layer-gap-analysis.md)
;
; World scope (z:-200 to z:900, inside FogGroup CanvasGroup):
; z:0 FloorTiles — ground plane
; z:10 FloorObjects — cosmetic floor detail, ground shadows
; z:100 YSortGroup — y-sorted: furniture, entities, wall faces (all z:0 relative)
; z:200 [future] — airborne (projectiles, low-flying objects)
; z:300 Overhead — ceiling edges, semi-transparent occlusion
; z:350 [future] — high airborne (above ceiling, scale > 1.0)
; z:400 [future] — upper floor content (rare with fixed camera)
; z:900 FogOverlay — OUTSIDE FogGroup, fog shader
;
; Y-sort contract: ALL children of YSortGroup that participate in positional
; occlusion MUST have z_index = 0. z_index is PRIMARY sort, y is SECONDARY.
; Entities node is AFTER Furniture node — D-044 entity-wins-ties on same y.
[node name="World" type="Node2D" parent="."]
script = ExtResource("2_world")
; --- World content inside CanvasGroup for fog compositing ---
; CanvasGroup captures everything beneath it into one texture.
; FogOverlay (outside) draws the fog shader over this composited texture.
[node name="FogGroup" type="CanvasGroup" parent="World"]
; z:0 — Floor tiles: zone identity, movement surface
[node name="FloorTiles" type="TileMapLayer" parent="World/FogGroup"]
z_index = 0
script = ExtResource("5_tile")
; z:10 — Floor objects: cosmetic detail, walked over, ground shadows from airborne
; (placeholder — populated when floor object art is added)
[node name="FloorObjects" type="Node2D" parent="World/FogGroup"]
z_index = 10
; z:100 — Y-sorted group: furniture + entities + wall faces interleave by y-position
; ALL children MUST use z_index = 0 (y-sort contract, Godot #62715)
[node name="YSortGroup" type="Node2D" parent="World/FogGroup"]
y_sort_enabled = true
z_index = 100
; Furniture (z:0 relative) — tables, chairs, placed objects
; Placeholder — before Entities in tree order so entities win visual ties (D-044)
[node name="Furniture" type="Node2D" parent="World/FogGroup/YSortGroup"]
y_sort_enabled = true
z_index = 0
; Entities (z:0 relative) — D-033 colored sprites, y-sorted with furniture
; MUST be z_index = 0 for correct y-sort interleaving
[node name="Entities" type="Node2D" parent="World/FogGroup/YSortGroup"]
y_sort_enabled = true
z_index = 0
script = ExtResource("3_entity")
; z:300 — Overhead: ceiling edges, upper floor structure, semi-transparent occlusion
; (placeholder — populated when overhead art is added)
[node name="Overhead" type="Node2D" parent="World/FogGroup"]
z_index = 300
; --- z:900 — Fog of perception (D-059 shader-based) ---
; OUTSIDE FogGroup. ColorRect child with fragment shader composites
; 5-layer fog over the world. fog_shader.gd manages uniforms.
[node name="FogOverlay" type="Node2D" parent="World"]
z_index = 900
script = ExtResource("4_fog")
; --- z:950 — Fog entities (D-059/D-060 cognitive delay visualization) ---
; Between fog (z:900) and InsertOverlay (CanvasLayer 10).
; Sound pings, grey blobs, recognized entity glow + silhouette.
[node name="FogEntities" type="Node2D" parent="World"]
z_index = 950
script = ExtResource("16_fogent")
; --- Camera ---
[node name="Camera2D" type="Camera2D" parent="."]
position_smoothing_enabled = true
position_smoothing_speed = 6.0
zoom = Vector2(2, 2)
; --- Insert overlay (CanvasLayer 10) ---
; Bloom-rendered, NOT affected by fog or camera transform.
; World-anchored elements convert world→screen coords in scripts.
[node name="InsertOverlay" type="CanvasLayer" parent="."]
layer = 10
; InteractionPrompt — v0.1 fallback single-line "E - Talk" display
[node name="InteractionPrompt" parent="InsertOverlay" instance=ExtResource("9_prompt")]
; D-057: Entity interaction vertical list — multi-verb, insert-styled
[node name="InteractionList" parent="InsertOverlay" instance=ExtResource("11_ilist")]
; D-058: World radial menu — right-click, 2 spokes (Observe + Insert)
[node name="WorldRadial" parent="InsertOverlay" instance=ExtResource("14_radial")]
; D-061: Dialogue box — bottom screen, max 20% height, diegetic insert UI
[node name="DialogueBox" parent="InsertOverlay" instance=ExtResource("15_dialogue")]
; --- UI layer (CanvasLayer 20) ---
; HUD, monologue, cursor — always visible, not affected by fog or camera.
[node name="UILayer" type="CanvasLayer" parent="."]
layer = 20
[node name="HUD" parent="UILayer" instance=ExtResource("6_hud")]
[node name="Minimap" parent="UILayer" instance=ExtResource("7_minimap")]
[node name="MonologueDisplay" parent="UILayer" instance=ExtResource("8_monologue")]
; D-053: Stance indicator — top-right, color-coded
[node name="StanceIndicator" parent="UILayer" instance=ExtResource("13_stance")]
; #496: Gauntlet HUD — room timer + personal bests, hidden in non-gauntlet mode
[node name="GauntletHUD" parent="UILayer" instance=ExtResource("17_gauntlet")]
; #503: Auto-checklist overlay — condition progress in gauntlet mode
[node name="ChecklistOverlay" parent="UILayer" instance=ExtResource("18_checklist")]
; D-065: Inventory grid — 3x3, bottom-right, 40x40px, 1-9 hotkeys
[node name="InventoryGrid" parent="UILayer" instance=ExtResource("12_inv")]
; D-056: Cursor state machine — insert-styled geometric cursor, topmost in UILayer
[node name="CursorRenderer" type="Node2D" parent="UILayer"]
script = ExtResource("10_cursor")
; --- Modal layer (CanvasLayer 30) ---
; Full-screen overlays: pause menu, inventory modal, death screen.
[node name="ModalLayer" type="CanvasLayer" parent="."]
layer = 30
; #495: WRONG button (F12) — bug report capture dialog
[node name="BugReportDialog" parent="ModalLayer" instance=ExtResource("19_bugreport")]