Что такое файлы в игре
Обновлено: 06.07.2024
Статья написана специально для телеграм-канала Коздима Гений .
Представьте, что вы играете в очень интересную игру несколько часов подряд. Она удерживает вас у экрана своим интригующим сюжетом, сочным геймплеем и ламповой графикой. Вы побеждаете в каждой схватке, какой бы сложной она не была. На часах уже 2 часа ночи, а вы начали играть в неё как только вернулись с учёбы или работы. Вы даёте себе обещание поиграть ещё 10 минут и лечь спать.
В это время ваш герой встречается с большим боссом. Этот босс настолько сильный, что вы используете все заклинания бессоницы и все имеющиеся у вас зелья пряморукости для победы над ним - и всё равно терпите первое в своей игровой истории поражение! После того, как пепел войны осел на поле боя, вы узнаёте, как в игре выглядит экран Game Over и с ужасом обнаруживаете, что вам предстоит начинать свой путь с самого начала, ведь после обучения игра ни разу не сохранилась.
Я уверен, что вы сталкивались с подобными ситуациями: игра была настолько увлекательной, что вы забывали сохраниться, а автосейва в игре не было. Или игра позволяла сохранить прогресс в строго отведённых разработчиками местах - иногда эти места располагаются далеко друг от друга.
В статье я расскажу о том, как работают сохранения в видеоиграх и какими способами оно может быть реализовано.
Что такое сохранение?
Дадим определение понятию "сохранение".
Сохранение - это информация о прогрессе прохождения игры, хранящаяся на жестком диске или в облаке. Для каждого отдельного игрока это будет своя уникальная информация.
Сохранение игры так же называют сейвом или сейв-файлом .
Сохранение обычно представлено в виде файла, который хранит информацию о текущем состоянии игры (которое хранится в оперативной памяти). Размер такого файла в несколько раз меньше самой игры и, как правило, содержит:
1. Список объектов, для которых необходимо хранить информацию состояния;
2. Для каждого объекта указан список изменяющихся параметров;
3. Каждый параметр имеет свой определённый код, по которому игра может определить, что с ним происходит на текущий момент.
Под объектами я имею ввиду практически любую переменную, состояние которой оперирует игровая система и которую нужно запоминать. Это могут быть координаты персонажа на карте, его отношение к главному герою, количество патронов для оружия, время суток и даже направление ветра.
Вот так выглядит структура файла сохранения TES V: Skyrim Вот так выглядит структура файла сохранения TES V: SkyrimВ сохранении не хранится информация о текстурах и моделях. Информация определяет, какие модели должны быть загружены и какие текстуры или звуки должны быть к ним применены.
Как работает сохранение?
Процесс сохранения, формат файла и список переменных для каждой игры может быть разный.
Например, для игр, созданных на движке Unreal , при первом запуске игры автоматически создаётся файл, содержащий всю информацию об объектах на уровне. При сохранении, в этот файл перезаписываются только те данные, которые были изменены в ходе прохождения.
Для воспроизведения реплеев в игре DOTA 2 игра запоминает каждое действие, совершенное игроками во время матча. В момент воспроизведения игра просто считывает, какие клавиши были нажаты игроками и применяет их на предварительно загруженные модели персонажей и статусы игроков.
Для ускорения процесса сохранения-загрузки применяется процесс в программировании, который называется сериализация . Он переводит информацию об объектах в формат, удобный для хранения и чтения (например, XML). При загрузке файла он считывается игрой, и все объекты получают сохранившиеся состояния и свойства.
Зачем нужно сохранение?
Сохранения выполняют несколько важных функций, способных улучшить игровой опыт.
Во-первых , они уменьшают время, необходимое на загрузку игры. При загрузке игра считывает параметры из файла и загружает их на игровую карту. Это происходит за считанные секунды - остальное время тратится на загрузку текстур, моделей и звуков. Поэтому разработчикам очень важно оптимизировать процесс загрузки-сохранения и уменьшить время, которое он занимает у игроков.
На старте продаж Готики 3 вид этого экрана занимал около 40% времени, проведённого за игрой из-за ужасной оптимизации. После нескольких патчей на него смотришь только 10% времени На старте продаж Готики 3 вид этого экрана занимал около 40% времени, проведённого за игрой из-за ужасной оптимизации. После нескольких патчей на него смотришь только 10% времениВо-вторых , сохранения позволяют игрокам вернуться к тому месту в игре, в котором она прервалась в прошлый раз. Игрок загружает игровой "срез", а игра расставляет все объекты по своим местам и даёт игроку управление. Другими словами, игра не даёт потерять игроку весь прогресс, который он совершил до текущего момента. Это особенно актуально для современных игр с большим количеством геймплейных часов, которые невозможно пройти за один игровой сеанс (если вы не спидраннер).
В-третьих , сохранения поощряют игроков к экспериментам и исследованиям игрового мира. Сохранение перед схваткой с боссом позволяет попробовать различные тактики для борьбы с ним просто перезагружая сейв. Находясь перед развилкой с трудным моральным выбором, сохранение помогает узнать любой из исходов просто повторно загрузив его.
В XCOM 2 даже при высокой вероятности попадания герои умудрялись промахиваться мимо врага. Это заставляло самых нетерпеливых игроков перезагружать игру много раз В XCOM 2 даже при высокой вероятности попадания герои умудрялись промахиваться мимо врага. Это заставляло самых нетерпеливых игроков перезагружать игру много разИз третьего пункта вытекает такое не совсем честное явление, как save scumming , или " задрачивание сохранениями " (уж извините). Оно означает, что игрок очень часто сохраняет свою игру и в случае поражения переигрывает проблемный участок, а не возвращаться слишком далеко назад в прохождении. В среде игроков этот способ прохождения приравнивается к читерству.
Какими бывают сохранения?
За всю историю видеоигр было придумано большое количество способов сохранения прогресса.
Пароли . В эпоху отсутствия большого запаса памяти на физическом носителе, консоли не могли предоставить игроку возможность сохранения собственного прогресса в игре. Вместо этого после каждого пройденного уровня игра выводила на экран пароль, который можно было ввести на специальном экране для загрузки только что пройденного уровня в будущем.
Пароли были очень неудобны в использовании. Они представляли из себя набор букв, цифр или уникальных игровых символов, которые игрок должен был куда-то записывать чтобы воспроизвести в будущем. Чем больше символов было в пароле, тем сложнее было его воспроизвести в условиях низкого разрешения экрана и похожести некоторых символов друг на друга (например, заглавная О очень сильно напоминает ноль "0").
Так же паро��и не позволяли игроку восстановить собственный прогресс - игра загружала уровень в его первоначальном состоянии, с самого начала.
Ну, кто запомнит такие длинные пароли для открытия всех уровней в игре Crash Bandicoot? Ну, кто запомнит такие длинные пароли для открытия всех уровней в игре Crash Bandicoot?Сейв-поинты . Ручное сохранение игры в строго определённых местах было обусловлено отсутствием физических возможностей платформы (это особенно актуально для консолей) создавать достаточно большие файлы сохранений с описанием состояний всех игровых объектов для последующей загрузки в память. Поэтому игра разрешала сохранять прогресс в строго отведённых для этого местах. Как правило, в этих местах было меньше всего объектов, и восстановление файла сохранения не влиял на состояние окружающего мира.
Для примера я возьму open-world игру GTA: Vice City . Сохранения игры происходят в строго определённых местах (отель Ocean View, вилла Варсетти, таксопарк и т.д.). При загрузке этих локаций игра загружала минимальный набор объектов (пешеходов, автомобили, оружие) и продолжала их подгружать по мере игры. Особенность этих мест заключается в том, что в поле зрения игрока на момент загрузки находится очень мало объектов, и он не видит фоновую загрузку локации.
В классических играх Silent Hill сейв-поинтами являются закрытые локации, в которых количество интерактивных объектов сведено к минимуму. При загрузке игры загружается только состояние персонажа и его прогресс по прохождению сюжета. При выходе из комнаты сохранения игра заново загружает расположение объектов и монстров в той локации, куда попал герой.
Чекпоинты . Это места автоматического сохранения игрового состояния, которое хранится в течение текущей игровой сессии и до достижения следующего чекпоинта. Поэтому их часто путают с сейв-поинтами. Они располагаются чаще и их главной задачей является уменьшение времени на повторное прохождение игрового отрезка перед проигрышем. При завершении игровой сессии весь прогресс чекпоинтов стирается, и игроку приходится начинать игру с места последнего сейв-поинта.
Чекпоинты могут быть невидимы для игрока, в отличие от сейв-поинтов. При входе в новую локацию игра может запоминать это событие в фоновом режиме. С другой стороны, в игре Crash Bandicoot для создания чекпоинта необходимо разбить специальный ящик, иначе придётся начинать проходить уровень сначала.
Автосейвы . С развитием вычислительной мощности и уменьшением затрат на хранение данных в видеоигры начали добавлять функцию автосохранения. Данная функция работает как гибрид между сейв-поинтом и чекпоинтом. Игра автоматически сохраняет прогресс игрока в строго отведённых позициях, которые встречаются максимально часто по мере прохождения. Автосейв позволяет игроку не отвлекаться на ручное сохранение игры и делает прохождение целостным и неразрывным.
Ручное сохранение сохранения позволяет игроку сохранить свой прогресс в произвольном месте, открыв специальное меню. Быстрое сохранение ( quick save ) позволяет игроку сохранить игру в произвольном месте при нажатии на одну клавишу. Данная функция распространена в играх, созданных для ПК, хотя за последние пять лет она перебралась и на консоли. Иногда такое сохранение при загрузке возвращает игрока к ближайшему пройденному чекпоинту.
Как сохранения представлены в видеоиграх?
Проработка способов сохранения с точки зрения геймдизайна может улучшить игровой опыт. Для этого процесс сохранения и его ограничения можно вплести в игровой мир, а не реализовать как отдельную функцию игры.
Так, в Silent Hill 3 сейв-поинтами была нарисованная пентаграмма, которая являлась символом культа Сайлент-Хилла. Этот символ означал перерождение Бога в человеческой плоти, которое является основной темой игры.
В GTA: Vice City пестом сохранения была иконка с аудиокассетой - одним из символов 80-х, в которых происходит действие игры.
В игре Postal 2 в случае частого сохранения Чувак реагировал на это словами "Даже моя бабушка смогла бы пройти игру меньше сохраняясь!", разрушая четвёртую стену.
В игре Call of Ctulhu: Dark corners of the Earth рейтинг прохождения уменьшался, если игрок сохранялся слишком часто.
А вот в игре Metal Gear Solid игра могла прочитать сохранения других игр с карты памяти PlayStation. В одной из битв с боссом Mantis, если на карте памяти были другие игры Konami, то этот босс зачитывал их названия. Это производило ошеломляющий эффект на игрока (не зря же Кодзима - гений). Кстати, в этой игре для сохранения своего прогресса необходимо было позвонить по рации на определённую частоту, что тоже являлось частью игрового действия.
Заключение
Сохранения - это удобный инструмент в прохождении видеоигры. С их помощью игрок может экспериментировать с игровым миром и исправлять совершенные ошибки.
Каждый способ сохранения, описанный в статье, по-своему удобен. В идеале, комбинация сейв-поинтов, автосейвов и ручного сохранения может улучшить игровой опыт и уменьшить время игрока на отвлечение от основного процесса игры.
Ну и в самом конце, хочу вспомнить замечательные строчки из стихотворения Алексея Свиридова :
Недавно с содроганием осознал, что мой геймерский опыт превышает 20 лет. В первую игру я поиграл где-то в 1994-1995 году, уже даже не припомню, что это была за игра, но помню, что играл в нее я на приставке от Nintendo. И вот играл я себе, играл, практически все эти годы (с некоторыми перерывами), и несколько лет назад мне вдруг стало интересно, как же все эти игрушки работают, и я занялся моддингом.
Первое с чем я сполкнулся, это игровые архивы. Для большинства игр, чтобы сделать дополнение, необходимо распаковать ее ресурсы. Вот и стал я искать программы способные это сделать. За несколько лет модостроительства пользовался несколькими десятками, если даже не сотнями подобных прог, но в оновном юзаю штук 5-10.
В общем, кое-какой опыт в этом деле я имею, и решил я им поделиться. Для начала расскажу о шести программ для распаковки игровых ресурсов. У всех из них есть свои плюсы, есть и свои минусы. Все расчитаны на разное количество игр, на разные игровые движки и так далее.
Итак, первая такая программа, о которой я хочу рассказать это Game Extactor.
Game Extractor – поддерживает распаковку архивов более чем 1400 игр и программ, имеет возможность подключения дополнительных BMS-скриптов для распаковки. Кроме того, программа способна открывать и распаковывать архивы еще не меньше сотни игр и программ, не внесенных разработчиками в список поддерживаемых, доводя таким образом число поддерживаемых игр как минимум до полутора тысяч. Программа также способна открывать обычные ZIP, RAR, TAR и другие типы архивов, которые часто используются в играх, в особенности в инди-проектах. Платная версия программы способна также упаковывать файлы в любой из поддерживаемых типов архивов и заменять в них файлы. Для работы обоих версий программы, требуется установить Java.
Достоинства: самое большое среди подобных программ количество поддерживаемых типов ресурсов, возможность подключения дополнений, простота и удобство в использовании, поддержка многих типов обычных архивов.
Недостатки: имеются небольшие баги (иногда запускается не с первого раза, во встроенном в программу проводнике файлов иногда не открывается системный диск и др.), нет поддержки русского языка, не все дополнительные скрипты корректно работают, либо вовсе не работают, имеется платная версия.
Последняя версия: Game Extractor 2.01
Вторая и третья, практически идентичные программы, но со своими нюансами:
QuickBMS и QuickBMS GUI – сами по себе, эти программы не могут распаковывать ресурсы игр, это только оболочка для запуска BMS-скриптов. Отличает эти программы способ открытия файлов, первая после запуска сразу открывает окно выбора скрипта, затем архива и папки назначения, полностью портативна (то есть не требует установки), вторая имеет полноценный графический интерфейс, инструменты для создания и редактирования скриптов и ей необходима установка. Энтузиастами написаны тысячи скриптов для данных программ. Только на официальной странице программы их более 1000, некоторые из них способны упаковывать и распаковывать десятки игр, таким образом количество поддерживаемых игр и программ превышает 2000. Есть возможность запуска плагинов для Total Commander.
Достоинства: огромное количество скриптов, имеются скрипты не только на распаковку, но и на упаковку архивов, конвертацию файлов, работу с образами дисков и мн. др., активное развитие скриптинга для программы, скрипты для распаковки ресурсов новых игр появляются в течении нескольких месяцев, возможность создавать свои скрипты, скрипты для этой программы, поддерживаются и некоторыми другими распаковщиками ресурсов.
Недостатки: необходимость вручную выбирать скрипты
Последняя версия: QuickBMS 0.6.1d, QuickBMS GUI 2.0 beta
Благодаря четвертой программе, появились на свет две предыдущие:
MultiEx Commander – неплохая программа для распаковки ресурсов игр. Поддерживает распаковку более 400 игр, установку собственных плагинов (которых не очень много, но все же, их можно найти в бескрайних просторах сети), скрипты BMS и дополнения для Game Extractor. Теоретически, должна поддерживать несколько тысяч игр и приложений, но на самом деле, не все так радужно, далеко не все скрипты дружат с данной прогой.
Достоинства: поддержка дополнений различных типов.
Недостатки: не все скрипты работают с этой прогой, отсутствует возможность смены языка интерфейса, для получения программы с официального сайта, необходимо пройти регистрацию, после чего на электронный адрес придет ссылка на скачивание.
Пятая прога - одна из лучших:
Dragon Unpacker – без преувеличения, одна из лучших программ в своем роде. Способна открыть и распаковать более 600 разновидностей ресурсов игр и программ. Кроме того, имеет функцию сканирования архивов на файлы определенных типов, которые устанавливаются в настройке программы. Таким образом можно извлечь из почти любого архива, музыку, изображения и видео популярных в игровой индустрии форматов, при условии что он не зашифрован.
Достоинства: возможность сканирования архивов на предмет медиафайлов, большое количество поддерживаемых игр, имеется рускоязычный интерфейс, удобное и простое управление, имеется возможность подключения плагинов, позволяет просматривать графические файлы в окне программы.
Недостатки: серьезных недостатков и багов нет, из небольших: у программ-конкурентов побольше поддерживаемых игр, иногда бывают ложные срабатывания сканера (в старых версиях, такое было чаще), в предыдущих версиях сканирование было довольно долгим, но в последних версиях оно ускорилось в несколько раз.
Последняя версия: Dragon Unpacker 5.7.1, стабильная версия: 5.7.0
И, наконец, последняя на сегодня:
Game File Explorer – распаковщик и просмотрщик игровых ресурсов. Он поддерживает всего лишь около 60 форматов архивов из нескольких десятков игр. Кроме распаковки/упаковки архивов имеет возможность просмотра изображений, в том числе некоторых редких форматов, некогда используемых в видеоиграх. Применяется в основном для моддинга игр 1990-х-нач. 2000-х.
Достоинства: возможность просмотра изображений игровых форматов прямо в окне программы.
Недостатки: несмотря на то, что данная программа известна в среде моддеров, она не обновлялась аж с 2001 года. Из этого вытекает небольшое количество поддерживаемых игр, официальный сайт давно исчез, однако программа спокойно запускается на современных ОС.
Что такое DLL файлы, и для чего они нужны? Аббревиатура DLL – обозначает «Динамически Подключаемую Библиотеку». Она установлена, во всех операционных системах Windows, и практически каждая программа или игра на компьютере пользуется данной библиотекой. В ней содержится информация о конфигурации системы, совместимости устройств, наборе команд для правильной работы и многое другое. Некоторые файлы для игр имеют в своих папках уже готовые библиотеки, остальные пользуются системными.
Зачем нужны DLL компоненты
Если вкратце: что такое DLL файлы? – это компоненты библиотеки, а нужна она для запуска программ, приложений и игр. Компьютер включился, и система работает исправно. Вы еще ничего не запускали и не открывали, а уже десятки DLL файлов используются. Простые часы, информация о конфигурации системы, порядок запуска программ, оформление и многое другое используют библиотеку. Для того чтобы в текстовом документе начали появляться символы, соответствующие вашему вводу, нужна библиотека. По умолчанию система не знает, что означает нажатая вами клавиша,─ в этом его помогают компоненты DLL. Аналогичная ситуация со всеми подключаемыми устройствами: принтером, мышью, клавиатурой, флеш-картой. Именно библиотека DLL файлов «рассказывает» им, как работать с параметрами вашей системы.
Работоспособность элементов
Важно обновлять периодически систему и библиотеку, неактуальные файлы приведут к отказу работы программы. К примеру, вы установили игры пятилетней и большей давности, они у вас работают нормально. Далее вы поставили новую часть игры, которой не более года. Она может у вас не запуститься. Система выдаст следующее оповещение: ошибка DLL, отсутствует файл. Оно означает, что файлы нерабочие или вовсе его нет на компьютер. Связано это с тем, что программы или игры, которые пользуются библиотекой, могут вносить изменения. К примеру, вы установили игру, но параметры разрядности системы и версию ОС указали неверно.
Текущие файлы будут перезаписаны, и программа работать перестанет. Раз отсутствует DLL, значит, его нужно скачать и поместить в систему вручную. Но в большинстве случаев, новые игры требуют новых файлов, которых вообще не было в старых сборках системы, и решение одно - установить или обновить весь пакет.
У нас на сайте, Вы сможете скачать как отдельный DLL, так и весь пакет, в котором будут все файлы обновленные. Найти отсутствующий файл вы можете либо через поиск, либо по первой букве в верхнем меню. Как установить DLL файл и зарегистрировать прочтите в другой статье, где мы описали этот процесс максимально подробно.
Больше интересует как данные сохраняются в однопользовательских играх и приложениях. Я понимаю что есть два способа, это создание файлов и использование БД. Но как именно это делается, и когда какой способ используется?
К примеру каким образом хранятся данные в игре "Космические рейндежры"? У каждого НПС есть свой корабль, свое оборудование и характеристики, он не пропадает из игры и не появляется в рандомном месте мира, его положение всегда известно. Помимо этого в игре есть поиск по всем объектам. Если игра использует БД, то как именно она выглядит и реализуется? (Я понимаю что это может быть не известно, но хотя бы теоретически, или как бы вы реализовавали подобное)
Оценить 6 комментариев
copal: А вас не посещала мысль, что если я задаю вопрос, то я хочу услышать на него ответ, а не рассуждения о том, зачем мне это? Вам-то какая разница?
(Я знаю какая мне разница и зачем мне это)
Откуда вы знаете чем я занимаюсь, хочу или планирую заниматься? (риторический вопрос, я даже не понимаю зачем вы оставили комментарий)
copal: copal: если вы не понимаете зачем мне это нужно, то могли бы задать уточняющий вопрос, (или не писать вообще) а не накидываться на то, какая мне разница.
Хранение данных не квантовый мир, это не такая сложная тема, есть вполне четкие ответы и решения. И физиков тоже когда то учили, они не сразу стали специалистами, которые мгновенно стали все понимать, они тоже задавали вопросы, и пытались разобраться.
Я тоже пытаюсь разобраться, разведать, и понять то, что меня сейчас волнует.
- В игре, разумеется, есть некая модель вселенной. В моем случае это звездные системы, которые являются контейнерами для SpaceObject'ов, в которые уже входят планеты/корабли и другие объекты.
- Таким образом, состояние игры можно сохранить как звездные системы и их содержимое, ну и не забыть сериализовать вспомогательные коллекции, типа капитанов кораблей и другой глобальной информации.
- Сериализация вселенной происходит в json. Я пишу игру на unity3d, поэтому мне кажется удобным использовать местный JSONUtility, умеющий проводить сериализацию простых классов (т.е. публичные поля и простые коллекции). Процесс таков: для всего, что я хочу (де)сериализовать, создаю класс-прокси, отражающий в простой форме (без всяких конструкторов, свойств, приватных членов и всего такого) содержимое нужного мне класса, с которым я уже и работаю.
- Создаем прокси для StarSystem, он в себя копирует информацию о системе.
- Когда доходим до списка объектов, для каждого из них создаем уже класс-прокси объекта и результирующий экземпляр уже заносится в прокси StarSystem.
- И т.д., пока сложные объекты не закончатся.
- В итоге, имеем матрешку из прокси-классов. С помощью JSONUtility она одной строчкой может быть переведена в json или восстановлена из него.
- Ну а сами сериализуемые классы должны уметь получать информацию из своих проксей при загрузке из сохранения.
Собственно, недавно начал это дело реализовывать, т.ч. пока не знаю, насколько оно окажется удобным в использовании. Вполне возможно, многих подводных камней я не вижу, или они всплывут при усложнении игры (например, когда добавятся больше логичесих связей, придется проверять, чтобы не сериализовать одно и тоже по нескольку раз, получая при загрузке разные объекты. Поэтому у всего должны быть некие ID, для предупрежления дублирования).
Раз уж написал, буду благодарен, если более опытные разработчики укажут на крупные грабли в таком подходе, если они есть.
Пример - minecraft, с его загрузкой чанками.
zhora41, не уверен, что сейчас (спустя >2 лет с момента ответа) я бы стал делать так же, но ООП ведь само по себе не дает ответа на то, как "записать данные в файл". Особенно сложные данные, образующие нетривиальный граф зависимостей.
JSON это не кульбит, а просто формат хранения данных. Можно в xml, можно в бинарном виде, суть не поменяется.
Читайте также: