Обновлено:

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

Методы анализа и результаты проверок

Исходные файлы и воспроизводимость

Исходная поставка находится в Original Sources/CIV3ATL2. Архив и распакованные файлы исключены из Git. В research/original-game/data перенесены восемь файлов первоначальных результатов, включая перечень архива, сводку и индексы. Затем добавлены новые таблицы и результаты глубокого анализа. Оригинальные изображения, производный лист просмотра, двоичные распакованные BIQ и SAV остаются в закрытом каталоге исходников.

Первоначальные summary.json и initial-findings.json сохранены как снимки раннего прохода. Более поздние media-summary.json, rules-main.json, reference-validation.json и тематические отчёты уточняют их. Например, первоначальная проверка могла прочитать размеры PCX, тогда как чтение его палитры обнаружило дополнительное исключение.

Использованы три инструмента проекта:

  • scripts/analyze-original.py — инвентаризация, размеры изображений, разделы текста и конфигурации юнитов.
  • scripts/analyze-original-deep.py — BIQ, основные таблицы, зависимости, заголовки медиа, ссылки ресурсов и правила из последнего сохранения.
  • scripts/analyze-original-media-details.py — границы кадров FLC, особенности контейнеров, выборочное декодирование пикселей и объём прямых зависимостей.

Для второго инструмента требуется отдельный декодер PKWare DCL, принимающий сжатые данные через stdin и выдающий распакованные в stdout. В этом проходе использован blast Марка Адлера из zlib. Это вспомогательный открытый декодер; исполняемые файлы предоставленной игры не запускались.

Пример команд из корня проекта:

nice -n 15 ionice -c 3 cpulimit -q -l 35 -f -- python3 scripts/analyze-original.py
nice -n 15 ionice -c 3 cpulimit -q -l 35 -f -- python3 scripts/analyze-original-deep.py --decoder /path/to/blast
nice -n 15 ionice -c 3 cpulimit -q -l 35 -f -- python3 scripts/analyze-original-media-details.py

blast в примере обозначает собранную консольную обёртку над библиотекой, а не утилиту с тем же именем из другого пакета. Скрипты используют Python и Pillow. Опция --phase rules, --phase media или --phase references позволяет повторить изменившуюся часть глубокого прохода. Для отдельных фаз нужны результаты предыдущих этапов. Каталоги Original Sources и research должны сохранять установленное расположение.

Источники описаний форматов

Поля и структура сверены с первичными описаниями и исходным кодом авторов декодеров:

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

Результаты проверок

ПроверкаРезультат
Размер загрузки и распаковка 7zОжидаемый размер достигнут, CRC без ошибок
Сверка распакованных файловВсе 13 583 файла найдены, размеры совпадают с архивом
Уникальные BIQ17 файлов, границы разделов пройдены до конца каждого
Ссылки основных таблицПроверенные индексы технологий, ресурсов, зданий и улучшений в диапазоне
Граф технологий293 заполненных слота предпосылок, циклов не найдено
Граф улучшений юнитовЦиклов не найдено
Сохранение и основной BIQЗаписи разделов равны побайтово, кроме GAME
PCX4 466 прочитанных заголовков и палитр, два исключения
FLC заголовки3 962 стандартных заголовка, один нестандартный файл
FLC контейнеры3 961 полный проход границ после узкой обработки известных отклонений; один оставшийся случай
WAV3 371 прочитанный PCM, один случай отклонения заголовка
Связи юнитовINI найден для 412 из 413 записей; разобраны также 20 привязок по эпохам
Прямые ссылки действий и звуковПроверены 4 612 ссылок; одно специальное значение «точка» требует классификации
Файлы значковВсе 2 145 проверенных ссылок на PCX разрешены

Проверка значков охватывает найденные в Pediaicons блоки. Она не доказывает, что для каждого возможного игрового состояния есть правильная по содержанию картинка. Аналогично разрешённый путь WAV не проверяет его звучание.

Пределы выполненного прохода

Полностью декодированные таблицы и проверка контейнеров не равны полной эмуляции. Не выполнены: воспроизведение каждого кадра всех анимаций, полный разбор всех AMB, импорт текущего мира из SAV, чтение всех карт BIC/BIX, восстановление всех экранных переходов и проверка формул в запущенной оригинальной игре. Нерасшифрованные поля и нестандартные файлы сохранены в диагностике.

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

Все тяжёлые проходы выполнялись с низким приоритетом и ограничением примерно 35% одного процессорного ядра. Другие проекты сервера и код действующей игры не изменялись.