# Национальности, сопротивление и ассимиляция

Рубеж 4.3 продолжается моделью `atlants-population-v1`, экономикой `city-economy-v7` и собственным сохранением 11. Это проверка нашего движка; контрольные ходы Windows-оригинала остаются открытыми.

## Подключённые исходные данные

Профиль теперь содержит 15 таблиц. Из исходного BIQ дополнительно извлечены восемь записей [CULT](data/rules-cult.json) и 196 направленных троек `GOVT.government_relations`. Для каждой пары сохранены исходное первое значение, модификатор подкупа и модификатор сопротивления. Первое значение местами не является 0/1: оно сохраняется как `can_bribe_raw`, без подмены логическим переключателем. Подкуп пока не исполняется.

CULT задаёт отношения 4:1, 3:1, 2:1, 1:1, 3:4, 1:2, 1:3, 1:4, начальные шансы 30–100% и продолжение 20–90%. Это данные Atlants/DYP, а не стандартная таблица шести отношений. Текущий расчёт использует точные числитель/знаменатель; округлённое поле процентов также сохранено. Трактовка границ должна быть проверена на оригинале.

## Национальный состав

`city.foreignNationals` хранит численность иностранных национальных групп, `city.resistingNationals` — сопротивляющуюся часть каждой группы. Собственное население вычисляется как общее население минус иностранные группы. Сумма сопротивляющихся должна совпадать с `city.resistance`; жители национальности владельца не могут быть сопротивляющимися. Назначения клеток и профессии пока хранятся отдельно от национальных групп.

- При росте новые жители получают национальность владельца. Уже существующие иностранцы сохраняются.
- При захвате группы переводятся относительно нового владельца; прежняя единая запись `nationalityId` больше не определяет национальность всего города. Существующие собственные граждане захватчика не становятся сопротивляющимися.
- При голоде первыми удаляются сопротивляющиеся. Для прочих потерь текущая явная политика сначала выбирает иностранцев; порядок при ускорении, производстве, переселении и захвате ещё требует оригинальных наблюдений.
- Население, использованное для рабочего/поселенца, передаёт ему происхождение. Иностранный рабочий получает соответствующие признаки работы и содержания. При возвращении собственного ранее захваченного рабочего признак пленного снимается.
- При основании города первый житель сохраняет происхождение поселенца. Происхождение пленных после разрушения города берётся из его национального состава.

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

## Сопротивление

Для каждого иностранного жителя при захвате выполняется отдельная проверка. Базовый шанс берётся из CULT по отношению суммарной культуры владельца к культуре державы происхождения; добавляется `resistance_modifier` строки правительства владельца и столбца правительства другой державы. Результат ограничивается 0–100%. Например, пары Монархия → Республика и Республика → Монархия в Atlants дают разные поправки, +5 и −5.

При двух нулевых культурах текущая модель выбирает самое низкое отношение; при положительной своей и нулевой чужой — самое высокое. Если державы происхождения нет среди участников, используются нулевая культура и начальное правительство. Эти крайние случаи, а также влияние уничтоженной державы должны быть проверены отдельно.

После собственного урожая гарнизон подавляет сопротивление. Предел успешных успокоений — число подходящих сухопутных боевых частей × `DIFF.military_law`. Флот, авиация и гражданские рабочие не увеличивают предел. Для каждого рассматриваемого сопротивляющегося используется `continued_resistance` и та же правительственная поправка; предел относится к успешным результатам, а не к числу бросков. Порядок национальных групп и расход случайности собственного движка фиксированы, но не заявлены совпадающими с EXE.

Сопротивляющиеся не занимают рабочие места и не потребляют пищу. Подавление не меняет их национальность. Ускорение при наличии сопротивления остаётся недоступным через общую проверку.

## Ассимиляция и культурное ограничение

`GOVT.assimilation` задаёт вероятность для каждого иностранного жителя, не участвующего в сопротивлении. Например, у Общины и Монархии Atlants — 1%, у Демократии — 4%, у Теократии и Фундаментализма — 10%. Результат меняет национальную группу, сохраняя население и профессии.

В текущем межходовом порядке ассимиляция следует после подавления: только что успокоенный иностранец также может перейти к национальности владельца. Влияние культуры на ассимиляцию, допустимость сопротивляющихся и точный оригинальный порядок пока не подтверждены. Результат и PRNG воспроизводятся с сохранением между командами.

При `GOVT.xenophobic=1` новая культура города приостанавливается до **строгого большинства** жителей своей национальности. Существующая культура не стирается. Ровно половина в текущей модели недостаточна; эта граница требует оригинального контрольного случая. Прибавка культуры рассчитывается до урожая и ассимиляции, поэтому полученное в конце хода большинство позволяет рост культуры со следующего собственного расчёта. Анархия также останавливает культурную прибавку.

## Присоединение к городу

Кнопка «+» использует исходный `PRTO.action_flags_hex`, байт 9, бит 4. Рабочий, Племя и Основатель допускают действие, Невольник PRTO 379 — нет. Юнит должен иметь движение и находиться в своём городе. Добавляется его `population_cost`, минимум один; соблюдается общий предел размера города. При отказе юнит и город не меняются.

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

## Сохранения и интерфейс

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

Загрузка проверяет ссылки на RACE, суммы групп, подмножество сопротивляющихся и согласованность счётчиков. Опубликованное сохранение схемы 10 с незавершённой дорогой проходит миграцию без изменения географии, работы и PRNG. Для старого захваченного или повторно захваченного города состав можно восстановить только приблизительно: прежняя схема не сохраняла все национальные группы. Это отмечается `populationOriginInferred` и сообщается в окне города. Новые изменения отслеживаются явно.

## Проверки и границы

20 новых проверок ядра покрывают восемь порогов и нулевые культуры, направленную матрицу, смешанный захват/освобождение, рост и потери, ассимиляцию, пределы подавления, культурное ограничение, JoinCity/размер, происхождение рабочих/поселенцев, ИИ, настоящую миграцию схемы 10, сокрытие сведений и повреждённые сохранения. Две проверки Python независимо сверяют восемь CULT-записей и все 196 троек со смещениями исходного BIQ.

[Браузерный отчёт](data/browser-population-verification.json) отделяет обычную новую партию с присоединением своего рабочего от подготовленных состояний. В отдельном случае исходная Теократия с шансом 10% и фиксированным seed демонстрирует ассимиляцию и возобновление культуры. В боевом случае фактические атака и сохранение города выполняются интерфейсом, затем проверяются состав, гарнизон, подавление, действия ИИ, экспорт и перезагрузка. Это автоматическое прохождение, не ручная оценка человеком и не сравнение с Windows. [Сводная проверка](data/population-verification.json).

Открыты полноценная конкуренция культурных границ и культурный переход городов, национальности отдельных рабочих мест, недовольство из-за войны с родиной, военная усталость, призыв, оригинальные порядки расчётов и контрольные ходы. Этот шаг не закрывает весь рубеж 4.3.

## Основания

- Предоставленный BIQ с SHA-256 `827be8b3f7aab140d2e702ecb6a8e4b2dc5c8c4324d0e2fcb2be497903723be9`; [CULT](data/rules-cult.json), [GOVT](data/rules-govt.json).
- [Закреплённый формат CULT](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/QueryCiv3/BiqSections/Cult.cs) и [GOVT](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/QueryCiv3/BiqSections/Govt.cs).
- [The Inner Workings of Resistance Revealed](https://civfanatics.com/civ3/strategy/game-mechanics/the-inner-workings-of-resistance-revealed/): исследование с пояснениями Mike B. FIRAXIS о культуре, правительстве, гарнизоне и сопротивлении. Стандартные числа не подменяют Atlants.
- [Double Your Pleasure](https://forums.civfanatics.com/threads/double-your-pleasure.19742/): исходное описание восьми изменённых культурных отношений модификации.
- [How to make peace with a Barbarian Chiefdom?](https://apolyton.net/forum/civilization-series/civilization-iii/124226-how-to-make-peace-with-a-barbarian-chiefdom): наблюдения игроков о национальности рабочих, поселенцев и ассимиляции; спорные детали не объявлены эталоном.
- [Quick Answers, январь 2026](https://forums.civfanatics.com/threads/quick-answers-newbie-questions.318752/page-352): описание возобновления содержания возвращённых собственных рабочих.
- [Making other government types viable](https://forums.civfanatics.com/threads/making-other-government-types-viable.659938/): обсуждение национального большинства и культурного ограничения; границу 50% нужно воспроизвести на выбранном EXE.
