# Модернизация наземных юнитов Atlants

Продолжение 4.7–4.9 и конструктора типов из 4.8. Собственный движок исполняет одиночный приказ `UPGRADE_UNIT` и групповой `UPGRADE_ALL`; интерфейс и ИИ используют те же проверку, цену и применение. На этом этапе использовалась схема состояния 20; [следующая итерация производства](production-obsolescence.md) вводит схему 21 с точной миграцией.

## Управление

Выберите отряд в своём городе. Кнопка модернизации или **U** открывает подтверждение с исходным типом, заменой и ценой. **Shift+U** показывает количество и общую цену подходящих отрядов того же исходного типа во всех собственных городах. Отмена не меняет партию. До подтверждения не списываются деньги, не снимается укрепление и не расходуется движение. Подтверждение повторно проверяется ядром.

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

Сохранён пользовательский запрет отмены рабочего задания: занятый рабочий не модернизируется; попытка выдать приказ выбранному занятому рабочему возвращает `WORKER_BUSY`.

## Правила и данные

Проверяется исходный флаг Special Actions «Upgrade» — байт 5, бит 0 совокупного `action_flags_hex`. Его можно переключать в конструкторе. Одной ссылки `upgrade_to` недостаточно.

В таблице Atlants цепочки содержат национальные варианты. Поиск проходит всю цепочку и выбирает самую дальнюю доступную замену, используя общую проверку производства: цивилизация, технология и ресурсы текущей сети города. Недоступные промежуточные варианты не обрывают поиск. В подготовленном российском примере воин 20 пропускает чужие варианты 21–23 и становится мечником 30. Дальнейшая доступная пехота может быть выбрана непосредственно; число промежуточных записей не увеличивает цену.

Прежний каталог девяти типов расширен до **126 наземных записей** в связанных цепочках исходных типов; собственные типы и их цепочки входят в тот же каталог. Казармы 15 доступны для производства. Пригодность военного центра определяется действующим флагом подготовки наземных ветеранов, включая бесплатные здания через существующую систему предоставлений. У исходного Дворца Atlants этот флаг включён, поэтому столица проходит проверку без отдельного здания казарм. Совпадение этого обобщённого условия с Windows-исполнением ещё требует контрольного случая.

Цена: `max(0, щиты_замены − щиты_исходного) × RULE.upgrade_cost_factor`; у закреплённой поставки коэффициент **3**. Действующий имперский флаг `cheapUpgrade` уменьшает цену вдвое; собственный расчёт округляет вниз. Денежная цена берётся из исходных стоимостей, без производственной скидки сложности. Отдельные крайние случаи нулевой/нечётной стоимости и скидки ИИ требуют оригинальных наблюдений.

Применение сохраняет ID, владельца, координаты и происхождение отряда. Регулярный, ветеранский и рекрутский уровни сохраняются; элитный становится ветераном. Здоровье восстанавливается до максимума нового типа. Остаток движения становится нулевым, маршрут и укрепление снимаются, случайность не расходуется. После перезагрузки получается тот же отряд и казна. Основные эффекты подтверждаются опубликованными описаниями игры; точные Windows-переходы и крайние случаи отдельно не измерялись.

ИИ выбирает обычный приказ, если отряд уже находится в подходящем городе, замена увеличивает сумму атаки, защиты и движения, хватает золота и остаётся покрытие прогнозируемого дефицита ближайшего хода. Самостоятельное планирование поездок в центры модернизации и оценка стратегической ценности замены остаются развитием 4.9.

## Ресурсы

В существующий набор добавлены **12 исходных анимаций** мечника и средневековой пехоты: покой, движение, атака, гибель, укрепление и победа. Подготовлены исходные цветовые ссылки NTP01/NTP09 с существующим восстановлением остальных палитр, звуковые привязки и иконка казарм. Комплект содержит 543 базовых графических ресурса и 271 WAV. Файлы поставки не изменялись; PNG/WAV размещаются в прежнем комплекте.

Кнопка использует исходную ячейку атласа приказов `(5,4)` с тремя состояниями. Выбор именно этой ячейки для модернизации — прототип; геометрию размещения и её назначение ещё надо сверить с экраном Windows. Не все 126 типов имеют подготовленные изображения, и добавление в каталог не исполняет все унаследованные специальные способности.

## Проверка

12 новых проверок ядра покрывают национальную цепочку, дальнюю замену, цену, активную/устаревшую скидку, опыт и здоровье, движения, неизменяемость входа и PRNG, отказы, групповую атомарность, рабочего, собственный тип, флаг и решение ИИ. Общий набор содержит 479 JavaScript-проверок и 27 Python, всего **506**, отдельно DOM.

[Браузерный сценарий](data/browser-upgrading-verification.json) проверяет U/Shift+U, подтверждение/отмену, реальные цену и количество, применение в точности как у ядра, исходный спрайт мечника, сохранение/перезагрузку и причины отказа. [Итоговый отчёт](data/upgrading-verification.json) фиксирует опубликованную сборку и результаты остальных сценариев. [Снимок окна](data/upgrade-confirmation.png).

## Источники и оставшаяся работа

- [Оригинальное руководство, Upgrading и горячие клавиши](https://manuals.plus/m/0e4e661dbe03e34fd522a8657e1f6f14e231f153a7db35db7510f651a27ea36e): U, Shift+U, город с казармами и возможность создать замену.
- Предоставленные `Conquests/conquests.biq` и `Conquests/Text/Script.txt`, секции UPGRADE, UPGRADE_ALL, NO_UNITS_TO_UPGRADE_ALL, NO_GOLD_TO_UPGRADE_ALL: поля, коэффициент и оригинальные подтверждения.
- [C3X, закреплённые определения](https://github.com/maxpetul/C3X/blob/117bb1699376754738f3ed5e04f4c27b42845919/Civ3Conquests.h): Special Actions Upgrade и флаг половинной цены. Это результаты обратного анализа внешнего проекта, а не исходный код Firaxis.
- [CivFanatics, FAQ](https://civfanatics.com/civ3/faq/) и [Info Center](https://civfanatics.com/civ3/infocenter/): цена Conquests, требования ресурсов, восстановление здоровья и элитный уровень. Вторичные сведения используются с явно незавершённой проверкой оригинала.

Автоматическая замена устаревшего производства/очередей подключена [следующей итерацией](production-obsolescence.md). Полноценные армии и лидеры, морская/воздушная модернизация, полный контент и графика, оригинальные округления, порядок фаз и точная стратегия ИИ ещё не закрыты. Весь MVP остаётся в работе. [План](../development-plan.md).
