Обновлено:

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

Карта мира, координаты и генерация

Изометрическая сетка

В C7Engine/C7GameData/GameMap.cs хранятся ширина, высота, клетки, континенты, точки старта и независимые флаги замыкания по X и Y. Это смещённая сетка: на чётной строке допустимы чётные X, на нечётной — нечётные. Поэтому число реальных клеток равно width × height / 2, а не произведению размеров.

Индекс вычисляется как Y × width / 2 + (Y чётное ? X / 2 : (X − 1) / 2). Соседи строятся по восьми направлениям; выход за незамкнутый край возвращает Tile.NONE. Сравнение расстояний и поиск маршрута должны учитывать замыкание карты.

Для нашего массива tiles[y*w+x] требуется явное преобразование координат. Простая подстановка размеров из BIQ удвоит ожидаемую плотность и нарушит соседство.

Генератор по этапам

В GenerateMap параметры включают landform, ocean coverage, climate, temperature, age, размер, варварскую активность и seed. Вызовы идут в следующем порядке:

  1. Проверка размеров; нечётная ширина или высота уменьшается на единицу.
  2. Форма суши и переходы суша → coast → sea → ocean.
  3. Холмы и горы.
  4. Разбиение суши на регионы биомов и назначение биомов.
  5. Растительность и реки.
  6. Поймы на подходящих пустынных клетках вдоль рек.
  7. Ресурсы и бонусные луга.
  8. Позиции игроков и лагеря варваров.
  9. Индексы графических вариантов местности.

Используются карты высот и случайные блуждания; разные этапы создают Random(seed + константа). Ресурсы размещаются с учётом типов местности; роскошь обрабатывается отдельно от стратегических и бонусных ресурсов. Это собственный генератор OpenCiv3, не восстановленный алгоритм Firaxis.

Видимость и знания

C7Engine/C7GameData/AIData/TileKnowledge.cs различает известные клетки, границу разведки и активную видимость. Рельеф влияет на обзор; радар расширяет его по правилу RadarTileVisibility. Это полезная модель для fog of war, но код следует дополнительно проверять на владение юнитом и пограничные случаи.

Для нашей игры

Сохранять seed, параметры и версию генератора; отделить координаты модели от экранной проекции. Валидировать достижимость стартовых позиций, доступ к воде и основные ресурсы, а также замкнутые края. Размеры в интерфейсе показывать в понятных игроку клетках.

Генератор уже вызывает создание лагерей, хотя ниже сохранился старый TODO о лагерях и goody huts. Отсутствие лагерей по одному комментарию было бы ошибочным выводом. Minor tribes остаются отдельной задачей #934.