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

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

Исходная поставка находится в `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. Это вспомогательный открытый декодер; исполняемые файлы предоставленной игры не запускались.

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

```text
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](https://apolyton.net/forum/civilization-series/civilization-iii/122361-civilization-iii-bix-biq-file-format).
- [OpenCiv3 QueryCiv3](https://github.com/C7-Game/OpenCiv3/tree/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/QueryCiv3) — поля разделов и динамические части.
- [OpenCiv3 ConvertCiv3Media](https://github.com/C7-Game/OpenCiv3/tree/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/ConvertCiv3Media) — расширения FLC, PCX и звуковые контейнеры.
- [zlib contrib/blast](https://github.com/madler/zlib/tree/master/contrib/blast) — распаковка PKWare DCL, версия библиотеки 1.3.
- [Civ3AMBAnalysis](https://github.com/maxpetul/Civ3AMBAnalysis/blob/master/AMBFormat.org) — описание AMB.

Для OpenCiv3 зафиксирована ревизия `c1370e2f63a6042a3c4206f0043543d7da0d5cc5`. Факты о конкретном наборе получены из предоставленных файлов. Открытые реализации помогают интерпретировать формат, но не считаются доказательством полного совпадения поведения оригинального движка. Происхождение инструментов: [provenance.json](data/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% одного процессорного ядра. Другие проекты сервера и код действующей игры не изменялись.
