Чем открыть 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 как так вышло что у вас одинаковые аватары?) совпадение? не думаю!!
В редакторе не все пушки.
Как включить эту программу?
Почему не всю оружку можно сделать некоторое оружие высвечивается красным цветом без вопросительного знака
Редактор Сохранений / Save Editor [1.3.0] BattleTech
Редактор Сохранений / 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-файл игры. Трейнер нужно скопировать в ту же папку, если в инструкции, приложенной к трейнеру, не сказано иначе.
После этого останется только запустить трейнер и ознакомиться с сочетаниями клавиш для активации его возможностей, а затем, не закрывая трейнер, запустить игру.
Читайте также: