[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моддинг » Уроки моддинга Worms 4 Mayhem » РПКЧ #2. Твикинг (В общих чертах о твиках, XML формате и его структуре в игре.)
РПКЧ #2. Твикинг
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15

W4M:РПКЧ
Раздел 1. Твикинг.
Глава 1. Введение.


Версия статьи от 23.08.13
Автор статьи: Firsacho


Сегодня мы приступаем к изучению древнейшей, могучей и очень обширной области в модинге игры Worms 4 Mayhem – Твикинге. Первая глава это вводный урок и на нем мы поговорим в целом о том, что же такое Твикинг, что он собой представляет, и что с помощью него мы можем сделать.

Твикингом называют процесс достижения определенного желаемого результата, путем изменения значений различных параметров настроек определенного софта. Как правило, твики скрыты от глаз обычных пользователей и открываются через отдельный конфигурационный файл или же вообще закодированы. С английского слово Tweak толкуется, как «точная настройка».

В игре W4M Твики представлены в виде набора конфигурационных XML файлов и расположены в папке Data/Tweak. Открываются и редактируются обычным блокнотом, либо другими аналогичными программами.

XML (extensible markup language) – популярный расширяемый язык разметки, с формальным синтаксисом. То есть «теги» (кодовые слова) данного языка не заданы свыше (самим языком), а определяются исполняющим их софтом. Язык обозначает скорее правила оформления кода, чем конкретные операции и функционал. Решение использовать XML в качестве формата для написания Твиков, сделало процесс конфигурации еще более гибким, чем при использовании cfg или ini файлов- оно позволило формировать саму структуру файлов, добавляя или существенно изменяя ее разделы.

Ниже разберем общий вид структуры типичного XML-Tweak файла в Worms 4. Рекомендую изучать ее на «живом» примере, открыв с помощью блокнота любой файл из папки Data/Tweak в директории игры.

Файл начинается с объявления версии XML:
Код
<?xml version='1.0' ?>


Это чисто техническая строка, которая является обязательной по стандарту XML и указывает на версию стандарта, которой соответствует данной файл. Правда для версии 1.0 указывать его не обязательно (согласно тому же стандарту), а версий пока существует всего две: 1.0 и 1.1 =)

Ниже идет тег - это уже начало корневой части кода (читать – основной). Это начальный тег, открывающий корневой элемент документа. В самом конце документа вы найдете уже закрывающий тег: , указывающий на закрытие тела элемента “xomArchive”. Такие пары тегов являются чем-то наподобие скобок в математике, внутри которых могут находиться различные действия или же другие вложенные скобки. Весь корень XML документа исключительно из таких «скобок» и вложенных действий и состоит.

Как я уже говорил выше, в языке XML сами теги задаются не синтаксисом языка, я распознающей файл программой (парсером), то есть имя корневого тега xomArhive, это не стандарт языка, а решение Team 17 (разработчиков игры)… И это весьма любопытно, ибо XOM это совершенно отдельный и распространенный формат архивов Team 17, применяемый во многих частях серии WORMS. То есть в данном случае можно предположить, что XML файлы твиков это некая почти идентичная незакодированная замена этому самому XOM-формату (кстати, в других 3д частях игры твики закодированы в этот самый XML и простым блокнотом не открываются). Еще раз поясню, чтобы вас не путать: то что синтаксис языка открытый, это не значит, что теги в файлах можно переименовывать на свои: с точки зрения языка XML это ошибкой не будет, а вот с точки зрения движка игры, который эти файлы читает, это «what the hell is going on ?!”, короче не делайте так)

И так, вернемся к нашему коду. С начинается корень всех твиков и им же(уже закрывающим) заканчивается, таков порядок, установленный Team-17.

В него вложена пара тегов , видимо обозначающая что внутри находятся объекты содержимого xom (после открытия тега xomArhive, ну просто охренеть, как внезапно).

А уже внутрь “xomObjects” вложено все самое вкусное….

Но вначале следует своеобразное оглавление внутри следующего элемента из тегов . Если кто изучал HTML (который тоже, в каком-то плане родня XML), то встречал уже подобное исполнение. Для остальных поясню: тегом здесь является XDataBank, а следующий в открывающем (начальном) теге после пробела id=’id-0’, это уже параметр тега, которых у него может быть много (в данном случае – один). Зачем правда там нужен этот параметр id, я так определить, увы, и не смог.. но идем дальше.

В XDataBank вложено уже сам список оглавления вида:
      
Код
<UintResources href='WXFE.NextLevelEnabled'/>
           <UintResources href='WXFE.PrevLevelEnabled'/>
           <StringResources href='WXFE.AT.Glasses'/>
           <StringResources href='WXFE.AT.Gloves'/>
           <StringResources href='WXFE.AT.Hat'/>
           <StringResources href='WXFE.AT.Tash'/>
           <StringResources href='WXFE.Default'/>


Это пример другого вида тегов – пустой тег. Пустые теги не имеют закрывающего (конечного) и легко различаются по наличии слэша “/” в конце. Информацию для парсера (обрабатывающей программы) несет название самого тега и его параметры.

Каждый пустой тег является «указателем» для парсера на элемент из парных тегов, который идет уже ниже в коде файла, после закрывающего тега , например пустой тег
Код
<UintResources href='WXFE.NextLevelEnabled'/>


в «оглавлении» ведет на элемент

Код

  <XUintResourceDetails id='WXFE.NextLevelEnabled'>
           <Value>1</Value>
           <Name>WXFE.NextLevelEnabled</Name>
           <Flags>64</Flags>
         </XUintResourceDetails>




ниже оглавления в теле xomObjects, привязываясь по параметру id, который соответствует параметру href в оглавлении. Это элемент, отвечающий уже за определенные игровые настройки, условно обзовем подобные элементы «Блоками настроек».

Само имя тега в оглавлении указывает на тип хранимых данных в таких блоках..
IntResources – указывает, что хранится значение числового типа (целые, положительные);
UIntResources – аналогично IntResources, разница не определена;
XIntResources – аналогично IntResources, разница не определена;
StringResources – может содержать значение строки, то есть текста;
FloatResources – могут содержать положительные числа со знаками после запятой;
VectorResources – содержать три числовых значения – по осям x, y, z . Возможны знаки после запятой и знак минуса;
ContainerResources – блок настроек содержащий в себе целый большой набор вложенных настроек различных типов;
ColorResources – содержит в себе 4 параметра цвета – r (красный), g (зеленый), b (синий) и a (значение непрозрачности), интенсивность каждого параметра выставляется в диапазоне значений от 0 до 255.

Стоит упомянуть также, что оглавление начинается с пары
Код
<Section>0</Section>


, функция которой также не исследована.

Теперь разберем сам Блок настроек, который мы приводили выше.

Код

  <XUintResourceDetails id='WXFE.NextLevelEnabled'>
           <Value>1</Value>
           <Name>WXFE.NextLevelEnabled</Name>
           <Flags>64</Flags>
         </XUintResourceDetails>




Название начального тега соответствует названию тэга в оглавлении, за исключением добавленного в начало символа “X”. Вероятнее всего это было сделано, чтобы парсер отличал тег в оглавление от тега элемента с настройками.
В элемент встроен дочерний элемент Value, в котором установлено значение равное «1», что соответствует типу хранимых данных, заданных в оглавлении.
Далее идет элемент Name, название которого должно соответствовать id элемента и href в оглавлении (зачем дублировать в элементе дважды понятия не имею, вероятно особенности движка).
Ниже значение Flags, которое также мне увы непонятно, но оно встречается в твиках повсеместно.
На этом элемент XUintResourceDetails закрывается, и ниже идет открытие следующего, с очередным id по оглавлению.
Прошу запомнить, что порядок строк в оглавлении должен строго соответствовать порядку блоков настроек, на которые оглавление ссылается.
Теперь для полноты знаний представлю вам блок настроек типа ConteinerResources, т.к. этот тип намного сложнее и интереснее.

Код

  <XContainerResourceDetails id='Multi.LandWormsForgot'>
           <Value href='Multi.LandWormsForgot-0'/>
           <Name>Multi.LandWormsForgot</Name>
           <Flags>80</Flags>
         </XContainerResourceDetails>
         <WXFE_LevelDetails id='Multi.LandWormsForgot-0'>
           <Frontend_Name>FETXT.Jur.Land.MissionName</Frontend_Name>
           <Frontend_Briefing>FETXT.Jur.Land.Brief</Frontend_Briefing>
           <Frontend_Image>TheLandThatWormsForgot.tga</Frontend_Image>
           <Level_ScriptName>stdvs,wormpot</Level_ScriptName>
           <Level_FileName>TheLandThatWormsForgot</Level_FileName>
           <Objectives></Objectives>
           <Level_Number>43</Level_Number>
           <Level_Type>0</Level_Type>
           <Lock>Lock.Map.LandWormsForgot</Lock>
           <Theme_Type>5</Theme_Type>
           <Preview_Type>0</Preview_Type>
           <BonusTime>600</BonusTime>
         </WXFE_LevelDetails>


