PDA

Просмотр полной версии : [GUIDE] - Как сделать новый юнит путем рескининга.



oooo4
31.01.2011, 07:42
Данный гайд базируется на другом, англоязычном гайде (http://forums.civfanatics.com/showthread.php?t=392773) от Deliverator (http://forums.civfanatics.com/member.php?u=137543)'a, но это не чистый перевод, я дополнил его собственным опытом и комментариями. Можно считать этот гайд расширенной версией исходного переведенного гайда.

Итак, поехали!

СОЗДАНИЕ НОВОГО ЮНИТА ПУТЕМ РЕСКИНИНГА.

Самый простой способ сделать новый юнит, это создать его в XML и присвоить ему графику от другого юнита. Получится два разных по свойствам юнита, но выглядеть они будут одинакого.

Тогда нам приходит в голову идея, что было бы неплохо один их них перекрасить, тогда, вроде бы это уже два разных юнита. Перекраска - это и есть рескининг.

http://s014.radikal.ru/i326/1101/b3/7e6180779a75.jpg

Как видите, юниты одинаковые, но "раскрашены" по разному.


ВСТУПЛЕНИЕ: как это работает.

Графика в игре работает так: есть описание юнита, в котором стоит ссылка на описание его графику. В "описании его графики" написано какие графические файлы (модельки и текстуры в том числе) используются этим юнитом. Нам необходимо создать свое собственное "описание его графики", указать там свои собственные, перекрашенные, графические файлы и поставить в своем юните ссылку на это описание.

Перекрашивать мы будем текстуру, а модельку просто скопируем.

В целом, весь процесс делится на две части:
1. Работа с графикой.
2. Работа с XML.

Нам понадобиться следующий софт:
1. Графический редактор (ваш любимый)
2. GrannyMaterialHacker (http://www.theindiestone.com/lemmyandbinky.com/civ2/GrannyMaterialHackerv2.zip) - чудо утилитка от двух волшебников lemmy101 and CaptainBinky.
3. Классический набор Civ5 SDK, что поставляется через Steam.

Так же, думаю, будет не лишним тут же сказать что все Civ5 SDK требует кучу девелопмент-софта от макрософта и если у вас чего то не хватает, это придется скачивать. Вам будет писать чего не хватает.


ЧАСТЬ ПЕРВАЯ: работа с графикой.

Подготовка:

1) Сiv5 SDK берется из Steam. Как это сделать - писать не буду, процесс примерно такой же как вы брали саму Civ, только платить второй раз не надо :). SDK есть в разделе Tools. Ставим SDK

2) GrannyMaterialHacker (http://www.theindiestone.com/lemmyandbinky.com/civ2/GrannyMaterialHackerv2.zip) надо скачать и распаковать в директорию с Нексусом (конкретно вот сюда %папка_со_стимом%\steamapps\common\sid meier's civilization v sdk\Nexus\x86). Если вы распакуете ее еще куда то работать эта утилитка не будет, она жестко привязана к Нексусу.

Что конкретно делает эта утилитка я так и не понял :), я не график, но для наших задач это и не важно, главное что она работает. Возможно, она "перепрошивает" текстуру на модельку.

3) У вас должны быть распакованны fpk файлы Civ5.

Что бы сделать это, нужно:
- запустить из SDK Nexus.
- перейти в нем на одноименную закладку Nexus.
- выбрать там Script Browser и найти скрипт под названием Extract PAK (*.fpk).
- кнопочкой Run Script запустить его на выполнение.

В папке с игрой, в ...\Steam\steamapps\common\sid meier's civilization v\Resource будет три папки, забитыми файлами до отказу. Это оно и есть.

Мы готовы.


Отсюда пойдет "перевод" гайда Деливератора и будут использоваться его картинки. Деливератор использовал Minuteman'a для образца.

Рескининг:

1) Какие файлы понадобятся.

Понадобятся файлы тех типов, что будут указаны ниже на картинке. Их нужно сложить в одну папку. Если они будут раскиданы по разным папкам, ничего работать не будет. Создаем такую папку, например MyNewUnit, и копируем.

Картинка:

