7.5 KiB
G-WORLD
Двумерная игра с видом сбоку на Godot 4.7. Референс по подаче и структуре — Fallout Shelter: разрез убежища, комнаты в сетке, жители, которых расселяют по этажам, и мир, реагирующий на решения игрока.
Статус: ранняя альфа. Готов каркас меню и первый игровой слой — сетка комнат в разрезе.
Что уже работает
| Часть | Файл | Что умеет |
|---|---|---|
| Убежище | scenes/game/vault.tscn |
разрез на 6 этажей, лифтовая шахта, строительство и снос комнат, сводка ресурсов |
| Главное меню | scenes/ui/main_menu.tscn |
анимированный фон на шейдере, появление по стаггеру, единая подсветка для мыши и клавиатуры |
| Настройки | scenes/ui/settings_menu.tscn |
видео, звук, переназначение клавиш; сохраняется в user://settings.cfg |
| Пауза | scenes/ui/pause_menu.tscn |
останавливает дерево, переиспользует экраны настроек и сохранений |
| Сохранения | scenes/ui/save_menu.tscn |
6 слотов с миниатюрами, датой и наигранным временем, запись/чтение/удаление |
Экраны настроек и сохранений — отдельные сцены, вложенные инстансами и в главное меню, и в паузу. Дублирования нет: правка в одном месте видна везде.
Игровой слой
Убежище разделено на три части, чтобы графику можно было заменить, не трогая логику:
vault_grid.gd(VaultGrid) — модель: сетка 9×6, список комнат, правила размещения, баланс ресурсов, сериализация. Ни одного узла, ни одной отрисовки.vault_view.gd(VaultView) — весь_draw(): небо, порода, шахта, комнаты, призрак строительства. Пока рисуется процедурно — ассетов нет. Появится графика — меняется только этот файл.vault_scene.gd— связывает модель, вид, камеру и HUD, реализует контракт сохранения.
Управление: ЛКМ — построить или снести, ПКМ/СКМ — тащить вид, колесо — зум, WASD / стрелки — прокрутка, Esc — пауза.
Типы комнат и их баланс ресурсов заданы одним словарём VaultGrid.KINDS — новый тип добавляется
одной записью, кнопка в панели строительства и подсчёт ресурсов подхватываются сами.
Требования
- Godot 4.7 (Forward+, .NET-сборка не обязательна — код на GDScript)
- Windows / Linux / macOS
Запуск
Откройте папку проекта в Godot и нажмите F5 — главная сцена уже прописана
(res://scenes/ui/main_menu.tscn).
Структура
scenes/
ui/ main_menu, settings_menu, pause_menu, save_menu
game/ vault.tscn — убежище
scripts/
autoload/ game_settings.gd, save_manager.gd
ui/ по скрипту на экран
game/ vault_grid.gd, vault_view.gd, vault_camera.gd, vault_scene.gd
shaders/ menu_background.gdshader + материал
themes/ main_menu.theme.tres — единая тема всех экранов
default_bus_layout.tres — шины микшера: Master → Music, SFX
Соглашения
Тема. Все экраны наследуют themes/main_menu.theme.tres. Цвета не прописываются в узлах:
акцент #2ee6c5, второй акцент #7b6bf5, текст #dbe7f0, приглушённый #8fa5ba.
Локальные theme_override_* — только там, где элемент должен отличаться намеренно.
Язык. Интерфейс и комментарии — русские, имена узлов, файлов и методов — английские.
Автозагрузки.
GameSettings(GameSettingsService) — настройки: чтение, применение к движку,user://settings.cfgSaveManager(SaveManagerService) — слоты сохранений вuser://saves/
У обеих есть class_name: константы и типы берутся через него, экземпляр — через
get_node("/root/GameSettings"). Так редактор резолвит имена без перезапуска проекта.
Контракт игровой сцены. Чтобы сцена умела сохраняться:
func _ready() -> void:
add_to_group(SaveManagerService.PERSIST_GROUP)
SaveManager.begin_session(scene_file_path)
func save_data() -> Dictionary:
return {"...": ...}
func load_data(data: Dictionary) -> void:
...
SaveManager обходит группу persistent, собирает словари по путям узлов и пишет JSON.
Миниатюра слота — кадр, снятый в момент вызова паузы, до показа оверлея.
Действия ввода (project.godot → Input Map): move_left, move_right, move_up,
move_down (прокрутка камеры), interact, pause. Переназначаются в настройках; список
в UI строится из GameSettingsService.ACTION_LABELS, так что новое действие нужно добавить
и туда.
Рендерер — Mobile: для 2D он легче Forward+. Смена рендерера требует перезапуска редактора.
Слияния. .tscn и .tres — текстовые, но построчный авто-мердж по ним даёт мусор.
Конфликтующие сцены лучше разрешать, открывая обе версии в редакторе, а не в diff-вьювере.
Что дальше
- Игровой слой на 2D: сетка комнат в разрезе, вид сбоку
- Жители: найм, характеристики, расселение по комнатам
- Время и производство: ресурсы должны копиться, а не только считаться в сводке
- Слияние одинаковых соседних комнат, как в референсе
- Стоимость строительства и ограничение по ресурсам
- Графика вместо процедурной отрисовки в
vault_view.gd - Звук: подключить шины Music и SFX
- Лицензия не выбрана
Лицензия
Не определена. Плагин addons/godot_ai поставляется со своей лицензией — см.
addons/godot_ai/LICENSE.