GCF

Материал из Наша Wiki - Наша энциклопедия Half-Life
Перейти к: навигация, поиск

Game Cache File (.gcf) (файл игрового кэша) — формат хранения, используемый Valve в системе Steam для распространения компьютерных игр и официального игрового контента. Данный формат использует для размещения игровых файлов подобие виртуальной файловой системы. Каждый файл содержит часть контента игры, а также информацию об их размере, контрольной сумме и таблицу размещения. Игры, распространяемые через Steam, не всегда находятся в одном GCF файле. Например, Team Fortress 2 использует три GCF файла для своего содержимого, плюс ещё восемь файлов движка Source. Каждый GCF-файл может использоваться в нескольких играх, преимущественно это файлы движка игры (например source engine.gcf) или файлы базовой игры, используемой в играх-аддонах (например файлы source materials.gcf, source models.gcf и source sounds.gcf, являющиеся файлами Half-Life 2, используются практически во всех играх Valve). GCF файлы хранятся в директории Steam, поддиректории «SteamApps».

Изначально GCF было сокращением от Grid Cache File[1] (Grid (Решётка) — раннее кодовое имя Steam) Теперь принято считать, что GCF — аббревиатура от Game Cache Files. Все игры на основе таких файлов не могут работать без Steam даже при полной распаковке содержимого GCF — использование их без Steam возможно только с применением эмуляторов.

Использование формата GCF решает несколько задач, но в то же время обладает рядом недостатков. В целом формат GCF удобен для автообновлений и восстановления данных, но только для сохранения оригинальной игры в том виде, в котором её создал разработчик — пользователь не может изменить непосредственно сами файлы игры и внедрить модификацию с изменением характеристик прямо внутрь игры. Также использование gcf-файлов требует распаковки файлов библиотек (dll) и приложений (exe), а также медиа-файлов, что уменьшает свободное место на жёстком диске. Формат GCF основан на использовании модификаций при сохранении оригинальной игры, что упрощает её восстановление, но не даёт возможность изменить базовые файлы игры.

Особенности

Структура

  • Сохранение игр в первоначальном виде. GCF файлы не могут быть модифицированы, и даже в случае успешной модификации заменяются оригинальными при перезапуске Steam. Поэтому в случае, если произойдёт ошибка после установки ошибочных пользовательских данных для игры, достаточно удалить эти данные из папки <папка steam>/steamapps/<имя аккаунта>/<название игры>/. При этом основные файлы не будут удалены и переустановка игры не потребуется.
  • Благодаря своей структуре становится возможным при необходимости вычислить повреждённые «внутренние» файлы. То есть вместо переустановки игры можно запустить операцию проверки кэша. При нахождении ошибок в файлах Steam перезакачает верные версии с интернета. Это также облегчает автоматические обновления.
  • Формат GCF хранит контент игры в одном файле и содержит таблицы размещения файлов в виртуальной файловой системе, что позволяет перемещать контент игр намного быстрее, поскольку время не тратится операционной системой на индексацию или другие операции с файлами игры. Кроме того, это позволяет дефрагментировать файлы виртуальной файловой системы.

Защита от копирования

  • GCF поддерживает шифрование данных, что делает возможным проведение предварительных загрузок игр. При покупке игры до релиза, на компьютер клиента закачиваются зашифрованные GCF файлы, расшифровка которых возможна только после релиза.
  • Сложность при использовании в игре контента из нескольких игр. Создание таких игр и модов возможно (примерами являются Garry's Mod или Half-Life 2: Synergy), однако для загрузки дополнительного контента требуется добавление дополнительной функции в файлы dll игры, что требуют хороших знаний структуры движка, определённых навыков программирования и частичного знания языка C++ со стороны создателя. Кроме того, подключать дополнительный контент к игре могут только лица, имеющие исходный код игры, что делает невозможным подключение контента для пользователей. Также возникают проблемы, если подобные модификации должны устанавливаться как на лицензионную, так и на пиратскую версию игры, так как алгоритмы загрузки дополнительного контента принципиально различаются для Steam- и non-Steam-версии (в первом случае задействуется даже сам программный клиент Steam). В этом случае для non-steam версий необходимо редактировать файл gameinfo.txt в корневой папке мода для указания папок с дополнительными играми, которые должен использовать мод.
  • Сложность внесения модификаций для лицензионных Steam-игр с изменением характеристик или при изменении media-файлов на основе самой игры без создания отдельного мода, поскольку при запуске игры через интерфейс Steam восстанавливаются оригинальные exe, dll и media-файлы. Таким образом, подобного рода модификации могут быть созданы только как отдельные моды, использующие собственную папку, а не модификации, встраивающиеся в саму игру. Для сохранения модификаций необходимо установить параметр только чтение для всех файлов exe и dll игры и/или media файлов и запускать игру только через её собственный файл exe.

Распределение пространства на жёстком диске

  • Запуск игры невозможен непосредственно из GCF-файла — для запуска игры Steam должен извлечь основные файлы игры (исполняемые файлы, файлы библиотек, файлы настроек и видео-ролики). Таким образом, на жёстком диске за счёт лишних файлов может быть занят достаточно большой объём памяти, который варьируется от десятков мегабайт если игра не использует заранее подготовленные ролики (не на движке игры) и до нескольких сот мегабайт (пример — Dark Messiah of Might and Magic, необходимые для распаковки файлы занимают около 900 Мб). В зависимости от количества установленных игр и модов, размер таких «лишних» файлов может превышать даже гигабайты.
  • Возможность хранить общий контент для нескольких игр на одинаковом движке в одном файле, тем самым экономя место для таких игр по сравнению с распакованными stand-alone играми. Поскольку Steam достаточно недоработан и может извлекать контент из GCF только в папку, одноимённую с названием игры, GCF позволяет использовать ресурсы игры без дублирования контента.
  • Нерациональное использование свободного места для пользовательских и извлечённых базовых файлов при использовании нескольких игр на одинаковом движке. Например базовые файлы для Half-Life и Counter-Strike 1.6 (движок GoldSource) или Half-Life 2: Deathmatch и Counter-Strike: Source (движок Source) извлекаются не в одну, а в разные директории, что создаёт лишние файлы движка. Это также создаёт дополнительные сложности при одновременном добавлении модификаций в эти игры, поскольку возникает необходимость создать лишние копии файлов для каждой игры, что приводит к уменьшению свободного места на жёстком диске компьютера.
  • С другой стороны, при установке игр, использующих один общий игровой движок, в некоторых случаях пространство на жёстком диске экономится, если необходимо, чтобы модификация была задействована на базовой игре (Half-Life или Half-Life 2) и не задействовалась при этом на других играх, использующих её в качестве основы. Поскольку базовая игра и игра-аддон распаковываются в разные директории, исчезает необходимость распаковки содержимого GCF в папку с игрой-аддоном.

Модификация игр, использующих GCF

  • Для замены моделей или каких-либо других данных игры, необходимо скопировать нужную модель или текстуру на то место в реальной файловой системе, которое занимает заменяемый файл в виртуальной. Пользовательские данные помещаются в директорию <папка steam>/steamapps/<название аккаунта>/<название игры>. Тогда Steam будет использовать именно этот файл, а не расположенный в GCF. Если потребуется вернуть оригинальные файлы, то вместо переустановки игры нужно удалить ненужные файлы. Если же были заменены файлы библиотек (dll) или media-файлы, они заменяются оригинальными при запуске с использованием Steam, что создаёт неудобства при внесении такого рода модификаций на основе самой игры.
  • Фактически в GCF содержатся «эталонные» файлы, не поддающиеся изменению, это может использоваться для создания «чистых» серверов. То есть при установке определённой опции sv_pure 1 на сервере игроки смогут использовать только те модели и текстуры, которые «вшиты» в GCF, а локальные файлы при этом не задействуются. Это полезно для предотвращения нечестной игры путём замены текстур противников на более заметные, а моделей окружения на прозрачные, для получения преимущества (wallhack-читы).
  • Сложность модификации и осуществления ручных патчей контента игры. Распаковка GCF-файлов не поддерживается компанией Valve, и возможна только с помощью программ сторонних разработчиков, таких как GCFScape. На данный момент алгоритмы распаковки формата изучены достаточно хорошо, поэтому текущая версия GCFScape корректно распаковывает содержимое GCF. Однако создавать и изменять GCF-кэш может только Valve, так как алгоритмы его создания точно не известны. Тем не менее, сторонними разработчиками уже освоена технология создания GCF-патчей на базе имеющегося файла, что позволяет без подключения к серверам Valve вручную обновлять GCF-файлы более ранних версий с помощью специальных программ, таких как CF Toolbox.

Программы для работы с контентом GCF

  • GCFScape - наиболее популярная утилита для просмотра и распаковки файлов. Создана программистом Ryan "Nemesis" Gregg на основе созданной им же библиотеке HLLib, позволяющей сторонним программам просматривать и распаковывать содержимое GCF. Данная библиотека используется в программах для открытия содержимого GCF, например в VTFEdit и VTF Explorer - редакторах текстур движка Source.
  • GCF Explorer - утилита для просмотра и распаковки GCF файлов.
  • CF Toolbox - программа для просмотра версии и процента обновлённости файлов. Позволяет создавать патчи для GCF более ранних версий и применять их к имеющимся файлам, а также загружать и обновлять доступные с Steam-аккаунта или не защищённые проверкой лицензии файлы.

Примечания

Ссылки

список команд консоли