Обновлено:

На этой странице

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

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

OpenCiv3 отделяет декодирование оригинального формата от текстуры Godot. ConvertCiv3Media/ReadPcx.cs читает 8-битный индексированный PCX, сохраняет палитру и индексы пикселей. Это специализированный читатель форматов Civ3, не универсальная библиотека изображений.

C7/Textures/PCXToGodot.cs интерпретирует прозрачные индексы, тени и цвет цивилизации. По умолчанию прозрачными считаются 254 и 255, но конфигурация позволяет изменить набор. Важен смысл индекса, а не только видимый RGB. Простая замена пурпурного на прозрачность может повредить тени или перекраску.

C7/Textures/TextureLoader.cs разрешает логический ключ в PNG либо PCX, область атласа, маску alpha, палитровые параметры и анимацию. Кэшируются исходные изображения, текстуры, сопоставления объектов и анимации. Lua может задавать разные ресурсы для одного класса объектов.

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

C7/Animations/AnimationManager.cs лениво загружает INI и FLC, повторно использует данные и определяет файл для действия. Если специальная анимация не указана, используется DEFAULT; отсутствие DEFAULT вызывает ошибку.

ConvertCiv3Media/ReadFlic.cs учитывает специальные заголовки Civ3 и несколько типов чанков. Поддержка ограничена: есть исключения для неподдерживаемых вариантов палитры, а неизвестные чанки могут пропускаться. Не следует обещать чтение любого FLC из нашего набора.

Для браузерной подготовки полезно сохранять направление, длительность, точку привязки, прозрачность, отдельную маску цвета игрока и последовательность кадров. Подробный разбор уже есть в предыдущем исследовании форматов.

Слои карты

C7/MapView.cs создаёт слои базовой местности, рек, леса, болот, рельефа, наложений, ресурсов, строений и границ; отдельно организованы fog of war, маршруты, обстрел и юниты. Базовый спрайт местности имеет размер 128 × 64, повышенные объекты — другие размеры.

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

Звук

C7/Audio/AudioLoader.cs разрешает ключи через Lua и кэширует потоки WAV, MP3, OGG/OGA. Для AMB есть отдельный читатель структуры; наличие парсера не доказывает полный звуковой сценарий всех действий.

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

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