Чем открыть save renpy

Обновлено: 06.07.2024

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

Эта статья посвящена техническим моментам реализации новеллы при помощи инструментов движка 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. Сунулся и нечего понять не могу с какого края подступится. Сразу оговорюсь мне нужен метод шифровки и дешифровки, так как мне очень интересно как это работает(хранит перемеренные в защищённом виде)

Да славится Ктулху. Великий бог программистов.Повелитель багов и ошибок.

Нет,не получается, использую вот эти способы

выдаёт ошибку на оба способа:
TypeError: a bytes-like object is required, not ‘_io.BufferedReader’

Да славится Ктулху. Великий бог программистов.Повелитель багов и ошибок.

Отредактировано prisrak_razyma (Авг. 23, 2017 21:48:16)

Надо метод load() использовать.

Последовал вашему совету вот код

Выдаёт ошибку:
_pickle.UnpicklingError: A load persistent id instruction was encountered,
but no persistent_load function was specified.
На такой код:

Да славится Ктулху. Великий бог программистов.Повелитель багов и ошибок.

prisrak_razyma
_pickle.UnpicklingError: A load persistent id instruction was encountered,
but no persistent_load function was specified.

А можно для чайника. Как это сделать?

Да славится Ктулху. Великий бог программистов.Повелитель багов и ошибок.

Я так понял, что ты не знаешь, что значит “переопределить метод класса”, скорее даже так “переопределить?”, “метод?”, “класса?”.

Так что, видимо, твой sav-файл был получен точно так же, с сериализацией таких ключей доступа. И чтобы его восстановить обратно, нужно на эти объекты реагировать методом persistent_load(), так как внутри sav-файла они помечены как хранящие не сами данные, а такие небольшие по объёму ключи доступа к данным.

Так как ты метод такой не определил (используешь базовый десериализатор), то оно тебе и говорит “вижу объект с ключом внутри, распаковать обратно его нечем”.

Да славится Ктулху. Великий бог программистов.Повелитель багов и ошибок.

Отредактировано prisrak_razyma (Авг. 24, 2017 12:56:52)

prisrak_razyma
Что значит “переопределить метод класса”. Я знаю, но не понимаю как это сделать.

Ну скажи, что не понимаешь. Я сомневаюсь, что ты понимаешь, потому что ты метод load() не смог отличить от метода loads(), а ведь это вещь элементарная. Потом ты пишешь, что пример тебе непонятен, а он вообще для новичков даже подходит, там всё как на ладони.

prisrak_razyma
Плюс если перенести сейв то он будет работать и у другого человека.

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

Оно не может тебе просто так с потолка выбросить исключение такое. Оно видит инструкцию внутри файла и начинает выполнять действия, а для них нужна функция, а по умолчанию её нет. А её нет почему? Потому что ты используешь load() не у того объекта. Обычный объект работает без всяких ссылок, воспринимая всё как прямые данные.


Спасибо! А можно ли увеличить количество ячеек и инвентаре? И добавить золотые ключи?


Reioka Накручивай лунные камни и покупай всё что надо.


Программа работает. С оружием надо разбираться так как не совсем понятно как поменять ТТХ. Пользуюсь только для добавления Лун.камней, и да их можно добавить только 500! Если есть у кого отсылки к ТТХ оружия, какие и за что отвечают, сбросьте ссылку.


работает. автору спасибо.


This is top in the world.


вопрос, в какую или же в какие папки это надо кидать? подскажите плиз!


Вова Фартушин Куда угодно.


TheSuperGamer PussyK как так вышло что у вас одинаковые аватары?) совпадение? не думаю!!


В редакторе не все пушки.


Как включить эту программу?



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

BattleTech — Редактор Сохранений / Save Editor [1.3.0] » Трейнеры » Читы

Редактор Сохранений / Save Editor [1.3.0] BattleTech

Редактор Сохранений / Save Editor [1.3.0]

Редактор Сохранений / Save Editor [1.3.0]

Редактор Сохранений / Save Editor [1.3.0]

Редактор Сохранений / Save Editor [1.3.0]

Версия игры: любая.
Установка: распаковать архив в любую удобную Вам папку, запустить BattleTechSaveEditor-1-3-0.exe

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

Для добавления оружия, мехов, апгрейдов и т.д. надо отсканировать корневую папку игры, чтобы редактор подзагрузил в себя их данные. Для этого нажимаете кнопку Scan и выбираете корневую папку с установленной игрой. Затем на вкладке Inventory в левом верхнем окне Inventory Options выбираете категорию, в окне правее — само оружие, меха или апгрейд, ставите нужное число и нажимаете кнопку Add To Inventory. Плюсом идет то, что редактор подзагружает в свою базу не только игровое оружие, мехов и т.д., и но и из установленных Вами модов.

Также можно редактировать характеристики Ваших пилотов, репутацию у основных фракций игры, разрешить себе доступ на "Черный рынок" хоть с самого начала игры и выставить нужное Вам количество денег в Вашей казне. Но будьте осторожны. У меня почему-то после суммы в +2,5 миллиарда кредитов этот самый ПЛЮС превратился в МИНУС — 2,5 миллиарда.

Инструкция по установке трейнера

Как правильно распаковать файл?

В 95% случаев файлы для игр представлены в формате .RAR или .ZIP. Первые можно скачать и распаковать с помощью триал-версии программы WinRAR. Для этого откройте архив с помощью этой программы с нажмите на кнопку “Извлечь” (“Extract to” в английской версии) и выберите любую папку на жестком диске, но не выбирайте папку с игрой, так как в архиве могут быть вложенные папки, и тогда файл не заработает.

Если файл запакован в ZIP-архив, то достаточно будет открыть его через стандартный “Проводник” Windows. Иногда могут встречаться архивы с расширением .7Z, чтобы распаковать их, потребуется загрузить архиватор 7-Zip. Он бесплатный и довольно удобный, и к тому же может работать с .RAR и кучей других, менее популярных типов архивов.

Как правильно установить трейнер?

Когда вы распаковали архив, найдите его через "Проводник" и просмотрите содержимое папки. Обычно трейнер представляет собой один-единственный файл с расширением .EXE, но иногда может включать в себя и другие, а также инструкцию (обычно называется ReadMe.txt).

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

1. Нажать правой кнопкой мыши на иконку;
2. В открывшемся контекстном меню выбрать опцию "Свойства";
3. В открывшемся окне перейти на вкладку "Ярлык" и нажать на кнопку "Расположение файла".

После этого в "Проводнике" откроется папка, в которой и находится EXE-файл игры. Трейнер нужно скопировать в ту же папку, если в инструкции, приложенной к трейнеру, не сказано иначе.

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

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