act1: фиксы багов + crosshair + улучшенные текстуры
Some checks failed
Godot CI / Import + smoke test (push) Failing after 14s

БАГ-ФИКСЫ:
- Трясёт у двери: Interactable теперь extends Area3D (не StaticBody3D).
  RayCast3D детектит Area3D через collide_with_areas=true.
  Игрок физически проходит через интерактивы (gift box, флешка,
  записка, дверь) — не толкается в узких местах. Бампается только
  в стены/мебель/пол.
- Все 6 интерактивов в act1_room.tscn и act1_kitchen.tscn
  переведены на type="Area3D".

UI:
- Crosshair в центре экрана: 8×8 точка с тёмной рамкой и белой
  центральной 2×2 точкой. set_crosshair_visible() для 2D-сцен
  (Акт 2 прячет его).
- SubtitlePanel расширен: 16-624 × 240-354 (было 24-616 × 270-350).
  Text-лейбл заменён на RichTextLabel с fit_content + bbcode.
  Длинные реплики отца теперь нормально влезают.
- NoteOverlay аналогично RichTextLabel.
- ControlsHint перенесён сверху (под HUD-датой), 14px меньше.

ТЕКСТУРЫ через FastNoiseLite + 128×128 разрешалка:
- wallpaper: шумная бежевая база + растительный крест-цветок
  каждые 22px, шахматное смещение, тонкая горизонтальная полоса
  каждые 32px (стык обоев).
- linoleum: настоящая паркетная доска 16×64px со смещением между
  рядами, тонкие швы, волокно через шум.
- ceiling: побелка с пятном протёчки в углу (canon-деталь).
- wall_carpet: бордовая база + двойная золотая рамка + ромб-
  медальон с золотыми углами + декоративные уголки.
- blanket: 30 звёздочек (белые/жёлтые) разного размера на шумной
  тёмно-синей базе.
- poster_csgo: диагональная штриховка + силуэт AWP по центру +
  пиксельный «CS:GO» текст внизу.
- poster_morgen: круг с лицом, глаза-щели, рот + пиксельный «MS».
- door: вертикальное волокно Perlin + 3 горизонтальных шва (панели)
  + 4 сучка разного размера.
- desk_white: чистый белый + жёлтый Steam-стикер в углу + царапина.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dmitrii Bykov 2026-05-24 18:04:50 +03:00
parent cc23e7fe3c
commit 773b15fd8e
8 changed files with 498 additions and 183 deletions

View file

@ -34,44 +34,73 @@ modulate = Color(0.75, 0.75, 0.75, 1)
[node name="WeatherLabel" type="Label" parent="."]
offset_left = 340.0
offset_top = 332.0
offset_top = 215.0
offset_right = 632.0
offset_bottom = 348.0
offset_bottom = 231.0
text = ""
horizontal_alignment = 2
modulate = Color(0.7, 0.75, 0.85, 1)
[node name="StatsLabel" type="Label" parent="."]
offset_left = 8.0
offset_top = 332.0
offset_top = 215.0
offset_right = 300.0
offset_bottom = 348.0
offset_bottom = 231.0
text = ""
modulate = Color(0.94, 0.71, 0.1, 1)
[node name="ControlsHint" type="Label" parent="."]
offset_left = 0.0
offset_top = 246.0
offset_top = 28.0
offset_right = 640.0
offset_bottom = 260.0
text = "WASD ходить · мышь смотреть · ЛКМ взаимодействие · ESC мышь · Q выход"
offset_bottom = 42.0
text = "WASD ходить · мышь смотреть · ЛКМ взаимодействие · ESC мышь · Q выход"
horizontal_alignment = 1
modulate = Color(0.5, 0.5, 0.5, 0.8)
modulate = Color(0.45, 0.45, 0.45, 0.8)
[node name="Crosshair" type="Control" parent="."]
offset_left = 316.0
offset_top = 176.0
offset_right = 324.0
offset_bottom = 184.0
[node name="CenterDot" type="ColorRect" parent="Crosshair"]
offset_left = 3.0
offset_top = 3.0
offset_right = 5.0
offset_bottom = 5.0
color = Color(1, 1, 1, 0.85)
[node name="OuterRing" type="ColorRect" parent="Crosshair"]
offset_left = 0.0
offset_top = 0.0
offset_right = 8.0
offset_bottom = 8.0
color = Color(0, 0, 0, 0.4)
mouse_filter = 2
[node name="InnerHole" type="ColorRect" parent="Crosshair"]
offset_left = 1.0
offset_top = 1.0
offset_right = 7.0
offset_bottom = 7.0
color = Color(0, 0, 0, 0)
mouse_filter = 2
[node name="PromptLabel" type="Label" parent="."]
offset_left = 0.0
offset_top = 200.0
offset_top = 192.0
offset_right = 640.0
offset_bottom = 220.0
offset_bottom = 212.0
text = ""
horizontal_alignment = 1
modulate = Color(0.94, 0.71, 0.1, 1)
[node name="SubtitlePanel" type="PanelContainer" parent="."]
offset_left = 24.0
offset_top = 270.0
offset_right = 616.0
offset_bottom = 350.0
offset_left = 16.0
offset_top = 240.0
offset_right = 624.0
offset_bottom = 354.0
[node name="V" type="VBoxContainer" parent="SubtitlePanel"]
layout_mode = 2
@ -81,9 +110,13 @@ layout_mode = 2
text = "[Я]"
modulate = Color(0.94, 0.71, 0.1, 1)
[node name="Text" type="Label" parent="SubtitlePanel/V"]
[node name="Text" type="RichTextLabel" parent="SubtitlePanel/V"]
custom_minimum_size = Vector2(590, 60)
layout_mode = 2
bbcode_enabled = true
text = ""
fit_content = true
scroll_active = false
autowrap_mode = 3
[node name="Hint" type="Label" parent="SubtitlePanel/V"]
@ -104,7 +137,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
offset_right = 640.0
offset_bottom = 360.0
color = Color(0, 0, 0, 0.75)
color = Color(0, 0, 0, 0.78)
[node name="Center" type="CenterContainer" parent="NoteOverlay"]
anchor_right = 1.0
@ -113,7 +146,7 @@ offset_right = 640.0
offset_bottom = 360.0
[node name="P" type="PanelContainer" parent="NoteOverlay/Center"]
custom_minimum_size = Vector2(420, 180)
custom_minimum_size = Vector2(440, 200)
layout_mode = 2
[node name="V2" type="VBoxContainer" parent="NoteOverlay/Center/P"]
@ -125,11 +158,13 @@ text = "Записка"
horizontal_alignment = 1
modulate = Color(0.94, 0.71, 0.1, 1)
[node name="Text" type="Label" parent="NoteOverlay/Center/P/V2"]
[node name="Text" type="RichTextLabel" parent="NoteOverlay/Center/P/V2"]
custom_minimum_size = Vector2(420, 100)
layout_mode = 2
bbcode_enabled = true
text = ""
fit_content = true
autowrap_mode = 3
horizontal_alignment = 1
[node name="Hint" type="Label" parent="NoteOverlay/Center/P/V2"]
layout_mode = 2

View file

@ -23,3 +23,4 @@ far = 50.0
[node name="InteractRay" type="RayCast3D" parent="Camera3D"]
target_position = Vector3(0, 0, -2.5)
collision_mask = 1
collide_with_areas = true

View file

@ -212,7 +212,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.7, -0.25, -0.06)
mesh = SubResource("mesh_door_panel")
material_override = SubResource("mat_door")
[node name="DoorBack" type="StaticBody3D" parent="WallS"]
[node name="DoorBack" type="Area3D" parent="WallS"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.7, -0.25, -0.12)
script = ExtResource("2_int")
prompt = "вернуться в комнату"
@ -254,7 +254,7 @@ material_override = SubResource("mat_fridge")
[node name="Coll" type="CollisionShape3D" parent="Fridge"]
shape = SubResource("shape_fridge")
[node name="WiFiNote" type="StaticBody3D" parent="Fridge"]
[node name="WiFiNote" type="Area3D" parent="Fridge"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0.31)
script = ExtResource("2_int")
prompt = "прочитать записку"

View file

@ -396,7 +396,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.06, -0.25, 0)
mesh = SubResource("mesh_door")
material_override = SubResource("mat_door")
[node name="Door" type="StaticBody3D" parent="WallE"]
[node name="Door" type="Area3D" parent="WallE"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1, -0.25, 0)
script = ExtResource("2_int")
prompt = "выйти на кухню"
@ -493,7 +493,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1, 0.36, 0.0)
mesh = SubResource("mesh_lays")
material_override = SubResource("mat_lays")
[node name="FlashDrive" type="StaticBody3D" parent="Desk"]
[node name="FlashDrive" type="Area3D" parent="Desk"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0.36, 0.15)
script = ExtResource("2_int")
prompt = "взять флешку"
@ -535,7 +535,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.85, 0.015, 0.2)
mesh = SubResource("mesh_sock")
material_override = SubResource("mat_sock")
[node name="GiftBox" type="StaticBody3D" parent="."]
[node name="GiftBox" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, -0.3)
script = ExtResource("2_int")
prompt = "открыть коробку"
@ -555,7 +555,7 @@ visible = false
mesh = SubResource("mesh_sys")
material_override = SubResource("mat_sys")
[node name="Note" type="StaticBody3D" parent="SystemUnit"]
[node name="Note" type="Area3D" parent="SystemUnit"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.26, 0)
script = ExtResource("2_int")
prompt = "прочитать записку"