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

Пока вы начинаете путешествие в Ren’Py, не забывайте ставить комментарии в коде, чтобы в нем можно было ориентироваться. Комментарии пишутся с # в начале и видны только разработчику.
**#Так я могу писать прямо внутри кода как сильно я устала его писать, и никто этого не узнает…**
Можно использовать этот функционал, чтобы временно отключать куски кода.
label — это маркер конкретной сцены. Следующее за ним слово — название этой сцены.
Т.е. label start — стартовая сцена, с которой начинается игра, а какой-нибудь label date — сцена, например, связанная со свиданием. Называть сцены можно как угодно, но первая обязательно start.
В конце каждой сцены обязательно return или код, переносящий нас в другую сцену.
Все, что будет сдвинуто на 4 пробела вправо (Tab), находится внутри сцены label.
Нажимая на ˅ слева от label, вы можете свернуть всю сцену — удобно для организации пространства.

Если часть кода сдвинута на 4 пробела (Tab) вправо, то она относится к стоящей выше и левее строке как дочерняя. Как происходит это со всем кодом, что лежит внутри label, или в развилках при выборах. Сейчас просто запомните, что с помощью Tab мы вкладываем куски кода друг в друга.
Чтобы каждый раз на фразу персонажа не писать заново его данные, Ren’Py позволяет один раз в начале закрепить эти данные за переменной с помощью кода:
**define имяпеременной = Character('Имя', color="#000000")**
Далее в коде мы сможем писать код в формате имяпеременной “Что говорит этот персонаж.”, и игра будет выводить имя персонажа конкрентым цветом. Как это в скриншоте слева ←
Если мы пишем текст в кавычках без переменной типа “Сегодня хорошая погода.”, то это будет текст автора.
В шаблоне по умолчанию нет этого кода, но позже мы его добавим. Ставится он перед самым первым 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
Чтобы вывести:
scene bg roomshow eileen happyЧтобы скрыть картинку, пишем hide + название/имя (без характеристики), например hide eileen
Если исключить изображения интерфейса, то на примере справа пять картинок, их нейминг мог бы быть:
bg shopcandy worry, scientist doubt, witch normal, cat normal
<aside> <img src="/icons/bookmark_blue.svg" alt="/icons/bookmark_blue.svg" width="40px" /> Ren’Py имеет предзаписанные координаты, на которые можно сослаться по ключевому слову.
</aside>

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

Чтобы сместить спрайт персонажа немного правее центра, мне нужно написать значение
X = 0.5<N<1, например, 0.7. Но как заставить персонажа сместиться в игре?
Вводим метку init, которая позволяет с начала игры прописать новые переменные. Пишем его перед label start.
Внутри ставим $, который позволяет нам писать внутри Ren’Py на языке Python. Называем переменную, вводим данные на расположение будущих спрайтов.
Выглядит это вот так:

yalign иногда работает непредсказуемо :)
Теперь, если нам нужно показать нескольких персонажей в одной сцене, то мы можем сослаться на заранее прописанные в init расположения по типу:
show eve angry at left2, чтобы персонаж появился слева иshow alice worried at right2
Самый топорный способ менять эмоции героев — каждый раз прописывать строчку кода show имя персонажа + характеристика at расположение. Но это неудобно и делает код неоптимизированным.
Чтобы облегчить себе жизнь, привяжем картинки из папки images к переменным-персонажам в самом начале кода, дописав в скобках после цвета image=’имя’ (должно соответствовать неймингу картинок):

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

Пишите эмоцию через @, например:
show **eve smile** at left2
e “Рада тебя видеть!”
e @ shy “Хотя я была не готова…”
e “Проходи скорее!”
Если вставить посреди фразы персонажа {w}, то все, что будет написано после этой метки, появится после щелчка на том же экране. При этом смены эмоции не последует.
Например, a worried “Тебя давно не было. {w} Я беспокоилась!”
Лучше всего расположить его в трех кавычках и отбивать строчками, вот так:

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