# Право прохода и военные союзы Atlants

Следующее расширение: [торговое эмбарго Atlants](trade-embargo-model.md), сборка `81b8a8ba758403e5`; ниже сохранён отчёт предыдущего этапа.

Продолжение рубежа **4.4**. Сборка `baa9e4d530dfc654` опубликована на [основной странице игры](https://vm.ya-erm.ru/civilization/). Схема сохранений 24, экономика `city-economy-v15`, работы `native-terrain-work-v5`, соглашения `atlants-agreements-v1`. Остальные задачи MVP остаются в работе.

## Как попробовать

1. Встретьте другую цивилизацию, откройте «Письменность» и учредите посольство. Для соглашений достаточно нужной технологии у одной из сторон: в исходном Atlants право прохода даёт **«Династии» (TECH30, бит 0x200)**, военный союз — **«Политическая философия» (TECH101, бит 0x400)**.
2. Откройте **«Цивилизации → Предложить сделку»**. Право прохода — взаимный пункт; его можно предложить без золота и других предметов. Отказы объясняются рядом с пунктом. ИИ может принять или отклонить предложение.
3. После принятия юниты обеих сторон получают преимущества чужих дорог и железных дорог. Обычный короткий щелчок лишь выбирает/осматривает клетку; движение задаётся через G, перетаскивание самого юнита, удержание на назначении или цифровой блок. Договор не разрешает вставать на чужие юниты и входить в чужие города.
4. Рабочий может улучшать территорию партнёра. Технологии, способности и материалы проверяются для владельца рабочего; чужой ресурс не становится вашим от права прохода. Занятый рабочий сохраняет запрет ручного перемещения.
5. Для военного союза выберите известную обоим третью цивилизацию. Хотя бы один участник уже должен воевать с ней. Можно добавить обычные предметы обмена, например плату за вступление в войну. Перед отправкой показаны новые объявления войны и нарушение действующего мирного договора, если оно возникает.
6. Вкладка **«Действующие договоры»** показывает условия и оставшийся обязательный срок. Договор действует минимум 20 ходов, затем до отмены. Отмена союза сама по себе не заключает мир с общим противником. Отдельный мир прекращает союз; экран предупреждает об этом и о нарушении оставшегося обязательного срока.

![Предложение права прохода](data/right-of-passage-negotiation.png)

![Предупреждение о вступлении союзника в войну](data/military-alliance-warning.png)

## Общие правила и состояние

Право прохода и союз хранятся как взаимные условия обычной торговой сделки, вместе с разовым золотом, технологиями, ресурсами и платежами за ход. Один и тот же нормализатор, проверка допустимости и команды `PROPOSE_TRADE`, `RESOLVE_TRADE`, `CANCEL_TRADE` обслуживают интерфейс и ИИ. Взаимное условие записывается один раз; поддельные направления, повторения и неизвестные цели отвергаются. Ожидающее предложение сохраняется и возвращает ход отправителю после ответа.

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

Принятие военного союза исполняет обычную команду объявления войны для вступающей стороны и переносит разовый платёж атомарно. Если новый участник этим нарушает мир или прежнее право прохода, виновником записывается именно он, независимо от того, кто нажал «Принять». Отдельный мир разрывает весь торговый пакет и прекращает связанные будущие платежи/поставки; ранее переданное золото не возвращается. Второй союзник остаётся в состоянии войны. Уничтожение общей цели завершает союз без записи нарушения.

История отмечает ранний разрыв обязательства и использование права прохода для нападения изнутри территории партнёра, в том числе после 20 ходов. Это ограниченная модель истории и реакции ИИ; полная глобальная репутация Firaxis ещё не воспроизведена. ИИ принимает и предлагает соглашения через общие команды, но оценка выгоды — наша явная начальная эвристика.

Ресурсная сеть отдельно исправлена: известные дороги через мирную третью сторону соединяют собственные залежи и города **без требования права прохода**. Война прерывает такой маршрут. В сеть засчитываются только собственные раскрытые залежи и действующие поставки. Это не позволяет присваивать материалы партнёра. Морские и воздушные соединения ещё не подключены.

Если право прохода прекращено, недопустимое задание на чужой территории останавливается, сохраняя уже накопленный прогресс клетки. Юнит не телепортируется и автоматически не начинает войну. Требования покинуть территорию и высылка ещё не реализованы. Приоритет получателя щитов чужой вырубки, отдельные фазовые случаи и точный порядок оригинальных расчётов требуют контрольных случаев Windows.

## Совместимость и проверки

| Направление | Проверено в веб-движке | Что ещё требуется |
|---|---|---|
| Правила | Исходные флаги технологий, посольство/мир, взаимность, 20 ходов, движение/работы, объявления войны, разрывы, выполнение цели | Точная оригинальная оценка ИИ, глобальная репутация, крайние случаи работ и фаз |
| Представление | Панель взаимных условий, предупреждения о войне/мире, причина завершения сделки, оригинальные растры карты и юнитов | Полный исходный дипломатический экран и оригинальные реакции/звуковые события |
| Управление | Явные приказы движения, выбор/отмена условий, общий ответ ИИ, блокировка занятого рабочего | Ручная сверка задержек и всех сочетаний с Windows-оригиналом |
| Данные | Сохранение соглашений и ожидающих решений; настоящая опубликованная схема 23 мигрирует с изменением только метаданных | Импорт состояния оригинального SAV остаётся отдельной задачей |

Пройдены **23 проверки новых соглашений**, полный набор **555 JavaScript + 30 Python = 585 автоматических проверок**, отдельно DOM и локальный Chromium. Все **26 сценариев Chromium** прошли на основном сайте с первой попытки, включая полную партию до победы на 18-м ходу. Адреса, версии и ошибки всех отчётов сверены; 67 опубликованных файлов кода/интерфейса и исходный профиль совпадают с локальными. Итог доступен в [машинном отчёте](data/agreements-verification.json); [браузерный сценарий](data/browser-agreements-verification.json) содержит адрес, версию модулей и ошибки страницы/запросов. Наличие собственных тестов не означает проверку исполнения Windows-оригинала.

Первоначальные отказы подготовленных тестов выявили неверные предположения самих примеров: коэффициент дороги Atlants равен **2**, шахте нужна TECH26, железной дороге — TECH121, а раскрытию угля дополнительно TECH143. Примеры исправлены по исходному профилю; проверки требований сохранены.

Подлинные сохранения предыдущей опубликованной сборки с посольством, оплаченным отчётом, дорогой, очередью и торговлей: [активный договор](data/published-schema23-intelligence-active-trade-road.json), [ожидающее предложение](data/published-schema23-intelligence-pending-trade-road.json). Их исходный движок 23 и контрольные хеши сохранены отдельно; новые файлы не выдаются за старые. Карта, жители, войска, отчёты, работа, очередь и PRNG при миграции не перестраиваются. Полный [перечень проверок соглашений](data/agreements-test-checks.json).

## Основания правил

- [Руководство Civilization III, разделы Military Alliance и Right of Passage, с. 140](https://manuals.plus/m/0e4e661dbe03e34fd522a8657e1f6f14e231f153a7db35db7510f651a27ea36e): минимальный срок, действие дорог/железных дорог, отдельный мир и отмена союза без автоматического мира. Это исходное руководство; названия/доступность технологий в Atlants берутся из BIQ.
- [How to make alliances?, сообщения I. Larkin №7/9 и проверка сохранений Optional №8/10](https://forums.civfanatics.com/threads/how-to-make-alliances.249407/): достаточно существующей войны у одной стороны. В обсуждении есть первоначальные противоположные предположения, позднее уточнённые участниками; они не приняты как окончательный результат. Исключения, упомянутые другими участниками, требуют отдельной проверки нашего EXE.
- [Gonzo_for_civ, Peaceful War, раздел Workers](https://civfanatics.com/civ3/strategy/empire-management/peaceful-war/): наблюдение возможности улучшать чужую землю при праве прохода. Статья относится к ранней версии 1.17f; её остальные советы и шпионские действия не переносятся автоматически на Conquests/Atlants.
- [Civ3 FAQ на Apolyton](https://apolyton.net/forum/civilization-series/civilization-iii/45835-the-civ3-faq/page8): ограничения совместного размещения юнитов. Политика входа в город и занятую клетку сохраняет отдельную проверку движения/войны.
- Локальный эталон Atlants: BIQ `827be8b3f7aab140d2e702ecb6a8e4b2dc5c8c4324d0e2fcb2be497903723be9`, EXE **1.21.0.0**. Исходные таблицы и неизвестные поля не заменены стандартными значениями Conquests.

Следующие задачи 4.4: остальные пакты и предметы, требования ухода, шпионы/миссии, более полная репутация, морская/воздушная сеть. Параллельно сохраняются все незавершённые пункты 4.1–4.8, полный состав Atlants, BIQ и SAV из [общего плана](../development-plan.md).
