Загрузка данных
Ты — senior-разработчик на Godot 4.3+ (GDScript, 3D). Создай ПОЛНОСТЬЮ
РАБОЧИЙ одиночный прототип стратегии в духе Roblox-игры "Conquer The WW2
World", но только на территории ЕВРОПЫ, с 3D-плитками. Проект должен
запускаться сразу после открытия папки в Godot без правок. Пиши все файлы
целиком, без "TODO" и сокращений.
## ЖЁСТКИЕ ТЕХНИЧЕСКИЕ ПРАВИЛА
1. Godot 4.3+, только GDScript, статическая типизация.
2. НЕ пиши сложные .tscn вручную. Сцены минимальные (корень Node3D/Control
+ скрипт). Мир, UI, камеру, свет, юнитов строй кодом через add_child().
3. Внешние ассеты НЕ обязательны. Вся графика процедурная: меши из
примитивов (BoxMesh, CylinderMesh, PrismMesh, SphereMesh,
CylinderMesh с radial_segments=6 для гексов). Игра обязана работать без
файлов в assets/.
4. Структура:
project.godot (autoload: GameState, MusicPlayer)
scenes/main_menu.tscn, scenes/game.tscn
scripts/: main_menu.gd, game.gd, game_state.gd, europe_data.gd,
map_generator.gd, hex_map.gd, camera_rig.gd, country_data.gd,
ideology_data.gd, focus_tree.gd, unit.gd, unit_models.gd, combat.gd,
ai.gd, music_player.gd, ui_hud.gd, minimap.gd
assets/music/{menu,neutral,democracy,fascism,communism}/ (.gitkeep),
README.md
## КАРТА ЕВРОПЫ (3D, гексагональная сетка)
- Охват: долгота -11..62 (Португалия -> Урал), широта 34..71 (Средиземное
море -> Северный Ледовитый). Кавказ и Турция включены (Тбилиси, Баку,
Анкара). Британия, Ирландия, Исландия не нужны, Скандинавия нужна.
- Сетка ~110x75 гексов (pointy-top, осевые координаты q,r). Конвертация
lon/lat -> гекс в europe_data.gd.
- В europe_data.gd задай полигоны СУШИ и ГРАНИЦ ГОСУДАРСТВ по состоянию
на 1 сентября 1939 как массивы точек [lon, lat] (грубо, 15-60 точек на
страну, но узнаваемо). Страны: СССР (европейская часть + Кавказ + Крым),
Германия (с Австрией и Судетами как "Великогерманский рейх"), Польша,
Великобритания, Ирландия, Франция, Испания, Португалия, Италия, Турция,
Румыния, Венгрия, Югославия, Болгария, Греция, Албания, Чехословакия
(протекторат), Швеция, Норвегия, Финляндия, Дания, Нидерланды, Бельгия,
Швейцария, Эстония, Латвия, Литва.
- map_generator.gd растеризует полигоны (point-in-polygon) в сетку:
каждому гексу — владелец, тип суши/океана. Всё остальное — океан.
Рельеф накладывается FastNoiseLite + ручные хребты: Альпы, Пиренеи,
Карпаты, Урал, Кавказ, Скандинавские горы -> горы; леса в России,
Финляндии, Польше, Германии, Скандинавии; остальное равнина.
Фиксированный seed.
- Рендер: hex_map.gd через MultiMeshInstance3D (отдельный MultiMesh для
суши, воды, гор, лесов). Цвет владельца — per-instance color. Высота
плитки: океан 0.05, равнина 0.3, лес 0.35 (+конусы-деревья), горы 0.9
(+пик-призма). Океан — полупрозрачная плоскость с простым шейдером
волн (shader в коде). Границы стран — тонкие линии (ImmediateMesh)
между гексами разных владельцев; береговая линия темнее.
- Свет: DirectionalLight3D с тенями, WorldEnvironment (небо, туман).
- Камера (camera_rig.gd): наклон ~55°, WASD/стрелки — панорама, колесо —
зум, ПКМ drag — панорама, Q/E — поворот, границы по размеру карты.
- Выбор плитки: луч из камеры (project_ray_origin/normal) пересечь с
плоскостью y=0.3 -> гекс по формуле pixel_to_hex. НЕ использовать
физику/коллайдеры. Подсветка выбранного гекса и гексов страны.
- Захват гекса: при победе юнита владелец меняется, цвет обновляется
через MultiMesh.set_instance_color (без перестройки всей карты).
Захват столицы = капитуляция, аннексия территории победителем.
- Столицы: Берлин, Москва, Лондон, Париж, Рим, Мадрид, Варшава, Анкара,
Бухарест, Будапешт, Белград, София, Афины, Прага, Стокгольм, Осло,
Хельсинки, Копенгаген и т.д. — отдельная иконка-3D (маленький
цилиндр с флагом).
- Порты: прибрежные гексы столицы и крупных городов (Ленинград, Одесса,
Гамбург, Ливерпуль, Марсель, Неаполь, Стамбул...).
## ИГРОВЫЕ СТРАНЫ
Играбельные (с полным набором): СССР, Германия, Великобритания, Франция,
Италия, Польша, Турция, Испания. Остальные страны — под ИИ, тоже можно
выбрать как "малую страну" со слабыми стартовыми ресурсами.
У каждой: цвет, столица, стартовая идеология, ресурсы, стартовые юниты.
## ЭКОНОМИКА И ВРЕМЯ
- Ресурсы: деньги, промышленность, рабочая сила. Доход от числа гексов,
городов и идеологии. Тик — игровой день.
- Пауза, x1, x2, x5. Дата идёт с 1 сентября 1939.
## ЮНИТЫ (3 типа минимум, все 3D, процедурные)
1. Пехота — группа из 3-4 маленьких солдатиков (капсулы + шлем-сфера +
винтовка-бокс) на гексе. Медленная, дешёвая, бонус в лесу/горах.
2. Танк — корпус BoxMesh, башня CylinderMesh, ствол цилиндр, гусеницы
боксы. Быстрый, дорогой, бонус на равнине.
3. Флот — корпус из PrismMesh/BoxMesh, надстройка, труба, орудия. Ходит
ТОЛЬКО по воде, обстреливает прибрежные гексы, бьёт чужой флот.
Производство — только в портовом гексе. Лёгкое покачивание на волнах.
- Цвет юнита = цвет страны, над юнитом 3D-билборд: полоска HP и число.
- Управление: ЛКМ — выбрать, рамка выделения, ПКМ — идти/атаковать.
Движение плавное (Tween) гекс за гексом. Бой: формула атака/защита/HP
+ модификаторы рельефа + случайность, вспышка (OmniLight + частицы
GPUParticles3D из кода) и дым при уничтожении.
- Поиск пути: AStar2D/AStarGrid по гексам, отдельные правила для суши и
воды.
## ИДЕОЛОГИИ
Демократия, Фашизм, Коммунизм, Монархия/Нейтралитет — бонусы/штрафы,
цвет UI, иконка, музыкальный плейлист. Смена — через фокусы/события.
Союзы по умолчанию внутри идеологии, война — по решению игрока.
## НАЦИОНАЛЬНЫЕ ФОКУСЫ
Окно дерева фокусов (клавиша F): линии зависимостей, стоимость в днях,
прогресс, один активный. Минимум 6 фокусов у каждой играбельной страны +
общие ветки (Промышленность, Армия, Флот, Политика). Эффекты: ресурсы,
скидки, смена идеологии, спавн дивизий. ИИ выбирает фокусы сам.
## ДИПЛОМАТИЯ И ИИ
Окно дипломатии: война, мир, союз. ai.gd: раз в несколько секунд каждая
страна производит юниты, шлёт группы на ближайший слабый вражеский гекс,
флот патрулирует. Цель: захватить Европу или выжить. Экран победы/поражения.
## ВЫБОР И СМЕНА СТРАНЫ
Экран выбора: 3D-карта Европы с вращающейся камерой, клик по стране
подсвечивает её гексы, справа панель (цвет, идеология, население,
промышленность, армия, описание). Внутри игры — кнопка "Сменить страну":
управление переходит к другой стране, прежняя уходит под ИИ.
## ЗВУК И МУЗЫКА
MusicPlayer (autoload) сканирует res://assets/music/<папка>/ на
.ogg/.mp3/.wav, играет по идеологии игрока (меню — menu), кроссфейд 2 с,
shuffle, громкость в настройках. Если файлов нет — работает молча, HUD
показывает подсказку. Простые звуки (клик, выстрел, спавн) генерировать
процедурно через AudioStreamGenerator.
## UI/HUD
Верхняя панель: цвет и название страны, дата, деньги/промышленность/
рабочая сила, скорость, пауза. Нижняя: выбранные юниты, производство.
Окна: фокусы, дипломатия, выбор страны, настройки. Единый тёмный
военный Theme, созданный кодом. Миникарта (2D-рендер владельцев в
ImageTexture) в углу, клик по ней двигает камеру.
## КАЧЕСТВО
- Нет ошибок парсера и предупреждений. 60 FPS на ~8000 гексах (только
MultiMesh, без отдельных узлов на каждый гекс, обновление цветов
точечно).
- Перед ответом сам проверь: пути узлов, сигналы, autoload'ы, типы,
индексы MultiMesh, что полигоны стран не оставляют "дыр" внутри суши.
- Полный цикл: меню -> выбор страны -> фокус -> производство -> война ->
захват -> смена страны -> победа/поражение.
## ФОРМАТ ОТВЕТА
Сначала дерево файлов, затем каждый файл отдельным блоком кода с путём в
заголовке, в конце README.md (запуск, управление, где брать музыку/модели
CC0, как добавлять страны и фокусы). Ничего не сокращай.