В качестве примера я выбрал контейнер из файла Scripts.xml, который отвечает за настройку карты «Земля забытая червями» (перевод дословный и не соответствует русской локализации).
И так опять видим тег из оглавление, с добавлением X + в этот раз добавленным словом Details. Он почти аналогичен уже рассмотренному нами блоку настроек выше (те же 5 строк, очень похоже) но после закрытия этого элемента открывается еще один, не заявленный в оглавлении: «WXFE_LevelDetails». Фишка в том, что тот самый блок верхний блок “XContainerResourceDetails” в значении Value имеет ссылку на параметр id нижестоящего элемента, где уже содержатся все настройки. Замысловато конечно, но такую структуру придумали Team 17.
Ну и пара слов о самом содержимом «». Буду рассматривать исключительно техническую сторону, т.к. о функционале данного блока будет рассказываться в одном из следующих уроков, посвященному файлу Scripts.xml.
Внутри тегов «Frontend_Name» мы видим значение «FETXT.Jur.Land.MissionName» - это не что иное, как очередная ссылка. Но ведет она не на файл Scripts.xml, и даже не на другой файл из папки Tweak, а на содержимое архива файла перевода. Об этом нам подсказывает приставка FETXT. Файл подставляет свое значение в зависимости от выбранного перевода, либо выводит написанное в тег красным, если ссылка ведет вникуда…
Во «Frontend_Image» задается имя файла картинки в определенной движком папке (определение файла через твик – вообще редкость).
Элемент «Lock» скорее всего вообще ссылается на сохранения, указывая, куда движку надо посмотреть, чтоб проверить разблокирована ли эта карта у игрока.
Остальные значения в контейнере числовые и пояснений не требуют, единственное, о чем стоит упомянуть, что многие числовые значения можно выставить в режим «бесконечность» написав вместо значения число «-1».

На этом я думаю информации для вводного урока более чем предостаточно =). В следующем уроке мы рассмотрим модифицирование уже одного конкретного XML-файла.





Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
agent007_old
Заблокированные
Сообщений: 135
Реп: 20
круто, что сказать...
пока не пишу, вожусь с сестрой


 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Цитата (agent007)
круто, что сказать

целиком прочел)?




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Vorobey
Модераторы
Сообщений: 1740
Реп: 101 / Инв: 11
Цитата (firsacho)
целиком прочел)?

Не думаю, что пока есть такие)
 
agent007_old
Заблокированные
Сообщений: 135
Реп: 20
Цитата (firsacho)
целиком прочел)?

нет, не могу ведь я
Цитата (agent007)
вожусь с сестрой


 
Заблокированные
Сообщений: 66
Реп: 16
Прочел всё. А учебник обновляться будет?

Добавлено (16.03.2014, 11:07)
---------------------------------------------
я имею виду кроме скриптов ещё


Помогаю:http://engine.wohlnet.ru/
Типа люблю Super mario brothers
Мои находки в твиках: http://w4tweaks.ru/forum/89-2220-1#61389
Что такое Camtwk?: http://w4tweaks.ru/forum/89-2223-1
Что такое WormActing?: http://w4tweaks.ru/forum/89-2222-1
Что такое DefSave?: http://w4tweaks.ru/forum/89-2224-1
Что такое MenuTwkXPCCommon?: http://w4tweaks.ru/forum/89-2225-1
 
Vorobey
Модераторы
Сообщений: 1740
Реп: 101 / Инв: 11
Естсна.
З.Ы. Так же, советую почитать урок WormsFallout'a по Parttwk (твикинг эффектов)
http://w4tweaks.ru/forum/89-1810-1 - ниже, в комментариях, мой перевод.
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Veudekato, надо будет дописать второй урок)



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Заблокированные
Сообщений: 66
Реп: 16
Воробей, конечно я прочту всё.
Я вижу тут люди хорошо трудятся


Помогаю:http://engine.wohlnet.ru/
Типа люблю Super mario brothers
Мои находки в твиках: http://w4tweaks.ru/forum/89-2220-1#61389
Что такое Camtwk?: http://w4tweaks.ru/forum/89-2223-1
Что такое WormActing?: http://w4tweaks.ru/forum/89-2222-1
Что такое DefSave?: http://w4tweaks.ru/forum/89-2224-1
Что такое MenuTwkXPCCommon?: http://w4tweaks.ru/forum/89-2225-1
 
KaMiKaZe
Проверенные
Сообщений: 1514
Реп: 23
Цитата agent007 ()
вожусь с сестрой

Всю жизнь.
 
Vorobey
Модераторы
Сообщений: 1740
Реп: 101 / Инв: 11
KaMiKaZe, слоу.
 
KaMiKaZe
Проверенные
Сообщений: 1514
Реп: 23
Vorobey, ок
 
Форум » Моддинг » Уроки моддинга Worms 4 Mayhem » РПКЧ #2. Твикинг (В общих чертах о твиках, XML формате и его структуре в игре.)
  • Страница 1 из 1
  • 1
Поиск: