Записки мододелу
Доброго всім здоров'я!
Цим постом я відкриваю серію публікацій на тему моддінгу Cities XL. Не поспішайте хапатися за свої шпаломети, бо як матеріалів з моддингу цієї гри українською мовою майже не існує у природі, а комусь дуже треба. Крім того, цей цикл матеріалів, як я сподіваюся, допоможе зрозуміти деякі механізми проектування ігор. Спочатку знання черпаються із зарубіжних матеріалів.
Темою сьогоднішньої статті буде докладний аналіз механізму модів у грі. А зокрема, що собою являє патч-мод.
Отже, розберемося, що є патч. Файл патча-мода для гри Cities XL є одним з малопоширених досить специфічних форматів архіву - MCPK. Простіше кажучи, свій ZIP, тільки з преферансом та блудницями. Усередині себе патч містить папку data та деякий вміст у ній.
Будь-який тлумачний лінуксоїд знає, що таке монтування. Та й користувачі вікон теж знають не з чуток, що таке образ диска. По суті файл, який ми згодовуємо спеціальною програмою, яка імітує компакт-диск, вставлений у привід. З патчами CXL приблизно та сама історія. Під час запуску гра по черзі переглядає вміст певної папки (в даному випадку папка Paks гри) і монтує кожен знайдений файл PATCH до своєї папки data. Ось чому патч обов'язково має містити цю папку.
У випадку, якщо запакований у патч файл має ім'я вже змонтованого, запакований файл перезаписує вже існуючий. У такий спосіб створюються так звані фікси. Замислювалися чому деякі патчі починаються з літери «Z»? Саме тому, що ці файли, завантажившись наперед останніми, перезапишуть необхідні файли в будь-якому випадку. Цеіноді створює конфлікти між патчами. Тому іноді в інструкціях по встановленню того чи іншого мода пишуть, що необхідно видалити такі патчі. До речі, зазвичай саме з горезвісною літерою «Z».
Не важливо, як називається файл. Головне, щоб він не містив жодних інших символів, окрім латиниці, цифр та знака підкреслення. Інакше гра може просто не вмонтувати ваш патчик. А в найгіршому випадку може і вилетіти з помилкою. Ну, не люблять там за кордоном кирилицю. Хоча в деяких патчах є навіть китайська, я б таки не став ризикувати.
Що може бути в патчі?
Структура папки data досить велика. На практиці для модів використовуються небагато папок. Наведу тільки ті, які я хоч раз бачив у модах. За даними одного з офіційних джерел.
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 на радість іншим архітекторам.
До речі, як не прикро, локалізацію часто нехтують.
Пара слів про формати
Формат WATER - описово-підсумковий формат для опису води, який дозволяє пов'язати з певним типом водної поверхні певну текстуру.
Файли локалізації досить прості. По суті це текстові файли певного виду в кодуванні ANSI (UCS-2 Little Endian), імена яких повинні збігатися з іменами моделей, що перекладаються, і мати розширення, що відповідає двозначній сигнатурі мови. Усередині файлів міститься приблизно таке:
Де fooID, fooIDL, fooIDD - ідентифікатори мовних рядків, "bla-bla", "bla-bla-bla" та "My description" - це власне рядки. Ідентифікатори повинні підкорятися правилам: — Починається з латинської літери — Містить лише латинку, цифри та знак підкреслення — Закінчується на латинську літеру або цифру Тільки забігаючи вперед, скажу, що ідентифікатори рядків використовуються теги CLASS-файлів, що передуються амперсандом.
Формат SPT — можливо, не те, що можна було б подумати. Є підозра, що це специфічний векторний формат або спрайт.
Про інші формати можна знайти інформацію вІнтернет.
Назва файлів усередині папок повинна (з міркувань обережності) підкорятися досить простим правилам:
— Починається з латинської літери — Містить лише латинку, цифри та знак підкреслення — Закінчується на латинську літеру або цифру