Как сделать бесконечное лето в окне

Обновлено: 24.04.2024

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

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

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

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

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

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

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

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

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

Мелодии из игры были написаны музыкантом Сергеем Ейбогом и группой «Between August And December». После релиза был выпущен саундтрек, разделённый на две части: «светлую» (с музыкой Сергея Ейбога) и «тёмную» (с музыкой «Between August And December»).

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

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

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

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

Для начало нужно создать файл с расширением .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 при отображении видеороликов с разной частотой кадров не определено, но, скорее всего, будет включать значительную потерю кадров.

Как развернуть игру на весь экран и играть на полную

Старые игры плохо совместимы с актуальными операционными системами. Показываем несколько способов, как развернуть приложение на полный экран.


Все современные игры при первом же запуске выставляют в настройках максимально возможное разрешение, которое поддерживает монитор. Однако, случаи некорректной работы игрового приложения нередки. Особенно часто эта проблема наблюдается при попытке запустить старую игру, созданную 10-20 лет назад. В то время мониторы имели очень низкое по современным меркам разрешение. Да и весь софт писался под железо и программное обеспечение, которое было актуально в те времена. Если вы хотите поиграть в первые части Doom, Mortal Kombat, Need for Speed или в другие легендарные игры, то готовьтесь к тому, что в 90% случаев вы столкнетесь с оконным режимом, который не получится растянуть. Решений подобной проблемы существует очень много, и они варьируются от случая к случаю. Рассказываем вам про самые популярные методы, как сделать игру на весь экран.

Как сделать полный экран в игре: хоткеи

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

Как развернуть игру на весь экран и играть на полную

Сейчас многие разработчики пренебрегают этим функционалом, потому что современное железо очень редко испытывает проблемы с совместимостью с играми. Вероятно, в будущем пользователи тоже будут испытывать технические проблемы со старыми играми, которые в наше время являются актуальными :) Самая распространенная комбинация в играх девяностых и нулевых — Alt + Enter. Работает даже в некоторых современных играх.

Как развернуть игру на весь экран: параметры запуска

Если зайти в свойства любого ярлыка игры, то вы увидите параметры запуска (для этого нажмите правой кнопкой мыши по ярлыку и выберите соответствующий пункт в выпадающем окне). В графе «Ярлык» в строке «Объект» вы найдете адрес, который указывает на расположение исполняемого файла в корневом каталоге с игрой. Мало кто знает, но существует ряд команд, которые можно прописывать после адреса. Все они прописываются через пробел после дефиса. В зависимости от конкретной игры список поддерживаемых команд может отличаться. Для того, чтобы растянуть игру на весь экран попробуйте следующие варианты:

  • -fullscreen — устанавливает параметры полноэкранного режима.
  • -w 1920 -h 1080 — устанавливает размер окна по высоте и ширине. В данном случае указаны значения для FullHD разрешения. Вы можете поменять значения конкретно под ваш монитор, где -w — ширина, а -h — соответственно высота.
  • Существует также команда для запуска игры в оконном режиме. Ее часто применяют для первоначального запуска, чтобы избежать некоторых проблем с совместимостью, а в дальнейшем в ручную установливают разрешение в настройках. Если после адреса вы видите текст -window, то его требуется убрать. Возможно, именно это препятствует приложению развернуться во весь экран.

Как развернуть игру на весь экран и играть на полную


Точно такие же параметры, как правило, работают и для игр, установленных из Steam. Только в свойствах ярлыка вы не найдете поля «Объект». Чтобы установить параметры запуска, вам потребуется зайти в свою библиотеку в программе. Выберите желаемую игру, нажмите по ней правой кнопкой мыши и перейдите в свойства. Там вы увидите пункт «Установить параметры запуска». Нажимаете по нему и точно таким же образом прописываете вышеописанные команды. Не забудьте дефис в начале и пробел между командами. Можно указывать несколько параметров одновременно.

Как развернуть игру на весь экран и играть на полную
Как расширить экран игры: совместимость

В свойствах ярлыка игры можно также увидеть графу «Совместимость». Она тоже влияет на тип запуска приложения и предназначена для старых игр.

Как развернуть игру на весь экран и играть на полную

Поставьте галочку напротив пункта «Запустить программу в режиме совместимости с» и попробуйте разные варианты операционных систем, которые вам предлагают. Желательно также поставить галочку напротив пункта «Запускать эту программу от имени администратора». Еще вы можете воспользоваться средством устранения проблем с совместимостью, которое, по сути, является аналогом средства устранения проблем с интернет-соединением, но, как вы понимаете, эта штука помогает очень редко. Но лучше не проходить мимо и попробовать все варианты, верно?

Открыть игру на весь экран: настройка видеокарты

В первую очередь рекомендуется установить самые свежие драйвера на видеокарту: очень часто в патчах можно встретить фиксы, связанные с совместимостью старых приложений. Для этого можно воспользоваться Snappy Driver Installer или DriverPack Solution. Но не всегда обновления исправляют ситуацию. Следует еще проверить опцию отображения рабочего стола. Для этого откройте панель управления видеокартой. Обычно в системном трее (маленькие значки в правой нижней части рабочего стола) находится соответствующая иконка. Если ее нет, то попробуйте нажать правой кнопкой мыши по рабочему столу и найти этот пункт в выпадающем меню. Если и там вы его не обнаружите, то попробуйте посмотреть в панели управления. В окне программы выберите пункт «Регулировка размера и положения рабочего стола». Включите пункт «Во весь экран». Не забудьте подтвердить изменения и закройте панель управления. После этого окно игры должно расшириться до полного размера.

Как развернуть игру на весь экран и играть на полную

Для владельцев видеокарт от компании AMD процесс выглядит похожим образом. Нужно зайти в приложение Catalyst Control Center и найти там такую же настройку.

Растянуть игру на весь экран: внутриигровые настройки

Современные игры предлагают геймерам широкий спектр настроек. Можно настраивать что угодно, начиная от управления и заканчивая графической составляющей. В старых же играх функционал не такой богатый, но опции отображения есть и у них. В целом процесс очень простой: нужно найти пункт «Режим экрана» и поставить напротив него галочку. Очень часто эта настройка вынесена в отдельную категорию, где пользователь настраивает интерфейс. Так что если вы не нашли этот пункт в разделе с графическими сетапами, не расстраивайтесь и просмотрите всё меню, которое предлагается игроку. Иногда можно встретить режим отображения экрана в лаунчере (когда перед запуском игры появляется программа, отвечающая за загрузку приложения). Некоторые разработчики встраивают в лаунчеры отдельные настройки, которые не дублируются в самой игре.

Как развернуть игру на весь экран и играть на полную

В крайнем случае можно поставить режим отображения «Оконный без рамок». В таком случае экран игры развернется на максимум. В оконном режиме производительность, конечно, ниже, чем в полноразмерном, но разница не такая большая и, обычно, не превышает 5-10%, так что потеря FPS будет невелика. Не во всех старых играх присутствует данная возможность. Проверьте информацию на сайте разработчиков: возможно проект вообще способен работать только в оконном режиме с низким разрешением (да-да, встречаются и такие проекты).

Как сделать полный экран в игре: разрешение

Не только режим отображения окна с игрой может растягивать изображение. Разрешение, которое вы выбираете, может препятствовать полноэкранному режиму. Современные игры поддерживают большие типы разрешения (от 4К и выше), а вот у старых проектов с этим проблема. Попробуйте в настройках графики установить разрешение поменьше и выбрать при этом «Полный экран». Если игра вовсе отказывает запускаться, то установить разрешение экрана в самой операционной системе. Для этого нажмите правой кнопкой мыши на любой области рабочего стола и выберите пункт «Параметры экрана». Далее просто смените разрешение с большого на более низкое и подтвердите изменения.

Как развернуть игру на весь экран и играть на полную

Аналогичный способ — через панель управления Nvidia или Catalyst Control Center. Там тоже присутствуют эти опции. И в крайнем случае попробуйте выставить минимально возможное разрешение в свойствах ярлыка (см. скриншот в параграфе про совместимость).

