Для того, чтобы сделать интересную разветвленную новеллу нужен хороший сценарий с развилками. Развилки, как правило, появляются из-за возможности выбора для игрока. Об этом мы сегодня и поговорим. Это очень важная тема, так как многие новеллы строятся только на механике выбора действий.
Вся дальнейшая работа будет идти в файле script.rpy. Игра всегда начинается с метки start. После этого начинается сама новелла (выводятся диалоги, фоны, спрайты). До первого выбора их может быть сколько угодно. Всё это делается при помощи команд в скрипте для RenPy, вывод реплик мы уже разбирали ранее. Все команды выполняются сверху вниз. Сама же метка нужна для того, чтобы как-то обозначить кусок сценария. Например, надо перескочить с одного места в другое при выборе игрока. Чтобы создать новую метку нужно написать:
label <название метки>:
<Код игры>
return
Название метки может быть любым, желательно, писать его в латиницей, как и весь остальной код.
После названия метки обязательно надо поставить двоеточие, а следующая строка должна писаться с
отступом в 4 пробела. Всё, что будет написано с отступом - попадет в метку. Если ваш текстовый
редактор настроен правильно, то отступы будут ставиться автоматически. В конце метки желательно
написать return, чтобы не было путаницы в переходах между метками и не возникало лишних ошибок.
Пример:
label my_new_label:
"Новая реплика"
return
Меток можно создавать любое количество. Даже если нет нужды делать выбор, метку можно объявить. Метки помогают избежать дублирования кода, например, они помогают использовать один и тот же диалог в разных ветках сюжета без повторного переписывания кода.
А сейчас создадим пару меток для будущих выборов игрока. Допустим, у главного героя появилась сложная дилемма - что же съесть на завтрак? Сделаем метку для завтрака с хлопьями и метку для завтрака с блинчиками.
Попробуйте самостоятельно написать код, опираясь на пример выше. Содержание меток может быть любым, главное, чтобы они отображали суть выбора игрока.
Код для самопроверкиlabel eat_cereals:
"На завтрак съем хлопья."
return
label eat_pancakes:
"На завтрак съем блинчики."
return
Допустим, у нас есть вступительная часть сценария новеллы. Мы ее уже прописали в метке start и теперь игроку необходимо сделать выбор. Делается это следующим образом: пишем ключевое слово menu, ставим двоеточие, и всё, что будет относиться к блоку с выбором, пишем с отступом в 4 пробела. Первая строка после меню - текст внизу экрана, некое напоминание игроку, что он выбирает. Последующие строки - выборы игрока. После каждого выбора надо поставить двоеточие и написать тот сценарий, который будет выполняться в случае определенного выбора (там может быть переход к новой метке, короткий диалог и т.д.).
menu:
"Что съесть на завтрак?"
"Хлопья с молоком":
<сценарий выбора>
"Блинчики":
<сценарий выбора>
Далее нам надо перейти к новой метке в случае какого-то выбора. Это можно сделать с помощью двух операторов jump или call. Jump перекинет нас к новой метке безвозвратно. Call перекинет нас к новой метке, и когда в новая метка закончится, нас вернут обратно к предыдущей метке, откуда был совершен вызов. В данном случае лучше воспользоваться оператором jump, чтобы не запутаться в переходах между метками.
Пример использования оператора jump:
jump <название метки>
Пример использования оператора call:
call <название метки>
Более подробно об операторах можно почитать в документации.
Попробуйте написать меню с выбором главного героя между двумя завтраками, опираясь на пример выше.
Код для самопроверкиmenu:
"Что съесть на завтрак?"
"Хлопья с молоком":
jump eat_cereals
"Блинчики":
jump eat_pancakes
Если игрок выберет хлопья на завтрак, то код с блинчиками будет просто пропущен. И, наоборот, при выборе блинчиков, хлопья на завтрак отменяются. То есть одна из меток не выполнится.
Проверьте итоговый скрипт для файла script.rpylabel start:
"Что же мне съесть на завтрак?"
menu:
"Что съесть на завтрак?"
"Хлопья с молоком":
jump eat_cereals
"Блинчики":
jump eat_pancakes
return
label eat_cereals:
"На завтрак съем хлопья."
return
label eat_pancakes:
"На завтрак съем блинчики."
return
Запустите проект в RenPy и убедитесь в том, что всё работает.
© 2023 NoveLearn. All rights reserved by FIVE RACCOONS.