Как модить игру?
!!!!!!!!!!!!!!!!!!ВНИМАНИЕ!!!!!!!!!!!!!!!!!!!!
Перед тем как что-то менять создайте резервные копии всех изменямых папок!!!!!!!!!!!
1. Что такое "модить"?
Мод игры-это её изменение(во всяком случае я так это понимаю!) Червяков модить достаточно легко, потому что большинство настроек хранятся в текстовых достаточно понятных и хорошо структурированных файлов 2. Как искать что можно помодить?
Открываем папку C:\Program Files\Codemasters\Worms 4 Mayhem\data\Tweak в проводнике. В ней куча файлов с расширением xml .В каждом файле лежит куча настроек игры. Для чего служит конкретный файл можно определить по названию. Итак начнём! Возьмём например файл Tweak.xml. В нём, как я понял, находятся основные настройки игры, относящиеся к физике и др. Вот общая структура этого файла(и любого подобного ему файла):
Code
<?xml version='1.0' ?>
<xomArchive>
<xomObjects>
<XDataBank id='id-0'>
<Section>0</Section>
<IntResources href='GoodShotDamageThreshold'/>
<IntResources href='Jetpack.InitFuel'/>
<IntResources href='MaxRandomCrates'/>
<IntResources href='Net.NetworkAvailable'/>
<IntResources href='Ninja.NumRaycastRefinements'/>
<IntResources href='Ninja.NumShots'/>
...
<UintResources href='Camelot.CastleSize.Max'/>
<UintResources href='Camelot.CastleSize.Min'/>
<UintResources href='Camelot.FortPieces.Max'/>
...
<FloatResources href='AIJetpack.ParabolicTime'/>
<FloatResources href='Audio.DistanceFactor'/>
<FloatResources href='Audio.DopplerFactor'/>
<FloatResources href='Audio.RolloffFactor'/>
<FloatResources href='Crate.ImpulseMagnitude'/>
...
<VectorResources href='WXFE.AmbientColour'/>
<VectorResources href='WXFE.DiffuseColour'/>
<VectorResources href='WXFE.LightDirection'/>
<VectorResources href='Worm.Hop.Velocity'/>
...
<ContainerResources href='FE.PS2Water'/>
<ContainerResources href='FE.Water'/>
<ContainerResources href='PS2Water.ARABIAN.DAY'/>
<ContainerResources href='PS2Water.ARABIAN.EVENING'/>
<ContainerResources href='PS2Water.ARABIAN.NIGHT'/>
...
<ColorResources href='Abducted.Colour'/>
<ColorResources href='Debug.DotColour'/>
<ColorResources href='Fog.Colour'/>
...
</XDataBank>
<XIntResourceDetails id='GoodShotDamageThreshold'>
<Value>30</Value>
<Name>GoodShotDamageThreshold</Name>
<Flags>64</Flags>
</XIntResourceDetails>
<XIntResourceDetails id='Jetpack.InitFuel'>
<Value>7500</Value>
<Name>Jetpack.InitFuel</Name>
<Flags>64</Flags>
</XIntResourceDetails>
<XIntResourceDetails id='MaxRandomCrates'>
<Value>15</Value>
<Name>MaxRandomCrates</Name>
<Flags>64</Flags>
</XIntResourceDetails>
<XIntResourceDetails id='Net.NetworkAvailable'>
<Value>1</Value>
<Name>Net.NetworkAvailable</Name>
<Flags>64</Flags>
</XIntResourceDetails>
<XIntResourceDetails id='Ninja.NumRaycastRefinements'>
<Value>8</Value>
<Name>Ninja.NumRaycastRefinements</Name>
<Flags>64</Flags>
</XIntResourceDetails>
<XIntResourceDetails id='Ninja.NumShots'>
<Value>5</Value>
<Name>Ninja.NumShots</Name>
<Flags>64</Flags>
</XIntResourceDetails>
...
<XContainerResourceDetails id='FE.PS2Water'>
<Value href='FE.PS2Water-0'/>
<Name>FE.PS2Water</Name>
<Flags>81</Flags>
</XContainerResourceDetails>
<WaterPlaneTweaks id='FE.PS2Water-0'>
<GlintCentreColor r='219' g='197' b='131' a='255' />
<GlintInnerColor r='219' g='197' b='131' a='255' />
<GlintMiddleColor r='70' g='48' b='26' a='255' />
<GlintOuterColor r='0' g='0' b='0' a='0' />
<GlintRimColor r='0' g='0' b='0' a='0' />
<ShadowCentreColor r='155' g='155' b='155' a='100' />
<ShadowInnerColor r='120' g='120' b='120' a='100' />
<ShadowMiddleColor r='80' g='80' b='80' a='100' />
<ShadowOuterColor r='50' g='50' b='50' a='100' />
<ShadowRimColor r='0' g='0' b='0' a='255' />
<BlendCentreColor r='60' g='61' b='98' a='200' />
<BlendInnerColor r='101' g='120' b='156' a='255' />
<BlendMiddleColor r='140' g='155' b='200' a='200' />
<BlendOuterColor r='146' g='180' b='230' a='0' />
<BlendRimColor r='140' g='163' b='215' a='0' />
<DetailCentreColor r='140' g='163' b='215' a='100' />
<DetailInnerColor r='145' g='76' b='43' a='100' />
<DetailMiddleColor r='50' g='50' b='30' a='100' />
<DetailOuterColor r='100' g='100' b='70' a='0' />
<DetailRimColor r='0' g='0' b='0' a='0' />
<ExtraGlintCentreColor r='0' g='0' b='0' a='0' />
<ExtraGlintInnerColor r='0' g='0' b='0' a='0' />
<ExtraGlintMiddleColor r='0' g='0' b='0' a='0' />
<ExtraGlintOuterColor r='0' g='0' b='0' a='0' />
<ExtraGlintRimColor r='0' g='0' b='0' a='0' />
<GlintResource>FE.DAYWater</GlintResource>
<ShadowResource>FE.DAYWaterDim</ShadowResource>
<SkyBlendResource>FE.WaterBlend</SkyBlendResource>
<DetailResource>FE.DAYDetail</DetailResource>
<SkyBlendColor r='100' g='140' b='200' a='255' />
<GlintTextureScaleA>100</GlintTextureScaleA>
<GlintTextureScaleB>80</GlintTextureScaleB>
<ShadowTextureScaleA>5</ShadowTextureScaleA>
<ShadowTextureScaleB>13</ShadowTextureScaleB>
<DetailTextureScaleA>60</DetailTextureScaleA>
<DetailTextureScaleB>76</DetailTextureScaleB>
</WaterPlaneTweaks>
...
</xomObjects>
</xomArchive>
Кто знает язык html(HiperText Markup Language) найдут жуткие сходства с языком xml(Extensible Markup Language). Вот где об этом можно почитать, если интересно http://ru.wikipedia.org/wiki/XML. Короче кратко об xml. Файл xml можно представить как дерево. Корень этого дерева только один - <xomArchive>. Запись в таких скобках <xomArchive> называется тег. Запись </xomArchive> - это закрывающий тег. Запись типа <ExtraGlintRimColor/> называется одиночный тег (который не должен быть закрыт). Эта запись <ExtraGlintRimColor r='0' g='0' b='0' a='0' /> обозначает, что у этого тега есть атрибуты которые записаны как r='0', где r-имя атрибута, а 0 - значение. Внутри блока состоящего из открывающего и закрывающего тегов могут быть ещё одни блоки из тегов, а также одиночные теги. Ну вот в принципе и всё!
Теперь проанализируем, что в этом файле. Блок <XDataBank id='id-0'> это блок, где описана куча ссылок на ресурсы. Рассмотрим например <IntResources href='Jetpack.InitFuel'/> запись href='Jetpack.InitFuel' означает, что где-то в этом файле внутри блока <xomObjects>..</xomObjects> есть структура, которая хранит в себе данные для этого тега, и называется она Jetpack.InitFuel (href в языке html означает ссылку, аналогично и в этом файле один блок может ссылаться на другой). Теперь напрягаем мозги, и пытаемся перевести с английского Jetpack.InitFuel - это "начальное топливо реактивного ранца". Ладно раз в <xomObjects> только ссылки на данные то найдём сами данные. Найдём в файле(Ctrl+F) Jetpack.InitFuel (это берём из атрибута href). Находим этот ресурс.
Code
<XIntResourceDetails id='Jetpack.InitFuel'>
<Value>7500</Value>
<Name>Jetpack.InitFuel</Name>
<Flags>64</Flags>
</XIntResourceDetails>
Как видно его тип XIntResourceDetails. У данного типа есть следующие данные Value(значение), Name(имя), Flags(какие-то не понятно зачем нужные данные). По сути здесь написано: "У реактивного ранца начальное топливо равно 7500". Хм... А не попробовать ли нам его увеличить? Ставим 50000! И получаем
Code
<XIntResourceDetails id='Jetpack.InitFuel'>
<Value>50000</Value>
<Name>Jetpack.InitFuel</Name>
<Flags>64</Flags>
</XIntResourceDetails>
Сохраняем этот файл(только если мы его скопировали перед этим) и запускаем новую игру в вормах! Берём реактивный ранец и радуемся когда видим 99 секунд! Вот и всё!
3. Почему у меня глючит онлайн игры, или я вылетаю из игры???
Не знаю!!!! Я буду разбираться!!! Но вот что установлено! Можно спокойно создавать супер оружие в файле local.xml!
4. И это всё???
Да! теперь вам надо проявить фантазию и поизучать <XDataBank id='id-0'> в этом и других файлах!
5. А почему некоторые ресурсы называются <IntResources href='Wind.Cap'/>, другие <UintResources href='AI.BulletCount'/>, третьи <StringResources href='BACKUP.FE.LevelToUse'/>?
А потому что разные ресурсы хранят данные разных типов IntResources - целые числа, UintResources - целые положительные, StringResources - тектовые, и т.п. Стоит пожалуй выделить такой класс ресурсов, как <ContainerResources href='FE.PS2Water'/>, потому что работа с ним чуть-чуть отличается.
Итак мы нашли строчку <ContainerResources href='FE.PS2Water'/> в секции <XDataBank id='id-0'>. Это тоже ссылка на ресурс, поэтому забиваем в поиск FE.PS2Water. Находим
Code
<XContainerResourceDetails id='FE.PS2Water'>
<Value href='FE.PS2Water-0'/>
<Name>FE.PS2Water</Name>
<Flags>81</Flags>
</XContainerResourceDetails>
Но а где же значение? А значения нет, вместо него ссылка на FE.PS2Water-0. Ну чтож ищем теперь его! Находим
Code
<WaterPlaneTweaks id='FE.PS2Water-0'>
<GlintCentreColor r='219' g='197' b='131' a='255' />
<GlintInnerColor r='219' g='197' b='131' a='255' />
<GlintMiddleColor r='70' g='48' b='26' a='255' />
<GlintOuterColor r='0' g='0' b='0' a='0' />
<GlintRimColor r='0' g='0' b='0' a='0' />
<ShadowCentreColor r='155' g='155' b='155' a='100' />
<ShadowInnerColor r='120' g='120' b='120' a='100' />
<ShadowMiddleColor r='80' g='80' b='80' a='100' />
<ShadowOuterColor r='50' g='50' b='50' a='100' />
<ShadowRimColor r='0' g='0' b='0' a='255' />
<BlendCentreColor r='60' g='61' b='98' a='200' />
<BlendInnerColor r='101' g='120' b='156' a='255' />
<BlendMiddleColor r='140' g='155' b='200' a='200' />
<BlendOuterColor r='146' g='180' b='230' a='0' />
<BlendRimColor r='140' g='163' b='215' a='0' />
<DetailCentreColor r='140' g='163' b='215' a='100' />
<DetailInnerColor r='145' g='76' b='43' a='100' />
<DetailMiddleColor r='50' g='50' b='30' a='100' />
<DetailOuterColor r='100' g='100' b='70' a='0' />
<DetailRimColor r='0' g='0' b='0' a='0' />
<ExtraGlintCentreColor r='0' g='0' b='0' a='0' />
<ExtraGlintInnerColor r='0' g='0' b='0' a='0' />
<ExtraGlintMiddleColor r='0' g='0' b='0' a='0' />
<ExtraGlintOuterColor r='0' g='0' b='0' a='0' />
<ExtraGlintRimColor r='0' g='0' b='0' a='0' />
<GlintResource>FE.DAYWater</GlintResource>
<ShadowResource>FE.DAYWaterDim</ShadowResource>
<SkyBlendResource>FE.WaterBlend</SkyBlendResource>
<DetailResource>FE.DAYDetail</DetailResource>
<SkyBlendColor r='100' g='140' b='200' a='255' />
<GlintTextureScaleA>100</GlintTextureScaleA>
<GlintTextureScaleB>80</GlintTextureScaleB>
<ShadowTextureScaleA>5</ShadowTextureScaleA>
<ShadowTextureScaleB>13</ShadowTextureScaleB>
<DetailTextureScaleA>60</DetailTextureScaleA>
<DetailTextureScaleB>76</DetailTextureScaleB>
</WaterPlaneTweaks>
Ну а здесь уже данные! Много данных о цветах воды! Для тех кот не знает цвет может кодироваться как rgba(Red Green Blue Alpha-Красный Зелёный Синий Прозрачность) и эти числа могут изменяться от 0 до 255.
То есть XContainerResourceDetails это контейнер для каких-то данных и имеет только ссылку на них.
Ну вот вроде и всё! Учитесь, изучайте файлы, пробуйте модить! Я вам дал базовые знания. А вам осталось только найти теги, кторые можно поменять.