Files
g-world/README.md
T

5.3 KiB
Raw Blame History

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.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_forward, move_back, jump, sprint, interact, pause. Переназначаются в настройках.

Слияния. .tscn и .tres — текстовые, но построчный авто-мердж по ним даёт мусор. Конфликтующие сцены лучше разрешать, открывая обе версии в редакторе, а не в diff-вьювере.

Что дальше

  • Перевести игровой слой на 2D: сетка комнат в разрезе, вид сбоку
  • Жители: найм, характеристики, распределение по комнатам
  • Ресурсы и производство, циклы времени
  • Заменить scenes/game/game.tscn на настоящую сцену
  • Звук: подключить шины Music и SFX
  • Лицензия не выбрана

Лицензия

Не определена. Плагин addons/godot_ai поставляется со своей лицензией — см. addons/godot_ai/LICENSE.