Сообщений: 3813
|
Опубликовано: 23.08.2013, 23:27:01
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.
Стоит упомянуть также, что оглавление начинается с пары
, функция которой также не исследована.
Теперь разберем сам Блок настроек, который мы приводили выше.
Код <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
|
|
|
|
Сообщений: 135
|
Опубликовано: 24.08.2013, 10:10:50
круто, что сказать... пока не пишу, вожусь с сестрой
|
|
|
|
Сообщений: 3813
|
Опубликовано: 24.08.2013, 10:29:44
Цитата (agent007) круто, что сказать целиком прочел)?
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1740
|
Опубликовано: 24.08.2013, 13:45:02
Цитата (firsacho) целиком прочел)? Не думаю, что пока есть такие)
|
|
|
|
Сообщений: 135
|
Опубликовано: 24.08.2013, 15:16:01
Цитата (firsacho) целиком прочел)? нет, не могу ведь я Цитата (agent007) вожусь с сестрой
|
|
|
|
Сообщений: 66
|
Опубликовано: 16.03.2014, 11:07:00
Прочел всё. А учебник обновляться будет?Добавлено (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
|
|
|
|
Сообщений: 3813
|
Опубликовано: 16.03.2014, 20:42:15
Veudekato, надо будет дописать второй урок)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 66
|
Опубликовано: 17.03.2014, 12:26:37
Воробей, конечно я прочту всё. Я вижу тут люди хорошо трудятся
Помогаю: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
|
|
|
|