Renpy как пользоваться
Перейти к содержимому

Renpy как пользоваться

Визуальная новелла, интерлюдия: создание разветвленного сценария силами RenPy

И вновь приветствую всех! Пока продолжение прошлого поста, посвященное основам построения сюжета, еще в процессе написания, я попробую максимально доступно описать методы ветвления сюжета на примере детской игры с загадками (и, возможно, не самой лучшей графикой — не могу же я весь контент показать до релиза?).

Эта статья посвящена техническим моментам реализации новеллы при помощи инструментов движка RenPy, в частности — вариативности сюжетных линий.

В комментариях к прошлой записи несколько раз прозвучал вопрос о том, как реализована параллельность сюжета в новелле Spiritual Cavern, которая уже обзавелась собственной группой на Facebook.

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

Спойлер: создание новеллы с графикой и написанием кода заняло 20 минут.

Какая новелла может обойтись без действующих лиц? Подготовим нашего персонажа, который будет загадывать загадки:

События происходят не посреди пустоты, потому нам потребуется фон:

Подготовив материалы, мы можем приступить к составлению сюжета — в нашем примере он будет очень простым:

Суть сюжета очень проста: игрок трижды отвечает на вопросы, в зависимости от его ответа меняется настроение кубика. Кроме того, при каждом правильном ответе мы увеличиваем счетчик «Ответы», от которого в последствии зависит концовка игры: если был дан хоть 1

Итак, приступим. Я не буду описывать полный процесс написания кода в RenPy, так как уроков наэту тему довольно много. Но уделю отдельное внимание тем функциям, которые отвечают за ветвление сюжета.

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

Кроме того, при создании нового проекта RenPy создает не пустой файл, а стандартную сцену, которая может быть основой для Ваших первых работ.

Основными конструкциями в RenPy являются:

  • label имя_метки — место в коде, к которому в последствии можно перейти при помощи команды jump имя_метки
  • scene — команда загрузки фонового изображения из папки images созданного проекта. Важно знать: в случае смены фона требуется заново ввести команду по выводу изображения персонажа.
  • show — отобразить картинку (чаще всего — персонажа) поверх существующего фона.
  • say — фраза, произносимая персонажем. Чаще всего используется в следующих форматах:Вариант первый: «автор» «фраза» — здесь мы явно указываем, кто говорит фразу и как эта фраза звучит.Однако, для удобства пользователя есть возможность упростить свою жизнь, заранее указав имя автора.Для этого перед меткой начала игры применяется следующая конструкция:define anna = Character(«Anna:»)В дальнейшем достаточно написать anna «фраза», что будет воспринято системой как «Anna:» «фраза»Важно понимать, что нет прямой связи между показываемой картинкой (show) и автором фразы — кроме той, которая формируется у игрока в процессе игры.
  • menu — выбор игрока, в зависимости от которого происходит выполнение соответствующего кода, будь то простая фраза либо переход к конкретной метке.

Итак, что же происходит в первом фрагменте кода?

1) мы выводим на экран сцену «bg 1» из папки images нашего проекта
2) от имени игрока (define char = Character(«Я:») перед label start) выводим фразу «Интересно, где же кубик?»
3) плавно (with dissolve) выводим на экран изображение «cube wow»
4) от имени кубика (строка define e = Character(«Кубик:») перед label start) выводим фразу «А вот он я!»
5) после обмена фразами мы переходим к новой для нас команде — menu, отвечающей за выбор игрока и реакцию игры на этот выбор.

Ничего сложного, согласитесь? Требуется лишь следовать правилам составления сцены и корректно вводить команды.

У тех, кто был внимателен при прочтении нашего «сценария», может возникнуть вопрос: а как нам определить, хорошо или плохо заканчивается игра? Всё верно, при помощи команды menu мы можемпредоставить выбор игроку, а в данной ситуации требуется противоположное — сделать выбор на основе данных самой программы.
С этой целью мы добавляем в игру типичный для программ элемент -переменную под названием «answers» и устанавливаем её значение равным нулю.

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

Таким образом, после трех вопросов её значение находится в диапазоне от 0 (если не было дано ни одного правильного ответа) до 3 (если все ответы были правильными).
Будем добрыми, и поставим простое условие: отгадал хоть одну загадку — добро пожаловать на прогулку. Для этого нам потребуется конструкция if-else, «если-иначе». Ниже — пример её применения в нашей новелле:

Что такое Ren’Py и с чем его едят

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

Ren’Py это бесплатный кросс-платформенный движок, который поможет вам сделать сюжетную игру. Это может быть:

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

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

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

Симулятор, например, симулятор свиданий или тайм-менеджер тоже можно написать на Ren’Py, используя поддержку языка Python. Движок сам позаботится о таких вещах, как постоянство и эффективный рендеринг, позволяя программисту сфокусироваться на интерфейсе и логике игры. Более того, скриптовый язык Ren’Py, на котором так просто писать визуальные новеллы, позволит добавить сюжетные вставки в ваш симулятор.

Возможности визуализации и геймплея Ren’Py могут быть расширены пользователем и достаточны для создания любой двумерной сюжетной игры.

Бесплатность

На Ren’Py можно делать как коммерческие, так и бесплатные игры. Хотя движок и его библиотеки являются open source, лицензирован от таким образом, что вы можете сами выбрать, будут у вашей игры открытые исходники или нет. Для распространения игры на Ren’Py вам не придется платить создателям движка или кому-то еще.

Кросс-платформенность

Одно из главных преимуществ Ren’Py — его кросс-платформенность.

Windows 2000+ (x86)

Mac OS X 10.4+ (x86 и ppc)

Linux (x86, glibc 2.3+)

Движок может компилировать отдельные версии игр для всех этих платформ. Пользователю не придется ничего дополнительно скачивать — игры запустятся сразу.

Скриптовый язык

В Ren’Py используется простой язык, основанные на тексте. Вот небольшой отрывок из игры:

scene bg beach2

«Вскоре Мэри нарушила тишину, задав мне вопрос.»

show mary dark smiling

m «Я немного рассказала о своей семье. но еще не спрашивала о твоей. Какая она?»

p «Здесь на острове я живу с моими тетей и дядей, а дома — с мамой, папой и сестрой.»

m «Сестрой? Старшей или младшей?»

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

Как видно в этом примере, взятом из настоящей игры, работа со скриптом Ren’Py требует ненамного больше усилий, чем простой набор сюжетного текста. Движок даже позволяет сокращать имена персонажей и печатать m вместо «Мэри».

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

Вместе с движком поставляется тектовый редактор jEdit, но скриптовый язык Ren’Py основан на тексте и это позволяет работать с ним в текстовых редакторах на ваш выбор. Есть также сторонние инструменты для проверки правописания и сравнения двух версий игры.

Возможности скриптового языка:

    — Отображение диалогов и мыслей

— Игрок может делать выборы с помощью меню

— Показ и скрытие изображений

— Переходы между экранами

— Проигрывание музыки, звуков и голоса

— Переходы по меткам

Начиная с версии 6.10 появилась возможность произвольно анимировать положение камеры, делая небольшие клипы из одного или нескольких сменяющихся изображений:

Настройки по умолчанию

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

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

    — Главное меню, отображаемое перед началом игры

— Игровое меню для загрузки, сохранения и настроек

— Выбор между полноэкранным и оконным режимами

— Независимая настройка громкости музыки, звуков и голоса

— Возможность промотки текста, с ограничением на уже пройденное

— Автоматическая промотка текста на любой скорости, причем более длинный текст остается на экране дольше

— Возможность скрыть текст, чтобы игрок мог рассмотреть фон

— Отмотка на предыдущие экраны, где можно сделать другой выбор

Настройки внешнего вида и локализация

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят
Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

У разработчика игры множество возможностей настроить Ren’Py под свою игру:

    — Отображение текста в режиме NVL, когда на экран выводится несколько абзацев текста одновременно

— Изменение внешнего вида меню с помощью тем

— Стили, с помощью которых можно детально настроить вид игры

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

Поддерживаемые типы файлов

Ren'Py - Что такое Ren'Py и с чем его едят Что такое Ren'Py и с чем его едят

Изображения: JPEG/JPG, PNG, BMP, GIF

Звук: OGG Vorbis, WAV (только несжатый PCM), MP3, MP2

Видео: Theora, MPEG 4, MPEG 2, MPEG 1

Ren’Py поддерживает шрифты TrueType и некоторые шрифты, основанные на изображениях. Движок сам запакует все ресурсы в архивный файл формата RPA — это предотвратит их случайный просмотр игроком (для защиты от спойлеров).

На движке Ren’Py сделано уже более 180 игр , из них несколько на русском языке.

Полезные ссылки:

Официальный сайт движка — Подробное описание и форум на английском языке

Русская страничка движка — Локализованная версия движка и Руководство для начинающих

