# Местность: вычисление индекса по четырём клеткам

Источник: [OpenCiv3, TerrainTextureFiles.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/TerrainTextureFiles.cs). Прочитан целиком 26.10.2026. Это алгоритм OpenCiv3; совпадение выбора всех декоративных вариантов с Firaxis не доказано.

## Набор входов

Алгоритм учитывает собственную клетку и соседей N, NW, NE. Один лист содержит 81 комбинацию трёх типов. Типам сопоставляются троичные значения; для порядка N/NW/NE/центр веса равны `1, 3, 9, 27`.

Для `xtgc` тундра соответствует нулю, луг — единице, берег — двойке. Пример из кода: N=луг, NW=берег, NE=тундра, центр=берег даёт `1 + 6 + 0 + 54 = 61`.

Выбор листа отделён от выбора фрагмента. Для однородного моря и океана используется случайный индекс 0–80. Пойма при выборе базовой графики трактуется как пустыня; отсутствующий сосед — как берег. Ограничение соседства тундры принято самим алгоритмом.

## Что важно для нашего редактора

Это конкретный пример соседозависимой сборки вместо независимых ромбов. При перекраске одной клетки меняются также фрагменты, в чей набор соседей она входит. Требуется отдельно проверить координатную систему: название направления в коде не гарантирует тот же экранный сдвиг в нашей DOM-карте.

Не следует без эталонов переносить выбор листа для стыка четырёх разных типов или случайные декоративные варианты.
