[recovery mode] Записки мододела. Что такое PATCH и как его кушают
Доброго всем здравия! Сим постом я открываю серию публикаций на тему моддинга игры Cities XL. Не спешите хвататься за свои шпаломёты, ибо как материалов по моддингу данной игры на русском языке почти не существует в природе, а кому-то очень надо. Кроме того, данный цикл материалов, как я надеюсь, поможет понять некоторые механизмы проектирования игр. Изначально знания черпаются из зарубежных материалов.
ДИСКЛЕЙМЕР Возможно кому-то изложенное покажется «кэпством». Опять таки же воздержитесь, пожалуйста, от подобных комментариев. То, что очевидно для Вас, явится открытием для кого-то другого. Если у Вас есть, чем дополнить материал, милости прошу в комментарии.
Темой сегодняшней статьи будет подробный разбор механизма модов в игре. А в частности, что из себя представляет патч-мод.
Общее Итак, разберёмся, что есть патч. Файл патча-мода для игры Cities XL представляет собой один из малораспространённых довольно специфичных форматов архива — MCPK. Проще говоря, свой ZIP, только с преферансом и блудницами. Внутри себя патч содержит папку data и некоторое содержимое в ней.Любой толковый линуксоид знает, что такое монтирование. Да и пользователи «окошек» тоже знают не понаслышке, что такое образ диска. В сущности файл, который мы скармливаем специальной программке, которая как бы имитирует компакт-диск, вставленный в привод. С патчами CXL примерно та же история. Во время запуска игра по очереди просматривает содержимое некоторой папки (в данном случае папка Paks игры) и монтирует каждый найденный PATCH-файл к своей папке data. Вот почему патч обязательно должен содержать эту папку.
В случае, если запакованный в патч файл имеет имя уже смонтированного, запакованный файл как бы перезаписывает уже существующий. Таким образом создаются так называемые фиксы. Задумывались, почему некоторые патчи начинаются с буквы «Z»? Именно потому, что эти файлы, загрузившись заведомо последними, перезапишут необходимые файлы в любом случае. Это иногда создаёт конфликты между патчами. Поэтому иногда в инструкциях по установке того или иного мода пишут, что необходимо удалить такие-то и такие-то патчи. Кстати, обычно именно с пресловутой буковкой «Z».
Не важно, как называется ваш файл. Главное, чтобы он не содержал никаких других символов, кроме латиницы, цифр и знака подчёркивания. Иначе игра может попросту не примонтировать ваш патчик. А в худшем случае может и вылететь с ошибкой. Ну, не любят там за рубежом кириллицу. Хотя в некоторых патчах есть даже китайский, я бы таки не стал рисковать.
Что может содержаться в патче? Структура папки data довольно велика. На практике для модов используются немногие папки. Приведу только те, которые я хотя бы раз видел в модах. По данным одного из официальных источников.design — логика игры. В основном файлы формата CLASSdesign\actor — анимированные объекты игры (люди, машинки). Файлы формата ACTORdesign\buildings — файлы классов зданийdesign\decoration\furniture — фурнитура, «украшательства» в игреdesign\decoration\furniture_vehicle — машинкиdesign\decoration\ground — поверхностьdesign\decoration\tree — деревьяdesign\defautavatar — аватары. Файлы форматов AVA и BODYdesign\layout — описания размещения частей моделей. Файлы форматов LAYOUTdesign\massplacementtool — инструменты для массового строительства, например, для дорог
gfx — графика, 3D. В основном файлы формата SGBINgfx\animation — анимация. Файлы формата MOTIONgfx\avatar — аватары. Файлы форматов SGBIN, TGA, XMLgfx\building — строенияgfx\character — людиgfx\furnitures — фурнитура, «украшательства». Файлы форматов SGBIN, SGDUMMIESgfx\furntituresstreet — фурнитура улицgfx\landscape — ландшафт. Файлы с расширением LANDgfx\landscape\layers — слои ландшафта. Файлы формата PNGgfx\landscape\materials — материалы ландшафта. Файлы формата XMLgfx\landscape\textures — текстуры ландшафта. Файлы формата PNGgfx\landscape\water — вода. Файлы формата WATERgfx\placeholder — плейсхолдеры объектовgfx\road — дорогиgfx\trees — деревья. Файлы форматов DDS, SPT, PNG, TGAgfx\vehicle — машинки. Файлы форматов SGBIN, SGDUMMIES
interface — интерфейсные элементыinterface\cfg — конфигурации. Файлы формата XMLinterface\ddstexture — иконки. Файлы формата DDSinterface\texture — текстуры. Файлы с расширением PNG, TGA, JPG
localization — локализация (языки). Файлы с в папках с именами, соответствующими двухзначной сигнатуре языка, с расширениями соответствующими той же сигнатуре
В модах на здания (добавляющих новые здания в игру) обычно используются только: design/buildingsdesign/layoutgfx/buildinginterface/ddstexturelocalization
Общий алгоритм создания мода на здание выглядит так:
Создаём 3D-модельку. Либо тырим с 3D-Warehouse, либо сами рисуем. Не суть. Далее обрабатываем до кондиции готового файла SGBIN. Не забываем про обработку текстур. Создаём класс модельки. Для надёжности лучше делать на основе уже существующих. Тупо копируем себе готовый класс и изменяем его содержимое, как нам надо. Создаём, если надобно layout. Вообще лучше создать в любом случае. На всякий пожарный, как говорится. Скриншотим нашу 3D-модельку и создаём на основе скриншота иконку модельки. Формат DDS, 128 на 128 пикселей, 32 бита цветности. Для этого, кстати, есть утилитка png2dds, позволяющая конвертировать готовые PNG-файлы в формат DDS. Создаём локализацию хотя бы для Английского, Французского и Русского языков. Утилиткой PackUnPack пакуем наш патчик, указывая в качестве исходной папки папку data проекта. Публикуем на сайте 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 — возможно не то, что можно было бы подумать. Есть подозрение, что это специфичный векторный формат или же спрайт.
Об остальных форматах можно найти информацию в интернете.
Именование файлов внутри папок должно (из соображений осторожности) подчиняться довольно простым правилам:
— Начинается с латинской буквы— Содержит только латиницу, цифры и знак подчёркивания— Оканчивается на латинскую букву или цифру