Методы анализа и результаты проверок
Исходные файлы и воспроизводимость
Исходная поставка находится в 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 должны сохранять установленное расположение.
Источники описаний форматов
Поля и структура сверены с первичными описаниями и исходным кодом авторов декодеров:
- Gramphos, описание BIX и BIQ.
- OpenCiv3 QueryCiv3 — поля разделов и динамические части.
- OpenCiv3 ConvertCiv3Media — расширения FLC, PCX и звуковые контейнеры.
- zlib contrib/blast — распаковка PKWare DCL, версия библиотеки 1.3.
- Civ3AMBAnalysis — описание AMB.
Для OpenCiv3 зафиксирована ревизия c1370e2f63a6042a3c4206f0043543d7da0d5cc5. Факты о конкретном наборе получены из предоставленных файлов. Открытые реализации помогают интерпретировать формат, но не считаются доказательством полного совпадения поведения оригинального движка. Происхождение инструментов: provenance.json.
Результаты проверок
| Проверка | Результат |
|---|---|
| Размер загрузки и распаковка 7z | Ожидаемый размер достигнут, CRC без ошибок |
| Сверка распакованных файлов | Все 13 583 файла найдены, размеры совпадают с архивом |
| Уникальные BIQ | 17 файлов, границы разделов пройдены до конца каждого |
| Ссылки основных таблиц | Проверенные индексы технологий, ресурсов, зданий и улучшений в диапазоне |
| Граф технологий | 293 заполненных слота предпосылок, циклов не найдено |
| Граф улучшений юнитов | Циклов не найдено |
| Сохранение и основной BIQ | Записи разделов равны побайтово, кроме GAME |
| PCX | 4 466 прочитанных заголовков и палитр, два исключения |
| FLC заголовки | 3 962 стандартных заголовка, один нестандартный файл |
| FLC контейнеры | 3 961 полный проход границ после узкой обработки известных отклонений; один оставшийся случай |
| WAV | 3 371 прочитанный PCM, один случай отклонения заголовка |
| Связи юнитов | INI найден для 412 из 413 записей; разобраны также 20 привязок по эпохам |
| Прямые ссылки действий и звуков | Проверены 4 612 ссылок; одно специальное значение «точка» требует классификации |
| Файлы значков | Все 2 145 проверенных ссылок на PCX разрешены |
Проверка значков охватывает найденные в Pediaicons блоки. Она не доказывает, что для каждого возможного игрового состояния есть правильная по содержанию картинка. Аналогично разрешённый путь WAV не проверяет его звучание.
Пределы выполненного прохода
Полностью декодированные таблицы и проверка контейнеров не равны полной эмуляции. Не выполнены: воспроизведение каждого кадра всех анимаций, полный разбор всех AMB, импорт текущего мира из SAV, чтение всех карт BIC/BIX, восстановление всех экранных переходов и проверка формул в запущенной оригинальной игре. Нерасшифрованные поля и нестандартные файлы сохранены в диагностике.
Выборочно декодированы пиксели городского фона, кнопок, панелей, листа местности и первого кадра юнита. Для дальнейшей конвертации требуются контрольные изображения и анимационные прогоны. Поведение исходной Windows-игры в ходе этого исследования не исполнялось.
Все тяжёлые проходы выполнялись с низким приоритетом и ограничением примерно 35% одного процессорного ядра. Другие проекты сервера и код действующей игры не изменялись.