Files
g-world/README.md
T

7.5 KiB
Raw Blame History

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.cfg
  • SaveManager (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.