Подробнее о визуальных новеллах — Визуальные новеллы и движок Ren’Py

Визуальная новелла, интерлюдия: создание разветвленного сценария силами RenPy

И вновь приветствую всех! Пока продолжение прошлого поста, посвященное основам построения сюжета, еще в процессе написания, я попробую максимально доступно описать методы ветвления сюжета на примере детской игры с загадками (и, возможно, не самой лучшей графикой — не могу же я весь контент показать до релиза?).

Эта статья посвящена техническим моментам реализации новеллы при помощи инструментов движка RenPy, в частности — вариативности сюжетных линий.

В комментариях к прошлой записи несколько раз прозвучал вопрос о том, как реализована параллельность сюжета в новелле Spiritual Cavern, которая уже обзавелась собственной группой на Facebook .

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

Спойлер: создание новеллы с графикой и написанием кода заняло 20 минут.

Графика: персонаж и фон

Какая новелла может обойтись без действующих лиц? Подготовим нашего персонажа, который будет загадывать загадки:

События происходят не посреди пустоты, потому нам потребуется фон:

Простейший сюжет

Подготовив материалы, мы можем приступить к составлению сюжета — в нашем примере он будет очень простым:

Суть сюжета очень проста: игрок трижды отвечает на вопросы, в зависимости от его ответа меняется настроение кубика. Кроме того, при каждом правильном ответе мы увеличиваем счетчик «Ответы», от которого в последствии зависит концовка игры: если был дан хоть 1

Итак, приступим. Я не буду описывать полный процесс написания кода в RenPy, так как уроков наэту тему довольно много. Но уделю отдельное внимание тем функциям, которые отвечают за ветвление сюжета.

Написание кода игры

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

Кроме того, при создании нового проекта RenPy создает не пустой файл, а стандартную сцену, которая может быть основой для Ваших первых работ.

Основными конструкциями в RenPy являются:

  • label имя_метки — место в коде, к которому в последствии можно перейти при помощи команды jump имя_метки
  • scene — команда загрузки фонового изображения из папки images созданного проекта. Важно знать: в случае смены фона требуется заново ввести команду по выводу изображения персонажа.
  • show — отобразить картинку (чаще всего — персонажа) поверх существующего фона.
  • say — фраза, произносимая персонажем. Чаще всего используется в следующих форматах:Вариант первый: «автор» «фраза» — здесь мы явно указываем, кто говорит фразу и как эта фраза звучит.Однако, для удобства пользователя есть возможность упростить свою жизнь, заранее указав имя автора.Для этого перед меткой начала игры применяется следующая конструкция:define anna = Character(«Anna:»)В дальнейшем достаточно написать anna «фраза», что будет воспринято системой как «Anna:» «фраза»Важно понимать, что нет прямой связи между показываемой картинкой (show) и автором фразы — кроме той, которая формируется у игрока в процессе игры.
  • menu — выбор игрока, в зависимости от которого происходит выполнение соответствующего кода, будь то простая фраза либо переход к конкретной метке.

Итак, что же происходит в первом фрагменте кода?

1) мы выводим на экран сцену «bg 1» из папки images нашего проекта
2) от имени игрока (define char = Character(«Я:») перед label start) выводим фразу «Интересно, где же кубик?»
3) плавно (with dissolve) выводим на экран изображение «cube wow»
4) от имени кубика (строка define e = Character(«Кубик:») перед label start) выводим фразу «А вот он я!»
5) после обмена фразами мы переходим к новой для нас команде — menu, отвечающей за выбор игрока и реакцию игры на этот выбор.

Ничего сложного, согласитесь? Требуется лишь следовать правилам составления сцены и корректно вводить команды.

У тех, кто был внимателен при прочтении нашего «сценария», может возникнуть вопрос: а как нам определить, хорошо или плохо заканчивается игра? Всё верно, при помощи команды menu мы можемпредоставить выбор игроку, а в данной ситуации требуется противоположное — сделать выбор на основе данных самой программы.
С этой целью мы добавляем в игру типичный для программ элемент -переменную под названием «answers» и устанавливаем её значение равным нулю.

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

Таким образом, после трех вопросов её значение находится в диапазоне от 0 (если не было дано ни одного правильного ответа) до 3 (если все ответы были правильными).
Будем добрыми, и поставим простое условие: отгадал хоть одну загадку — добро пожаловать на прогулку. Для этого нам потребуется конструкция if-else, «если-иначе». Ниже — пример её применения в нашей новелле:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *