Активный обстрел артиллерией и кораблями — v0.15.0
Продолжение пункта 5.1. Активный приказ BOMBARD использует одну общую проверку для человека, интерфейса и ИИ. Собственная схема сохранений33 добавляет bombardmentModel: native-bombardment-v1; опубликованные сохранения32 мигрируют без изменения мира, пассажиров, заданий и PRNG. Морской раздел и весь MVP остаются в работе.
Приказ и цели
Кнопка с исходным значком и B включаются по PRTO: действие Bombard, положительные сила, дальность и ROF, сухопутный/морской домен. У галеры Atlants сила4, дальность0: она поддерживает оборонительный бой и не получает активный обстрел. Подключены 11 наземных артиллерийских типов, включая отдельную лёгкую артиллерию213; национальные, технологические и ресурсные требования остаются общими.
Приказ требует видимой клетки в пределах дальности, движения и подходящей чужой цели; свои клетки и свои части защищены. Мирная цель вызывает обычное предложение объявить войну. Предпросмотр строится по представлению игрока и не читает скрытый список зданий противника. Показанный шанс по юниту — оценка по видимым данным: неизвестные укрепления могут его изменить. Отказ не меняет состояние и случайную последовательность.
Выстрел расходует одну исходную единицу движения, оставляет стрелка на месте и отмечает использованную атаку. Без Blitz повторная атака в этом ходу запрещена. Допустимы войска, городское население, физические здания и улучшения. Корабли перевозят груз как прежде; гибель судна от летального обстрела уничтожает и пассажиров. Сухопутный и морской летальные флаги независимы. Обычный нелетальный залп останавливается на1 HP и не переходит на следующую часть того же стека.
Выполненный обстрел вызывает пакты взаимной защиты по соответствующей территориальной причине и общий пересчёт назначений, производства и ресурсных соглашений. Уничтожение юнита использует общую обработку повышения опыта, золотого века и порабощения; исходные неопределённости этих систем сохраняются.
Вероятность и исходный EXE
Статический отчёт содержит 21 проверенную последовательность инструкций предоставленного EXE. Арифметический отчёт содержит 1 130 исполнений трёх неизменённых участков машинного кода в Unicorn. Подставляются только параметры и регистры входа; код и исходные константы не заменяются. Полный Windows-сеанс не выполнялся.
Для обстрела клетки/городской цели сначала вычисляется целая защита:
D = trunc(baseDefense × (100 + terrainBonus + cityBuildingBonus) / 100)
Защита населения и зданий читается из RULE: в Atlants обе равны16. У обычных улучшений исходный базовый уровень16. Порог неудачи:
threshold = clamp(1, 1023, trunc(int32(D × 1024) / int32(D + B)))
Выстрел попадает, если целый случайный результат0…1023 не меньше порога. ROF задаёт число попыток, а не гарантированный урон. Для инфраструктуры и городских потерь попытки прекращаются после первого успеха; население уменьшается максимум на одного за залп и не опускается ниже1.
Для защиты юнита процентные множители сохраняются до деления: используется отношение Dbase × (100 + bonus) к B × 100, с теми же пределами порога. Потеря дробной части защиты до расчёта дала бы другое поведение. Для корабля в порту исходный EXE дополнительно использует trunc((threshold + 1) × 0.5).
На экстремальных значениях сохранено исходное знаковое 32-битное переполнение числителя. Эти контрольные случаи не являются обычными параметрами Atlants. Полная исходная PRNG-последовательность не воспроизведена: детерминированность нашего движка проверяется отдельно.
Адреса функций сопоставлены с таблицей C3X, поля и флаги — со структурами Civ3Conquests. Модифицированные формулы C3X не подменяют оригинальные байты поставки.
Последствия
В городе сначала обрабатывается противообстрельное сооружение соответствующего домена, затем доступный защитник. При отсутствии такого защитника выбирается население либо здание. Чудеса и столичные сооружения защищены от обычного уничтожения зданий; это действующая политика движка, полная исходная проверка исключений ещё открыта. Нет выплаты золота или щитов как за продажу. Метаданные разрушенного здания удаляются; жители переназначаются общим расчётом.
Для инфраструктуры реализована найденная последовательность: рельсы снимаются отдельно; дорога/шахта/орошение снимаются группой; комплекс баррикады очищает соответствующие укрепления и наземную инфраструктуру. Загрязнение, ресурс и река при этом сохраняются. Авиационные/ракетные и специальные объекты требуют соответствующих следующих систем. Во всех исследованных наземных и морских PRTO текущего профиля creates_craters=0.
Представление и ИИ
Исходный значок Bombard взят из PTW NormButtons (колонка4, строка1), включая hover/pressed. Наземной артиллерии добавлены исходные Default/Run/Attack/Death/Fortify; корабельные анимации используют ранее подключённые ресурсы. Цель отмечается отдельным исходным32px прицелом из Cursor.pcx; направляющие атласа не включены в вырезку. Общий манифест: 1 294 изображения/атласа и879 WAV. Проигрывание не меняет состояние или PRNG. Невидимый вражеский стрелок не анимируется; видимость проверяется перед загрузкой кадров/звука.
ИИ стреляет общей командой по наблюдаемым целям, заказывает артиллерийскую поддержку достаточной сухопутной армии, сохраняет начатый заказ и выходит на позицию по известной карте. Число рассматриваемых целей/позиций ограничено. Это начальная стратегия, а не воспроизведение оценки Firaxis или законченная тактика эскортов.
Проверки и оставшееся
Браузерный сценарий проверяет кнопку и B, выбор на карте, реальную загрузку исходных кадров, артиллерийский залп, фрегат, отсутствие активной кнопки у галеры, отказ в тумане, точный экспорт/перезагрузку и сохранённый груз прежней версии. Предпросмотр · Фрегат после выстрела. Итог выпуска.
Открыты точный выбор защитника и здания/национальности, свободные/чудесные противообстрельные защиты, полный исходный порядок реакций и анимаций, воздушные и одноразовые ракетные действия. Морская торговая сеть, специальные перевозчики, невидимость/скрытая национальность и стратегические десанты также остаются отдельными задачами 5.1–5.4. Наличие численных доказательств не означает проверку всего поведения оригинальной партии.