Данная статья была написана мной более года назад в качестве отчёта о практике для универа. В кои-то веки я решил её опубликовать. Надеюсь, ещё не совсем потеряла актуальности :/

В связи со спецификой появления, думаю, во избежание лишних вопросов мне стоит пояснить, что САФУ/NArFU — это название университета, а ИСМАРТ — конкретный институт в его составе, где я учусь. Стиль изложения также может несколько отличаться от моих обычных публикаций, так как подразумевалось, что читать текст будут люди совсем далёкие от игр и современной сетевой культуры.

Также для основной версии сайта я прикрутил подсветку синтаксиса (на lite- и pda-версиях не работает), но Ren'Py — довольно специфичный язык, поэтому используется подсветка от Python'а. В итоге подсвечены будут, по сути, только строки и некоторые совпадающие ключевые слова.

Если при чтении возникнут какие-то проблемы или вопросы по коду, то можно скачать архив с примерами. Он упакован в формат 7z, потому что, в отличие от zip'а, тот умеет упаковывать идентичные файлы так, чтобы они занимали место, как один.

Гайд по созданию визуальной новеллы

Здравствуй, дорогой читатель! Возможно, ты уже слышал о такой широко известной в узких кругах видеоигре от отечественных разработчиков, как «Бесконечное лето» (Everlasting Summer)? Впрочем, если нет, то ничего страшного: я расскажу о ней вкратце.

Как гласит официальный сайт, «„Бесконечное лето“ — это визуальная новелла от российских разработчиков, дарящая самые искренние и светлые переживания об ушедших днях и надеждах, которым ещё предстоит сбыться». Поясняю:

  • Визуальный роман (но чаще встречается вариант с англицизмом: визуальная новелла) — это жанр компьютерных игр, в котором упор делается на текстовый контент, сдобренный порциями аудиовизуального сопровождения. По сути, это скорее книги, чем игры, но обильно снабжённые иллюстрациями, анимацией, музыкой и звуками окружающего мира. Также, в отличие от книг, представители данного жанра обычно имеют нелинейный сюжет с несколькими концовками, и исход зависит от выборов игрока.
  • «Бесконечное лето» повествует историю об одном асоциальном человеке, волею судеб оказавшемся в загадочном пионерлагере. Многим игра нравится именно атмосферой, позволяющей почувствовать себя пионером либо поностальгировать о временах былой молодости.

Однако мы здесь собрались вовсе не для того, чтобы слушать рекламу и хвалебные оды, не так ли? Так что перейдём ближе к сути.

«Бесконечное лето» написано на бесплатном движке Ren'Py. Это специальный движок, предназначенный для создания визуальных романов сценаристами, далёкими от программирования. Он имеет предельно простой синтаксис и множество встроенных средств для реализации практически всех функций, которые могут понадобиться в подобных играх. Тем не менее, сам движок свободен (open source) и расширяем, предоставляя возможность пользоваться всей мощью языка Python, на котором он написан.

В этом небольшом гайде мы рассмотрим базовые возможности Ren'Py, а также слегка коснёмся темы создания модификаций к игре «Бесконечное лето».

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

Окно Ren'Py Launcher

Это Ren'Py Launcher — программа, из которой можно запустить любой из разрабатываемых проектов, открыть папку с ним или сразу перейти к редактированию скриптов. Все команды написаны на простом английском языке, не выходящем за рамки даже слабой школьной российской программы, так что не вижу смысла на них останавливаться. К тому же в настройках можно включить кривой перевод на русский язык.

Создай новый проект, укажи папку (желательно, без кириллицы, но это не обязательно), имя проекта (вот тут только латиница!) и выбери любую тему (это непринципиально).

Ren'Py уже при создании производит базовую настройку проекта, предоставляя интерфейс для меню, стили по умолчанию и т. д. Можешь посмотреть файлы скриптов, которые он создал:

  • В options.rpy находится большинство настроек: размеры окна, стили, переходы по умолчанию и т. д.
  • В screens.rpy описываются меню, диалоговое окно и прочие «экраны».
  • script.rpy предназначен, собственно, для самого скрипта-сценария романа.

Вообще, это всё условно. Все файлы проекта находятся в папке game и Ren'Py читает там все файлы с расширением *.rpy, так что можно разбивать скрипты на любое количество файлов.

Я бы мог рассказать ещё про основы языка Python, как сделано в документации, но всё, что нам понадобится для базового знакомства, интуитивно-понятно или будет пояснено в месте применения. Так что предлагаю просто нажать по ссылке на scripts.rpy в «лончере» (launcher), выбрать редактор (любой, я вообще пользуюсь Sublime Text 3 с плагином) и приступим к созданию твоего первого творения на Ren'Py!

Текст, картинки, переходы

Сотри всё, что уже есть в файле: мы начнём с нуля.

Для упорядочивания кода Ren'Py пользуется системой меток (привет, ассемблер и GOTO!). При выборе кнопки «Начать игру» в главном меню игры, которое отображается сразу после запуска, управление передаётся на метку start:

Что мы видим? После объявления метки start начинается принадлежащий ей блок кода, строки которого обладают отступом в 4 пробела. Внутри блока расположены речевые конструкции (say statements), с помощью которых выводится текст.

В первой и третьей строчках (блока) располагаются слова автора или рассказчика. Фраза просто заключается в двойные кавычки (если внутри фразы нужно вывести кавычки, то они предваряются обратным слешем: \").

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

Возникает первая проблема: постоянно приходится повторять имя персонажа (а в больших сценариях с более длинными именами это реально представляет проблему). Ну и сразу обращаю внимание на вторую: все персонажи отображаются абсолютно одинаково, без какой-либо толики индивидуальности. Решим обе эти проблемы:

В самое начало я добавил новую строку, которая определяет (define) нового персонажа (character) и задаёт ему имя и красноватый цвет имени (color). Новый персонаж присваивается короткой переменной a, которая теперь используется в речевых конструкциях вместо имени. Обратите внимание, что определения (что персонажей, что изображений, как мы увидим позже) пишутся вне любых меток, так как выполняются во время инициализации (немного про это будет сказано позже).

Что же у нас получилось?

Первый запуск нашего проекта

Хм, надо бы избавиться от этих шашечек и добавить собственный фон. Я использую, например, фотографию крыльца своего института, найденную в Интернете. Закинь любое изображение достаточного размера в папку images внутри папки game. Внутри этой папки Ren'Py сканирует все изображения и по определённым правилам создаёт для них имена, но для наглядности мы определим фон вручную. Самый простой способ:

image bg ismart = 'images/ismart.jpg'

Просто путь к файлу! Но если мы сделаем так, то получим странную картину:

Фон слишком большой

Виной всему слишком большой размер изображения. Поэтому придётся немного усложнить определение. Вот весь код:

Во! Теперь всё в порядке:

Теперь фон вписывается идеально

Теперь объясню, что делает добавленный код и как вообще происходит отображение. Всего появились две новые строчки: конструкция с image и конструкция с scene:

  • image, собственно, определяет изображение. Между ключевым словом и знаком равенства помещается имя отображаемого объекта. С ним не всё так просто. Как мы увидим дальше, в играх такого жанра, часто используются так называемые спрайты, то есть изображения персонажей с разными эмоциями и одеждой. Соответственно, частой операцией является смена спрайтов одного персонажа. По этой причине название изображения для Ren'Py состоит из, собственно, имени и атрибутов, разделённых пробелами. Всё это станет понятнее, когда будем рассматривать спрайты. А сейчас достаточно понять, что bg — название изображения, ismart — атрибут.
  • scene, как понятно из названия, предназначен для смены сцены. Выражение с этим словом очищает экран от любых других изображений и выводит указанное (обычно фон, хотя может и не выводить ничего).
  • im.Scale(d, width, height) — функция масштабирования, которая принимает отображаемый объект (displayable), в частности изображения, и изменяет его размеры к указанной ширине (width) и высоте (height). Сразу замечу, что существует аналогичная функция без префикса im.* (вне объекта im), которая отличается тем, что производит расчёты при каждом отображении и не сохраняет результат вычислений при определении.
  • config.screen_width и config.screen_height — две переменные в объекте конфигурации, хранящие заданные в настройках ширину и высоту экрана игры (их легко можно найти в options.rpy).

Надеюсь, я объяснил достаточно понятно. Давай теперь поиграем со стилями? Открой screens.rpy, найди в самом начале описание экрана диалогов (screen say) и удалим всё «лишнее», добавив немного своего (выделено полужирным):

Рассмотрение стилей, к сожалению, выходит за рамки данного гайда, так что я не стану ничего пояснять. Будем считать, что разобраться в работе стилей будет твоим домашним заданием ;)

Ну а своим вандализмом мы добились такого цветастого безобразия без меню и возможности переключения режима отображения имени персонажа (в том же окне или в отдельном) из сценария:

Зря мы трогали стили

Мы обязательно должны рассмотреть отображение спрайтов, изменение места их расположения и переходы, но искать спрайты в Интернете мне лень, так что рассмотрим этот материал внутри обещанного блока про создание модификаций для «Бесконечного лета».

Прежде всего скачай саму игру: либо через сервис цифровой дистрибуции Steam, либо через торрент-трекер Rutracker. Актуальные ссылки можно всегда найти на официальном сайте. Далее зайди в папку с игрой (для версии из Steam это \SteamApps\common\Everlasting Summer ). Там обычная структура файлов игры на движке Ren'Py. Заходим в game, как и прежде, а оттуда в папку mods. Скопируй туда scripts.rpy нашего проекта. Можешь даже его как-нибудь переименовать — не суть.

Теоретически можно создать наш файл со скриптом в любом месте внутри папки game, но давай будем придерживаться соглашений. К тому же, нам надо перекинуть и картинку. Создай папку narfu_images рядом с файлом скрипта и скопируй туда наш фон.

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

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

Блок инициализации объявляется ключевым словом init. Если дальше идут выражения на языке Python, а не на Ren'Py, то добавляется слово python. Вообще, в любом месте блоки кода на Python объявляются с помощью этого слова. Другой путь написать одиночную команду на Python — использовать знак доллара ($) в начале строки.

В примере выше я вместо слова python явно задал приоритет блока. Блоки выполняются от меньшего приоритета к большему. По умолчанию подразумевается блок с нулевым приоритетом. Порядок выполнения блоков с одинаковым приоритетом не гарантирован и может быть случайным.

Теперь объясняю саму команду. Переменная mods — это специальный список «ключ-значение», где перечисляются все модификации. Ключ должен быть уникальным значением на латинице без пробелов и в кавычках. Значение — название мода для отображения в загрузчике модификаций. Ключ играет роль названия метки при запуске мода, так что исправь label start на label narfu_practice. Также давай уберём определение персонажа a. Он нам больше не понадобится.

Теперь сделаем магию! Вставляй в редактор оставшийся код и запускай игру через меню модификаций в настройках!

Наш мод в загрузчике модификаций

С чего бы начать? «Бесконечное лето» предоставляет интерфейс, персонажей, спрайты к ним, фоны и музыку. Здесь мы пока использовали только первые три пункта.

dv — это персонаж и тег изображений для Алисы Двачевской. Соответственно, scared, raged и pioneer — это атрибуты. Вообще, названия всех спрайтов в игре строятся по следующему плану: короткое_имя_персонажа эмоция одежда . Полный список спрайтов можно найти в знаменитых уроках LolBot'а (один из программистов игры, создатель системы модификаций). Официальной ссылки, насколько мне известно, не существует, а прочие быстро станут не актуальны, так что Google в помощь!

При показе второго изображения с таким же тегом, первое исчезает. Это нужно как раз для удобной смены эмоций, как сделано в нашем примере. Чтобы отобразить два одинаковых изображения, можно воспользоваться конструкцией show..as (см. следующий параграф).

Для отображения спрайтов используется ключевое слово show, похожее на scene, но не очищающее экран. Для обеих конструкций могут быть указаны переходы с помощью конструкции with. Строго говоря, изображение вообще отображается только после этой конструкции. Таким образом можно планировать показ нескольких изображений, для которых потом задавать один переход. Если with не встречается до следующего диалога, то Ren'Py использует with None, просто выводящий изображения мгновенно. А ещё его полезно использовать, когда нужно одно изображение отобразить мгновенно, а лишь второе — с переходом.

Ren'Py имеет ряд встроенных переходов (мы использовали dissolve и fade), а также позволяет создавать свои с помощью специальных функций (например, with Dissolve(0.5) для «растворения» одного изображения в другом за полсекунды). Всё это очень интересно, но выходит за рамки данного гайда. Смотри документацию, если хочешь знать больше!

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

Для того, чтобы диалоговое окно не мерцало при показе изображений, я использовал window show, которое держит окно всегда на экране. По умолчанию же оно показывается при отображении диалогов и скрывается при показе изображений, что я обратно и включаю в конце скрипта (надо помнить, что мод заканчивается, но игра продолжает выполняться, и мы обязаны всё вернуть в исходное состояние!).

Разумеется, существуют конструкции hide для скрытия изображении и window hide для скрытия диалогового окна.

А теперь давайте добавим второго героя, музыки и украшательств!

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

Для проигрывания музыки и звуков существуют play music и play sound соответственно. Они принимают либо путь к файлу, либо список путей к файлам (в данном случае все пути к музыке из игры расположены в специальном списке, из которого мы берём конкретный). Для остановки используются stop music и stop sound, соответственно.

Музыка и звуки воспроизводятся на разных каналах, громкость которых игрок может регулировать в меню по отдельности. Ну а ещё звуки выполняются один раз, а музыка зацикливается. Разработчик же может регулировать не только громкость, но и скорость воспроизведения, баланс в колонках и многое другое. В том числе, можно создавать свои собственные каналы и играть несколько звуков одновременно.

Расположение спрайтов задаётся при показе либо с помощью at, либо в виде отдельного блока. В первом случае указывается предопределённое расположение (left или right, например), а во втором используется специальный язык ATL. Подробнее о нём можно прочитать в документации, а я лишь опишу базовое позиционирование, о котором также можно посмотреть наглядно в туториале, прилагаемом к Ren'Py SDK.

Положение изображений по обеим координатам задаётся с помощью двух точек: одной на изображении, называемой якорем (anchor), и второй на экране (pos). Задаётся либо с помощью целого числа, обозначающего координаты относительно верхнего левого угла экрана, либо с помощью дробного числа от нуля до единицы, обозначающего долю экрана, как сделано в примере.

Стилизация текста. Текст может содержать специальные теги, показывающие, как он должен отображаться. Для знакомых с языком HTML тут будет совсем просто: чаще всего используются точно такие же теги: , , , (для ссылок). Хотя есть и различия: . Просто. Также в тексте в квадратных скобках могут использоваться подстановки из переменных, определённых в коде. Если же есть необходимость использовать в тексте сами символы фигурных и квадратных скобках, но их нужно продублировать: >, [[, ]].

Внизу на картинке приведён результат. Неплохо получилось, не так ли?

Вот что у нас получилось

За сим я, пожалуй, откланиваюсь. В Ren'Py есть ещё очень много всего интересного, но место в этой статье не резиновое. Дальше, дорогой читатель, можешь либо почитать документацию (если знаешь английский язык, конечно), либо искать обучающие видео и руководства от других людей.

Есть ли прохождение?

Содержание

Как выйти на рут ЮВАО?

Надо пройти все хорошие руты и Мику

Игра вылетает при запуске, что делать?

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

Игра перестала запускаться после установки графического патча, как быть?

Сперва нужно удалить распакованные файлы. Для этого зайдём в каталог игры и из папки "game" удалим папку "_release"..

Чтобы корректно установить сам патч, нужно открыть скачанный с ним архив и распаковать содержимое папки "_release" в папку "games" в каталоге игры.

Как включить хентай?

В версии 1.2: включить в меню настроек.

Для Steam-версии нужно лишь скачать [[1]] и поместить файл в папку «%Steam%\SteamApps\common\Everlasting Summer\game\».

Для Android-версии нужно распаковать архив с патчемна карту памяти в папку «su.sovietgames.everlasting_summer\files\». Её местонахождение зависит от используемого устройства.

На Android полностью не работает хентай.Даже после распаковки архива.

На Android патч установил, а хентайных сцен нет, что делать?

И как вообще ввести код на андроиде? Ведь в вашем ответе нужно ввести код,но как?

Если по-прежнему чёрный экран - нужно отмотать назад немного. Если H-сцен всё равно нет - ещё раз ввести код и отмотать диалог до нужной CG. После этого хентай гарантированно появится.

Какие в игре есть горячие клавиши?

Пробел, Enter или ЛКМ - листать сцены по одной.

Tab или Ctrl - пропускать сцены (зависит от настроек - либо только виденное, либо всё).

S - сделать скриншот. Скриншоты сохраняются в корневую папку с игрой.

H или СКМ - скрыть/показать интерфейс

[Стрелка вверх]+[Enter]-меню просмотра прочитанного (можно вернуться на прошлые диалоги и выборы)

Где посмотреть полученные ачивки?

Нажать на сову в главном меню.

Почему у персонажей нет сосков на некоторых артах?

Это особенность игровых иллюстраций.

Подскажите, можно ли как-нибудь изменить размер окна? А то на планшетке полностью не влезает из-за scaling`а.

Кто такой Толян?

Одинокий пионер, выглядящий лет на 40, сидит в самом дальнем правом углу столовой. Пришёлся по нраву анонимусу, который придал ему личность и характер.

Как делать моды? Как расшифровать сценарий, вскрыть игровые ресурсы? Как открыть спрайты?

3. Переместить распакованные файлы в папку game бесконечного лета.

4. Создать ярлык к unrpyc.py и перетащить на него нужный тебе rpyc файл

5. Вместо rpyc появляется rpy, который открывается любым текстовым редактором.

6. Так же есть видео урок на Youtube, где подробно объясняют и показывают примеры.

Как устанавливать моды?

Если мод не предполагает замену оригинального scenario.rpyc, то, скорее всего, его нужно устанавливать на мод-пак с ычана. Для этого ставим последнюю актуальную версию, забрасываем файлы нужного мода в папку game, а сам сценарий (rpy или rpyc) - куда удобно, можно в отдельную папку, игра автоматически подтянет его. Затем нужно нажать в главном меню "новая игра" и выбрать "Моды и пользовательские сценарии".

Есть ли сейв со всеми открытыми артами и концовками? И как его устанавливать?

Для перехода к конкретным концовкам можно воспользоваться модами.

А где найти ноты/табы?

Где скачать саундтрек?

Почему нет трека sparkles?

Его автором не является ни один из двух основных авторов музыки, поэтому он не входит ни в светлую, ни в тёмную сторону альбома.

Как запустить под OS X или GNU/Linux?

В терминале перейти в директорию с игрой, например:

Как установить моды на Android?

Есть несколько способов установки модов на Android версию игры. Обязательное условие: необходим официальный порт игры от Soviet Games (скачать его можно как из Google Play, так и со сторонних ресурсов).

Способ 1 - с загрузчиком:

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

Способ 2 - руками:

- Скачиваем архив с модом со стены группы.

- Разархивируем содержимое в папку "Android/data/su.sovietgames.everlasting_summer/files/".

После завершения установки он появится в пункте "Моды" в настройках игры.

При возникновении ошибок или вылетов пишите сюда.

Как установить моды на iOS?

Есть так же несколько способов установки модов на iOS версию игры.

Обязательное условие: на вашем устройстве должен быть произведен Jailbreak.

Способ 1 - с загрузчиком:

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

Способ 2 - руками:

- Скачиваем архив с модом со стены группы.

- Разархивируем содержимое в папку "var/mobile/Containers/Bundle/Application/E . S/ES.app/scripts/game/".

После завершения установки он появится в пункте "моды и пользовательские сценарии" в настройках игры.

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