Как создать визуальную новеллу на Ren’py. Подробная инструкция для чайников
Главным препятствием на пути к созданию компьютерной игры является отсутствие у начинающего разработчика навыков программирования. И если не хочется тратить годы на освоение технических премудростей, параллельно еще и раскошеливаясь на сомнительной полезности курсы (привет, Skillbox), лучше использовать простой в освоении игровой движок-конструктор – такой как Ren’py.

С помощью нашего поэтапного руководства вы сможете создать простую визуальную новеллу, где будут текстовые описания и диалоги, варианты выбора (нелинейный сюжет), фоны и персонажи, кастомизированный интерфейс, а также музыкальное/звуковое сопровождение. Понимание Python для реализации всех этих возможностей не требуется, так как по каждому пункту есть детальные разъяснения в самом Ren’py и прилагающейся к нему базе знаний. Достаточно лишь брать шаблонные куски кода и править их, добиваясь нужных результатов.

Содержание
Первые шаги. Осваиваемся с базовым функционалом Ren’py
Первым делом пользователю нужно установить сам Ren’py. Он абсолютно бесплатен и качается с официального сайта renpy.org (качать с других ресурсов не рекомендуется, поскольку никто тогда не гарантирует, что под видом полезного ПО вам не пропихнут какой-нибудь вирус или троян). Сам процесс установки ничем не отличается от большинства других программ – достаточно указать директорию, по желанию убрать/поставить галочку напротив пункта “Создать ярлык на рабочем столе” и нажать на старт.

Запустив Ren’py, рекомендуется сразу указать папку, где будут храниться файлы будущего проекта. Это может быть любое удобное для вас место – главное только позаботиться о наличии свободного дискового пространства для будущих файлов. Выбирается путь по нажатию на кнопку Preferences/Настройки в правом нижнем углу.

Теперь самое время создать свой первый проект. Для этого достаточно вернуться на главную страницу и кликнуть по “+Create New Project”, после чего придумать имя своей будущей игры/новеллы. Там же можно сразу указать стандартное разрешение экрана проекта (лучше сразу ставить 1920х1080, так как это самый популярный вариант).

Ren’py также предлагает базовые настройки темы, главного меню и шрифтов. Неприхотливым пользователям этого будет вполне достаточно. Но, надо признать, такие меню выглядят очень дешевыми. Если надумали сделать шедевр, потом можно будет сделать кастомное меню с красивыми кнопками, переходами и дополнительными опциями. Пока же этой темы касаться не будем – есть более важные вопросы.

Открыв папку свежесозданного проекта в проводнике Windows, вы увидите там множество заготовленных файлов и папок. По их названиям можно интуитивно догадаться, для чего они предназначены:
- Папка images станет хранилищем задействованных в игре картинок;
- anim – хранилище для анимаций (например, переходов от сцены к сцене);
- gui – расшифровывается как General User Interface;
- audio – подойдет для звуков, музыки или даже диалогов, если новеллу планируется полностью озвучить;
- tl – каталог, куда помещаются все альтернативные локализации.

При желании пользователь может создавать и свои папки, в дальнейшем указывая путь к нужным файлам при написании игрового кода. Как ему будет удобно. Главное только не употреблять в названиях файлов и папок заглавные буквы, так как у Ren’py с ними часто возникают проблемы.
Создание собственной новеллы на Ren’py. Реализация самых простых задач
Существует несколько редакторов кода, в которых разработчик новелл на Ренпай может писать. Один из самых удобных вариантов – ATOM. Он тоже бесплатен и легко качается/устанавливается. Запустив его в первый раз, можно сразу же зайти в меню “File” и добавить папку нового проекта Ren’py (который мы уже ранее создали). Первым делом стоит создать в редакторе новый файл characters.rpy – или назвать как-то по-другому, как вам хочется, но обязательно в этом же расширении .rpy. Файл будет нужен для создания списка персонажей в примерно таком виде:
- define имя персонажа Character(“Имя персонажа”, color=»#c8ffc8″)

Имя персонажа с маленькой буквы – это информация для вас, а “Имя персонажа” в кавычках – это то, как он будет подписан в новелле. “#c8ffc8” – это цвет его имени. Вместо данного значения можно выбрать код любого понравившегося вам цвета. И так для каждого из героев вашей истории (в первом проекте лучше не перегибать с количеством действующих лиц, чтобы не возникло путаницы – хватит и трех-четырех персонажей).

Ваши сценарные задумки по стандарту будут находиться в файле script.rpy подкаталога game. Можно сразу открыть его в ATOM и увидеть, что создатели Ren’py уже оставили будущему пользователю множество подсказок по реализации основных функций (диалоги, бэкграунд, переходы и т.д.). Прочитайте это для общего развития и смело удаляйте, оставив только первую и последнюю строчки label start: и return. Код сценария будет располагаться между ними и в самом примитивном виде выглядеть следующим образом:
- scene название изображения на фоне – картинку нужно заблаговременно поместить в папку images, причем желательно сохранить его в формате JPG;
- определение персонажа “текст его реплики в кавычках.”;
- scene название другого изображения – чередуя несколько картинок, можно сделать так, чтобы персонаж менял эмоции прямо на ходу, придавая диалогам эмоциональный окрас;
- “строки текста, которые не относятся ни к какому персонажу” – такая строка может пригодиться, если нужно дать какой-то комментарий, рассказать о чем-то не от лица одного из героев.

Уже этого достаточно, чтобы создать самую примитивную историю с линейным сюжетом. С учетом отступов (к которым Ren’py очень чувствителен) простой код новеллы будет выглядеть как на картинке ниже. Можете сразу его протестировать, выбрав опцию запуска проекта в главном меню Ренпай. Но такая игра вряд ли кого-то впечатлит, поэтому идем дальше.

Интересные фишки Ren’py, которые сделают новеллу более красивой и разнообразной
Заядлые чтецы визуальных новелл уже давно узнают с первого взгляда стандартный функционал Ренпай и ассоциируют с низкопробными проектами начального уровня (что не удивительно, учитывая простые шрифты и ничем не примечательный интерфейс). Поэтому преображать свою игру стоит с создания для нее кастомного UI. Текст, кнопки, иконки и панели здесь подробно настраиваются, а их текущие версии обычно располагаются в папке gui вашего проекта. За исключением изображений (папка img) и шрифтов (папка fonts).

Чтобы не пришлось прописывать путь к новым файлам элементов интерфейса, начинающему разработчику новелл рекомендуется просто заменить стандартные варианты или отредактировать в любом графическом редакторе, хоть в Paint. Вот лишь малая часть того, что можно изменить:
- Содержимое подкатегории game/gui/button/ – здесь хранятся кнопки интерфейса;
- Frame.png и textbox.png – это файлы рамки и диалогового окна, в котором отображается текст;
- Scrollbar.png – файл, ответственный за визуальное отображение полосы прокрутки.

Если нужно заменить стандартные шрифты Ren’py на более приятные глазу и соответствующие тематике игры (например, для фэнтези подойдут стилизованные под старину шрифты, а для фантастики – что-то современное, с уклоном в минимализм), придется добавить их в папку fonts, предварительно скачав со специализированных сайтов в формате .ttf или других поддерживаемых. Затем в файле gui.rpy нужно связать добавленный шрифт с игрой:
- define gui.text_font = «название_шрифта.ttf»;
- define gui.text_size = 22 (можно подставить любое число, соответствующее желаемому размеру шрифта в меню);
- define gui.interface_text_color = «#ffffff» (код желаемого цвета, подобрать нужный можно в любом продвинутом графическом редакторе или через онлайн сервисы – например, инструмент Google Палитра).

Нелинейность в Renpy. Делаем варианты и выборы
Самый простой интерактив, который можно придумать в игре – это варианты ответов/действий, определяющие дальнейший ход сюжета. В Ren’Py нелинейность создается через меню выбора (menu:). Это ключевой элемент визуальных новелл – вы показываете игроку варианты, и в зависимости от их выбора, идет другая сцена, диалог или переход к той или иной концовке. Пример кода самого простого меню представлен на скриншоте ниже.

Теперь давайте разберемся с назначением представленных выше команд, а также других, часто встречающихся в новеллах:
- menu: – команда непосредственного вывода экрана с выборами;
- jump label – переход с одного блока сценария на другой без возможности возврата;
- call label – переход с одного блока сценария на другой, но уже с возможностью возврата на предыдущий экран;
- $ variable = value – команда, которая задает численное значение того или иного параметра. В дальнейшем используется, если вы планируете привязывать варианты развития сюжета к статам/характеристикам персонажа;
- if / elif / else – используются в сочетании с переменными. Например, if HP > 10 – выход на один вариант сюжета, if HP < 10 – на другой.

Добавление персонажей отдельными спрайтами
Новеллой из статичных картинок сейчас мало кого можно впечатлить, поэтому начинающему разработчику стоит задуматься о демонстрации персонажей в виде отдельных спрайтов. Причем в нескольких вариациях – чтобы герой/героиня не просто выглядели одинаково, а меняли свои эмоции в зависимости от обстоятельств (злились, смеялись, удивлялись и т.д.). Для этого нужно заготовить несколько версий персонажа на прозрачном фоне и сохранить их в папке images подкатегории game вашего проекта. Renpy отлично распознает большинство популярных форматов картинок, но лучше использовать .png – с ним гарантированно не будет проблем.

Далее открываем наш файл со сценарием (script.rpy) и прописываем нужные строчки. Команды show как раз ответственны для отображения картинок с персонажем. А приписка “at center” (можно написать at right или at left) позволяет задать, в какой части экрана будет появляться тот или иной персонаж. Также есть и другие полезные команды:
- define left_side = Position(xalign=0.0, yalign=1.0) – позволяет вручную задать параметры расположения персонажа по осям X и Y;
- dissolve, moveinright, moveinleft, fade и прочие “приписки” позволяют сделать появление/исчезновение персонажа более интересным. Пример такой команды – show название_картинки at center with dissolve. Приписка dissolve позволяет анимировать плавное затухание при смене спрайтов;
- show название_картинки at left with moveinright – анимация появления с движением с правого края. Можно прописывать и другие направления.


Добавление музыки в игру
Звуковое сопровождение для визуальной новеллы не менее важно, чем хорошо написанный сюжет и сменяющие друг друга картинки. Грамотно подобранный саундтрек настраивает игрока на нужный лад и не позволяет ему заскучать во время чтения. Так что вы тоже должны добавить в свою новеллу немного музыки и хотя бы десяток разнообразных звуков. Ren’py отлично распознает форматы .mp3, .ogg, .wav и еще несколько других. Вам лишь нужно скинуть их по пути директория игры/game/audio и прописать в коде нужного элемента своего проекта (меню, сценарий и т.д.).

Использовать аудиофайлы можно двумя основными способами:
- Цикличное воспроизведение – с помощью команды вида play music «audio/название_трека.ogg» инициируется проигрывание записи по кругу. А чтобы композиция начала проигрываться не резко, с наскока, а плавно, к этой команде можно дописать fadein 1.0. Цифры можно менять, тем самым регулируя плавность;
- Единовременное воспроизведение – инициируется командой play sound «название_звука.ogg». Этой строчкой можно вставлять разнообразные звуки, будь то, реплики, крики, взрывы или что-то другое;
- Если же нужно переключать музыкальные композиции, подойдет команда play music «audio/название_файла.ogg» fadeout 1.0 fadein 1.0. Где fadeout отвечает за затухание предыдущего трека, а fadein – за постепенное увеличение громкости следующего.

Заключение
Завершая это “руководство для чайников”, хотелось бы отметить, что Ren’Py обладает куда большим потенциалом, чем кажется на первый взгляд. Большинство энтузиастов обычно используют его для простых визуальных новелл с несколькими выборами и минимальным функционалом. Но только лишь потому, что у них на что-то более серьезное не хватает компетенции. В реальности же движок способен выдавать сложные проекты с большим количеством игровых механик.

Даже в Steam периодически встречаются RPG на Ренпай с меняющимися статами персонажа и инвентарем, боевой системой и мини-играми. Только прежде чем реализовать что-то подобное, сначала попробуйте разобраться с базовым функционалом и создать простую, но работающую новеллу. Ну а если возникнут вопросы – задавайте их в комментариях. Поможем чем сможем.
