act1: реальное освещение + человекоподобный отец
ОСВЕЩЕНИЕ (главная визуальная разница):
- Все материалы переведены с unshaded на per-pixel shading
(удалены shading_mode=0 во всех материалах act1_room+act1_kitchen).
- WorldEnvironment в обеих сценах: ambient_light_color бежевый,
energy 0.4-0.5.
- DirectionalLight3D «солнце из окна»: Y-180 + X-30 rotation чтобы
светило с севера в юг и вниз. light_energy 1.0, тёплый
цвет 1,0.94,0.82. shadow_enabled=true с PSSM (GL Compatibility).
- В комнате: OmniLight3D fill-light возле окна для синего
холодного света (свет неба из окна) — energy 0.5, голубой.
- В кухне: OmniLight3D под потолком как обычная лампа — energy
0.6, тёплый белый, range 5м.
- Теперь мебель/стены/одеяло имеют объём с тенями.
ОТЕЦ (humanoid рig из 11 кубов вместо одного прямоугольника):
- Head (skin): голова
- Hair (dark brown): волосы сверху
- Torso (gray-blue shirt)
- ArmL/ArmR (рукава рубашки)
- HandL/HandR (skin кисти под рукавами)
- LegL/LegR (jeans dark blue)
- ShoeL/ShoeR (чёрные ботинки, чуть выпирают вперёд)
- Все материалы с roughness 0.6-0.95 для приличных бликов.
- FatherNPC.position = (1.7, 0, 0) — ноги на полу, голова на ~1.8м.
- Tween в act1.gd для exit работает как раньше (position:x).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:10:04 +03:00
|
|
|
[gd_scene load_steps=45 format=3]
|
prologue: целиком Акт 1 (комната+кухня) + Акт 2 (установка)
ИНФРАСТРУКТУРА:
- GameState autoload: player_name, прогресс актов, ачивки.
- SceneManager autoload: change_scene с deferred переключением,
shortcuts go_room/go_kitchen/go_install.
- TextureGen autoload: процедурные pixel-art ImageTexture через
Image.set_pixel, кешируются в Dictionary. Текстуры: wallpaper
(бежевая с растительным узором), linoleum (полосы паркета),
ceiling (побелка с шумом), wall_carpet (бордовый с ромбами),
blanket (тёмно-синее со звёздами), poster_csgo (жёлтый с
силуэтом AWP), poster_morgen (тёмно-красный с головой),
door (дерево с волокном), desk_white, book_color(0-4).
АКТ 1 КОМНАТА (act1_room.tscn / act1.gd):
- Все стены/пол/потолок/ковёр/одеяло/постеры/стол/дверь теперь
с процедурными текстурами через TextureGen.apply_to_material с
правильным uv1_scale. Texture filter NEAREST для пиксель-арта.
- Door interactable добавлен в east-wall (рядом с DoorPanel).
Включается после ухода отца. Клик → переход на кухню.
- GameState persists прогресс — возврат из кухни не повторяет интро.
- _setup_post_intro_state восстанавливает SEEK_DRIVE после кухни.
- После подбора флешки — переход на act2_install.
АКТ 1 КУХНЯ (act1_kitchen.tscn / act1_kitchen.gd):
- 3×3м комнатка с холодильником «Атлант», плитой (4 ручки красные),
столешницей+раковиной, чайником, столом+2 стула, окном+радиатором.
- Wi-Fi записка приклеена на холодильнике, читается → ачивка
«Wi-Fi разведчик» + GameState.wifi_password_found = true.
- Дверь обратно в комнату — SceneManager.go_room().
- Текстуры через TextureGen.
АКТ 2 УСТАНОВКА ШИНДОВС (act2_install.tscn / act2_install.gd):
- Полная 2D-сцена с 7 шагами state machine:
BOOT (4 квадратика логотипа 1.6 сек) → LICENSE_INTRO →
LICENSE_FULL (по «Читать») → DISK → USERNAME → PASSWORD →
TIMEZONE → INSTALLING (5 фаз прогресс-бара 3 сек) → COMPLETE.
- ШИЗО-пункты лицензионки: 7.3.2, 11.4, 12.1, 15.7, 18.0, 21.3,
23.9, 27.1 (полный текст из канона Пролог Акт 2).
- Ввод имени с валидацией: 2-24 символа, regex буквы+цифры,
ban-list титулов (повелитель/владыка/бог/лорд/царь) и мата.
- Подсказка-плейсхолдеры из канона: bossiara13, fr3sh_n3kit и т.п.
- Пароль с чекбоксом «Без пароля» + ачивки «Главное чтоб удобно»
(123/qwerty/empty) и «Параноик» (12+ символов со спец).
- Часовой пояс OptionButton с 7 регионами страны Р, UTC+3 default.
- Welcome-экран после установки: «Добро пожаловать, {playerName}».
- Кнопка «Запустить стеме» — заглушка Акта 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:50:26 +03:00
|
|
|
|
|
|
|
|
[ext_resource type="Script" path="res://scripts/prologue/act1_kitchen.gd" id="1_kit"]
|
|
|
|
|
[ext_resource type="Script" path="res://scripts/interactables/interactable.gd" id="2_int"]
|
|
|
|
|
[ext_resource type="PackedScene" path="res://scenes/components/player_fpv.tscn" id="3_player"]
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_floor"]
|
|
|
|
|
size = Vector3(3, 0.1, 3)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_floor"]
|
|
|
|
|
size = Vector3(3, 0.1, 3)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_wall_ns"]
|
|
|
|
|
size = Vector3(3, 2.5, 0.1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_wall_ns"]
|
|
|
|
|
size = Vector3(3, 2.5, 0.1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_wall_ew"]
|
|
|
|
|
size = Vector3(0.1, 2.5, 3)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_wall_ew"]
|
|
|
|
|
size = Vector3(0.1, 2.5, 3)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_fridge"]
|
|
|
|
|
size = Vector3(0.6, 1.8, 0.6)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_fridge"]
|
|
|
|
|
size = Vector3(0.6, 1.8, 0.6)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_stove"]
|
|
|
|
|
size = Vector3(0.6, 0.85, 0.6)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_stove"]
|
|
|
|
|
size = Vector3(0.6, 0.85, 0.6)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_counter"]
|
|
|
|
|
size = Vector3(0.7, 0.85, 0.6)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_counter"]
|
|
|
|
|
size = Vector3(0.7, 0.85, 0.6)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_sink"]
|
|
|
|
|
size = Vector3(0.5, 0.05, 0.4)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_kitchen_window"]
|
|
|
|
|
size = Vector3(0.8, 0.5, 0.06)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_door_panel"]
|
|
|
|
|
size = Vector3(1.0, 2.0, 0.06)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_door"]
|
|
|
|
|
size = Vector3(1.0, 2.0, 0.06)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_table"]
|
|
|
|
|
size = Vector3(0.9, 0.04, 0.7)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_table"]
|
|
|
|
|
size = Vector3(0.9, 0.04, 0.7)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_table_leg"]
|
|
|
|
|
size = Vector3(0.05, 0.72, 0.05)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_chair_seat"]
|
|
|
|
|
size = Vector3(0.35, 0.04, 0.35)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_chair_seat"]
|
|
|
|
|
size = Vector3(0.35, 0.04, 0.35)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_chair_back"]
|
|
|
|
|
size = Vector3(0.35, 0.5, 0.04)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_chair_leg"]
|
|
|
|
|
size = Vector3(0.04, 0.46, 0.04)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_note"]
|
|
|
|
|
size = Vector3(0.15, 0.01, 0.1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxShape3D" id="shape_note"]
|
|
|
|
|
size = Vector3(0.15, 0.01, 0.1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_radiator"]
|
|
|
|
|
size = Vector3(0.7, 0.4, 0.08)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_kettle"]
|
|
|
|
|
size = Vector3(0.18, 0.22, 0.18)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="BoxMesh" id="mesh_knob"]
|
|
|
|
|
size = Vector3(0.04, 0.04, 0.04)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_floor"]
|
|
|
|
|
albedo_color = Color(0.72, 0.6, 0.41, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_wall"]
|
|
|
|
|
albedo_color = Color(0.83, 0.72, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_ceiling"]
|
|
|
|
|
albedo_color = Color(0.92, 0.9, 0.85, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_fridge"]
|
|
|
|
|
albedo_color = Color(0.95, 0.94, 0.9, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_stove"]
|
|
|
|
|
albedo_color = Color(0.42, 0.42, 0.45, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_counter"]
|
|
|
|
|
albedo_color = Color(0.88, 0.86, 0.82, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_sink"]
|
|
|
|
|
albedo_color = Color(0.65, 0.65, 0.7, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_kitchen_window"]
|
|
|
|
|
albedo_color = Color(0.6, 0.85, 1.0, 1)
|
|
|
|
|
emission_enabled = true
|
|
|
|
|
emission = Color(0.6, 0.85, 1.0, 1)
|
|
|
|
|
emission_energy_multiplier = 0.6
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_door"]
|
|
|
|
|
albedo_color = Color(0.85, 0.82, 0.75, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_table"]
|
|
|
|
|
albedo_color = Color(0.55, 0.38, 0.2, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_chair"]
|
|
|
|
|
albedo_color = Color(0.55, 0.38, 0.2, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_note"]
|
|
|
|
|
albedo_color = Color(0.95, 0.95, 0.88, 1)
|
|
|
|
|
emission_enabled = true
|
|
|
|
|
emission = Color(0.95, 0.95, 0.7, 1)
|
|
|
|
|
emission_energy_multiplier = 0.5
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_radiator"]
|
|
|
|
|
albedo_color = Color(0.96, 0.94, 0.88, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_kettle"]
|
|
|
|
|
albedo_color = Color(0.85, 0.16, 0.16, 1)
|
|
|
|
|
|
|
|
|
|
[sub_resource type="StandardMaterial3D" id="mat_knob"]
|
|
|
|
|
albedo_color = Color(0.85, 0.2, 0.2, 1)
|
|
|
|
|
|
act1: реальное освещение + человекоподобный отец
ОСВЕЩЕНИЕ (главная визуальная разница):
- Все материалы переведены с unshaded на per-pixel shading
(удалены shading_mode=0 во всех материалах act1_room+act1_kitchen).
- WorldEnvironment в обеих сценах: ambient_light_color бежевый,
energy 0.4-0.5.
- DirectionalLight3D «солнце из окна»: Y-180 + X-30 rotation чтобы
светило с севера в юг и вниз. light_energy 1.0, тёплый
цвет 1,0.94,0.82. shadow_enabled=true с PSSM (GL Compatibility).
- В комнате: OmniLight3D fill-light возле окна для синего
холодного света (свет неба из окна) — energy 0.5, голубой.
- В кухне: OmniLight3D под потолком как обычная лампа — energy
0.6, тёплый белый, range 5м.
- Теперь мебель/стены/одеяло имеют объём с тенями.
ОТЕЦ (humanoid рig из 11 кубов вместо одного прямоугольника):
- Head (skin): голова
- Hair (dark brown): волосы сверху
- Torso (gray-blue shirt)
- ArmL/ArmR (рукава рубашки)
- HandL/HandR (skin кисти под рукавами)
- LegL/LegR (jeans dark blue)
- ShoeL/ShoeR (чёрные ботинки, чуть выпирают вперёд)
- Все материалы с roughness 0.6-0.95 для приличных бликов.
- FatherNPC.position = (1.7, 0, 0) — ноги на полу, голова на ~1.8м.
- Tween в act1.gd для exit работает как раньше (position:x).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:10:04 +03:00
|
|
|
[sub_resource type="Environment" id="env_kitchen"]
|
|
|
|
|
background_mode = 1
|
|
|
|
|
background_color = Color(0.04, 0.04, 0.06, 1)
|
|
|
|
|
ambient_light_source = 2
|
|
|
|
|
ambient_light_color = Color(0.78, 0.72, 0.6, 1)
|
|
|
|
|
ambient_light_energy = 0.5
|
|
|
|
|
|
prologue: целиком Акт 1 (комната+кухня) + Акт 2 (установка)
ИНФРАСТРУКТУРА:
- GameState autoload: player_name, прогресс актов, ачивки.
- SceneManager autoload: change_scene с deferred переключением,
shortcuts go_room/go_kitchen/go_install.
- TextureGen autoload: процедурные pixel-art ImageTexture через
Image.set_pixel, кешируются в Dictionary. Текстуры: wallpaper
(бежевая с растительным узором), linoleum (полосы паркета),
ceiling (побелка с шумом), wall_carpet (бордовый с ромбами),
blanket (тёмно-синее со звёздами), poster_csgo (жёлтый с
силуэтом AWP), poster_morgen (тёмно-красный с головой),
door (дерево с волокном), desk_white, book_color(0-4).
АКТ 1 КОМНАТА (act1_room.tscn / act1.gd):
- Все стены/пол/потолок/ковёр/одеяло/постеры/стол/дверь теперь
с процедурными текстурами через TextureGen.apply_to_material с
правильным uv1_scale. Texture filter NEAREST для пиксель-арта.
- Door interactable добавлен в east-wall (рядом с DoorPanel).
Включается после ухода отца. Клик → переход на кухню.
- GameState persists прогресс — возврат из кухни не повторяет интро.
- _setup_post_intro_state восстанавливает SEEK_DRIVE после кухни.
- После подбора флешки — переход на act2_install.
АКТ 1 КУХНЯ (act1_kitchen.tscn / act1_kitchen.gd):
- 3×3м комнатка с холодильником «Атлант», плитой (4 ручки красные),
столешницей+раковиной, чайником, столом+2 стула, окном+радиатором.
- Wi-Fi записка приклеена на холодильнике, читается → ачивка
«Wi-Fi разведчик» + GameState.wifi_password_found = true.
- Дверь обратно в комнату — SceneManager.go_room().
- Текстуры через TextureGen.
АКТ 2 УСТАНОВКА ШИНДОВС (act2_install.tscn / act2_install.gd):
- Полная 2D-сцена с 7 шагами state machine:
BOOT (4 квадратика логотипа 1.6 сек) → LICENSE_INTRO →
LICENSE_FULL (по «Читать») → DISK → USERNAME → PASSWORD →
TIMEZONE → INSTALLING (5 фаз прогресс-бара 3 сек) → COMPLETE.
- ШИЗО-пункты лицензионки: 7.3.2, 11.4, 12.1, 15.7, 18.0, 21.3,
23.9, 27.1 (полный текст из канона Пролог Акт 2).
- Ввод имени с валидацией: 2-24 символа, regex буквы+цифры,
ban-list титулов (повелитель/владыка/бог/лорд/царь) и мата.
- Подсказка-плейсхолдеры из канона: bossiara13, fr3sh_n3kit и т.п.
- Пароль с чекбоксом «Без пароля» + ачивки «Главное чтоб удобно»
(123/qwerty/empty) и «Параноик» (12+ символов со спец).
- Часовой пояс OptionButton с 7 регионами страны Р, UTC+3 default.
- Welcome-экран после установки: «Добро пожаловать, {playerName}».
- Кнопка «Запустить стеме» — заглушка Акта 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:50:26 +03:00
|
|
|
[node name="Act1Kitchen" type="Node3D"]
|
|
|
|
|
script = ExtResource("1_kit")
|
|
|
|
|
|
act1: реальное освещение + человекоподобный отец
ОСВЕЩЕНИЕ (главная визуальная разница):
- Все материалы переведены с unshaded на per-pixel shading
(удалены shading_mode=0 во всех материалах act1_room+act1_kitchen).
- WorldEnvironment в обеих сценах: ambient_light_color бежевый,
energy 0.4-0.5.
- DirectionalLight3D «солнце из окна»: Y-180 + X-30 rotation чтобы
светило с севера в юг и вниз. light_energy 1.0, тёплый
цвет 1,0.94,0.82. shadow_enabled=true с PSSM (GL Compatibility).
- В комнате: OmniLight3D fill-light возле окна для синего
холодного света (свет неба из окна) — energy 0.5, голубой.
- В кухне: OmniLight3D под потолком как обычная лампа — energy
0.6, тёплый белый, range 5м.
- Теперь мебель/стены/одеяло имеют объём с тенями.
ОТЕЦ (humanoid рig из 11 кубов вместо одного прямоугольника):
- Head (skin): голова
- Hair (dark brown): волосы сверху
- Torso (gray-blue shirt)
- ArmL/ArmR (рукава рубашки)
- HandL/HandR (skin кисти под рукавами)
- LegL/LegR (jeans dark blue)
- ShoeL/ShoeR (чёрные ботинки, чуть выпирают вперёд)
- Все материалы с roughness 0.6-0.95 для приличных бликов.
- FatherNPC.position = (1.7, 0, 0) — ноги на полу, голова на ~1.8м.
- Tween в act1.gd для exit работает как раньше (position:x).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:10:04 +03:00
|
|
|
[node name="WorldEnv" type="WorldEnvironment" parent="."]
|
|
|
|
|
environment = SubResource("env_kitchen")
|
|
|
|
|
|
|
|
|
|
[node name="SunLight" type="DirectionalLight3D" parent="."]
|
|
|
|
|
transform = Transform3D(-1, 0, 0, 0, 0.866, 0.5, 0, 0.5, -0.866, 0.7, 4, -1)
|
|
|
|
|
light_color = Color(1, 0.94, 0.82, 1)
|
|
|
|
|
light_energy = 1.0
|
|
|
|
|
shadow_enabled = true
|
|
|
|
|
shadow_bias = 0.08
|
|
|
|
|
|
|
|
|
|
[node name="CeilingLight" type="OmniLight3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.4, 0)
|
|
|
|
|
light_color = Color(1, 0.95, 0.85, 1)
|
|
|
|
|
light_energy = 0.6
|
|
|
|
|
omni_range = 5.0
|
|
|
|
|
|
prologue: целиком Акт 1 (комната+кухня) + Акт 2 (установка)
ИНФРАСТРУКТУРА:
- GameState autoload: player_name, прогресс актов, ачивки.
- SceneManager autoload: change_scene с deferred переключением,
shortcuts go_room/go_kitchen/go_install.
- TextureGen autoload: процедурные pixel-art ImageTexture через
Image.set_pixel, кешируются в Dictionary. Текстуры: wallpaper
(бежевая с растительным узором), linoleum (полосы паркета),
ceiling (побелка с шумом), wall_carpet (бордовый с ромбами),
blanket (тёмно-синее со звёздами), poster_csgo (жёлтый с
силуэтом AWP), poster_morgen (тёмно-красный с головой),
door (дерево с волокном), desk_white, book_color(0-4).
АКТ 1 КОМНАТА (act1_room.tscn / act1.gd):
- Все стены/пол/потолок/ковёр/одеяло/постеры/стол/дверь теперь
с процедурными текстурами через TextureGen.apply_to_material с
правильным uv1_scale. Texture filter NEAREST для пиксель-арта.
- Door interactable добавлен в east-wall (рядом с DoorPanel).
Включается после ухода отца. Клик → переход на кухню.
- GameState persists прогресс — возврат из кухни не повторяет интро.
- _setup_post_intro_state восстанавливает SEEK_DRIVE после кухни.
- После подбора флешки — переход на act2_install.
АКТ 1 КУХНЯ (act1_kitchen.tscn / act1_kitchen.gd):
- 3×3м комнатка с холодильником «Атлант», плитой (4 ручки красные),
столешницей+раковиной, чайником, столом+2 стула, окном+радиатором.
- Wi-Fi записка приклеена на холодильнике, читается → ачивка
«Wi-Fi разведчик» + GameState.wifi_password_found = true.
- Дверь обратно в комнату — SceneManager.go_room().
- Текстуры через TextureGen.
АКТ 2 УСТАНОВКА ШИНДОВС (act2_install.tscn / act2_install.gd):
- Полная 2D-сцена с 7 шагами state machine:
BOOT (4 квадратика логотипа 1.6 сек) → LICENSE_INTRO →
LICENSE_FULL (по «Читать») → DISK → USERNAME → PASSWORD →
TIMEZONE → INSTALLING (5 фаз прогресс-бара 3 сек) → COMPLETE.
- ШИЗО-пункты лицензионки: 7.3.2, 11.4, 12.1, 15.7, 18.0, 21.3,
23.9, 27.1 (полный текст из канона Пролог Акт 2).
- Ввод имени с валидацией: 2-24 символа, regex буквы+цифры,
ban-list титулов (повелитель/владыка/бог/лорд/царь) и мата.
- Подсказка-плейсхолдеры из канона: bossiara13, fr3sh_n3kit и т.п.
- Пароль с чекбоксом «Без пароля» + ачивки «Главное чтоб удобно»
(123/qwerty/empty) и «Параноик» (12+ символов со спец).
- Часовой пояс OptionButton с 7 регионами страны Р, UTC+3 default.
- Welcome-экран после установки: «Добро пожаловать, {playerName}».
- Кнопка «Запустить стеме» — заглушка Акта 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:50:26 +03:00
|
|
|
[node name="Floor" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.05, 0)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Floor"]
|
|
|
|
|
mesh = SubResource("mesh_floor")
|
|
|
|
|
material_override = SubResource("mat_floor")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Floor"]
|
|
|
|
|
shape = SubResource("shape_floor")
|
|
|
|
|
|
|
|
|
|
[node name="Ceiling" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.55, 0)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Ceiling"]
|
|
|
|
|
mesh = SubResource("mesh_floor")
|
|
|
|
|
material_override = SubResource("mat_ceiling")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Ceiling"]
|
|
|
|
|
shape = SubResource("shape_floor")
|
|
|
|
|
|
|
|
|
|
[node name="WallN" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, -1.55)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="WallN"]
|
|
|
|
|
mesh = SubResource("mesh_wall_ns")
|
|
|
|
|
material_override = SubResource("mat_wall")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="WallN"]
|
|
|
|
|
shape = SubResource("shape_wall_ns")
|
|
|
|
|
|
|
|
|
|
[node name="Window" type="MeshInstance3D" parent="WallN"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7, 0.35, 0.06)
|
|
|
|
|
mesh = SubResource("mesh_kitchen_window")
|
|
|
|
|
material_override = SubResource("mat_kitchen_window")
|
|
|
|
|
|
|
|
|
|
[node name="Radiator" type="MeshInstance3D" parent="WallN"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7, -0.7, 0.1)
|
|
|
|
|
mesh = SubResource("mesh_radiator")
|
|
|
|
|
material_override = SubResource("mat_radiator")
|
|
|
|
|
|
|
|
|
|
[node name="WallS" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 1.55)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="WallS"]
|
|
|
|
|
mesh = SubResource("mesh_wall_ns")
|
|
|
|
|
material_override = SubResource("mat_wall")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="WallS"]
|
|
|
|
|
shape = SubResource("shape_wall_ns")
|
|
|
|
|
|
|
|
|
|
[node name="DoorPanel" type="MeshInstance3D" parent="WallS"]
|
|
|
|
|
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")
|
|
|
|
|
|
act1: фиксы багов + crosshair + улучшенные текстуры
БАГ-ФИКСЫ:
- Трясёт у двери: 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>
2026-05-24 18:04:50 +03:00
|
|
|
[node name="DoorBack" type="Area3D" parent="WallS"]
|
prologue: целиком Акт 1 (комната+кухня) + Акт 2 (установка)
ИНФРАСТРУКТУРА:
- GameState autoload: player_name, прогресс актов, ачивки.
- SceneManager autoload: change_scene с deferred переключением,
shortcuts go_room/go_kitchen/go_install.
- TextureGen autoload: процедурные pixel-art ImageTexture через
Image.set_pixel, кешируются в Dictionary. Текстуры: wallpaper
(бежевая с растительным узором), linoleum (полосы паркета),
ceiling (побелка с шумом), wall_carpet (бордовый с ромбами),
blanket (тёмно-синее со звёздами), poster_csgo (жёлтый с
силуэтом AWP), poster_morgen (тёмно-красный с головой),
door (дерево с волокном), desk_white, book_color(0-4).
АКТ 1 КОМНАТА (act1_room.tscn / act1.gd):
- Все стены/пол/потолок/ковёр/одеяло/постеры/стол/дверь теперь
с процедурными текстурами через TextureGen.apply_to_material с
правильным uv1_scale. Texture filter NEAREST для пиксель-арта.
- Door interactable добавлен в east-wall (рядом с DoorPanel).
Включается после ухода отца. Клик → переход на кухню.
- GameState persists прогресс — возврат из кухни не повторяет интро.
- _setup_post_intro_state восстанавливает SEEK_DRIVE после кухни.
- После подбора флешки — переход на act2_install.
АКТ 1 КУХНЯ (act1_kitchen.tscn / act1_kitchen.gd):
- 3×3м комнатка с холодильником «Атлант», плитой (4 ручки красные),
столешницей+раковиной, чайником, столом+2 стула, окном+радиатором.
- Wi-Fi записка приклеена на холодильнике, читается → ачивка
«Wi-Fi разведчик» + GameState.wifi_password_found = true.
- Дверь обратно в комнату — SceneManager.go_room().
- Текстуры через TextureGen.
АКТ 2 УСТАНОВКА ШИНДОВС (act2_install.tscn / act2_install.gd):
- Полная 2D-сцена с 7 шагами state machine:
BOOT (4 квадратика логотипа 1.6 сек) → LICENSE_INTRO →
LICENSE_FULL (по «Читать») → DISK → USERNAME → PASSWORD →
TIMEZONE → INSTALLING (5 фаз прогресс-бара 3 сек) → COMPLETE.
- ШИЗО-пункты лицензионки: 7.3.2, 11.4, 12.1, 15.7, 18.0, 21.3,
23.9, 27.1 (полный текст из канона Пролог Акт 2).
- Ввод имени с валидацией: 2-24 символа, regex буквы+цифры,
ban-list титулов (повелитель/владыка/бог/лорд/царь) и мата.
- Подсказка-плейсхолдеры из канона: bossiara13, fr3sh_n3kit и т.п.
- Пароль с чекбоксом «Без пароля» + ачивки «Главное чтоб удобно»
(123/qwerty/empty) и «Параноик» (12+ символов со спец).
- Часовой пояс OptionButton с 7 регионами страны Р, UTC+3 default.
- Welcome-экран после установки: «Добро пожаловать, {playerName}».
- Кнопка «Запустить стеме» — заглушка Акта 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:50:26 +03:00
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.7, -0.25, -0.12)
|
|
|
|
|
script = ExtResource("2_int")
|
|
|
|
|
prompt = "вернуться в комнату"
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="WallS/DoorBack"]
|
|
|
|
|
visible = false
|
|
|
|
|
mesh = SubResource("mesh_door_panel")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="WallS/DoorBack"]
|
|
|
|
|
shape = SubResource("shape_door")
|
|
|
|
|
|
|
|
|
|
[node name="WallE" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.55, 1.25, 0)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="WallE"]
|
|
|
|
|
mesh = SubResource("mesh_wall_ew")
|
|
|
|
|
material_override = SubResource("mat_wall")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="WallE"]
|
|
|
|
|
shape = SubResource("shape_wall_ew")
|
|
|
|
|
|
|
|
|
|
[node name="WallW" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.55, 1.25, 0)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="WallW"]
|
|
|
|
|
mesh = SubResource("mesh_wall_ew")
|
|
|
|
|
material_override = SubResource("mat_wall")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="WallW"]
|
|
|
|
|
shape = SubResource("shape_wall_ew")
|
|
|
|
|
|
|
|
|
|
[node name="Fridge" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.9, 0.9, -1.15)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Fridge"]
|
|
|
|
|
mesh = SubResource("mesh_fridge")
|
|
|
|
|
material_override = SubResource("mat_fridge")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Fridge"]
|
|
|
|
|
shape = SubResource("shape_fridge")
|
|
|
|
|
|
act1: фиксы багов + crosshair + улучшенные текстуры
БАГ-ФИКСЫ:
- Трясёт у двери: 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>
2026-05-24 18:04:50 +03:00
|
|
|
[node name="WiFiNote" type="Area3D" parent="Fridge"]
|
prologue: целиком Акт 1 (комната+кухня) + Акт 2 (установка)
ИНФРАСТРУКТУРА:
- GameState autoload: player_name, прогресс актов, ачивки.
- SceneManager autoload: change_scene с deferred переключением,
shortcuts go_room/go_kitchen/go_install.
- TextureGen autoload: процедурные pixel-art ImageTexture через
Image.set_pixel, кешируются в Dictionary. Текстуры: wallpaper
(бежевая с растительным узором), linoleum (полосы паркета),
ceiling (побелка с шумом), wall_carpet (бордовый с ромбами),
blanket (тёмно-синее со звёздами), poster_csgo (жёлтый с
силуэтом AWP), poster_morgen (тёмно-красный с головой),
door (дерево с волокном), desk_white, book_color(0-4).
АКТ 1 КОМНАТА (act1_room.tscn / act1.gd):
- Все стены/пол/потолок/ковёр/одеяло/постеры/стол/дверь теперь
с процедурными текстурами через TextureGen.apply_to_material с
правильным uv1_scale. Texture filter NEAREST для пиксель-арта.
- Door interactable добавлен в east-wall (рядом с DoorPanel).
Включается после ухода отца. Клик → переход на кухню.
- GameState persists прогресс — возврат из кухни не повторяет интро.
- _setup_post_intro_state восстанавливает SEEK_DRIVE после кухни.
- После подбора флешки — переход на act2_install.
АКТ 1 КУХНЯ (act1_kitchen.tscn / act1_kitchen.gd):
- 3×3м комнатка с холодильником «Атлант», плитой (4 ручки красные),
столешницей+раковиной, чайником, столом+2 стула, окном+радиатором.
- Wi-Fi записка приклеена на холодильнике, читается → ачивка
«Wi-Fi разведчик» + GameState.wifi_password_found = true.
- Дверь обратно в комнату — SceneManager.go_room().
- Текстуры через TextureGen.
АКТ 2 УСТАНОВКА ШИНДОВС (act2_install.tscn / act2_install.gd):
- Полная 2D-сцена с 7 шагами state machine:
BOOT (4 квадратика логотипа 1.6 сек) → LICENSE_INTRO →
LICENSE_FULL (по «Читать») → DISK → USERNAME → PASSWORD →
TIMEZONE → INSTALLING (5 фаз прогресс-бара 3 сек) → COMPLETE.
- ШИЗО-пункты лицензионки: 7.3.2, 11.4, 12.1, 15.7, 18.0, 21.3,
23.9, 27.1 (полный текст из канона Пролог Акт 2).
- Ввод имени с валидацией: 2-24 символа, regex буквы+цифры,
ban-list титулов (повелитель/владыка/бог/лорд/царь) и мата.
- Подсказка-плейсхолдеры из канона: bossiara13, fr3sh_n3kit и т.п.
- Пароль с чекбоксом «Без пароля» + ачивки «Главное чтоб удобно»
(123/qwerty/empty) и «Параноик» (12+ символов со спец).
- Часовой пояс OptionButton с 7 регионами страны Р, UTC+3 default.
- Welcome-экран после установки: «Добро пожаловать, {playerName}».
- Кнопка «Запустить стеме» — заглушка Акта 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:50:26 +03:00
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0.31)
|
|
|
|
|
script = ExtResource("2_int")
|
|
|
|
|
prompt = "прочитать записку"
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Fridge/WiFiNote"]
|
|
|
|
|
mesh = SubResource("mesh_note")
|
|
|
|
|
material_override = SubResource("mat_note")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Fridge/WiFiNote"]
|
|
|
|
|
shape = SubResource("shape_note")
|
|
|
|
|
|
|
|
|
|
[node name="Stove" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0, 0.425, -1.2)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Stove"]
|
|
|
|
|
mesh = SubResource("mesh_stove")
|
|
|
|
|
material_override = SubResource("mat_stove")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Stove"]
|
|
|
|
|
shape = SubResource("shape_stove")
|
|
|
|
|
|
|
|
|
|
[node name="Knob1" type="MeshInstance3D" parent="Stove"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.18, 0.4, 0.32)
|
|
|
|
|
mesh = SubResource("mesh_knob")
|
|
|
|
|
material_override = SubResource("mat_knob")
|
|
|
|
|
|
|
|
|
|
[node name="Knob2" type="MeshInstance3D" parent="Stove"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.18, 0.4, 0.32)
|
|
|
|
|
mesh = SubResource("mesh_knob")
|
|
|
|
|
material_override = SubResource("mat_knob")
|
|
|
|
|
|
|
|
|
|
[node name="Counter" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7, 0.425, -1.2)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Counter"]
|
|
|
|
|
mesh = SubResource("mesh_counter")
|
|
|
|
|
material_override = SubResource("mat_counter")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Counter"]
|
|
|
|
|
shape = SubResource("shape_counter")
|
|
|
|
|
|
|
|
|
|
[node name="Sink" type="MeshInstance3D" parent="Counter"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.45, 0.05)
|
|
|
|
|
mesh = SubResource("mesh_sink")
|
|
|
|
|
material_override = SubResource("mat_sink")
|
|
|
|
|
|
|
|
|
|
[node name="Kettle" type="MeshInstance3D" parent="Stove"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.535, 0)
|
|
|
|
|
mesh = SubResource("mesh_kettle")
|
|
|
|
|
material_override = SubResource("mat_kettle")
|
|
|
|
|
|
|
|
|
|
[node name="Table" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.73, 0.7)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Table"]
|
|
|
|
|
mesh = SubResource("mesh_table")
|
|
|
|
|
material_override = SubResource("mat_table")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Table"]
|
|
|
|
|
shape = SubResource("shape_table")
|
|
|
|
|
|
|
|
|
|
[node name="Leg1" type="MeshInstance3D" parent="Table"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.42, -0.38, -0.32)
|
|
|
|
|
mesh = SubResource("mesh_table_leg")
|
|
|
|
|
material_override = SubResource("mat_table")
|
|
|
|
|
|
|
|
|
|
[node name="Leg2" type="MeshInstance3D" parent="Table"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.42, -0.38, -0.32)
|
|
|
|
|
mesh = SubResource("mesh_table_leg")
|
|
|
|
|
material_override = SubResource("mat_table")
|
|
|
|
|
|
|
|
|
|
[node name="Leg3" type="MeshInstance3D" parent="Table"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.42, -0.38, 0.32)
|
|
|
|
|
mesh = SubResource("mesh_table_leg")
|
|
|
|
|
material_override = SubResource("mat_table")
|
|
|
|
|
|
|
|
|
|
[node name="Leg4" type="MeshInstance3D" parent="Table"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.42, -0.38, 0.32)
|
|
|
|
|
mesh = SubResource("mesh_table_leg")
|
|
|
|
|
material_override = SubResource("mat_table")
|
|
|
|
|
|
|
|
|
|
[node name="Chair1" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.48, 1.25)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Chair1"]
|
|
|
|
|
mesh = SubResource("mesh_chair_seat")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Chair1"]
|
|
|
|
|
shape = SubResource("shape_chair_seat")
|
|
|
|
|
|
|
|
|
|
[node name="Back" type="MeshInstance3D" parent="Chair1"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.27, 0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_back")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg1" type="MeshInstance3D" parent="Chair1"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, -0.25, -0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg2" type="MeshInstance3D" parent="Chair1"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, -0.25, -0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg3" type="MeshInstance3D" parent="Chair1"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, -0.25, 0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg4" type="MeshInstance3D" parent="Chair1"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, -0.25, 0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Chair2" type="StaticBody3D" parent="."]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.48, 0.1)
|
|
|
|
|
|
|
|
|
|
[node name="Mesh" type="MeshInstance3D" parent="Chair2"]
|
|
|
|
|
mesh = SubResource("mesh_chair_seat")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Coll" type="CollisionShape3D" parent="Chair2"]
|
|
|
|
|
shape = SubResource("shape_chair_seat")
|
|
|
|
|
|
|
|
|
|
[node name="Leg1" type="MeshInstance3D" parent="Chair2"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, -0.25, -0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg2" type="MeshInstance3D" parent="Chair2"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, -0.25, -0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg3" type="MeshInstance3D" parent="Chair2"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, -0.25, 0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="Leg4" type="MeshInstance3D" parent="Chair2"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, -0.25, 0.15)
|
|
|
|
|
mesh = SubResource("mesh_chair_leg")
|
|
|
|
|
material_override = SubResource("mat_chair")
|
|
|
|
|
|
|
|
|
|
[node name="PlayerFPV" parent="." instance=ExtResource("3_player")]
|
fix: auto-flow подарок, отец 180°, спавн кухни, лицензия, меню «ДРОП»
1. ОТЕЦ (поворот по фидбеку):
- Initial Transform3D повёрнут на 180° от предыдущего — теперь
лицом к игроку во время диалога.
- При уходе ещё +180° поворот → спиной к игроку → шагает к двери
не пятясь.
2. AUTO-FLOW КЛИКА ПО ПОДАРКУ:
- Раньше: клик подарок → молча появляется системник → клик
записку → overlay → клик дальше → монолог → ... Игрок терялся
между кликами, думал что баг (тёмный экран).
- Теперь: ОДИН клик подарка запускает ЦЕПОЧКУ:
«Системник. И записка сверху.» → overlay записки → «Бать ну
ты красавчик» → отец прощается → отец уходит → флешка готова.
Игрок просто кликает «дальше» на каждой реплике.
- note.set_interactable(false) — клик отдельно не нужен.
- _on_note_interacted остался как пустой callback для совместимости.
3. КУХНЯ — СПАВН:
- Был (0.5, 0, 1.0) — попадал внутрь стола (z=0.35..1.05).
Игрок застревал.
- Теперь (-0.5, 0, 1.2) — у двери возврата в комнату, далеко от
стола. Спавнится свободно.
4. КУХНЯ — 2-Я ДВЕРЬ:
- User спросил «куда отец ушёл — нет других дверей». Добавил
визуальную не-интерактивную дверь на северной стене
(Label3D «← прихожая»). Логически отец вышел через коридор.
5. ЛИЦЕНЗИЯ — НАЧАЛО:
- User: «начинается с п.7, а где 1-6». Добавил 7 нормально-
юридических пунктов 1.1-6.8 (про лицензию, неисключительные
права, дизассемблирование, «как есть», ответственность,
обязательства Пользователя) — ПЕРЕД ШИЗО-пунктами.
- Теперь читается как настоящее ЛС: нормальное-нормальное-
нормальное-ШИЗО-ШИЗО-ШИЗО, нарастающий абсурд.
6. HUD-ПОДСКАЗКА АВТО-ФЕЙД:
- Timer в DialogManager (one_shot, 8 сек по умолчанию).
- set_controls_hint() запускает таймер.
- По истечении — tween modulate.a 0.8 → 0.0 за 1.5 сек.
- Подсказка управления больше не висит вечно.
7. ГЛАВНОЕ МЕНЮ — НАЗВАНИЕ:
- Было: «FARMING SIMULATOR / Подросток-фермер CS/TF2/PUBG
кейсов · 2020-2026» (рабочее, пресно).
- Стало: «ДРОП» (32px, жёлтый акцент) / «Лето двадцатого года.»
(12px, серый). Лаконично, поэтично.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 19:46:20 +03:00
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, 1.2)
|
|
|
|
|
|
|
|
|
|
[node name="HallwayDoor" type="MeshInstance3D" parent="WallN"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.9, -0.25, 0.06)
|
|
|
|
|
mesh = SubResource("mesh_door_panel")
|
|
|
|
|
material_override = SubResource("mat_door")
|
|
|
|
|
|
|
|
|
|
[node name="HallwaySign" type="Label3D" parent="WallN"]
|
|
|
|
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.9, 0.85, 0.07)
|
|
|
|
|
pixel_size = 0.005
|
|
|
|
|
text = "← прихожая"
|
|
|
|
|
modulate = Color(0.6, 0.6, 0.6, 1)
|
|
|
|
|
outline_size = 4
|
|
|
|
|
font_size = 32
|
prologue: целиком Акт 1 (комната+кухня) + Акт 2 (установка)
ИНФРАСТРУКТУРА:
- GameState autoload: player_name, прогресс актов, ачивки.
- SceneManager autoload: change_scene с deferred переключением,
shortcuts go_room/go_kitchen/go_install.
- TextureGen autoload: процедурные pixel-art ImageTexture через
Image.set_pixel, кешируются в Dictionary. Текстуры: wallpaper
(бежевая с растительным узором), linoleum (полосы паркета),
ceiling (побелка с шумом), wall_carpet (бордовый с ромбами),
blanket (тёмно-синее со звёздами), poster_csgo (жёлтый с
силуэтом AWP), poster_morgen (тёмно-красный с головой),
door (дерево с волокном), desk_white, book_color(0-4).
АКТ 1 КОМНАТА (act1_room.tscn / act1.gd):
- Все стены/пол/потолок/ковёр/одеяло/постеры/стол/дверь теперь
с процедурными текстурами через TextureGen.apply_to_material с
правильным uv1_scale. Texture filter NEAREST для пиксель-арта.
- Door interactable добавлен в east-wall (рядом с DoorPanel).
Включается после ухода отца. Клик → переход на кухню.
- GameState persists прогресс — возврат из кухни не повторяет интро.
- _setup_post_intro_state восстанавливает SEEK_DRIVE после кухни.
- После подбора флешки — переход на act2_install.
АКТ 1 КУХНЯ (act1_kitchen.tscn / act1_kitchen.gd):
- 3×3м комнатка с холодильником «Атлант», плитой (4 ручки красные),
столешницей+раковиной, чайником, столом+2 стула, окном+радиатором.
- Wi-Fi записка приклеена на холодильнике, читается → ачивка
«Wi-Fi разведчик» + GameState.wifi_password_found = true.
- Дверь обратно в комнату — SceneManager.go_room().
- Текстуры через TextureGen.
АКТ 2 УСТАНОВКА ШИНДОВС (act2_install.tscn / act2_install.gd):
- Полная 2D-сцена с 7 шагами state machine:
BOOT (4 квадратика логотипа 1.6 сек) → LICENSE_INTRO →
LICENSE_FULL (по «Читать») → DISK → USERNAME → PASSWORD →
TIMEZONE → INSTALLING (5 фаз прогресс-бара 3 сек) → COMPLETE.
- ШИЗО-пункты лицензионки: 7.3.2, 11.4, 12.1, 15.7, 18.0, 21.3,
23.9, 27.1 (полный текст из канона Пролог Акт 2).
- Ввод имени с валидацией: 2-24 символа, regex буквы+цифры,
ban-list титулов (повелитель/владыка/бог/лорд/царь) и мата.
- Подсказка-плейсхолдеры из канона: bossiara13, fr3sh_n3kit и т.п.
- Пароль с чекбоксом «Без пароля» + ачивки «Главное чтоб удобно»
(123/qwerty/empty) и «Параноик» (12+ символов со спец).
- Часовой пояс OptionButton с 7 регионами страны Р, UTC+3 default.
- Welcome-экран после установки: «Добро пожаловать, {playerName}».
- Кнопка «Запустить стеме» — заглушка Акта 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:50:26 +03:00
|
|
|
|
|
|
|
|
[connection signal="interacted" from="Fridge/WiFiNote" to="." method="_on_note_interacted"]
|
|
|
|
|
[connection signal="interacted" from="WallS/DoorBack" to="." method="_on_door_back_interacted"]
|