Untitled

<aside> <img src="/icons/asterisk_blue.svg" alt="/icons/asterisk_blue.svg" width="40px" /> Если мы сейчас запустим игру, то увидим вот такое серое нечто →

Потому что в папках с картинками ничего нет. Вместо ошибок, Ren’Py покажет заглушки.

</aside>

Untitled


Что важно понимать в качестве базы работы с кодом?

Решетка для комментариев

Пока вы начинаете путешествие в Ren’Py, не забывайте ставить комментарии в коде, чтобы в нем можно было ориентироваться. Комментарии пишутся с # в начале и видны только разработчику.

**#Так я могу писать прямо внутри кода как сильно я устала его писать, и никто этого не узнает…**

Можно использовать этот функционал, чтобы временно отключать куски кода.

Label как структурная основа кода

label — это маркер конкретной сцены. Следующее за ним слово — название этой сцены.

Т.е. label start — стартовая сцена, с которой начинается игра, а какой-нибудь label date — сцена, например, связанная со свиданием. Называть сцены можно как угодно, но первая обязательно start.

В конце каждой сцены обязательно return или код, переносящий нас в другую сцену.

Все, что будет сдвинуто на 4 пробела вправо (Tab), находится внутри сцены label. Нажимая на ˅ слева от label, вы можете свернуть всю сцену — удобно для организации пространства.

Untitled

Tab и родительско-дочерняя связь в коде

Если часть кода сдвинута на 4 пробела (Tab) вправо, то она относится к стоящей выше и левее строке как дочерняя. Как происходит это со всем кодом, что лежит внутри label, или в развилках при выборах. Сейчас просто запомните, что с помощью Tab мы вкладываем куски кода друг в друга.

Define задает переменные

Чтобы каждый раз на фразу персонажа не писать заново его данные, Ren’Py позволяет один раз в начале закрепить эти данные за переменной с помощью кода:

**define имяпеременной = Character('Имя', color="#000000")**

Далее в коде мы сможем писать код в формате имяпеременной “Что говорит этот персонаж.”, и игра будет выводить имя персонажа конкрентым цветом. Как это в скриншоте слева ←

Если мы пишем текст в кавычках без переменной типа “Сегодня хорошая погода.”, то это будет текст автора.

Init задает информацию со старта игры (подробнее — в разделе про расположение)

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

У каждой строчки кода должна быть функция

Каждая строка — это команда. define задает переменные, label запускает сцену, scene проецирует задний фон, show показывает спрайты персонажей, переменная указывает какой персонаж будет говорить.

После команды следует маркер — название или контент команды.

<aside> <img src="/icons/code_blue.svg" alt="/icons/code_blue.svg" width="40px" /> Единственные строчки кода, которые могут не содержать команду — комментарии под решеткой.

</aside>

Изображения

Все картинки хранятся в папке ИмяИгры/game/images. Размеры картинок должны соответствовать разрешению в 1920х1080 пикселей — масштабируйте их под нужный размер сразу в граф. редакторе.

<aside> <img src="/icons/bookmark_blue.svg" alt="/icons/bookmark_blue.svg" width="40px" /> Можно добавить внутрь папки images еще разделы, чтобы лучше отсортировать материалы — особенно полезно, если в ВН планируется много визуального контента.

</aside>

Важно сразу давать им корректный нейминг, например для фонов использовать префикс bg, а спрайты персонажей именовать по принципу имя характеристика, например, имя + эмоция или его состояние.

Примеры: bg room и eileen happy


Чтобы вывести:

Чтобы скрыть картинку, пишем hide + название/имя (без характеристики), например hide eileen


Если исключить изображения интерфейса, то на примере справа пять картинок, их нейминг мог бы быть:

Untitled

Смещение персонажей и несколько героев на сцене

<aside> <img src="/icons/bookmark_blue.svg" alt="/icons/bookmark_blue.svg" width="40px" /> Ren’Py имеет предзаписанные координаты, на которые можно сослаться по ключевому слову.

</aside>

Untitled

Использование таких ключевых слов может сэкономить силы, и не нужно писать точные координаты для изображения. Однако, эти предзаписанные координаты не всегда подходят — спрайты приклеиваются к краю.

Например, show eileen happy at right, проявит персонажа в месте right, а не по центру.

Чтобы задать более точечное смещение, важно понимать значения осей:

Untitled

Чтобы сместить спрайт персонажа немного правее центра, мне нужно написать значение X = 0.5<N<1, например, 0.7. Но как заставить персонажа сместиться в игре?


Как располагать персонажей в заранее прописанных местах на экране?

Вводим метку init, которая позволяет с начала игры прописать новые переменные. Пишем его перед label start.

Внутри ставим $, который позволяет нам писать внутри Ren’Py на языке Python. Называем переменную, вводим данные на расположение будущих спрайтов.

Выглядит это вот так:

yalign иногда работает непредсказуемо :)

yalign иногда работает непредсказуемо :)

Располагаем двух персонажей одновременно на сцене

Теперь, если нам нужно показать нескольких персонажей в одной сцене, то мы можем сослаться на заранее прописанные в init расположения по типу:

show eve angry at left2, чтобы персонаж появился слева и show alice worried at right2

Смена эмоций

Самый топорный способ менять эмоции героев — каждый раз прописывать строчку кода show имя персонажа + характеристика at расположение. Но это неудобно и делает код неоптимизированным.

Чтобы облегчить себе жизнь, привяжем картинки из папки images к переменным-персонажам в самом начале кода, дописав в скобках после цвета image=’имя’ (должно соответствовать неймингу картинок):

Untitled

Теперь нам достаточно задать базовые эмоции и расположение в начале сцены, а потом просто приписывать характеристику (нейминг картинок) к переменной этого персонажа:

Untitled

Смена эмоции на одну фразу

Пишите эмоцию через @, например:

show **eve smile** at left2
e “Рада тебя видеть!”
e @ shy “Хотя я была не готова…”
e “Проходи скорее!”

Договаривание фразы и монологи персонажей

Договорить фразу на том же экране

Если вставить посреди фразы персонажа {w}, то все, что будет написано после этой метки, появится после щелчка на том же экране. При этом смены эмоции не последует.

Например, a worried “Тебя давно не было. {w} Я беспокоилась!”

Монолог

Лучше всего расположить его в трех кавычках и отбивать строчками, вот так:

Untitled

Смена эмоции посреди фразы

Используйте extend и show имя + характеристика, например:

e neutral “Сегодня готовим макароны.”
a doubt “Кажется, мы съели их в прошлый раз… ”
show alice worried
extend “Да, совсем не осталось!”