читы для renpy игр
Читы для renpy игр
Плюшка #30) Отключение скрола назад и вызова меню (кнопки ESC и правой мышиной).
Очень не хотелось оставлять возможность игроку в любой момент вернуться назад и сохраниться в любом, даже ключевом, месте +))) Поэтому нарыл эти решения, надеюсь они пригодятся кому нибудь еще.
Для отключения меню сохранения же пишем:
$_game_menu_screen = None
Для его повторного включения:
$_game_menu_screen = «save_screen»
31) Переключатели и переменные
Вот не большой скрипт для новичков, это способ проверки переменных, который позволяет отключать строки в диалогах и задавать проверки в ваших не линейных новела. Где от вашего выбора зависит судьба персонажа.
label start:
menu:
«-Включить скрытую кнопку.-«:
$ quest1 = True # включает переменную quest1
jump test1
«-Выключить скрытую кнопку-«:
$ quest1 = False # выключает переменную quest1
jump test1
label test1:
menu:
«-Вернутся-«:
jump start
«-Вернутся-«:
jump start
«-Скрытая кнопка-» if quest1: # проверяем включёна ли переменная quest1 если да, то кнопка появится на эране.Если нет, кнопки на экране не будет.
jump start
Если диалог должен появится при нескольких условиях то дописываем после if quest1 and и ещё одно условие, если вместо включить или выключить у вас параметр в виде цифр, скажем отношение с персонажем то делаем следующим образом.
Тот же самый код но не много изменённый:
label test1:
menu:
«-Вернутся-«:
jump start
«-Вернутся-«:
jump start
«-Скрытая кнопка-» if relations >= 2: # проверяем количество поинтов отношений, если их меньше 2 то кнопка будет скрыта.
jump start
Что бы не допустили распространенную ошибку, выставляем при новой игре default параметры
label start:
$ relations = 0
$ quest1 = False
То есть при каждой новой игре эти параметры будут скидываться (отношения на 0 а квест 1 будет отключён)
Вот собственно и всё.
Читы для renpy игр
Плюшка №11) Картинки на кнопках выбора
Небольшие изменения в стандартном экране выборов, чтобы отделить картинки от текста. Теперь можно центрировать (или выравнивать по краям) текст отдельно, а картинки будут всегда в левой части кнопки.
А вставка картинки осуществляется прямо в текст кнопки:
menu:
__»С картинкой|icn vk»:
____pass
по желанию можно и выравнивание указать там же, в тексте кнопки:
__»С картинкой, по центру|icn prefs|.5″:
или:
__»Без картинки, по центру||.5″:
Руслан, Плюшка №1) меню в виде анимированного отгибающегося уголка страницы:
Если хотите вместо «назад» иметь » пропуск » + меню сворачивается.
imagebutton idle «btn_skip_idle.png» hover «btn_skip_hover.png» insensitive «btn_skip_insensitive.png» xpos 763 ypos 75 focus_mask True action [Show(«scr_list»), Hide(«scr_btns»), Skip()]
Руслан, Плюшка №5) Поле ввода текста с клавиатуры, снабженное кнопками OK и Cancel
Руслан, Плюшка №10) Добавление слайдера «Прозрачность текстового окна» на экран настроек (или в quick_menu).
wnd_alpha_adjust = ui.adjustment(range=1.0, value=persistent.wnd_alpha, adjustable=True, changed=wnd_alpha_update)
есть range=1.0
Плюшка №12) Скролл любого, даже не бесшовного фона
Захотелось вот зациклить движение фона. Например, пусть по небу ползут тучки. Но никак не найти бесшовную текстуру. Хорошо, превратим в нее любой фон. Заодно сделаем функцию универсальной и немного настраиваемой. При желании можно выбрать эффект появления и скорость перемещения. Двигать можно любое изображение размером в экран игры.
Вот так выглядит стык отзеркаленной картинки с обычной:
Плюшка №13. Добавление шкалы отношений с героями (любвиметр)
Делаете романтическую игру, в которой нужно пристально следить за ходом развития отношений с персонажами? Тогда эта плюшка для вас! Статья посвящена добавлению в игру специального слайд-бара, отвечающего за наглядное отображение повышения/понижения уровня отношений с героями, будь то любовь или дружба! Юзайте на здоровье!
Плюшка №14) Динамический фон
Работая над новеллой «Сателлит», я столкнулся с такой проблемой. У меня был динамический фон – плывущие по небу облака и движущийся немного с другой скоростью пейзаж. Всё было замечательно, пока по экрану не начали двигаться спрайты. По завершении движения или при уничтожении спрайта Renpy перерисовывает фон. А значит, анимация запускается заново. Происходит рывок. Допустим тучки прошли только треть пути, и тут их возвращают на исходную. Выглядит это очень некрасиво. Но чтобы фон не перерисовывался, его можно засунуть в экран, который будет выводиться прямо поверх фона, но под спрайтами. Как это сделать, видно из кода по ссылке.
Читы для renpy игр
44) Эффекты переходов ImageDissolve.
Сдесь собранной около 200 картин преходов
Для получения эффекта вам потребуется создать через init переменную. Будет выглядеть так(пример)
Init:
$ pic = ImageDissolve(«images/pic.png», 1.0.8) # открыли
$ pic2 = ImageDissolve(«images/pic.png», 1.0.8, reverse=True) #закрыли
И в игре прописать картинке эффект
scene negr with pic (можно просто with pic)
Все картинки являются бесплатными и не имеют лицензии
45) Игры рпг в стиле меча и магии написанные на RenPy
49)Таймер со шкалой времени в виде бара, так же прописан куда пойдет персонаж если не успеет уложиться во времени
В версии 2.1 был добавлен qte код
51) ссылки на все клавиши которые прописываются на питоне
http://www.pygame.org/docs/ref/key.html
pygame.key
pygame module to work with the keyboard
pygame.key.get_focused — true if the display is receiving keyboard input from the system
pygame.key.get_pressed — get the state of all keyboard buttons
pygame.key.get_mods — determine which modifier keys are being held
pygame.key.set_mods — temporarily set which modifier keys are pressed
pygame.key.set_repeat — control how held keys are repeated
pygame.key.get_repeat — see how held keys are repeated
pygame.key.name — get the name of a key identifier
This module contains functions for dealing with the keyboard.
The event queue gets pygame.KEYDOWN and pygame.KEYUP events when the keyboard buttons are pressed and released. Both events have a key attribute that is a integer id representing every key on the keyboard.
The pygame.KEYDOWN event has an additional attributes unicode, and scancode. unicode represents a single character string that is the fully translated character entered. This takes into account the shift and composition keys. scancode represents the platform specific key code. This could be different from keyboard to keyboard, but is useful for key selection of weird keys like the multimedia keys.
There are many keyboard constants, they are used to represent keys on the keyboard. The following is a list of all keyboard constants
Инструменты разработчика (Developer Tools)
Содержание
Ren’Py включает ряд в себя ряд функций, облегчающих жизнь разработчику визуальных новелл. Для работы многих из них требуется переменная config.developer со значением True.
Вызов «Консоли» с помощью «Shift+O» (Shift+O Console) [ править ]
Консоль отладки позволяет в интерактивном режиме запускать скрипт Ren’Py и операторы Python, и сразу же видеть результаты их выполнения. Консоль доступна в режиме разработчика или когда переменная config.console принимает значение True, а также её можно вызвать, зажав клавиши Shift+O.
Консоль отладки можно использовать для:
Вызов «Поддержка редактора» с помощью «Shift+E» (Shift+E Editor Support) [ править ]
Переменная config.editor позволяет разработчику определить команду для вызова текстового редактора, которая запускается при нажатии клавиши launch_editor (по умолчанию Shift+E).
Вызов «Меню разработчика» с помощью «Shift+D» (Shift+D Developer Menu) [ править ]
Когда переменная config.developer принимает значение True, нажатие клавиш Shift+D отобразит меню разработчика, которое обеспечивает свободный доступ к некоторым функциям Ren’Py, приведенным ниже.
Вызов «Перезагрузка» с помощью «Shift+R» (Shift+R Reloading) [ править ]
Когда переменная config.developer принимает значение True, нажатие Shift+R сохранит текущую игру, перезагрузит её скрипт и затем снова загрузит игру. Перезагрузка, как правило, перемещает вас к последнему неизменённому оператору, возникшему перед нажатием Shift+R.
Это позволяет разработчику вносить изменения в скрипт при помощи внешнего редактора, а не выходить и перезапускать Ren’Py, чтобы увидеть результат внесенных изменений.
Учтите, что состояние игры, включая значения переменных и списки экранов, сохраняется после перезагрузки. Это означает, что если один из этих операторов изменяется, необходимо выполнить откат и повторно выполнить оператор, чтобы увидеть его новый эффект.
Вызов «Просмотр стиля» с помощью «Shift+I» (Shift+I Style Inspecting) [ править ]
Вызов «Экспорт стиля» с помощью «Shift+Y» (Shift+Y Style Dumping) [ править ]
Когда переменная config.developer принимает значение True, нажатие клавиши dump_styles (по умолчанию Shift+Y) запишет описание каждого стиля, известного Ren’Py, в файл «styles.txt». Это описание включает каждое свойство, которое является частью стиля, значение этого свойства и стиль, от которого свойство унаследовано.
»_(>_Fast_Skipping)»> Вызов «Быстрый пропуск» с помощью «>» (> Fast Skipping) [ » (> Fast Skipping)»»>править ]
Когда переменные config.developer или config.fast_skipping принимают значение True, нажатие клавиши fast_skip (по умолчанию «>») приводит к тому, что игра немедленно переходит к следующему важному взаимодействию. Для этой цели важным взаимодействием является то взаимодействие, которое не вызывается оператором say, переходом или командой «пауза». Обычно это предполагает пропуск до следующего оператора menu, но пропуск также останавливается, когда возникают определенные пользователем формы взаимодействия.
Перемещение к строке (Warping to a Line) [ править ]
Ren’Py поддерживает перемещение к определённой строке внутри скрипта, при этом разработчику нет необходимости проходить через всю игру, чтобы добраться до нужного места кода. Хотя с этим методом перемещения связано несколько предупреждений, он всё ещё может быть полезен для предварительного просмотра в реальном времени.
Здесь my_project – полный путь к корневой папке вашего проекта.
Когда применяется метод перемещения, Ren’Py выполняет ряд действий. Сначала он находит в программе все операторы scene. Затем Ren’Py пытается найти путь от операторов scene к каждому доступному оператору в игре. После этого он выбирает ближайший доступный оператор к заданной строке, но расположенный до строки или в ней самой. Он работает в обратном направлении от этого оператора до оператора scene, записывая пройденный путь. Затем Ren’Py выполняет оператор scene и любые операторы show и hide, найденные на этом пути. Наконец, он передаёт управление найденному оператору.
Имеется ряд довольно серьёзных недостатков применения функции warp. Во-первых, она проверяет единственный путь, а это означает, что хотя путь может быть репрезентативным для некоторого маршрута исполнения, вполне возможно, что на каком-то другом маршруте может возникнуть ошибка. В целом, путь не учитывает игровую логику, так что вполне возможно иметь путь, который на самом деле недостижим. На самом деле это особо серьёзная проблема только в игр с большим количеством элементов управления, особенно в тех, которые часто используют язык программирования Python в коде.
Функции warp требуется переменная config.developer со значением True, чтобы функционировать.
Функции отладки (Debug Functions) [ править ]
Возвращает пару, задающую имя файла и номер строки текущего оператора.
Если переменная config.log не установлена, функция бездействует. Иначе функция отладки открывает файл журнала отладки (если он ещё не открыт), форматирует сообщение в столбцы config.log_width и выводит его в файле журнала.
Прекращает наблюдать за заданным выражением Python.
Отслеживает заданное выражение Python, отображая его в верхнем правом углу экрана.
Читы для renpy игр
85) Как создать спец эффект тряски экрана словно персонаж идет
Для этого через init нужно прописать
init:
. transform running:
. pos (0,0)
. linear 0.1 pos (-5,-3)
. linear 0.1 pos (0,0)
. pos (0,0)
. linear 0.1 pos (5,-3)
. linear 0.1 pos (0,0)
. repeat
И в игре в нужный момент вызвать его через at
scene bg1 at running
Что бы прекратить шаги вызывается команда scene или в repeat прописывается число повторений
Суть задачи: Имеется «label A:» и «label B:». Нам требуется подсчитать, сколько времени прошло с момента, как мы попали на лейбл А, до момента, как мы попали на лейбл Б. Ну и вывести это время на экран игроку, к примеру.
91) Часто спрашивают как на Питоне прописать меню. Вот сам код пример
default variable = 0
screen scr():
. text «[variable]» align (0.5, 0.05)
95)Как сделать так что бы музыка играла в определенное время.
Пишем в сценарии например:
play music » music/410.mp3″ fadein 2
Но тут возник вопрос, а как определить точное время?
Нашел 1 код который позволяет нам определить точное время которое возникло с момента клика
init python:
. import time
. x = 0
label start:
. «Нажмите левую кнопку»
. while x Нравится Показать список оценивших
98) Как прописать кнопке варианты нажатий(правая и левая кнопка мыши)
Возьмем такой пример:
«textbutton _(«Skip») action Skip() alternate Skip(fast=True, confirm=True)»
99) Оптимизация видео для Android (режим максимальной производительности)
Дополнительные программы: ffmpeg
Для начала на уровне Ren’Py прописываем параметр «config.hw_video = True» в options.rpy, включающий режим аппаратного рендеринга видео.
И разбираем всё содержимое:
-i — входящее видео
-vcodec libvpx — видеокодек. Так как у нас андроид, то наиболее производительным будет vp8, то есть libvpx.
-b:v 3000k — битрейт или относительная скорость потока. Для повышения производительности ставим либо как в youtube (720p = 4000k, 1080p = 8000k), либо меньше.
-deadline realtime — ставим режим обработки видео. В режиме реального времени результаты очень сильно разнятся от устройства к устройству, но производительность увеличивается.
-cpu-used 2 — сложность cpu-декодирования видео. Может быть в диапазоне значений от 0 до 5. Уже с 1-ого начинается прирост производительности и вплоть до 5-ти за счёт ущерба качеству.
-vf scale=iw/1.5:-1 — это аргумент для масштабирования 1920×1080 в 1280×720 и далее в том же духе. Разрешение играет большую роль для декодирования, так что если у вас новелла в FULL HD, то подумайте двадцать раз, а не сделать ли вам отдельную версию для android, чтобы телефоны не тратили ресурсы на даунскейлинг (уменьшение картинки видео)
-acodec libopus — аудиокодек. Можно вместо libopus использовать libvorbis, но libopus почти наверняка будет меньше весить, и он обеспечит меньшую задержку воспроизведения.
Ну и последним пишем выходной файл — «video2.webm»
Обязательно иметь в наличии: Python 2.7 или выше, но не Python 3
Гайд по установке (от и до):
>Устанавливаем Python.
>Переходим по ссылке на github, (при необходимости выбираем другой branch), нажимаем на «clone or download» и «Download ZIP».
>Весь zip деархивируем в папку python и оставляем как есть.
>При необходимости пишем батники, я привожу примеры только на Windows
Превосходная простая программа для декомпиляции *.rpyc файлов. Разработчик обещает поддержку всех Renpy 6, но так как после 6.99.9 утилита не была особо тестирована, то при возникновении ошибок не поленитесь написать ему на гит.
Пример кода: python unrpyc.py script1
Также Unrpyc часто подвергается мелким изменениям, так что проверяйте ветку (branch) dev.
Пример батника: for %%a IN (*.rpyc) DO python unrpyc.py %%a
Проверенная временем утилита для разархивирования *.rpa файлов. Лично я рекомендую использовать следующую утилиту.
102) Добавляем внутриигровые покупки в игру под Android
Решил сделать альтернативу монетизации через рекламу (AdMob). Устанавливается даже проще АдМоба.
На iOS делается аналогично, только не нужно копипастить ключ приложения. Подробнее не напишу, ибо айфона нет.
1) Приобретаем аккаунт разработчика Google Play, если его еще нет.
2) В Google Play Developer Console на вкладке «Все приложения» нажимаем «Новое приложение».
3) Вводим название игры и нажимаем «Создать».
4) Нас перебрасывает на окно заполнения данных о будущей игре, но нам интересна только вкладка «Службы и API» в левой части экрана.
5) Копируем ключ приложения из раздела «Лицензирование и продажа контента».
6) Открываем свой options.rpy и раскомментируем строку define build.google_play_key = » » и между кавычек вставляем скопированный ключ. ПРОВЕРЯЕМ ЧТОБЫ В СКОПИРОВАННОМ КЛЮЧЕ НЕ БЫЛО ПРОБЕЛОВ!
7) Теперь можно вставлять код в script.rpy. Перед запуском регистрируем покупку следующим образом:
init:
define unlock_lvl = iap.register(
product = «unlock_lvl»,
identifier = «ru.chislov.mygame»,
google = «Моя игра»,
)
unlock_lvl это идентификатор покупки, имя придумываете сами
В identifier, соответственно, ваше имя пакета
google это название игры, если поставить None, то именем игры будет имя пакета.
screen billing:
imagebutton xalign 0.2 yalign 0.3:
idle («images/idle_billing.png»)
hover («images/hover_billing.png»)
action Jump(«label_billing»)
screen restore:
imagebutton xalign 0.2 yalign 0.4:
idle («images/idle_restore.png»)
hover («images/hover_restore.png»)
action Jump(«label_restore»)
9) Далее проверяем, куплена игра ранее или нет. В том месте, где необходимо открыть новый левел, прописываем:
if iap.has_purchased(«unlock_lvl»):
jump continue_game
else:
show screen billing
show screen restore
«Для дальнейшей игры необходимо купить уровень или восстановить покупку»
$ renpy.pause(hard=True)
10) Если игра не куплена, то перекидываем юзера на label_billing или label_restore, если он покупал ранее левел:
label label_billing:
$ iap.purchase(«unlock_lvl»)
«Если оплата произведена успешно, игра продолжится. Нажмите для продолжения»
if iap.has_purchased(«unlock_lvl»):
«Спасибо за покупку уровня! Продолжаем игру»
jump continue_game
else:
«Оплата отменена»
label label_restore:
$ iap.restore(«unlock_lvl»)
«Если восстановление покупки прошло, то игра продолжится. Нажмите для продолжения.»
if iap.has_purchased(«unlock_lvl»):
«Покупка была восстановлена! Продолжаем играть»
jump continue_game
else:
«Покупка не была восстановлена.»