# Графика, звук, анимации и отрисовка карты

## Конвейер ресурсов

OpenCiv3 отделяет декодирование оригинального формата от текстуры Godot. [ConvertCiv3Media/ReadPcx.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/ConvertCiv3Media/ReadPcx.cs) читает 8-битный индексированный PCX, сохраняет палитру и индексы пикселей. Это специализированный читатель форматов Civ3, не универсальная библиотека изображений.

[C7/Textures/PCXToGodot.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Textures/PCXToGodot.cs) интерпретирует прозрачные индексы, тени и цвет цивилизации. По умолчанию прозрачными считаются 254 и 255, но конфигурация позволяет изменить набор. Важен смысл индекса, а не только видимый RGB. Простая замена пурпурного на прозрачность может повредить тени или перекраску.

[C7/Textures/TextureLoader.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Textures/TextureLoader.cs) разрешает логический ключ в PNG либо PCX, область атласа, маску alpha, палитровые параметры и анимацию. Кэшируются исходные изображения, текстуры, сопоставления объектов и анимации. Lua может задавать разные ресурсы для одного класса объектов.

## Анимации юнитов

[C7/Animations/AnimationManager.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Animations/AnimationManager.cs) лениво загружает INI и FLC, повторно использует данные и определяет файл для действия. Если специальная анимация не указана, используется DEFAULT; отсутствие DEFAULT вызывает ошибку.

[ConvertCiv3Media/ReadFlic.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/ConvertCiv3Media/ReadFlic.cs) учитывает специальные заголовки Civ3 и несколько типов чанков. Поддержка ограничена: есть исключения для неподдерживаемых вариантов палитры, а неизвестные чанки могут пропускаться. Не следует обещать чтение любого FLC из нашего набора.

Для браузерной подготовки полезно сохранять направление, длительность, точку привязки, прозрачность, отдельную маску цвета игрока и последовательность кадров. Подробный разбор уже есть в [предыдущем исследовании форматов](../civ3-conquests/knowledge-base/github-tools/README.md).

## Слои карты

[C7/MapView.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/MapView.cs) создаёт слои базовой местности, рек, леса, болот, рельефа, наложений, ресурсов, строений и границ; отдельно организованы fog of war, маршруты, обстрел и юниты. Базовый спрайт местности имеет размер **128 × 64**, повышенные объекты — другие размеры.

Отрисовываются видимые клетки; замыкание может показывать одну модельную клетку в нескольких экранных позициях. Базовая местность группируется по текстурам. В комментарии есть локальные измерения снижения draw calls, но это не наш benchmark и не гарантия ускорения в браузере.

## Звук

[C7/Audio/AudioLoader.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Audio/AudioLoader.cs) разрешает ключи через Lua и кэширует потоки WAV, MP3, OGG/OGA. Для AMB есть отдельный [читатель структуры](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/ConvertCiv3Media/ReadAmb.cs); наличие парсера не доказывает полный звуковой сценарий всех действий.

## Для нашей игры

Оставить предварительную конвертацию тяжёлых ресурсов вне игрового цикла. Ввести манифест атласов и слои карты, кэшировать декодированные изображения, загружать анимации по необходимости. Оценку производительности проводить на нашем рендерере и больших картах. Лицензии каждого ресурса проверяются отдельно от лицензии кода.