http://forums.civfanatics.com/attachment.php?attachmentid=269449&stc=1&d=1287530089
Хотя sref файл, по моему, в данном случае все же лишний. Дело в том что игра распаковывает и загружает в память ВСЕ графические файлы и многие использует в разных модельках. Поэтому, если такой файл УЖЕ где то используется, например в другом юните, то можно просто ссылаться на него.

- fxsxml файл - описание, какие файлы графики использует юнит.
- gr2 файл - моделька юнита.
- dds файл - текстура юнита.

Где они лежат?

В кратце:
- fxsxml файл в ...sid meier's civilization v\Resource\Common
- остальное в ...sid meier's civilization v\Resource\DX9

Если вы знаете как называются файлы юнита, который вы будете использовать как исходный, то просто копируете их. Если же нет, то нужно будет их найти.

Ищем:

Нам нужно проследить по описаниям, какие файлы использует юнит.
- Идем в ...Steam\steamapps\common\sid meier's civilization v\assets\Gameplay\XML\Units
- открываем в текстовом редакторе файл CIV5Units.xml Это файл с описаниями юнитов.
- Находим там тот юнит, моделька которого будет использоваться.
- В его описании есть тег <UnitArtInfo>, его значение - ссылка на описание графики юнита.
- Запоминаем эту ссылку..

- Далее, идем в ...Steam\steamapps\common\sid meier's civilization v\Resource\Common
- Ищем там файл civ5artdefines_unitmembers.xml, открываем его в текстовом редакторе.
- Находим там описание юнита по ссылке, запомненной выше.
- Ищем в этом описании тег <Granny>. Там будет ссылка на *.fxsxml файл.

Например:


<UnitMemberArtInfo>
<Type>ART_DEF_UNIT_MEMBER_U_AMERICAN_MINUTEMAN</Type>
<fScale>0.14</fScale>
<Granny>Assets/Units/U_American_Minuteman/U_American_Minuteman.fxsxml</Granny>

...

</UnitMemberArtInfo>
- Запоминаем название файла.
- В папке ...Steam\steamapps\common\sid meier's civilization v\Resource\Common ищем этот fxsxml файл.
- Находим и копируем его в нашу папку MyNewUnit.

Важно: Что бы два раза не вставать, туда же и отсюда же копируем и эти два файла:
civ5artdefines_unitmembers.xml
civ5artdefines_units.xml
Они нам пригодятся позже.

- Открываем этот наш скопированный *.fxsxml файл. Внутри описание графики юнита.

Вам нужно две вещи: название основной текстуры (dds файл) и название меш (модельки) юнита (gr2 файл).

- Файлы текстур описаны в теге <Texture file>. Их может быть несколько, основная текстура, как правило, содержит в себе буквы _DIFF.dds (например: u_american_minuteman_diff.dds). Если ничего такого нет, то придется думать и перебирать файлы в графическом редакторе, что бы понять какой основной.
- Файлы модельки описаны в теге <Mesh>.
- Идем в \Steam\steamapps\common\sid meier's civilization v\Resource\DX9 и ищем там файлы меша и текстуры из тегов выше.
- Кoпируем их в нашу папку MyNewUnit.

- fxsxml файл переименовываем в название нашего нового юнита. Например redcoat.fxsxml

Итого у нас должны быть файлы всех типов, что на картинке выше (кроме sref файла).

2) Перекраска текстуры.

Перекраска текстуры производиться в любом графическом редакторе, который умеет работать с dds файлами. Некоторым, возможно, понадобиться доставить dds плагин.

Работу с графикой я описывать не буду. В кратце: открываем dds файл, берем кисточку, и красим :).

В своем примере Деливератор перекрашивает синий камзол Минутмена в красный. Он использует Paint.Net. Обратите внимание, на картинке (слева) показаны параметры при сохранении перекрашенного файла обратно в dds. Их и надо использовать.

http://forums.civfanatics.com/attachment.php?attachmentid=269450&stc=1&d=1287530089
Деливератор сохраняет файл как redcoat_diff.dds

Перекрасили и сохранили в ту же папку откуда взяли. Название даете сразу новое! Это все тоже важно.

3) Утилита GrannyMaterialHacker.

Здесь мы и создадим те самые "свои" графические файлы для нашего юнита.

- Идем в папку с Нексусом (через Проводник) куда вы распаковывали GrannyMaterialHacker и запускаем его.
- В строках Source GR2 и My GR2 указываем наш исходный gr2 файл из папки MyNewUnit. В обоих строках один и тот же файл.
- Кликаем по окошкам под Souce GR2 находим там файл с основной текстурой. На пути внимание обращать не надо, только на название.

http://forums.civfanatics.com/attachment.php?attachmentid=269451&stc=1&d=1287530089

- Как нашли, кликаем на нем два раза, откроется еще одно окошко.
- Указываем там наш перекрашенный dds файл.

http://forums.civfanatics.com/attachment.php?attachmentid=269452&stc=1&d=1287530089

- Жмем кнопку "HACKIFY!".

- В папке MyNewUnit будет создан файл, подписанный как _new (например, исходный файл вашей модельки u_american_minuteman.gr2, а будет создан u_american_minuteman_new.gr2). Впрочем, программа об этом вам сообщит.
- Этот новый _new файл переименовываем (через Проводник) в название вашего юнита (в redcoat.gr2).

Теперь это файл вашей модельки.

Осталось прописать его и файл текстуры в fxsxml файле, что бы это все заработало.

- Открываем ваш redcoat.fxsxml файл из папки MyNewUnit
- В тегах <Mesh> и <Texture> производим необходимые изменения. Сохраняем.

Например:



<Asset>
<Mesh file="redcoat.gr2"/>
...
<Texture file="redcoat_diff.dds"/>
...
</Asset>
Все, все файлы готовы!

4) Проверка в Нексусе.

Должен тут сказать, что у меня тут Нексус дал сбой и я проверить я не смог. Однако в исходном гайде эта часть описывается.

- Запускаем Нексус.
- Переходим на вкладку Assest View.
- Открываем там наш redcoat.fxsxml файл и смотрим на модельку.
- Если не нравиться как получилась текстура, пункты 2 и 3 повторяем по новой.


У Деливератора получилось не плохо :)

http://forums.civfanatics.com/attachment.php?attachmentid=269436&stc=1&d=1287523783

Конец графической части.

oooo4
31.01.2011, 07:43
ЧАСТЬ ВТОРАЯ: работа с XML.

Запускаем ModBuddy. Создаем или открываем проект.

1) Перенос файлов в проект.

Кликаем правой кнопкой мыши по названию проекта, жмем Add -> Existing Item и перемещаемся в нашу папку MyNewUnit.

Там выбираем

наши файлы с графикой:
- redcoat_diff.dds
- redcoat.gr2

с описанием графики:
- redcoat.fxsxml

а так же
- civ5artdefines_unitmembers.xml
- civ5artdefines_units.xml

Картинка от Деливератора:
http://forums.civfanatics.com/attachment.php?attachmentid=269442&stc=1&d=1287527810
civ5artdefines_units.xml тут нет, но он нужен для создания нового юнита.


2) "Собираем" юнит.

Как вы помните, юниты в Civ5 это несколько объектов ака отряд. "Сборка" этого отряда происходит в двух файлах: civ5artdefines_unitmembers.xml и civ5artdefines_units.xml.

Сперва редактируем civ5artdefines_unitmembers.xml. Тут описано как выглядит юнит и как он стреляет (или не стреляет).

- Открываем его в ModBuddy.
- Находим описание исходного юнита.
- Копируем его.
- Перемещаемся в конец файла, становимся перед тегом </UnitMemberArtInfos> и вставляем туда описание.
- Редактируем его, изменяя название и указывая нужный fxsxml файл.

Получится может вот так:



