Записки мододела. Что такое PATCH и как его кушают

в 16:50, , рубрики: архивирование информации, Моддинг, форматы файлов

Доброго всем здравия!

Сим постом я открываю серию публикаций на тему моддинга игры Cities XL. Не спешите хвататься за свои шпаломёты, ибо как материалов по моддингу данной игры на русском языке почти не существует в природе, а кому-то очень надо. Кроме того, данный цикл материалов, как я надеюсь, поможет понять некоторые механизмы проектирования игр. Изначально знания черпаются из зарубежных материалов.

ДИСКЛЕЙМЕР
Возможно кому-то изложенное покажется «кэпством». Опять таки же воздержитесь, пожалуйста, от подобных комментариев. То, что очевидно для Вас, явится открытием для кого-то другого. Если у Вас есть, чем дополнить материал, милости прошу в комментарии.

Темой сегодняшней статьи будет подробный разбор механизма модов в игре. А в частности, что из себя представляет патч-мод.

Общее

Итак, разберёмся, что есть патч. Файл патча-мода для игры Cities XL представляет собой один из малораспространённых довольно специфичных форматов архива — MCPK. Проще говоря, свой ZIP, только с преферансом и блудницами. Внутри себя патч содержит папку data и некоторое содержимое в ней.

Любой толковый линуксоид знает, что такое монтирование. Да и пользователи «окошек» тоже знают не понаслышке, что такое образ диска. В сущности файл, который мы скармливаем специальной программке, которая как бы имитирует компакт-диск, вставленный в привод. С патчами CXL примерно та же история. Во время запуска игра по очереди просматривает содержимое некоторой папки (в данном случае папка Paks игры) и монтирует каждый найденный PATCH-файл к своей папке data. Вот почему патч обязательно должен содержать эту папку.

В случае, если запакованный в патч файл имеет имя уже смонтированного, запакованный файл как бы перезаписывает уже существующий. Таким образом создаются так называемые фиксы. Задумывались, почему некоторые патчи начинаются с буквы «Z»? Именно потому, что эти файлы, загрузившись заведомо последними, перезапишут необходимые файлы в любом случае. Это иногда создаёт конфликты между патчами. Поэтому иногда в инструкциях по установке того или иного мода пишут, что необходимо удалить такие-то и такие-то патчи. Кстати, обычно именно с пресловутой буковкой «Z».

Не важно, как называется ваш файл. Главное, чтобы он не содержал никаких других символов, кроме латиницы, цифр и знака подчёркивания. Иначе игра может попросту не примонтировать ваш патчик. А в худшем случае может и вылететь с ошибкой. Ну, не любят там за рубежом кириллицу. Хотя в некоторых патчах есть даже китайский, я бы таки не стал рисковать.

Что может содержаться в патче?

Структура папки data довольно велика. На практике для модов используются немногие папки. Приведу только те, которые я хотя бы раз видел в модах. По данным одного из официальных источников.

design — логика игры. В основном файлы формата CLASS
designactor — анимированные объекты игры (люди, машинки). Файлы формата ACTOR
designbuildings — файлы классов зданий
designdecorationfurniture — фурнитура, «украшательства» в игре
designdecorationfurniture_vehicle — машинки
designdecorationground — поверхность
designdecorationtree — деревья
designdefautavatar — аватары. Файлы форматов AVA и BODY
designlayout — описания размещения частей моделей. Файлы форматов LAYOUT
designmassplacementtool — инструменты для массового строительства, например, для дорог

gfx — графика, 3D. В основном файлы формата SGBIN
gfxanimation — анимация. Файлы формата MOTION
gfxavatar — аватары. Файлы форматов SGBIN, TGA, XML
gfxbuilding — строения
gfxcharacter — люди
gfxfurnitures — фурнитура, «украшательства». Файлы форматов SGBIN, SGDUMMIES
gfxfurntituresstreet — фурнитура улиц
gfxlandscape — ландшафт. Файлы с расширением LAND
gfxlandscapelayers — слои ландшафта. Файлы формата PNG
gfxlandscapematerials — материалы ландшафта. Файлы формата XML
gfxlandscapetextures — текстуры ландшафта. Файлы формата PNG
gfxlandscapewater — вода. Файлы формата WATER
gfxplaceholder — плейсхолдеры объектов
gfxroad — дороги
gfxtrees — деревья. Файлы форматов DDS, SPT, PNG, TGA
gfxvehicle — машинки. Файлы форматов SGBIN, SGDUMMIES

interface — интерфейсные элементы
interfacecfg — конфигурации. Файлы формата XML
interfaceddstexture — иконки. Файлы формата DDS
interfacetexture — текстуры. Файлы с расширением PNG, TGA, JPG

localization — локализация (языки). Файлы с в папках с именами, соответствующими двухзначной сигнатуре языка, с расширениями соответствующими той же сигнатуре

В модах на здания (добавляющих новые здания в игру) обычно используются только:
design/buildings
design/layout
gfx/building
interface/ddstexture
localization

Общий алгоритм создания мода на здание выглядит так:

  1. Создаём 3D-модельку. Либо тырим с 3D-Warehouse, либо сами рисуем. Не суть. Далее обрабатываем до кондиции готового файла SGBIN. Не забываем про обработку текстур.
  2. Создаём класс модельки. Для надёжности лучше делать на основе уже существующих. Тупо копируем себе готовый класс и изменяем его содержимое, как нам надо.
  3. Создаём, если надобно layout. Вообще лучше создать в любом случае. На всякий пожарный, как говорится.
  4. Скриншотим нашу 3D-модельку и создаём на основе скриншота иконку модельки. Формат DDS, 128 на 128 пикселей, 32 бита цветности. Для этого, кстати, есть утилитка png2dds, позволяющая конвертировать готовые PNG-файлы в формат DDS.
  5. Создаём локализацию хотя бы для Английского, Французского и Русского языков.
  6. Утилиткой PackUnPack пакуем наш патчик, указывая в качестве исходной папки папку data проекта.
  7. Публикуем на сайте XLNation на радость прочим архитекторам.

Кстати, как ни обидно, локализацией зачастую пренебрегают.

Пара слов о форматах

Форматы CLASS, LAYOUT, ACTOR — это в сущности XML. Отличие в том, что в теле документа может быть несколько корневых тегов и в тегах зачастую используются символы, недопустимые в обычном XML. Описание буду приводить в следующих статьях.

Формат SGBIN — формат 3D-моделей, имеющих 4 уровня детализации. От самого низкого до самого высокого. Полагаю не нужно объяснять, что есть уровень детализации. SGDUMMIES — судя по всему, вспомогательный формат для элементов моделей. Как работать с данным форматом, будет рассказано в последующих статьях.

Формат WATER — описательно-итоговый формат для описания воды, который позволяет связать с определённым типом водной поверхности определённую текстуру.

Файлы локализации довольно просты. В сущности это текстовые файлы определённого вида в кодировке ANSI (UCS-2 Little Endian), имена которых должны совпадать с именами переводимых моделей и иметь расширение, соответствующее двухзначной сигнатуре языка. Внутри файлов содержится примерно следующее:

#FILE_VERSION 3

#FIELD_ID fooID
bla-bla

#FIELD_ID fooIDL
bla-bla-bla

#FIELD_ID fooIDD
My description

Где fooID, fooIDL, fooIDD — идентификаторы языковых строк, «bla-bla», «bla-bla-bla» и «My description» — это собственно строки. Идентификаторы должны подчиняться правилам:
— Начинается с латинской буквы
— Содержит только латиницу, цифры и знак подчёркивания
— Оканчивается на латинскую букву или цифру
Чуть забегая вперёд, скажу, что идентификаторы строк используются в определённых тегах CLASS-файлов, предваряемые амперсандом.

Формат SPT — возможно не то, что можно было бы подумать. Есть подозрение, что это специфичный векторный формат или же спрайт.

Об остальных форматах можно найти информацию в интернете.

Именование файлов внутри папок должно (из соображений осторожности) подчиняться довольно простым правилам:

— Начинается с латинской буквы
— Содержит только латиницу, цифры и знак подчёркивания
— Оканчивается на латинскую букву или цифру

Автор: XanderBass

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js