# RPG Map Editor — рисование тайловых карт и расстановка событий RPG Map Editor правит тайловые карты движка RPG прямо во время игры: три слоя тайлов, стены и проходы, точку появления героя, случайные бои и события — персонажей, таблички, двери, подбираемые предметы. Сохранение сразу обновляет карту в запущенной игре, а кнопка **Играть** позволяет по ней пройтись. Открывается редактор из набора инструментов (молоток на панели инструментов) как **Редактор RPG-карт** — для той карты, на которой сейчас стоит игрок. ## Правка и её результат в игре Дом старейшины из RPG Plus до правки: ![Дом старейшины в игре: деревянная комната, в глубине стоит старейшина, справа сундук.](assets/house-before.jpg) В редакторе: вкладка **Внешность**, спрайт торговца, кнопка **Разместить NPC**, клик по свободной клетке. Новое событие выбрано на слое **События**, его свойства — справа: ![Редактор RPG-карт на файле rpg_demo_game / rpg_elder_house.json: список «Внешность» с выбранным merchant · village/merchant, карта, где старейшина и новый торговец обведены рамками как события, а события из других файлов — пунктирными рамками; справа свойства карты (тайлсет village, 12 × 10, точка появления 6, 8 со взглядом вверх) и новое событие npc_village_merchant в клетке 9, 3 с чарсетом village/merchant, взглядом вниз и запуском по клавише действия (E/F). Строка состояния сообщает, что «merchant» размещён как NPC.](assets/editor-npc.jpg) После **сохранения** (Ctrl+S) торговец стоит в доме: ![Та же комната в игре, теперь с торговцем справа у задней стены.](assets/house-after.jpg) Его диалог и поведение задаются в свойствах события: сценарий, условие, способ запуска. ## Слои и инструменты - **Фон**, **Основной**, **Передний** — слои тайлов. Фон и Основной могут перекрывать проход непроходимыми тайлами; Передний рисуется поверх персонажей и никогда не блокирует. - **Коллизии** — рисуется поверх тайлов: *Стена* (всегда непроходимо), *Проход* (всегда проходимо) или *Авто* (по тайлам). - **События** — клик выбирает или тащит событие, двойной клик по пустой клетке добавляет, Del удаляет. - **Карандаш**, **Ластик**, **Заливка**; правая кнопка мыши стирает, Alt+клик берёт тайл, клавиши 1–5 переключают слои, B/E/G — кисти. - **Отменить**/**Вернуть** (Ctrl+Z / Ctrl+Y), сетка, масштаб (Ctrl+колесо). ![Слой коллизий дома старейшины: стены закрашены красным как «Стена», пол открыт.](assets/collision.jpg) Вкладки слева: **Тайлы** (палитра тайлсета карты; целые объекты вроде дома или дерева можно ставить одним штампом), **Персонажи** (персонажи с боевыми характеристиками, размещаются как враги), **Предметы** (раскладываются как подбираемые предметы с количеством) и **Внешность** (все спрайты загруженных модов, размещаются как NPC). Правый столбец — свойства карты: ключ имени, тайлсет, размер, масштаб, своё освещение и атмосфера, точка появления и направление взгляда, а также случайные бои (примерно раз в N шагов, группы врагов вида `slime; wolf,slime`). ## Вид сверху и изометрия Редактор рисует карту так же, как её рисует игра. Переключатель вида на панели инструментов меняет только предпросмотр; данные карты остаются прежними. Дом в изометрическом предпросмотре: ![Дом старейшины в изометрическом предпросмотре редактора: та же комната в изометрии, слева палитра тайлсета.](assets/editor-isometric.jpg) Сам вид игры задаёт настройка коллекции `tile.renderer` (`topdown` или `isometric`); ключ `--editor-renderer=isometric` открывает редактор сразу в изометрическом предпросмотре. ## Какие файлы записываются - Сама карта сохраняется в свой `maps/.json`. - События попадают в файл событий этой карты в том же моде (`map_events/<карта>/…`). События, которые добавляют на карту другие файлы или другие моды, показываются приглушённо, с пунктирной рамкой, и никогда не перезаписываются; их id нельзя использовать повторно. - **+** рядом со списком файлов создаёт новую карту в выбранном моде; после сохранения игра сразу знает её как сцену. - Записывать можно только в моды, установленные папками. ## Если что-то пошло не так 1. **«Играть» сообщает, что игра не знает сцену.** Карте нужен файл `scenes/.json` в её моде. 2. **Событие не выбирается.** Оно принадлежит другому файлу или другому моду (пунктирная рамка). 3. **NPC не разговаривает.** У его события нет сценария, либо запуск у него не по клавише действия. 4. **Сохранение меняет строки, которые вы не трогали.** Редактор записывает файлы в своём порядке и добавляет значения по умолчанию для полей событий, поэтому diff может показать больше, чем сама правка.