Игры · san-smith
Все проекты ранний генератор карт · заморожен

mapgen

Первый генератор миров: единый крейт от шума до провинций. Наработки переехали в vernadsky, проект заморожен.

Что это было

С этого началась работа над генерацией миров. mapgen — единый крейт с библиотекой и консольной утилитой, который собирал карту целиком, от шума до провинций:

  1. карта высот — шум на цилиндрической проекции плюс эрозия;
  2. климат — температура по широте, влажность от ветров и рельефа;
  3. биомы — шестнадцать штук, по высоте, температуре и влажности;
  4. вода — океаны и озёра поиском в ширину от краёв карты;
  5. реки — накопление стока с прорезанием русла;
  6. провинции — семена, рост заливкой, слияние мелких;
  7. регионы — группа провинций по соседству и типу поверхности;
  8. стратегические точки — порты, устья, перевалы;
  9. экспорт — PNG-слои и JSON для игрового движка.

Мир настраивался TOML-файлом: сид, размеры, тип мира, параметры климата, островов и рельефа. Типов мира было шесть — EarthLike, Supercontinent, Archipelago, Mediterranean, IceAgeEarth, DesertMediterranean — с разной целевой долей суши, от 15 % у архипелага до 70 % у суперконтинента.

cargo run --release -- --config examples/earth_like.toml --output output/

На выходе получался набор карт (biomes.png, heightmap.png, normals.png, provinces.png, regions.png, rivers.png) и два файла данных: provinces.json с геометрией, биомами и типом каждой провинции и regions.json с их группировкой.

Карта биомов, сгенерированная mapgen

Карта биомов. Пример earth_like.toml, сид 42, сетка 512×512: 16 биомов, 30 % суши, 120 провинций. Этот слой — тот самый набор биомов, который позже переехал в vernadsky.

Эти же провинции умели собираться в WebAssembly — для браузера есть живая демонстрация.

Почему появился vernadsky

mapgen писался под конкретную игру — Chronicles of Realms — и в этом была его слабость: алгоритмы и игровые допущения жили в одном месте, в одной библиотеке, которая знала про провинции и стратегические точки.

Практика показала, что генератор должен быть устроен иначе:

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

Так появился vernadsky — отдельная библиотека, где эти четыре требования и есть конструкция проекта. mapgen остался прототипом, на котором всё это было проверено на практике.

Что переехало

mapgen не заброшен — его наработки перенесены в vernadsky и работают там, уже в виде стадий:

  • генерация карты высот — в стадию terrain;
  • климат (температура, влажность, осадки) — в climate;
  • таблица шестнадцати биомов с её порогами — в biome, в реестр biomes-v1;
  • модель стока рек — в hydrology;
  • разбиение на провинции — в territory, где единица деления называется территорией и не несёт игрового смысла.

Соответствие видно прямо в коде vernadsky: портированные константы и формулы помечены ссылкой на прототип — например, шкала высот в terrain, пороги биомов в biome, начальный сток реки в hydrology. Сверять поведение было с чем.

Дальше проекты разошлись: vernadsky развивается как библиотека, mapgen заморожен на версии 0.1.0 и остаётся историей — первой попыткой, которая показала, каким генератор быть не должен.

  • ЛицензияMIT / Apache-2.0
  • Версия0.1.0
  • Работалянварь — май 2026
  • Заменёнvernadsky
san-smith · mapgen games.sansmith.dev