diff --git a/scripts/prologue/act1.gd b/scripts/prologue/act1.gd index fec4e4c..77c04c3 100644 --- a/scripts/prologue/act1.gd +++ b/scripts/prologue/act1.gd @@ -13,6 +13,7 @@ var state: State = State.INTRO func _ready() -> void: + _hide_noise_items() _apply_textures() player.interactable_focused.connect(_on_player_focused) @@ -20,7 +21,25 @@ func _ready() -> void: DialogManager.set_date_time(GameState.game_date, GameState.game_time) DialogManager.set_crosshair_visible(true) - DialogManager.set_controls_hint("WASD ходить · мышь смотреть · ЛКМ взаимодействие · ESC мышь · Q выход") + DialogManager.set_controls_hint("WASD ходить · мышь смотреть · ЛКМ взаимодействие · ESC меню · Q сохранить и выйти") + + +func _hide_noise_items() -> void: + # Убираем визуальный шум placeholder-куб-ов которые без нормальных + # моделей выглядят как загадка. Оставляем только читабельные объекты. + for path in [ + "Shelf", + "Sock1", + "Sock2", + "Desk/AdrenalineCan", + "Desk/LaysWrapper", + "Desk/Keyboard", + "WallN/Plant", + "WallN/Cup", + "OldP4", + ]: + if has_node(path): + get_node(path).visible = false # Если возвращаемся из кухни — пропускаем интро if GameState.act1_father_left: @@ -59,26 +78,8 @@ func _apply_textures() -> void: var door_panel_mat: BaseMaterial3D = ($WallE/DoorPanel as MeshInstance3D).material_override TextureGen.apply_to_material(door_panel_mat, TextureGen.door(), Vector3(1, 1, 1)) - # Книги - var book_letters: Array[String] = ["A", "B", "C", "D", "E"] - for i in range(book_letters.size()): - var book_node: Node = $Shelf.get_node("Book" + book_letters[i]) - if book_node != null and book_node is MeshInstance3D: - var book_mat: BaseMaterial3D = (book_node as MeshInstance3D).material_override - TextureGen.apply_to_material(book_mat, TextureGen.book_color(i), Vector3(1, 1, 1)) - - # Adrenaline / Lay's / Носки - var can_mat: BaseMaterial3D = ($Desk/AdrenalineCan as MeshInstance3D).material_override - TextureGen.apply_to_material(can_mat, TextureGen.adrenaline_label(), Vector3(1, 1, 1)) - - var lays_mat: BaseMaterial3D = ($Desk/LaysWrapper as MeshInstance3D).material_override - TextureGen.apply_to_material(lays_mat, TextureGen.lays_wrapper(), Vector3(1, 1, 1)) - - for sock_name in ["Sock1", "Sock2"]: - var sock_node: Node = get_node(sock_name) - if sock_node != null and sock_node is MeshInstance3D: - var sock_mat: BaseMaterial3D = (sock_node as MeshInstance3D).material_override - TextureGen.apply_to_material(sock_mat, TextureGen.sock_fabric(), Vector3(1, 1, 1)) + # Книги/носки/Adrenaline/Lay's скрыты в _hide_noise_items — + # текстуры на них не применяем (они невидимы) func _play_intro() -> void: @@ -88,7 +89,6 @@ func _play_intro() -> void: flash_drive.set_interactable(false) door.set_interactable(false) - player.lock_input() DialogManager.set_objective("Распакуй подарок от бати") await get_tree().create_timer(0.8).timeout @@ -97,7 +97,6 @@ func _play_intro() -> void: state = State.EXPLORE_GIFT gift_box.set_interactable(true) - player.unlock_input() func _setup_post_intro_state() -> void: @@ -132,8 +131,11 @@ func _on_gift_interacted(_p: Node) -> void: gift_box.visible = false system_unit.visible = true note.visible = true - note.set_interactable(true) DialogManager.clear_prompt() + + # Обратная связь на клик — иначе игрок жмёт в пустоту и не понимает что произошло + await DialogManager.think("Системник. И записка сверху.") + note.set_interactable(true) DialogManager.set_objective("Прочитай записку") @@ -143,7 +145,6 @@ func _on_note_interacted(_p: Node) -> void: state = State.NOTE_READ GameState.act1_note_read = true note.set_interactable(false) - player.lock_input() DialogManager.clear_prompt() await DialogManager.show_note("«Не сожги. Пароль от Wi-Fi на холодильнике. — Бать»") @@ -160,7 +161,6 @@ func _on_note_interacted(_p: Node) -> void: flash_drive.set_interactable(true) door.set_interactable(true) DialogManager.set_objective("Возьми флешку с Шиндовс") - player.unlock_input() func _walk_father_out() -> void: @@ -217,7 +217,6 @@ func _on_drive_interacted(_p: Node) -> void: GameState.act1_drive_taken = true flash_drive.set_interactable(false) door.set_interactable(false) - player.lock_input() DialogManager.clear_prompt() DialogManager.set_objective("") diff --git a/scripts/prologue/act1_kitchen.gd b/scripts/prologue/act1_kitchen.gd index faa1c37..dcc2e74 100644 --- a/scripts/prologue/act1_kitchen.gd +++ b/scripts/prologue/act1_kitchen.gd @@ -51,14 +51,12 @@ func _on_player_unfocused() -> void: func _on_note_interacted(_p: Node) -> void: - player.lock_input() DialogManager.clear_prompt() await DialogManager.show_note("«Wi-Fi: qwerty. Не парься.»\n— Бать") fridge_note.set_interactable(false) GameState.wifi_password_found = true GameState.unlock_achievement("Wi-Fi разведчик") DialogManager.set_objective("Вернись в комнату — флешка ждёт") - player.unlock_input() func _on_door_back_interacted(_p: Node) -> void: