[gd_scene load_steps=29 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/time_display.tscn" id="23_tdisplay"] [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 ; #263: Time display — diegetic insert clock, top-left placeholder (D-013, D-031) [node name="TimeDisplay" parent="InsertOverlay" instance=ExtResource("23_tdisplay")] ; 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")] ; --- 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="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 [node name="DebugOverlay" type="Control" parent="UILayer"] anchors_preset = 0 offset_left = 16 offset_top = 120 offset_right = 400 offset_bottom = 400 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")]