<UnitMemberArtInfo>
<Type>ART_DEF_UNIT_MEMBER_REDCOAT</Type> <!--поменять-->
<fScale>0.14</fScale>
<Granny>redcoat.fxsxml</Granny> <!--поменять-->
<Combat>
<Defaults>ART_DEF_TEMPLATE_SOLDIER</Defaults>
<bHasShortRangedAttack>1</bHasShortRangedAttack>
<bReformBeforeCombat>1</bReformBeforeCombat>
<Weapon>
<WeaponTypeTag>BULLET</WeaponTypeTag>
<WeaponTypeSoundOverrideTag>BULLET</WeaponTypeSoundOverrideTag>
</Weapon>
</Combat>
<MaterialTypeTag>CLOTH</MaterialTypeTag>
<MaterialTypeSoundOverrideTag>FLESH</MaterialTypeSoundOverrideTag>
</UnitMemberArtInfo>

</UnitMemberArtInfos> <!--должно быть в самой последней строчке файла-->
Аналогично редактируем и civ5artdefines_units.xml. В нем мы как раз и собираем юнит в отряд.

Может получиться:

<UnitArtInfo>
<Type>ART_DEF_UNIT_REDCOAT</Type> <!--поменять-->
<Formation>HonorableGunpowder</Formation>
<DamageStates>1</DamageStates>
<UnitMemberArt>
<MemberType>ART_DEF_UNIT_MEMBER_REDCOAT</MemberType> <!--ссылка на описание юнита из предыдущего файла-->
<MemberCount>14</MemberCount>
</UnitMemberArt>
</UnitArtInfo>

</UnitArtInfos> <!--должно быть в самой последней строчке файла-->
Юнит собран.

3) Прописываем графику юниту.

Нам осталось "сказать" нашему юниту где теперь его графика. Как вы помните из первой части в описании каждого юнита есть тег <UnitArtInfo> - это оно и есть, сюда надо вписать ссылку на его новую, отрескиненную графику.

Как создать XML описание юнита (т.е. сам юнит) в этом гайде не рассказано. Предполагается что вы уже знаете это. Как минимум скопируйте все что найдете из описания исходного юнита в файле Civ5Units.xml и подправьте необходимые значения.

Открываем описание вашего юнита и в теге <UnitArtInfo> вписываем ссылку на тег из civ5artdefines_units.xml файла.

Т.е.



<Row>
<Class>UNITCLASS_MUSKETMAN</Class>
<Type>UNIT_REDCOAT</Type>
...
<UnitArtInfo>ART_DEF_UNIT_REDCOAT</UnitArtInfo> <!--название тега из civ5artdefines_units.xml-->
...
</Row>

Юнит готов его можно подавать на стол.

4) Импорт в VFS.

Осталось импортировать все наши файлы в VFS. Без этой штуки ничего работать не будет :).

Импортируем:

- все *.gr2
- все *.fxsxml
- все *.dds
- civ5artdefines_units.xml
- civ5artdefines_unitmembers.xml

Что бы импортировать файл, выберите его в Solution Explorer и в окошке Prorerties переменной Import into VFS поставьте значение True. Все импортируется.

http://i021.radikal.ru/1101/81/91f21d538651.jpg
а это уже картинка от меня.


5) Финальный штрих.

В Civ5 вся графика грузиться сразу. Если что то из графики меняется, то графическую систему нужно перегрузить. Для этого нужно поставить галочку в "Reload Unit System"

http://forums.civfanatics.com/attachment.php?attachmentid=269444&stc=1&d=1287527909

ВСЕ!


КОНЕЦ: ну вот и все готово!

Собираем проект, запускаем игру, запускаем мод. Юнит должен быть с новой графикой.

http://forums.civfanatics.com/attachment.php?attachmentid=269445&stc=1&d=1287528526

http://i009.radikal.ru/1102/45/3ab6bbfee049.jpg



ПОСЛЕСЛОВИЕ.

- Автор, почему я вижу копейщиков вместо моей графики?
- Это значит что где то есть ошибка. Учитывая что графику (меш) мы не трогали, то скорей всего ошибка либо xml, либо не выставлено true для импорта в VFS, либо галочка в "reload unit system".


БОНУС: как поменять иконку юниту можно почитать здесь (http://www.civfanatics.ru/threads/9025-GUIDE-%D0%9A%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-%D0%B8%D0%BA%D0%BE%D0%BD%D0%BA%D1%83-%D1%8E%D0%BD%D0%B8%D1%82%D0%B0.).