# Карты и сценарии: проект редактора

Первая часть пункта 4.8 плана. Редактор открывается кнопкой «Редакторы» на основном сайте. Он создаёт карту и размещает объекты для обычного игрового ядра. Конструктор типов юнитов с изменением характеристик, требований, способностей и оформления остаётся отдельным следующим шагом.

## Как пользоваться

1. Откройте «Редакторы». В начале доступна пустая карта 32 × 24 в родной смещённой геометрии, 384 реальные клетки и две стороны.
2. В разделе «Создать карту» можно задать чётные размеры, сгенерировать мир исходного размера WSIZ или скопировать местность текущей партии. Копирование не переносит её города и отряды: их можно разместить отдельно.
3. Выберите слой и значение, затем рисуйте левой кнопкой. Средняя кнопка, Shift с перетаскиванием или инструмент обзора двигают карту. Масштаб меняется независимо от партии.
4. Задайте цивилизации и их старты. Первый игрок — человек. По умолчанию каждая сторона получает обычного основателя, рабочего и защиту; флажок можно снять для сценария с заранее размещёнными городами и армиями.
5. Для юнита доступны тип из текущего каталога, сторона, опыт и укрепление. Для города — название, население, культура и исходные здания. Выбор объекта на клетке позволяет изменить или удалить один элемент стека.
6. Исправьте ошибки размещения. Щелчок по сообщению с номером клетки переводит карту к ней. После проверки кнопка «Начать партию» создаёт и проверяет новое состояние; текущая игра заменяется только после успеха.

Черновик редактора хранится отдельно от текущей партии. «Сохранить проект» сохраняет его в этом браузере; «Экспорт» выдаёт самостоятельный JSON. Проект открывается кнопкой «Открыть» внутри редактора. Верхнее игровое меню «Загрузить» предназначено для сохранений партии. В случае исчерпания квоты браузера доступен экспорт в файл.

[Пример проекта с двумя городами](data/example-two-cities.atlants.json) можно скачать, открыть в редакторе и запустить. Это настроенный сценарий, а не сохранение уже идущей партии.

## Слои, отмена и отрисовка

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

История хранит изменённые клетки и структурно разделяемые данные, а не декодированные изображения всего мира. Один мазок можно отменить и повторить. Новую, импортированную или скопированную карту тоже можно отменить. Ctrl+Z работает с историей редактора вне текстовых полей; Ctrl+S сохраняет проект.

Местность рисует тот же модуль оригинальных атласов, что и игра. Редактор намеренно раскрывает всю карту и все ресурсы. Его canvas ограничен видимой областью. При проверке огромной карты на окне 1365 × 900 холст составил 2094 × 1286 пикселей при масштабе 50%. Генерация выполняется в Worker; закрытие редактора отменяет её и сохраняет прежний черновик.

## Формат и общее ядро

Формат — `civ3-atlants-project`, версия 1. Основные поля:

| Поле | Назначение |
| --- | --- |
| baseProfileId | Исходный профиль Atlants; несовпадение отвергается |
| map | Геометрия, размеры, замыкание и канонический список клеток |
| players | Последовательные p1…pN, цивилизация и стартовая клетка |
| units | Отдельные размещённые экземпляры с типом, стороной, клеткой и опытом |
| cities | Размещённые города, население, культура, здания и необязательные запасы/производство |
| settings | Зерно, сложность, WSIZ для расчётов и наличие стартовых юнитов |
| rules.units | Раздел для будущего конструктора типов; неподключённые изменения правил не запускаются молча |

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

`createGame(profile, {scenario: project})` создаёт обычную партию. Города, население, здания, юниты, границы и видимость проходят общие функции; итог дополнительно проходит обычную проверку сохранения. Во время игры проект не заменяет команды редакторскими обходами. Экспорт партии остаётся обычным сохранением схемы 20.

## Проверки и оставшиеся работы

Проверены кисть и точный ввод после прокрутки, отмена/повтор, согласованность рек, ресурсы, старты, объекты и конкретный элемент стека, файлы, сохранение черновика, изоляция текущей партии, отмена генерации, огромный мир и запуск с обычным ответом ИИ. [Проектная партия](data/project-conquest-verification.json) прошла 424 команды до завоевания на 73-м ходу с загрузкой после каждой команды; в отчёте есть исходный проект и команды.

Новая фиксированная карта получила `reference-fixed-v5`: железо находится на разрешённых правилами холмах. Старые сохранения не перестраиваются. Дополнительная проверка общего отрисовщика исключает длинную линию дороги через весь мир при замыкании.

Сейчас доступны размещение и правка экземпляров исходных типов. Конструктор типов, пользовательские профили правил, оформление и звуки пользовательских юнитов ещё не завершены. Полные эффекты всех 244 исходных зданий и способности всех 413 юнитов не становятся реализованными от размещения на карте: действует текущий отчёт совместимости движка. Требуется более подробное сообщение об этих ограничениях в панели объектов. Копирование старой прямоугольной карты с нечётными размерами также требует доработки; родные карты и фиксированная 12 × 10 проверены. Импорт географии BIQ и состояния SAV остаётся отдельной задачей Д2/Д3.

[Итог: 475 автоматических проверок и 20 публичных сценариев Chromium](data/map-project-verification.json) · [Браузерная проверка редактора](data/browser-editor-verification.json)

[Снимок редактора](data/map-project-editor.png) · [Совместимость движка](data/engine-compatibility.json) · [Ход разработки](../development-progress.md)
