5.3 KiB
G-WORLD
Двумерная игра с видом сбоку на Godot 4.7. Референс по подаче и структуре — Fallout Shelter: разрез убежища, комнаты в сетке, жители, которых расселяют по этажам, и мир, реагирующий на решения игрока.
Статус: ранняя альфа. Готов весь каркас меню; игровой слой пока заглушка.
Что уже работает
| Экран | Файл | Что умеет |
|---|---|---|
| Главное меню | scenes/ui/main_menu.tscn |
анимированный фон на шейдере, появление по стаггеру, единая подсветка для мыши и клавиатуры |
| Настройки | scenes/ui/settings_menu.tscn |
видео, звук, переназначение клавиш; сохраняется в user://settings.cfg |
| Пауза | scenes/ui/pause_menu.tscn |
останавливает дерево, переиспользует экраны настроек и сохранений |
| Сохранения | scenes/ui/save_menu.tscn |
6 слотов с миниатюрами, датой и наигранным временем, запись/чтение/удаление |
Экраны настроек и сохранений — отдельные сцены, вложенные инстансами и в главное меню, и в паузу. Дублирования нет: правка в одном месте видна везде.
Требования
- 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/ game.tscn — заглушка вместо игрового слоя
scripts/
autoload/ game_settings.gd, save_manager.gd
ui/ по скрипту на экран
game/ game_stub.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_forward,
move_back, jump, sprint, interact, pause. Переназначаются в настройках.
Слияния. .tscn и .tres — текстовые, но построчный авто-мердж по ним даёт мусор.
Конфликтующие сцены лучше разрешать, открывая обе версии в редакторе, а не в diff-вьювере.
Что дальше
- Перевести игровой слой на 2D: сетка комнат в разрезе, вид сбоку
- Жители: найм, характеристики, распределение по комнатам
- Ресурсы и производство, циклы времени
- Заменить
scenes/game/game.tscnна настоящую сцену - Звук: подключить шины Music и SFX
- Лицензия не выбрана
Лицензия
Не определена. Плагин addons/godot_ai поставляется со своей лицензией — см.
addons/godot_ai/LICENSE.