Болезни местности и исходное поведение Atlants
Исследование 28.10.2026. Источник — предоставленный Conquests/Civ3Conquests.exe и conquests.biq, а не замена правил общим описанием Civilization III. Проверка Windows в исполнении пока не выполнена. Машинный отчёт фиксирует хеши, 14 сигнатур кода и все 14 строк местности; воспроизведение: python3 scripts/analyze-disease.py.
Данные и совместимость
Последние восемь байтов TERR сохранены как terrain_flags_raw (unsigned32) и disease_strength (signed32). Интерпретированы только бит2 Causes Disease и бит3 Cured by Sanitation; остальные биты сохраняются без придуманного значения. У поймы4, джунглей8 и болота9 установлены оба этих бита; сила во всех строках50.
Исходный EXE в0x4b4834/0x4b4859 проверяет TECH8 «Математика». Объявленный флаг санитарии находится у TECH139, но эта проверка его не использует. Поэтому наша модель следует фактическому условию предоставленного EXE, даже если текст энциклопедии говорит о санитарии. Наличие флага и исполнение его смысла указаны отдельно в отчёте совместимости.
Город
В риск входят центр и обрабатываемые горожанами клетки. Соседняя необрабатываемая клетка болезни не вызывает. Группы проверяются по ID местности. Для положительной силы рассчитывается диапазон uint16(768-trunc(int32(strength<<9)/100)); проверка включительная: random(range)<=population. Нулевой диапазон всё равно расходует случайное число и возвращает0. При населении1 город не погибает и новая активная болезнь не создаётся.
При начале болезни население уменьшается на1 и сохраняется эпизод. В следующих собственных хозяйственных фазах теряется не более одного жителя, затем эпизод продолжается при random(128)<=оставшееся население. Это не фиксированные два хода. Получение иммунитета или расчистка местности предотвращают новые случаи, но не обрывают уже начавшуюся болезнь. Эпизод содержит источник, начальный ход, количество фаз и общие потери; все поля проверяются при загрузке.
Потеря населения использует общую обработку национальностей/сопротивления. Распределение жителей пересчитывается до пищевого, финансового и научного расчётов; прогноз бюджета не заражает город и не расходует PRNG. Порядок среды: загрязнение, затем болезнь, затем пища/производство/финансы. Наш движок пока обрабатывает города пакетами, тогда как исходный EXE перемежает полную фазу по городам: совпадение его случайной последовательности не заявлено.
Юнит
Независимая проверка: укреплённый юнит, population_cost===0, фактическая местность8 «Джунгли»; random(1000)===0 уничтожает отряд. Сила болезни и технология иммунитета на эту ветку не влияют. Обычные рабочие/поселенцы с положительной стоимостью населения исключены; нельзя исключать вообще все рабочие роли, поскольку у рабов иной профиль.
Интерфейс, сохранения и проверки
В городе показаны риск либо состояние эпизода; подсказки клеток объясняют источник и фактический иммунитет. Справка Математики объясняет её эффект в этой поставке. Собственные сохранения используют схему30, модель native-terrain-disease-v1 и экономикуv18. Реальный файл опубликованной схемы29 с частично завершённой уборкой переносится только изменением метаданных; задания, мир и PRNG сохраняются.
Автоматические проверки: tests/disease.test.mjs. Проверяются извлечение, включительные границы, нулевой диапазон, знаковое переполнение, эпизод длиннее двух фаз, население1, приобретённый иммунитет, укреплённые юниты, неизменность прогнозов, строгая загрузка, реальный END_TURN и продолжение старого задания. Результат общего браузерного прогона фиксируется отдельно после выполнения.
Дополнительные источники
- Исходный формат BIX/BIQ, описание разработчиком извлечения: структура TERR.
- C3X, исходный код и перечень исправлений: известна жёсткая проверка индекса8. Настройка её исправления не подменяет выбранный нами немодифицированный EXE.
- Руководство Civilization III, раздел Disease, печатная с.64: качественное описание болезней; оно не доказывает точную формулу Atlants.
- Предоставленные Civilopedia, Script и темы
terrain_page.htm,disaster_page.htmоригинальной справки редактора: названия, сообщения и смысл полей. Их текстовые обещания отделены от статически подтверждённой ветки кода.
Итог интеграционной проверки v0.9.0
Опубликовано28.10.2026 в04:32 МСК, код bd5314f4a3a8d843. Соответствующий реальный Chromium-сценарий прошёл локально и на основном HTTPS-сайте. Проверяется выполнение действий и состояние, а не только наличие DOM-элементов. Текущий публичный отчёт. Сверка138 опубликованных файлов не нашла расхождений; восемь статических файлов независимых сервисов сохранены. Совпадение поведения Windows-оригинала за пределами явно перечисленных свидетельств не заявляется.