# Проверочный набор оригинальных ресурсов

[Открыть просмотр образцов](media-preview.html). Источники находятся в предоставленной Windows-поставке, исходные файлы не изменяются. Для текущего сайта PNG готовятся заранее, WAV копируются побайтово, AMB переводятся в расписания событий. Полная визуальная и звуковая сверка с работающим Windows-оригиналом ещё не выполнена.

## Состав набора

| Случай | Источник | Что проверяем |
| --- | --- | --- |
| Наземный юнит | Воин, PRTO 20 | Восемь направлений, покой, атака, гибель, движение, укрепление и победа |
| Всадник | Китайский рыцарь, PRTO 159 | Анимации конного юнита; специальное пустое значение `DEAD = .` |
| Смещённый холст | Боевой верблюд, PRTO 172 | Кадр 104×120 внутри исходного холста 240×240; смещение и общий прозрачный обрез |
| Корабль | Галера, PRTO 239 | Направления и действия; AMB с неверными длинами и различающимися именами привязок |
| Авиация | Spitfire, PRTO 297 | Направления, исходная привязка, действия и звуки самолёта |
| Вариант по эпохе | Армия, PRTO 319 | Четыре отдельных INI и набора кадров для эпох |
| Псевдоним каталога | Тяжёлый фрегат, PRTO 270 | Явное разрешение `Ship_of_the_Line` в `Ship of the Line` |
| Проблемные контейнеры | Tactical Nuke, Modern Infantry, Hussar WAV | Диагностируемый отказ, отсутствие скрытой подмены и сохранение исходного хеша |

Само присутствие корабля, самолёта или армии в просмотре ресурсов не означает выполнения их игровых правил. Морская и воздушная логика остаётся отдельной задачей плана.

## Палитры и прозрачность

Модель преобразования — `indexed-ntp-v2`. Для обычных кадров юнитов индексы 0–63 получают значения соответствующей оригинальной палитры NTP; 64–223 сохраняют RGB кадра FLC. Для текущей партии используются NTP09 России и NTP01 Рима, определённые полем `RACE.default_color`. Палитры по эпохам, назначение запасного цвета и остальные цивилизации ещё не охвачены полностью.

Дым 224–239 отображается белым с альфой `(index − 224) × 16`; тени 240–255 — чёрным с альфой `(255 − index) × 16`. Полностью прозрачные пиксели приводятся к нулевому RGBA. Это явная интерпретация служебных индексов, требующая визуальной сверки оригинала. Предыдущий декодер ошибочно скрывал весь диапазон 240–255 и рисовал дым чёрным.

Сопоставление выполняется по индексу, без замены «похожих синих» пикселей и без фильтра оттенка. Обычные пиксели тела не меняются при переключении цивилизации. Проверки сравнивают выходные варианты с прямым чтением индексов FLC и NTP, включая все направления воина. Прозрачный обрез одинаков для двух цветов; исходный холст и смещения остаются в манифесте.

Оригинальные изображения, длительности кадров и источник каждого атласа: [манифест](https://vm.ya-erm.ru/civilization/data/original-assets.json). Исходные размеры не заменяются общим размером спрайта. Значения INI `[Speed]` и `[Timing]` сохраняются как данные; непроверенное значение 0,5 не объявляется длительностью каждой анимации.

## Звуки AMB и WAV

Разборщик читает ограниченные блоки PRGM/KMAP/GLBL, встроенный MIDI, абсолютные накопленные тики, темпы и события нот. Получаются смещения WAV, исходные параметры случайной скорости/громкости и длительность ноты. WAV сохраняются без изменения PCM и заголовков; совпадение проверяется хешами и полным сравнением байтов.

У атаки воина пять событий: 0, 200, 441,666667, 441,666667 и 958,333333 мс. В одном PRGM оригинального файла максимальная громкость равна 1237 при обычном диапазоне до 127. Значение сохраняется, а браузерная громкость ограничивается единицей; это известная политика совместимости, а не доказанное поведение оригинала. Общая громкость проигрывателя по умолчанию — 35%.

Длины KMAP проверяются по структуре полей и завершающему значению FA. Несовпадение объявленной длины получает предупреждение. Если названия программ и карт не совпали, при равном числе блоков используется порядок блоков с отдельным предупреждением; это совместимая интерпретация по исследованному читателю OpenCiv3. Неоднозначные/пустые ссылки не заменяются произвольным WAV. Неполное расписание отмечается `partial`, неподдержанное — `unsupported`.

Случайность звуков отделена от PRNG партии. Скорость использует исследованную оценку около 6% на 100 исходных единиц; точная формула ещё не подтверждена. Длительность MIDI-ноты и velocity сохраняются, но пока не обрезают WAV и не изменяют громкость. Звук воспроизводится с естественным окончанием записи. Это ограничение явно отделяется от восстановления структуры расписания.

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

## Политика исключений

- `DEAD = .` классифицируется как `sentinel-empty`. Файл с именем «точка» не ищется; исходное значение сохраняется.
- `Ship_of_the_Line` разрешается только объявленным псевдонимом в данном наборе. Универсального угадывания имён по подчёркиваниям нет.
- Известный блок палитры с размером `0xCDCDCDCD` принимается только при совпадении ограниченной формы; предупреждение остаётся в манифесте.
- Tactical Nuke с выходящим за границы подблоком отклоняется. Повреждённая сигнатура Modern Infantry из `Conquests/Conquests/New rules` также отклоняется; одноимённый файл основного каталога проверяется отдельно и декодируется.
- Hussar WAV с нулевым размером `fmt` не исправляется молча и не публикуется как рабочая запись.
- У `ArmyModernRun.amb` остаётся неразрешённая ссылка на `ArmyMiddleRunMove.wav`. Звук этой последовательности не объявляется воспроизведённым.

Статусы, исходные пути, хеши, предупреждения и ошибки находятся в полях `validationDiagnostics`, `unitDefinitions`, `sounds` и `aliases` манифеста.

## Память и проверка

Основной экран загружает видимые исходные спрайты по необходимости. Логический бюджет кеша кадров юнитов — 64 МиБ RGBA, звуковых буферов — 16 МиБ float PCM после декодирования браузером. Неиспользуемые записи освобождаются по давности использования. Активные кадры боя и воспроизводимые записи защищены; временное превышение из-за защищённых записей отражается в статистике.

Это бюджеты логических кешей, а не предел полной памяти браузера. Атласы карты, DOM, Canvas, графический драйвер и внутренние копии браузера учитываются отдельно фактическим RSS/heap. Web Audio может изменить частоту дискретизации при декодировании; его фактические `length × channels × 4` учитываются после декодирования.

На опубликованной версии пройдены десять образцов во всех восьми направлениях и двух палитрах, воспроизведение AMB и бой со звуком через кнопки игры. Состояние партии совпало с расчётом ядра; выключение звука останавливает источники, загрузка не повторяет бой или аудио. Проверены сохранность 32 прежних адресов юнитов и хеши всех 443 файлов нового набора.

Проверки: `tests/test_media.py`, `tests/test_audio.py`, `tests/image-store.test.mjs`, `tests/audio-player.test.mjs`, `tests/game-screen.test.mjs`. Браузерная проверка образцов и настоящего боя со звуком выполняется `tests/browser-media.cjs`; результат публикуется в [машинном отчёте](data/browser-media-verification.json).

## Первичные источники интерпретации

- [Vuldacon: палитровые диапазоны юнитов](https://forums.civfanatics.com/threads/messing-with-unit-palettes-civ-color.612864/) — объяснение назначения индексированных цветов автором юнитов.
- [Rhye: опыты с NTP](https://forums.civfanatics.com/threads/new-team-colours.85016/) — разные оттенки и двухцветные наборы в одной палитре.
- [Quintillus и разработчики OpenCiv3: точные NTP вместо одного оттенка](https://forums.civfanatics.com/threads/shaders-color-palettes-and-unit-animations.674376/) — ограничения приближённого окрашивания.
- [OpenCiv3: преобразование палитр](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Textures/PCXToGodot.cs) — код исследован на закреплённом коммите; его обработка отдельных диапазонов не заменяет проверки нашей поставки.
- [maxpetul: структура AMB](https://github.com/maxpetul/Civ3AMBAnalysis/blob/master/AMBFormat.org), [редактор AMB](https://github.com/maxpetul/C3X/blob/master/AMB%20Editor/amb_file.c) — первичные исследования структуры.
- [Vuldacon: звуки юнитов](https://forums.civfanatics.com/threads/unit-sounds-tutorial.264697/) — соответствие кадров и звуковых действий.
- [Hikaro: INI](https://forums.civfanatics.com/threads/hikaros-guide-to-the-unit-ini-file.191539/) — назначения действий и неопределённость раздела Timing.

[Фактический прогресс](../development-progress.md) · [Контрольные случаи оригинала](reference-cases.md)

27 октября для окна города добавлены семь исходных иконок зданий PCX → PNG. Текущий манифест содержит 135 базовых графических ресурсов; набор анимаций, 162 варианта NTP и 153 WAV не изменились. Подробности и границы новой экономики — в [модели зданий](city-buildings-model.md).

В схеме 8 набор расширен до 416 базовых изображений: 235 разрешённых иконок технологий и 56 кадров специалистов. Они сверены с исходными RGBA; один отсутствующий элемент (TECH 197) явно отмечен. [Модель и проверка новых ресурсов](specialists-and-research-model.md).
