9.6 KiB
RPG World — ходите по тайловой карте, говорите, открывайте, сражайтесь
RPG World превращает игру в RPG на тайловых картах в духе классических двухмерных ролевых игр: вы ходите по карте из клеток, разговариваете с людьми, открываете сундуки, проходите через двери, сражаетесь с монстрами — а после боя возвращаетесь на то же место. Карта при этом остаётся обычной сценой игры, поэтому диалоговое окно, сценарии, сохранения, музыка и время суток работают на ней так же, как в визуальной новелле.
На этом движке построены деревня, лес и пустыня RPG Plus. Сами карты и их обитатели лежат в контентных модах вроде RPG Demo; этот мод отвечает за правила.
Как играть на карте
- Ходьба — WASD или стрелки; с зажатым Shift герой бежит.
- Действие — E или F: заговорить с тем, кто перед вами, открыть сундук, прочитать табличку.
- Шагните на дверной проём или за край карты, чтобы попасть на следующую карту.
- Случайные бои могут начинаться прямо на ходу в некоторых местах — например, в лесу.
- После боя вы возвращаетесь на ту же клетку той же карты.
- Игра сохраняет, где вы стоите; загрузка возвращает вас ровно туда же.
Клетку, с которой можно взаимодействовать, обводит рамка, а подсказка слева снизу меняется на E / F · Взаимодействовать.
Пример: сундук, который остаётся открытым
Сундук в доме старейшины — это два события на одной клетке. Закрытый показывается, пока не установлен сюжетный флаг rpg_house_chest; его сценарий выдаёт три монеты и ставит флаг. С этого момента вместо закрытого сундука показывается открытый.
{ "Id": "chest", "X": 9, "Y": 7, "Tile": 14,
"Scenario": "rpg_demo/events/house_chest",
"Condition": "rpg_house_chest != 1" },
{ "Id": "chest_open", "X": 9, "Y": 7, "Tile": 15,
"Scenario": "rpg_demo/events/chest_empty",
"Condition": "rpg_house_chest == 1" }
ptext "В сундуке — старые носки и записка: «Не трогай». Поздно. Под носками — три монеты." key=rpg_demo/chest/house
action item.add id=money/coin count=3
flag rpg_house_chest 1
end
Авторам: карты
Карта — это JSON-файл в папке maps/ мода, плюс сцена с тем же именем в scenes/: она задаёт фон для боёв и фоновый звук карты.
- Три рисуемых слоя, каждый — список строк с номерами тайлов (
.— пусто):Back— земля, полы, вода;Main— объекты уровня персонажей: стены, стволы, заборы;Front— рисуется поверх персонажей: кроны деревьев, свесы крыш, арки. - Коллизии — слой строк, который там, где нужно, переопределяет проходимость самих тайлов: невидимая стена у края обрыва или проход в живой изгороди.
- Тайлсет — атлас тайлов и свойства его тайлов (проходимость, поверхности, объекты).
- Spawn — где появляется только что прибывший герой; Zoom; необязательный цвет Ambient для интерьеров (иначе карту освещает время суток) и Atmosphere (
woodlandдобавляет листья, светлячков и рябь на воде). - Encounters — случайные бои: в среднем один за каждые
Stepsшагов против одной из группGroups.
"Encounters": { "Steps": 48, "Groups": ["rpg_slime", "rpg_slime,rpg_slime"] }
Авторам: события
События лежат в map_events/<id карты>/*.json любого мода. У события независимо друг от друга выбираются внешний вид и эффект:
- вид: спрайт персонажа
Sprite, один тайл из атласаTile, иконка предметаIcon, лежащего на земле, или ничего (невидимый триггер); - эффект:
Teleportв клетку этой или другой карты либоScenarioс необязательными командамиCommandsпрямо в событии — весь язык сценариев, включаяaction rpg.battle, флаги и задания; Trigger:Action(E/F, когда вы стоите к нему лицом) илиTouch(наступить на событие);Solid: блокирует ли путь (нарисованные события по умолчанию блокируют);Condition: скрыть событие, пока условие не выполняется;Pages: альтернативные вид и эффект, у каждого своё условие; используется последняя страница с выполненным условием;Route: самостоятельное движение вроде{"Steps": ["left", "wait", "right"], "Every": 0.8}с направлениямиup/down/left/right, режимамиrandom,toward/away(к игроку и от него), а такжеwaitиface_…;Light: свечение вокруг события,{"Radius": 3, "Color": "#ffd8a0"}; видно в сумерках и ночью.
Дополняйте и меняйте карты чужих модов. Файлы событий сливаются в порядке загрузки: новый Id добавляет событие на карту, а тот же Id от мода, который зависит от владельца карты, заменяет его. Именно так RPG Plus даёт старейшине из демо новые диалоги.
Действия сценариев
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
action rpg.teleport map=rpg_forest x=1 y=8 dir=right
rpg.battleзапускает бой боевым ядром игры и возвращает героя на ту же клетку; при победеwin_flagполучает значение 1 — и монстр на карте, чьё условие проверяет этот флаг, исчезает. После этого действия сценарий нужно завершать.rpg.teleportпереносит игрока в клетку этой или другой карты.
Настройки игры
- Внешний вид (
rpg.player_charset) — спрайт героя на картах, выбирается из чарсетов игры. - Проекция карты (
tile.renderer) — вид сверху или изометрия; см. Tile Rendering.
Если что-то пошло не так
- Персонаж или сундук не реагирует. Встаньте к нему лицом и нажмите E или F; событие с
Touchсрабатывает, только если на него наступить. - Монстр или сундук возвращается. Его
Conditionдолжен проверять тот флаг, который выставляет его сценарий илиwin_flag. - Не пройти туда, где вроде бы открыто. Клетку блокирует непроходимый тайл или слой коллизий карты.
- Нет фона для боя. Сцене карты в
scenes/<map>.jsonнуженdefaultBackground.



