Военные лидеры Atlants: появление и ускорение строительства
Реализация v0.24.0 продолжает задачу 5.3. Состав и бой армий, научные лидеры и их научный золотой век остаются отдельными незавершёнными частями плана.
Данные поставки
В закреплённом профиле Atlants RULE.battle_created_unit = 323 — «Лидер», RULE.build_army_unit = 319 — первая армия. У лидера движение 3, атака/защита 0, нет обычного производства по маске цивилизаций. Армии Atlants имеют вместимость 2/3/4/5, а cities_per_army = 2. Эти числа нельзя заменять параметрами обычного Conquests. Объявление строк 319–322 ещё не включает их поведение в движке.
У лидера проверяются исходные Leader (ability_flags_hex, байт 2, бит 3) и Finish Improvements (action_flags_hex, байт 4, бит 7). Цель появления берётся из RULE, а не из названия или жёстко выбранного номера юнита. Каталог обычного производства не расширяется бесплатным лидером.
Исполненные исходные ветви
Неизменённый Conquests/Civ3Conquests.exe, SHA-256 c40583d707af7abd9b8568e2ed5a4f117f27a775dca617c8d7b873d76772dd6d. Навигационные имена C3X использованы из закреплённого локального набора upgrade-sources; правила ниже проверены на байтах самой поставки.
scripts/verify-military-leaders.py исполняет 1536 случаев: 1152 для появления и 384 для ускорения. В отчёте сохранены хеши трёх диапазонов: ветвь элиты 0x5bed1a, проверка появления 0x5bf1ef…0x5bf2bb и полная функция доступности ускорения 0x5bfdb0…0x5c0004.
| Условие победы | Проверенное правило |
|---|---|
| Опыт | Уровень не ниже 3 до повышения; повышение ветерана в элиту не даёт броска на лидера в том же бою |
| Тип | Сухопутный; победа над неварварским владельцем |
| История | Юнит ещё не создавал лидера; другой battle-created unit этого владельца отсутствует |
| Армия | Боец внутри армии исключён |
| Обычная атака / защита | 1/16 и 1/32 |
| При положительном счётчике чуда More Leaders | 1/12 и 1/24; несколько чудес не складываются |
Перебор юнитов, счётчик чудес и PRNG в стенде заданы контролируемыми входами. Проверена ветвь, которая выбирает знаменатель и вызывает генератор только после всех условий. Полное совпадение генератора и порядка всех вызовов оригиналу не доказано. В Atlants соответствующее малое чудо — 204 «Поэма о Героях»; движок читает активный исходный флаг, а не это имя.
Для военного лидера полная функция ускорения допускает только BLDG: обычное здание или малое чудо. Юниты, великие чудеса и богатство исключены. Ветка exclude_cheap_improvements относится к дополнительной оценке и тоже присутствует среди контрольных входов; человеческий приказ использует обычную проверку без этого фильтра. Научные и неразмеченные лидеры не включаются в новую команду.
Команды, интерфейс и ИИ
После допустимой обычной победы появляется лидер. На создавшем его юните сохраняется createdMilitaryLeader; интерфейс показывает звезду и пояснение. Модернизация снимает эту отметку и возвращает элиту к ветеранам; новый шанс появляется после повторного достижения элиты. Активный обстрел и воздушный бой не запускают появление военного лидера.
leaderHurryQuote — общая проверка для приказа LEADER_HURRY, кнопки, подсказки и ИИ. Требуется свой город, действующее доступное производство здания и военный лидер с исходной способностью. Кнопка использует исходный значок Finish Improvements из Conquests. Перед расходованием есть подтверждение с названием города, здания и числом добавляемых щитов; отмена не меняет состояние. Наличие оставшегося движения не требуется. Цель перепроверяется при выполнении.
Приказ заполняет щиты до стоимости текущего здания, ставит ограничение переноса ускоренных щитов, расходует лидера, не списывает золото или население. Здание завершается обычным расчётом города. Смена заказа и прочие ограничения производства продолжают использовать общую систему. ИИ выбирает тот же приказ, может подойти к своему известному городу и при отсутствии применения ждёт в городе, не отправляя лидера в разведку или атаку.
Оригинальные изображения лидера подготовлены для четырёх эпох: Default, Run, Death и Fortify/Fidget. Не заданные оригинальным INI действия не дорисовываются. Добавлены 16 анимационных записей и 17 исходных WAV; всего манифест содержит 1664 графических записи и 1012 WAV. Декодированные размеры и варианты палитр учтены в original-assets.json.
Обнаруженный старый путь захвата гражданских исправлен: лидер уничтожается, не превращаясь в пленного лидера. Статическая ветвь 0x5b797b…0x5b798c исходного EXE исключает Leader перед созданием пленного. Это отдельное чтение кода, а не ещё одно полное исполнение захвата на стенде.
Сохранения и границы результата
Схема 40 переходит в 41 с добавлением leaderModel = military-leaders-v1. На подлинном опубликованном файле 0.23.0 проверяется, что кроме номера схемы и этой метки все поля сохраняются. Текущие файлы сохраняют вид лидера, отметку исходного юнита, RNG и очередь решений. Некорректные значения отклоняются. Ранее не записанную историю импортированного Windows SAV восстановить таким переходом нельзя.
Проверки движка покрывают обычный бой с появлением лидера и точным продолжением после загрузки, преждевременную элиту, блокировку второго лидера, расходование, запрет неподходящих заказов, завершение ровно один раз, захват клетки, модернизацию и использование ИИ. Браузер проверяет подтверждение/отмену, доступность кнопки, отметку исходного юнита, экспорт и перезагрузку.
Полный оригинальный конструктор лидера, выбор имени, размещение при сложном стеке, внешний счётчик чудес, Windows-уведомления/звук и точная последовательность PRNG остаются отдельными проверками. Армии, научные лидеры, остальные специальные способности и весь MVP не объявляются завершёнными.