Загрузка данных


Ты — 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, как добавлять страны и фокусы). Ничего не сокращай.