Как сделать сохранение в игре бесконечное лето

Добавил пользователь Владимир З.
Обновлено: 19.09.2024

Для начало нужно создать файл с расширением .rpy . Затем открыть его в текстовом редакторе, и следовать далее по руководству.

Стиль и синтаксис Ren'Py похож на Python. Если знакомы с ним, то проблем возникнуть не должно.

Файлы состоят из блоков и команд в блоках, например:

Команды в блоках должны везде иметь одинаковый отступ. Будь то 2 или 4 пробела. В большинстве случаев рекомендуется использовать 4 пробела.

В большинстве случаев в редакторе кода будет по-умолчанию выставлено значение отступов, поэтому рекомендуется использовать TAB для отступов.

Шаги, приведенные ниже крайне важны. Без них мод не будет виден в списке модов в игре.

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

Разберем более детально пример выше:

  1. my_mod - название начального лейбла мода. При запуске мода, всегда первым начинает запускаться этот лейбл, указанный внутри командых скобок. Не будет виден пользователю. Должен быть уникальным, иначе возможны конфликты с модификациями, имеющими лейблы с таким же названием. Можно использовать только латиницу!
  2. Мой мод - название мода, которое будет отображаться в списке модов. Допускается использование кириллицы.

Теперь, для того, чтобы игра поняла, где начинается мод, нужно добавить начальный лейбл:

  1. Была объявлена метка ( label ), имя которой обязательно должно соответствовать имени мода, указанного в квадратных скобках. В нашем случае - my_mod .

Если вы хотите поменять шрифт в списке, то конструкция будет следующей:

Можно использовать как TrueType (.ttf), так и OpenType (.otf) шрифта.

Также можно добавить цвет:

И изменить размер шрифта:

Далее, в метке my_mod можно начинать писать сценарий. В нем используется специальный синтаксис Ren'Py, который мы разберем далее.

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

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

Общий синтаксис метки выглядит так:

Есть два вида переходов:

В данном случае команды после "прыжка" будут пропущены игрой, например, фраза "действия после прыжка" из примера ниже не будет выведена на экран игрока. Любые другие команды, которые были написаны после прыжка также не сработают.

В этом случае фраза из примера выше будет выведена на экран, после завершения действий из метки my_mod_day2 .

Закончить блок можно командой return . После неё мод будет завершен и будет показано главное меню игры, если до этого мы не вызывали какой-либо из лейблов, а лишь прыгали по ним с помощью команды jump .

Приведём ещё один пример для наглядности

В первом лейбле идут некие действия, а затем мы вызываем второй лейбл, в котором тоже идут некие действия. Из-за того, что мы вызвали второй лейбл, а не прыгнули на него, при команде return внутри вызванного лейбла мод не завершится — нас просто выкинет обратно на первый лейбл, потому что мы прекратили 'вызов' второго лейбла и вернулись обратно на первый. Но! Вернулись не в самое его начало, а продолжили работу после момента с вызовом второго лейбла.

Реплики персонажей имеют следующий общий вид: " " , где:

  1. ID персонажа - название переменной, которой он был объявлен.
  2. Реплика - текст, который будет говорить персонаж.

Список персонажей и их переменные представлены в таблице по ссылке: Ресурсы игры - Персонажи.

В примере ниже представлен пример реплик Мику и Ульяны, имена которых ещё не известны:

В первом случае, имя пионера или пионерки будет сменено на "Пионер/Пионерка", сохраняя свой цвет. Во втором же случае имя персонажа будет сменено на "Девочка", сохраняя свой цвет.

Смена стиля интерфейса

Есть всего 4 варианта:

  1. prolog_time() - Интерфейс пролога.
  2. day_time() - Интерфейс дня.
  3. sunset_time() - Интерфейс заката.
  4. night_time() - Интерфейс ночи.

Смена окраски спрайтов согласно времени

Всего существует 3 варианта раскраски спрайтов. Все они происходят через переменную persistent.sprite_time

  1. $ persistent.sprite_time = "day" — Дневная версия окраски спрайтов.
  2. $ persistent.sprite_time = "sunset" — Вечерняя версия окраски спрайтов.
  3. $ persistent.sprite_time = "night" — Ночная версия окраски спрайтов.

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

Обратите своё внимание, что если в моде не менять значение переменной смены стиля интерфейса и смены окраски спрайтов, то по умолчанию стиль интерфейса будет равен $ prologue_time() , а окраска спрайтов — $ persistent.sprite_time = "night"

Существует два основных стиля изложения материала, используемых в визуальных новеллах:

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

NVL : Визуальные новеллы, созданные в стиле NVL, представляют собой несколько строк на экране, выводимые одновременно в окне, которое занимает весь экран.

По умолчанию меню отображаются в ADV-режиме, занимая весь экран. Существует также альтернативное представление меню в NVL-режиме, в котором меню отображаются сразу после текущей страницы текста NVL-режима.

Для перехода в NVL-режим повествования используйте следующую команду: $ set_mode_nvl()

Для перехода обратно в ADV-режим повествования используйте следующее: $ set_mode_adv()

Примеры перехода в NVL и ADV режимы повествования:

Плавные переходы окон

Не забывайте про плавные переходы для окон, в которых ведётся повествование.

  • window hide — плавное скрытие диалогового окна.
  • window show — плавное появление диалогового окна.
  • nvl show dissolve — плавное появление NVL-окна.
  • nvl hide dissolve — плавное скрытие NVL-окна.

Пример использования плавных переходов окон выглядит так:

Появление персонажа в NVL-режиме

Персонажи могут быть объявлены для использования в NVL-режиме путем создания ещё одного персонажа, но с добавлением параметра kind=nvl . Например:

Если этого не сделать, то внутри nvl-режима повествования персонажи без параметра kind=nvl будут говорить в adv-режиме.

Обратите своё внимание, что можно сделать и по другому — сделать цикл, который будет менять объявление персонажей в зависимости от текущего режима повествования. Именно такой способ и используется в БЛ.

Примеры текстовых тегов:

Текстовый тег alpha отображает текст, расположенный между самим тегом и его закрывающим тегом, с указанной непрозрачностью. Непрозрачность должна иметь значение между 0.0 и 1.0, что соответствует полной прозрачности и полной непрозрачности, соответственно. Если значение начинается с префикса + (добавить на) или - (убавить на), непрозрачность будет изменена на указанное число, а не полностью заменена. Если значение начинается с префикса * (умножить на), непрозрачность будет умножена на это число.

Тег жирного шрифта выводит текст, расположенный между самим тегом и его закрывающим тегом, жирным шрифтом.

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

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

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

Тег ожидание – самозакрывающийся тег, который ждёт, пока читатель нажмёт на кнопку для продолжения. Если для тега задан аргумент в форме числа,то ожидание автоматически заканчивается, когда заданные секунды проходят.

Полный список текстовых тегов можно найти внутри соответствующей статьи в документации Ren'Py

Общий синтаксис для вывода фона: scene или show

Разница между scene и show

В первом случае, команда очищает все слои и показывает изображение, во втором — просто показывает изображение поверх других. Приведём пример:

Это был пример с использованием scene для показа изображения. Фона, в нашем случае.

А здесь была использована команда show , которая лишь сменила фон на другой, не затрагивая другие изображения. Почему в нашем случае оно сменило только фон, а не показало изображение поверх всех, смотрите ниже.

В данном случае, из-за того, что у фона имеется отступ после слова bg , слово bg сработало как "тэг" и сменился только фон, а не показался новый поверх спрайтов (А если бы изображение было без тэга и показалось поверх всего, то если бы мы его убрали про помощи hide , мы бы снова увидели нашу дневную площадь и спрайты девушек). Более подробно об этом рассказано чуть ниже.

Фоны из игры представлены в таблице по ссылке: Ресурсы игры - Изображения - Фоны.

Общий синтаксис для вывода иллюстраций: scene или show

Все иллюстрации из игры представлены в таблице по ссылке: Ресурсы игры - Изображения - CG.

Вызывается спрайт с помощью: show

Обычно спрайты состоят из слов, разделённых пробелом:

В оригинальной игре имя персонажа совпадает с ID говорящего из предыдущего раздела этого руководства

Список всех спрайтов пока можно найти здесь

Если персонаж уже на экране, то повторное использование show будет менять эмоцию и/или одежду, если при повторном использовании у персонажа имеется "тэг". Скажем, в команде show un cry sport — un выступает в качестве "тэга" персонажа, поэтому при смене одежды/эмоции не нужно будет убирать предыдущую картинку. Точно также тэги работают и с изображениями по типу БГ, ЦГ, и прочих.

Для того, чтобы убрать персонажа, воспользуйтесь: hide

Если вы хотите вслед за этим сменить декорации, то прописывать hide для каждого персонажа не обязательно, команда scene сама их уберет

Всего в игре 7 позиций где может находиться спрайт:

Пример расположения спрайтов

На скриншоте выше были использованы следующие команды:

Также, если не хотите использовать стандартные расположения спрайтов, можно сделать свои собственные! Для этого необходимо показать спрайт, а затем прописать его расположение по x и y координатам. Для этого используем команду center , куда вписываем кортеж float чисел. Первое число — x координата, вторая — y координата.

Обращаем внимание, что позиционирование идёт по center , а не по align или pos .

Так же можно показать персонажа ближе / дальше. Для этого можно воспользоваться атрибутом close / far .

Пример использования атрибутов close / far

На скриншоте выше как раз были использованы эти атрибуты. Команды:

Мы можем показать спрайты, bg и cg с некоторым замедлением, плавно.

Атрибутов для плавности 6, они отличаются лишь своей скоростью:

  1. dspr - 0,2 сек - Самый быстрый, на практике не особо заметен.
  2. dissolve_fast - 0.5 сек.
  3. dissolve - 1 сек - Средняя скорость, считаю оптимальной для смены cg на bg и наоборот и для эмоций спрайтов
  4. dissolve2 - 2 сек - Самая плавная картинка, считаю хорошим вариантом для переходов между локациями лагеря
  5. hell_dissolve - 50 секунд - на практике не особо применим, но вдруг пригодится.
  6. dissolve_long - 100 секунд.

Также можно группировать несколько объектов для одновременного начала эффекта:

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

Если все вышеприведённые примеры Вас не устраивают, можно добавить свой атрибут плавности. Для этого, пропишите его в блоке init.

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

  • show blink - Закрыть глаза
  • show unblink - Открыть глаза
  • show blinking - Моргание

blink и unblink это разные эффекты, они не могут отменить друг друга.

Так же к эффектам моргания можно применить атрибут плавности.

Вполне может быть, что по сюжету Вашего мода, может не хватить имеющихся БГ, ЦГ и спрайтов. В таком случае, мы добавим свои.

Для начала нам надо объявить изображение в блоке init . Делается это, с помощью объявления переменной image . Например, если есть изображение city.jpg , и оно находится в папке game/mods/my_mod/city.jpg , то объявить его можно вот так:

И использовать его:

Тэги к изображениям

Настоятельно рекомендую использовать тэги. В приведённом ниже примере слово bg выступает в виде тэга к изображению. Если объявить несколько БГ с таким тегом, то при показе следующего он автоматически заменит предыдущий.

Более детальную информацию про ATL

(opens new window) смотрите в Продвинутом руководстве.

Ren'Py поддерживает воспроизведение музыки и звуковых эффектов, используя следующие форматы аудио файлов: Opus , Ogg Vorbis , mp3 , wav .

Добавление различных аудио файлов в ваш мод происходит посредством команды, приведённой выше. Приведём пример использования.

Для начала проигрывания музыки используется: play music , а для остановки - stop music .

Список музыки из игры представлен в таблице по ссылке: Ресурсы игры - Звуки - Музыка.

Звуки окружения из игры представлены в таблице по ссылке: Ресурсы игры - Звуки - Окружение.

Прочие звуки из игры представлены в таблице по ссылке: Ресурсы - Звуки - Прочие звуки.

Команды fadein и fadeout являются необязательными. fadeout дает время затухания для текущей проигрываемой музыки в секундах, в то время как fadein дает время, необходимое для плавного "входа" новой музыки.

Команды loop и noloop также являются необязательными. loop заставляет музыку зацикливаться, в то время как noloop заставляет ее играть только один раз. Если ни один из них не задан, используется значение по умолчанию канала.

Оператор queue используется для создания очереди аудио файлов. Они будут воспроизведены, когда канал закончит воспроизведение текущего воспроизводимого файла, если таковой имеется.

Команда для кортежа воспроизводимых файлов начинается с ключевого слова queue , за которым следует имя канала для воспроизведения звука. Он опционально принимает команды fadein , loop и noloop .

Также queue поддерживает параметры loop и fadein .

Ren'Py предусматривает возможность использования встроенной версии Libav для воспроизведения видеороликов с такими форматами, как: .webm , .matroska , .ogg , .avi

Самый простой способ отображения видео в полноэкранном режиме заключается в использовании функции renpy.movie_cutscene . Она отображает видео в полноэкранном режиме до тех пор, пока оно не закончится либо игрок не щелкнет кнопкой мыши, чтобы прекратить воспроизведение.

Видеоролик, отображаемый на экране посредством команды Movie , можно использовать для отображения в любом месте, где Ren'Py может его показать. Например, видео может выводиться как фон экрана меню или в качестве фона.

Отображаемый видеоролик также можно использовать для определения видео спрайта, который представляет собой спрайт, склеенный из двух видео. Первый видеоролик обеспечивает цвет спрайта. Второй - так называемый, "маска-ролик" - обеспечивает альфа-канал, где белый цвет - полная непрозрачность, а чёрный - полная прозрачность.

Видео, которые воспроизводятся в отображаемом объекте Movie , зацикливаются автоматически.

Movie принимает два параметра:

play — строка, содержащая имя воспроизводимого видеофайла. Параметр всегда должен быть задан.

mask — строка, содержащая наименование видеофайла для использования в качестве альфа-маски. Она должна быть того же размера, продолжительности и частоты кадров, что и видеофайл, заданный в play .

Вот пример определения видео спрайта:

Видео спрайт можно показать с помощью оператора show , который автоматически запускает воспроизведение видео. Он будет автоматически остановлен при скрытии отображаемого объекта.

Видеоролик, прописанный через Movie также можно использовать как часть экрана, при условии, что он создан во время фазы инициализации (init-блок) (например, как часть оператора image).

Экраны можно прописывать и вне init-блока.

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

Бесконечное лето – это визуальная новелла от российских разработчиков, дарящая самые искренние и светлые переживания об ушедших днях и надеждах, которым ещё предстоит сбыться.


Загрузка Steam версии


Загрузить из Google play


Загрузить из AppStore


Загрузить PC версию

Об игре

Play!

Загружаемый контент

Everlasting Summer

Прохождение

Визуальная новелла Бесконечное лето состоит не только из красивых, летних картинок и отличной музыки, ноПерейти

Everlasting Summer

Новелла Everlasting Summer уже зарекомендовала себя не только как красивая игра с отличной музыкой иПерейти

Everlasting Summer

Фоны и Сцены

Бесконечное лето не было бы таким бесконечным и летним без восхитительных рисованных фонов и сцен.Перейти

Хёнтай режим

Для того что бы снять цензуру в Steam версии новеллы Everlasting Summer и включить хентай режим необходимо скачать хентай патч и распаковать его в папку:
%Steam%\SteamApps\common\Everlasting Summer\game\
Данный Hentay Patch восстанавливает все хёнтайные (18+) картинки и их отображение в галерее. При этом нет надобности использовать КОНАМИ код, ачивка "Хентай мастер" появляться не должна. Инструкция подходит для пользователей операционных систем Windows, Mac и Linux.

Бесконечное лето( Everlasting Summer ) это любимая всеми визуальная новелла от Российских разработчиков. В игре присутствуют элементы эроге.

Идея зародилась и получила развитие в одном из тредов на Ычане . По начальной задумке, новелла должна была представлять собой игру, полностью посвящённую имиджбордам , актуальным на то время мемам и с маскотами в качестве персонажей. Однако итоговый результат является вполне самостоятельным продуктом, доступным для широкой аудитории, а связь с АИБ -культурой ограничивается необязательными отсылками для знающих .

Бесконечное лето цепляет своими персонажами. За их основу были взяты известные маскоты так и реально существовавшие люди на постсоветском пространстве. Каждый персонаж отлично прописан, имеет свою историю, характер, желание и мотивацию. У них свои потребности и цели и они их добиваются.

Описывать их подробно нет смысла. Нужно самому прочувствовать каждого из них. Познакомиться с ним. Научиться сопереживать и беспокоиться за него. Персонажи - самая сильная сторона данной игры. Они не отпустят вас в реальный мир и заставят возвращаться в Бесконечное лето снова и снова.

Но про одного я все же расскажу. Семён - главный герой. Его глазами мы видим и творим историю. Сёма - собирательный образ, знакомый каждому из нас. Он сидит в своей комнате, ненавидит окружающий мир. Каждый из нас может поставить себя на его место. Он создан таким, чтобы игрок мог легко воспринимать себя как персонажа данной игры. Это создает огромный эффект погружения в историю.

В определенный момент своей жизни Семён становится участником совершенно фантастических событий. Он колеблется, не верит в то что происходит но постепенно ныряет в реку текущих событий с головой. А вместе с ним и сам игрок.

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

Не на последнем месте стоит музыка в этой игре. Она цепляет вас до глубины души. Будет преследовать вас и в реальной жизни. (Каждый раз заходя в автобус вы будете слышать главную тему из этой игры Я ГАРАНТИРУЮ ЭТО.)

Время подвести небольшой итог.

Бесконечное лето - уникальный феномен. Его любят, ругают ненавидят и восхищаются им. Существует сотни фанфиков которые дополняют либо полностью переворачивают концовки и основной сюжет. Все они ставятся как дополнения через мастерскую Steam. Это говорит о том, что мало кого данный проект оставляет равнодушным и у него большое количество фанатов, которые "живут" в Бесконечном лете и поныне.

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

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

Читайте также: