Доброго всем здравия!
Сим постом я открываю серию публикаций на тему моддинга игры 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
Общий алгоритм создания мода на здание выглядит так:
- Создаём 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 — возможно не то, что можно было бы подумать. Есть подозрение, что это специфичный векторный формат или же спрайт.
Об остальных форматах можно найти информацию в интернете.
Именование файлов внутри папок должно (из соображений осторожности) подчиняться довольно простым правилам:
— Начинается с латинской буквы
— Содержит только латиницу, цифры и знак подчёркивания
— Оканчивается на латинскую букву или цифру
Автор: XanderBass