Структура файла сохранения RPG Maker - Технический разбор
Введение
Для разработчиков и энтузиастов редактирования сохранений понимание формата .rpgsave имеет решающее значение. В отличие от движков, использующих сложные бинарные базы данных, RPG Maker MV и MZ используют веб-подход, используя JSON для хранения данных.
Эта статья представляет собой глубокое техническое погружение в то, как RPG Maker структурирует свои сохраненные данные, обрабатывает сжатие и организует состояние игры.

Сжатие и кодирование файлов
Прежде чем добраться до фактических данных JSON, движок применяет несколько слоев преобразования:
1. Слой сжатия (LZString)
Исходный объект JSON сначала преобразуется в строку, а затем сжимается с использованием алгоритма LZString. LZString — это быстрая библиотека сжатия на основе LZW, разработанная специально для хранения больших объемов данных в localStorage (который имеет строгие ограничения по размеру).
Примечание: RPG Maker MZ часто пропускает этот шаг и сохраняет более прямой JSON, но MV использует его повсеместно.
2. Слой кодирования (Base64)
Сжатая бинарная строка затем кодируется в Base64, чтобы сделать ее безопасной для передачи и сохранения в текстовом виде.
Поток сохранения:
Объект JSON -> Строка JSON -> LZString (Сжато) -> Base64 -> .rpgsave
Поток загрузки:
.rpgsave -> Декодировать Base64 -> Декомпрессия LZString -> Парсинг JSON -> Игровой Объект
Корневая структура JSON
После декодирования корневой объект сохранения содержит несколько ключей верхнего уровня, которые разделяют состояние игры:
{
"system":Object,
"screen":Object,
"timer":Object,
"switches":Object,
"variables":Object,
"selfSwitches":Object,
"actors":Object,
"party":Object,
"map":Object,
"player":Object
}
1. System ($gameSystem)
Хранит настройки системного уровня.
_versionId: Случайный ID, проверяемый по файлам данных игры для обеспечения совместимости._saveCount: Сколько раз игра была сохранена._bgmOnSave: Фоновая музыка, играющая в момент сохранения.
2. Switches ($gameSwitches)
Простой массив булевых значений.
- Индекс: ID переключателя (как видно в редакторе).
- Значение:
true(ВКЛ) илиfalse(ВЫКЛ/null).
Совет по редактированию: Установка определенного индекса в true может пропустить квесты или разблокировать контент.
3. Variables ($gameVariables)
Массив числовых или строковых значений.
- Индекс: ID переменной.
- Значение: Обычно целое число, но может быть любого типа.
4. Party ($gameParty)
Управляет “глобальным” состоянием группы игрока.
_gold: Текущее количество денег._steps: Всего пройденных шагов._items: Объект{ItemID: Количество}._weapons: Объект{WeaponID: Количество}._armors: Объект{ArmorID: Количество}._actors: Массив ID актеров, находящихся в данный момент в активной группе.
5. Actors ($gameActors)
Хранит индивидуальное состояние каждого персонажа.
_classId: ID текущего класса актера._level: Текущий уровень._exp: Объект, отображающий ID класса в общее количество очков опыта._skills: Массив изученных ID навыков._equips: Массив надетых ID предметов (Оружие, Щит, Голова, Тело, Аксессуар).
6. Map ($gameMap)
Состояние текущей карты.
_mapId: ID карты, на которой находится игрок._events: Состояние событий, выполняемых в данный момент.
Различия: MV против MZ
Хотя логическая структура данных почти идентична, формат файла немного отличается:
| Характеристика | RPG Maker MV | RPG Maker MZ |
|---|---|---|
| Расширение | .rpgsave | .rmmzsave |
| Сжатие | LZString (Почти всегда) | Часто просто “сырой” JSON или Zip |
| Заголовок | Нет (Начинается с контента) | Нет |
Обработка пользовательских скриптов
Многие игры RPG Maker используют плагины (Yanfly, VisuStella). Эти плагины часто внедряют свои собственные данные в файл сохранения.
- Менеджеры плагинов: Часто сохраняют данные в
Systemили в совершенно новом отдельном объекте. - Алиасы свойств: Плагины могут добавлять суффиксы, такие как
_GoldMaxили_ClassLevel_2, к существующим объектам.
Внимание: Если вы отредактируете сохранение и удалите данные, требуемые плагином, игра, скорее всего, вылетит при загрузке.
Руководство по реализации для разработчиков инструментов
Если вы создаете свой собственный редактор сохранений:
- Обнаружение: Проверьте, является ли файл валидным JSON. Если нет, попробуйте декодировать Base64.
- Декомпрессия: Если результат JSON выглядит как бинарный мусор, попробуйте распаковать с помощью LZString.
- Безопасность: Никогда не используйте
eval()для сохраненных данных. Всегда используйтеJSON.parse(). - Повторное кодирование: Вы должны применить ровно те же трансформации (LZString -> Base64) при сохранении, иначе игра не распознает файл.
Заключение
Архитектура сохранений RPG Maker надежна и гибка, опираясь на стандартные веб-технологии. Это делает её одной из самых простых структур сохранений для анализа и модификации, при условии, что вы правильно обрабатываете слои сжатия.
Чтобы увидеть эту структуру в действии, загрузите любой файл .rpgsave в наш Редактор RPG Maker и переключитесь в “Расширенный вид” (Advanced View), чтобы изучить сырое дерево JSON.
Последнее обновление: Январь 2026
Связанные статьи
Похожие статьи
Редактирование сохранений GameMaker: Полное руководство по INI и JSON
Освойте искусство редактирования файлов сохранений GameMaker Studio. Узнайте, как изменять конфигурации INI, сохранения JSON и бинарные форматы для таких игр, как Undertale, Deltarune и других.
Редактирование сохранений Ren'Py: Полное техническое руководство
Поймите, как работают файлы сохранений Ren'Py, почему их сложно редактировать, и узнайте обходные пути для безопасного изменения прогресса в визуальных новеллах.