- Fix stale test path UILayer/HUD → InsertOverlay/HUD - Fix D-record citation D-051 → D-049 in main.tscn - Add null guards to hud.gd update methods (pre-_ready safety) - Minimap: dirty-flag queue_redraw instead of per-frame - Remove redundant _panel.size.x, debug print - Fix DebugOverlay/GauntletHUD positioning comments Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
204 lines
10 KiB
Plaintext
204 lines
10 KiB
Plaintext
[gd_scene load_steps=28 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="Script" path="res://scripts/rendering/sound_indicator_renderer.gd" id="20_soundind"]
|
|
[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"]
|
|
[ext_resource type="PackedScene" path="res://ui/settings_dialog.tscn" id="21_settings"]
|
|
[ext_resource type="Script" path="res://ui/debug_overlay.gd" id="22_debug"]
|
|
[ext_resource type="PackedScene" path="res://ui/examine_display.tscn" id="24_examine"]
|
|
[ext_resource type="PackedScene" path="res://ui/journal_panel.tscn" id="25_journal"]
|
|
[ext_resource type="PackedScene" path="res://ui/loading_screen.tscn" id="26_loading"]
|
|
[ext_resource type="PackedScene" uid="uid://b2ndm9rvx8cqp" path="res://ui/debug_console.tscn" id="27_debug_console"]
|
|
[ext_resource type="PackedScene" uid="uid://news_ticker_scene_sr" path="res://ui/news_ticker.tscn" id="28_newsticker"]
|
|
|
|
[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")
|
|
|
|
; --- z:951 — Medium-range sound indicators (#126, D-018) ---
|
|
; Directional arrows at fog boundary for sounds outside LOS.
|
|
; Above FogEntities (z:950), below InsertOverlay (CanvasLayer 10).
|
|
[node name="SoundIndicators" type="Node2D" parent="World"]
|
|
z_index = 951
|
|
script = ExtResource("20_soundind")
|
|
|
|
; --- 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")]
|
|
|
|
; #151: Minimap — diegetic insert overlay, top-right, 160px circle (D-013, D-049 z-layer 6)
|
|
[node name="Minimap" parent="InsertOverlay" instance=ExtResource("7_minimap")]
|
|
|
|
; #174: Examine result — non-interactive observe text overlay, auto-dismisses 5s (D-061 adjacent)
|
|
[node name="ExamineDisplay" parent="InsertOverlay" instance=ExtResource("24_examine")]
|
|
|
|
; #264: Journal panel — knowledge graph review, toggle J key, read-only (D-041)
|
|
[node name="JournalPanel" parent="InsertOverlay" instance=ExtResource("25_journal")]
|
|
|
|
; HUD — implant-styled status panel (D-169, D-170). On InsertOverlay per D-049 (z-layer 6).
|
|
[node name="HUD" parent="InsertOverlay" instance=ExtResource("6_hud")]
|
|
|
|
; --- UI layer (CanvasLayer 20) ---
|
|
; Monologue, cursor, stance — always visible, not affected by fog or camera.
|
|
; HUD moved to InsertOverlay (layer 10) per D-049 (insert z-layer 6).
|
|
[node name="UILayer" type="CanvasLayer" parent="."]
|
|
layer = 20
|
|
|
|
[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")]
|
|
|
|
; #511: F3 debug overlay — real-time game state, toggled by F3
|
|
; Position: y:150 — below merged HUD status panel (y:16, ~80px tall), with gap
|
|
[node name="DebugOverlay" type="Control" parent="UILayer"]
|
|
anchors_preset = 0
|
|
offset_left = 16
|
|
offset_top = 150
|
|
offset_right = 400
|
|
offset_bottom = 430
|
|
mouse_filter = 2
|
|
script = ExtResource("22_debug")
|
|
|
|
; #592: News ticker — scrolling headline bar, visible in bar zone only (D-049 z-layer 7)
|
|
[node name="NewsTicker" parent="UILayer" instance=ExtResource("28_newsticker")]
|
|
|
|
; 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")]
|
|
|
|
; #528: Audio settings dialog — 5-bus volume sliders, ESC/OPEN_MENU to toggle
|
|
[node name="SettingsDialog" parent="ModalLayer" instance=ExtResource("21_settings")]
|
|
|
|
; #257: Loading screen — full-screen overlay during save/load round-trip
|
|
[node name="LoadingScreen" parent="ModalLayer" instance=ExtResource("26_loading")]
|
|
|
|
; #581: Debug console — tilde key toggles, bottom 40% of screen
|
|
[node name="DebugConsole" parent="ModalLayer" instance=ExtResource("27_debug_console")]
|