Быстрый старт RPG - TrueCat17/Ren-Engine GitHub Wiki

Предполагается, что вы уже прочли раздел "Основы".
Ссылку на остальную документацию по RPG можно найти на панели справа.


Создайте новый проект, как уже было указано в статье Быстрый старт!, однако вместо "Визуальной Новеллы" выберите жанр "RPG".
После этого запустите созданную игру.

New RPG

Если всё запустилось и работает, используйте эту заготовку для экспериментов и создания своей игры.


Сценарий

Сценарий RPG-игры можно разделить на 3 части:

  1. Регистрация локаций, объектов, персонажей и т. д. в init-блоках,
  2. Запуск, установка стартовой локации, начальные описания и указания для игрока,
  3. Реакция игры на действия игрока.

Теперь подробнее о каждом пункте.


Регистрация

Чтобы можно было использовать какие-либо сущности, сначала их следует зарегистрировать, указав необходимые параметры.

Например, в папке locations мода std (т. е. resources/mods/std/locations) есть файл с регистрациями локаций (locations.rpy) и файл с регистрациями объектов локаций (objects.rpy). По их именам понятно, что делает каждый из них.
Рядом может быть файл с указанием фоновых звуков локаций (например, так сделано в демке движка) и прочие ваши файлы, если вы решите, что они вам понадобятся.

Так как редактировать файлы локаций и их объектов вручную довольно муторно, для этого создан RPG-редактор (по некоторым причинам регистрировать объекты всё равно нужно самостоятельно, но гораздо бОльшая проблема - расстановка - там решена).
Там имеется собственная справка.

Персонажи регистрируются в общих файлах всех модов (common/characters.rpy), а не конкретно в каком-то одном.
Помещать предыдущие файлы в "общие" нежелательно, т. к. обновление основной игры будет менять эти важные общие файлы для других модов, что плохо. Регистрация персонажей же довольно проста, и ломаться там особо нечему. Конечно, вы можете зарегистрировать и своих персонажей в дополнение к общим, если делаете мод к уже существующей игре.


Запуск

Запуск rpg-игры, как и любой другой, начинается в метке start, её можно найти в файле main.rpy:

label start:
	call rpg_start
	
	call rpg_loop

Также в этом файле логично поместить инициализацию общих для всей игры (не для какой-то её отдельной части) python-переменных и определение функций вроде get_place_labels.

Метка rpg_start находится в labels.rpy:

label rpg_start:
	python:
		set_location("enter", "ikarus_out")
		me.set_direction(to_back)
	
	window show
	"Здесь начинается RPG."
	
	"Управление WASD/стрелки + Shift (бег/шаг). Кнопка <Действие> - E."
	"Быстрые сохранение/загрузка - Q/L."
	"Скрытие/Показ интерфейса - H, скриншот - P."
	window hide
	$ set_rpg_control(True)

Как и говорилось ранее, при запуске мы устанавливаем локацию и персонажей (блок python), даём некоторые объяснения (строки между window show и window hide), после чего разрешаем игроку управлять персонажем.

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


Реакция на действия игрока

После выполнения метки rpg_start из предыдущего абзаца управление вновь возвращается к start, которая, как можно заметить выше, передаёт управление rpg_loop.

Это уже "служебная" метка, которая заранее определена движком, в ней и осуществляется проверка на то, происходит ли переход между локациями, вошёл ли игрок в определённую зону, взаимодействует ли с каким-либо объектом и прочее (подробности здесь).

Если обнаружено какое-то событие, то вызывается соответствующая метка, после выполнения которой управление опять возвращается к rpg_loop, поэтому в играх жанра RPG важно не использовать jump, т. к. в этом случае после выполнения указанной метки игра будет завершена.


Далее ->

⚠️ **GitHub.com Fallback** ⚠️