Обновлено:

На этой странице

Аэродромы вне городов: проверка исходных правил

Этап 5.2, эталон подготовлен после v0.21.0. Это исследование предоставленного Atlants EXE и контрольные случаи для реализации. Подключённая в v0.22.0 часть и оставшиеся ограничения описаны отдельно: полевые аэродромы в движке. Городские аэропорты и воздушная торговля остаются самостоятельными системами.

Источник — Conquests/Civ3Conquests.exe, SHA-256 c40583d707af7abd9b8568e2ed5a4f117f27a775dca617c8d7b873d76772dd6d; профиль atlants2-827be8b3f7aab140. Исходная Civilopedia находится в Original Sources/CIV3ATL2/Text/Civilopedia.txt, раздел #TFRM_Airfield. Справка полезна для назначения действия, но не заменяет проверки машинного кода.

Подтверждённые условия

СистемаРезультат проверки
Исходная записьTFRM9 «Аэродром», технология119, work_required_raw=1
Кнопка рабочегоКоманда 0x20002000, категория2/индекс13, ячейка33 оригинального Conquests NormButtons, область [32,128,32,32]
Остаток движенияДостаточно положительного остатка, в том числе после частичного перемещения; нужен собственный флаг действия типа
ТерриторияТолько своя или нейтральная; чужая отвергается до общих проверок, право прохода этого не меняет
Местность и требованияПроверяется Allow_Airfields, отсутствие города, требуемая технология и доступ к указанным в TFRM ресурсам
Существующая базаВторой аэродром на той же клетке недопустим
РаботаСостояние юнита 0xb направляется в обычный расчёт прогресса TFRM9; завершение создаёт базу и расходует рабочего
Замена улучшенийКонструктор задания задаёт маску удаления 0xc000001c; перед созданием выполняется удаление шахты, орошения, форта и других полевых сооружений из маски. Дорога и железная дорога в неё не входят
ОтправкаАэродром имеет собственный признак использования. Отсутствующий объект или уже использованный слот запрещают отправку
ПриёмСвой аэродром принимается как цель, в том числе с уже использованным отправочным слотом; чужой не принимается этой веткой
Передача базыНовый владелец записывается без сброса использованного слота
Переход территорииИсследованная ветка передаёт базу владельцу с требуемой технологией, иначе вызывает уничтожение
Сброс слотаОтдельная исходная функция обнуляет признак; цикл лидера вызывает её для его аэродромов

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

Справка формулирует условие клетки как «пустая или с дорогой/железной дорогой». Машинный предикат разрешает существующие шахту и орошение; общий код предусматривает подтверждение замены. Проверка запускается без окон Windows по исходной ветке без диалога, поэтому точный текст и порядок подтверждений не объявлены проверенными.

Воспроизводимые доказательства

scripts/verify-airfields.py исполняет неизменённые инструкции x86 через Unicorn. Получены 370 случаев:336 размещений,8 сочетаний флага действия и движения,4 источника переброски,12 целей,2 ветки передачи территории, а также отдельные случаи таблицы работ, диспетчеризации, завершения, удаления старых улучшений, инициализации базы, переноса и сброса слота, привязки команды.

Полные функции исполняются там, где это указано в отчёте. Диспетчер рабочего, общий блок завершения и ветка территориальной передачи проверяются как явно ограниченные участки. Внешние карта, доступ к ресурсам, обновление видимости, создание/удаление объектов и интерфейс задаются контролируемыми помощниками. Это не запуск полной Windows-партии и не проверка её последовательности случайности.

Результаты и точные диапазоны/байты: airfield-native-evidence.json. Тест tests/test_airfield_evidence.py сверяет13 диапазонов и7 дополнительных сигнатур с предоставленным EXE, а также полноту набора случаев. Семь проверок нового эталона, прежней авиации и сборки библиотеки прошли.

PYTHONPATH=/tmp/civ3-native-math-python python3 scripts/run-limited.py -- python3 scripts/verify-airfields.py
python3 scripts/run-limited.py -- python3 -m unittest tests.test_airfield_evidence

Границы исходного эталона

  • Полный путь накопления TFRM9: календарь, местность, несколько рабочих, какой из них расходуется при завершении.
  • Полное окружение территориальной передачи: потеря границ до нейтральной клетки, прямой захват наземной частью, судьба находящихся самолётов.
  • Базирование самолётов, предел вместимости, выбор целей ИИ, бомбардировка и разрушение базы.
  • Исходные изображения: два кадра из Civ3PTW/Art/Terrain/x_airfields and detect.PCX и отдельный атлас теней; точный выбор кадра ещё не подтверждён.
  • Общие команды движка, данные владельца/слота, миграция, редактор и интерфейс включены в0.22.0; их собственные проверки перечислены в статье реализации.
  • Результаты игровых и публичных браузерных действий фиксируются отдельно в отчёте0.22.0.

Воздушная торговля ресурсами не следует из возможности переброски или базирования: её действующие городские флаги описаны отдельно в воздушной ресурсной сети. Не добавлять торговое соединение к полевому аэродрому по аналогии с аэропортом без отдельного доказательства.

Дополнение v0.22.3: культурная эвакуация

Исследована ветка0x5d3d60–0x5d3f60 вместе с полными функциями ближайшего города0x56cfb0, разделений осей0x441f50/0x4379f0 и переноса0x5c6ed0.140 случаев подтверждают перенос воздушных частей в город прежнего владельца до передачи или разрушения базы, отсутствие требований аэропорта/дальности, удаление при отсутствии города и добавление расхода одного очка движения. Исходные байты и точные границы контролируемых зависимостей — новый эталон. Старый набор370 случаев остаётся исторически ограниченным и не расширяется задним числом.